크크루쿠쿠

Pytorch Troubleshooting 본문

DeepLearning/부스트캠프 AI Tech

Pytorch Troubleshooting

JH_KIM 2021. 8. 20. 12:01

공포의 단어 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/

 

이유를 알 수 없는 GPU 에러 정리(device-side assert, CUDA error, CUDNN_STATUS_NOT_INITIALIZED 등등…)

 

brstar96.github.io

- 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
Comments