일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- rnn
- transformer
- Linear Model
- Programmers
- dl
- Python
- 알고리즘
- 기계학습
- 프롬프트
- Linear Regression
- ChatGPT
- attention
- machinelearning
- 코테
- GPT
- LLM
- Django
- 파이썬
- prompt engineering
- BFS
- 코딩테스트
- LeetCode
- 프로그래머스
- 부스트캠프
- Deeplearning
- deque
- NLP
- gradient descent
- 머신러닝
- 일기
- Today
- Total
크크루쿠쿠
Pytorch Troubleshooting 본문
공포의 단어 OOM..
->pytorch 뿐만 아니라 tensorflow도 마찬가지.. (컴퓨터는 거짓말 안 해도 GPU는 하더라..)
왜 어려운가?
- 왜 발생했는지 알기 어려움
- 어디서 발생했는지 알기 어려움
- Error backtracking이 이상한 곳으로 감
- 메모리의 이전상황 파악이 어려움 -> 메모리가 어떻게 iteration마다 사용하는지 모름
가장 쉬운 해결방법! - Batch Size down -> GPU clean -> Run
그 외에 발생할 수 있는 문제들..
GPUUtil 사용하기.
- nvidia-smi 처럼 GPU의 상태를 보여주는 모듈
- Colab은 환경에서 GPU 상태 보여주기 편함
- iter마다 메모리가 늘어나는지 확인!
!pip install GPUtil
import GPUtil
GPUtil.showUtilization()
torch.cuda.empty_cache()
- 사용되지 않는 GPU상 cache를 정리
- 가용 메모리를 확보
- del과는 구분이 필요
garbage collector 작동 강제해줌
- reset 대신 쓰기 좋은 함수
training loop에 tensor로 축적되는 변수는 확인
- tensor로 처리된 변수는 GPU상 메모리 사용
- 해당 변수 loop 안의 연산에 있을 때 GPU에 computational graph를 생성(메모리 잠식)
- 1-d tensor의 경우 python 기본 객체로 변환하여 처리
-> 이 경우 iter_loss.item() 사용하거나 float(iter_loss)
- 필요가 없어진 변수는 적절한 삭제가 필요
- python의 메모리 배치 특성상 loop가 끝나도 메모리를 차지함
- 학습시 OOM이 발생했다면 batch size를 1부터 해서 실험해보기.
torch.no_grad()
- Inference 시점에서 사용
- backward pass 로 인해 쌓이는 메모리에서 자유로움
with torch.no_grad():
for data, target in test_loader:
output = network(data)
test_loss += F.nll_loss(output, target, size_average=False).item()
pred = output.data.max(1, keepdim=True)[1]
correct += pred.eq(target.data.view_as(pred)).sum()
예상치 못한 에러 메세지
- CUDNN_STATUS_NOT_INIT(보통 gpu 설치 오류) 이나 device-side-assert(OOM의 일종) 등
- 해당 error도 cuda와 관련하여 OOM의 일종으로 생각 -> 적절한 코드의 처리 필요
참조할 사이트
https://brstar96.github.io/shoveling/device_error_summary/
- colab에서 너무 큰 사이즈 실행X (LSTM)
- CNN의 대부분의 error는 크기가 안 맞아서 생기는 경우 (torchsummary 등으로 사이즈 맞추기)
- tensor의 float precision을 16bit로 줄일 수도 있음
'DeepLearning > 부스트캠프 AI Tech' 카테고리의 다른 글
[NLP]Word Embedding (0) | 2021.09.06 |
---|---|
[NLP]Intro to NLP, Bag-of-Words (0) | 2021.09.06 |
Pytorch Hyperparameter Tuning (0) | 2021.08.20 |
Pytorch Multi-GPU (0) | 2021.08.20 |
Pytorch model 불러오기(transfer learning) (0) | 2021.08.19 |