전체 글
![[PyTorch] 파이토치 프로파일링 (PyTorch profiler API)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQfcEj%2Fbtq5uIHZe7X%2FkFKY0FaFCTzo51ZkZmvmIk%2Fimg.png)
[PyTorch] 파이토치 프로파일링 (PyTorch profiler API)
Introduction 지지난 글에서는, 파이썬 코드를 실행할 때 코드의 시간 성능을 프로파일러 (profiler) 를 이용해 측정하는 방법을 알아봤었다. 여기 (지지난 글이었지만 글을 수정 하면서 발행일을 업데이트 했고... 목록의 한참 위로 올라가 버렸다) 함수의 호출 수와 개별 / 누적 소모 시간을 한 번에 정리해 주기 때문에 어느 구간에서 프로그램의 연산 병목이 일어나고 있는지 쉽게 찾을 수 있다. 그렇다면 비슷한 느낌으로 파이토치 연산의 전체적인 시간 / 메모리 성능을 한 눈에 보기 쉽게 정리해 주는 기능은 없을까? 일단 위의 프로파일러는 CPU 상에서 실행되는 함수만을 트래킹 하기 때문에, 대부분 GPU를 사용하는 파이토치 모델의 성능 측정에 사용하기에는 적합하지 않다. 다행히도 파이토치 라이..
![[PyTorch] 재현성 (Reproducibility)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrM6my%2Fbtq47TissHv%2F0ZjwvH9Sv3OMyG7hBI2EGK%2Fimg.png)
[PyTorch] 재현성 (Reproducibility)
Introduction 파이토치를 이용하다 보면, 분명 똑같은 세팅으로 실험을 돌렸음에도 불구하고 학습 loss나 세세한 inference 결과 등이 조금씩 차이나는 현상을 볼 수 있다. 분명 non-deterministic 한 부분 (랜덤 시드 등) 을 다 통제했다고 생각했는데, 결과가 매번 다르니 굉장히 난감할 것이다. 오늘은 이에 대한 원인을 간략히 짚어보고, 파이토치의 재현성 (reproducibility) 을 어떻게 보장할 수 있는가에 대해 간단히 정리할 생각이다. 본론부터 말하면, 파이토치가 랜덤한 동작을 보이는 원인은 크게 파이토치 내/외부의 난수 생성기 (random number generator) cuDNN의 컨볼루션 벤치마킹 그리고 PyTorch에서 사용하는 알고리즘 자체의 non-de..
![[Utilities] Pillow-SIMD](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAmjZh%2Fbtq3TxBUtIF%2FiyS6YXFS4xTauTuVsK4GVK%2Fimg.png)
[Utilities] Pillow-SIMD
Introduction Pytorch를 이용해 이미지/비디오 데이터를 학습한다 했을 때, 데이터를 augment 하기 위해서는 보통 torchvision의 transform 모듈을 흔히 이용한다. 기본적으로 Pytorch의 torchvision 라이브러리는 PIL (Python Imaging Library) Image 모듈 혹은 torch Tensor 모듈을 이용해 이미지 데이터를 다루도록 짜여져 있기 때문에, 각종 학습에 필요한 image transformation을 정의할 때에는 PIL Image 모듈의 멤버 함수나, PIL Image를 인자로 받을 수 있는 함수들을 빈번하게 이용하게 된다. 아래는 torchvision.transform 모듈의 함수 예시로, PIL Image 혹은 torch Tens..
![[Utilities] Git: Make sure you configure your 'user.name' and 'user.email' in git](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb832hb%2Fbtq3Xr0Syt5%2FyQqR6sGNX8P3E2SxjgQO6k%2Fimg.png)
[Utilities] Git: Make sure you configure your 'user.name' and 'user.email' in git
Introduction 작업 중이던 깃 리포지토리를 새로 클론 하고, 새 코드를 신나게 작성한 후 vscode와 같은 IDE를 통해 커밋 명령어를 실행시키는 순간 다음과 같은 에러 메시지와 마주할 때가 있다. Make sure you configure your 'user.name' and 'user.email' in git 깃 사용법을 정석적으로 배운 사용자라면 이럴 일은 없겠지만, 본인은 읽으라는 도큐멘테이션은 안 읽고 야매로 이것저것 눌러보면서 배운 터라 매번 까먹고 위와 같은 에러 메시지를 보는 경우가 많다. 이번엔 왜 이런 메시지가 등장하며, 어떻게 메시지의 말대로 user name과 user email를 설정해 줄 수 있는 지 간단히 알아보도록 하자. 깃 커밋을 수행할 때는, 누가 코드를 처음 ..
![[Python] 독스트링 (Docstrings)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1oGa2%2Fbtq3qgy1qVM%2FdzRvAIL0jPW1rlj03nnRn1%2Fimg.png)
[Python] 독스트링 (Docstrings)
Introduction 파이썬은 동적 타입 언어(참고)라는 특성 때문에 코드의 문서화가 다른 언어에 비해 특히 더 중요하다. 하지만 코드를 개발하면서 따로 잘 정리된 문서를 작성하는 일은 만만치 않은 작업일 것이다. 또한 코드 설명 내용을 찾기 위해 주석을 일일이 뒤지거나 도큐멘테이션을 찾으러 다니는 것 또한 꽤 번거로운 일이다. 파이썬에서는 코드의 문서화와 편리한 문서 참조를 위해 기본 기능으로 독스트링(Docstring) 이라는 기능을 제공하는데, 오늘은 이것에 대해 알아볼 생각이다. Docstrings 독스트링은 함수나 클래스, 모듈에 첨부할 수 있는, 큰 따옴표 세 개 (""") 혹은 작은 따옴표 세 개 (''')로 둘러싸여진 문자열이다. PEP 8 (Python Enhancement Propos..
![[Review] Unsupervised Learning of Video Representations using LSTMs](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvEnfd%2Fbtq3osMEHYb%2FQIWngTD38rqACjN6exujZ0%2Fimg.gif)
[Review] Unsupervised Learning of Video Representations using LSTMs
paper link: arxiv.org/pdf/1502.04681.pdf github: github.com/mansimov/unsupervised-videos github (PyTorch): github.com/JoungheeKim/autoencoder-lstm 최근 self-supervised learning을 이용한 비디오 데이터의 representation learning 쪽을 조사해 봐야겠다는 생각을 하고 있었는데, 마침 관련된 논문들을 리스트업 해 놓은 깃허브가 있어 맨 첫번째 논문부터 시작해 몇 개를 골라 리뷰를 할 생각이다. 이번에 정리할 논문은 ICML2015에 올라온 Unsupervised Learning of Video Representations using LSTMs 이다. 간단히 요..
![[PyTorch] RuntimeError: Trying to backward through the graph a second time](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fndi8x%2Fbtq3n8HufQ5%2Fy6e9QI3KEnaHifzCt2zNf0%2Fimg.png)
[PyTorch] RuntimeError: Trying to backward through the graph a second time
Introduction 파이토치를 이용해 다양한 모델을 구현하다 보면, 아래와 같은 에러 메시지를 한번 쯤은 마주할 것이다. RuntimeError: Trying to backward through the graph a second time, but the buffers have already been freed. Specify retain_graph=True when calling backward the first time 오늘은 이 에러 메시지가 어떤 상황에서, 어떤 이유로 출력되는 지 알아보고, 그 해결 방법에 대해 간략히 설명할 예정이다. Autograd Mechanism 기본적으로 파이토치의 autograd 메커니즘은 requires_grad=True 로 설정된 텐서들에 대해, 텐서 데이터가 생..
![[Python] 모듈 단위의 exception 계층 구조](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5kLmn%2Fbtq3mh6HZFI%2FcUPN8BkYN9ux41QCDF8y9K%2Fimg.png)
[Python] 모듈 단위의 exception 계층 구조
Introduction 지난번에는 예외 처리와 관련해서, 왜 단순한 try, except 문을 사용하지 말아야 하는 지를 간단히 알아봤다. 이전 글 이번에는 파이썬 모듈을 작성할 때 어떤 식으로 예외를 발생시키는 것이 바람직한지에 대해 소개해보려 한다. 결론부터 말하자면, 모듈 최상위 예외 클래스를 이용해 계층 구조를 가지는 예외 클래스를 이용하는 것이 기본 파이썬 예외 클래스를 사용하는 것 보다 훨씬 편리하다고 할 수 있다. Possible problem of using built-in exeptions 먼저, 간단한 사용자 모듈을 하나 생성해 보자. 날아가는 물체의 착륙 지점을 계산하기 위한 코드이다. user_module.py # user_module.py from math import sin, c..