[부스트캠프 AI Tech 5기] Pytorch Troubleshooting

박상우·2023년 3월 16일
0

부스트캠프

목록 보기
15/53
post-thumbnail

cuda의 수많은 에러들..

OOM (out of memory)

  • 공포의 단어
  • 왜 발생했는지 알기 어려움
  • 어디서 발생했는지 알기 어려움
  • Error backtracking이 이상한 곳으로 감
  • 컴퓨터는 거짓말하지 않으나, GPU는 거짓말을 함

해결방법

  • Batch size 감소
  • GPU claen
  • 그래도 안된다면..

GPUtill

  • nvidia-smi 처럼 GPU의 상태를 보여주는 모듈
!pip install GPUtil

import GPUtil
GPUtil.showUtilization()
  • iteration 마다 넣어서 메모리의 변화를 확인해보자

torch.cuda.empty_cache()

  • 사용되지 않은 GPU상 cashe 정리
  • del과는 구분이 필요
  • reset 대신 쓰기 좋은 함수
  • loop 전에 한번 실행해서 메모리를 정리하면 좋음

tensor

  • training loop에 tensor로 축적되는 변수는 확인할 것
  • 1-d tensor의 경우 python의 기본 객체로 변환하여 처리할 것
    (item, float 등)

del

  • 필요가 없어진 변수는 적절한 삭제가 필요
  • python의 메모리 배치 특성상 loop이 끝나도 메모리를 차지함

torch.no_grad()

  • inference 시점에서는 torch.no_grad() 구문을 사용
  • 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
  • device-side-assert
  • 해당 에러들도 cuda와 관련하여 OOM의 일종이며, 적절한 코드 처리가 필요함

그 외

  • colab에서 너무 큰 사이즈는 실행하지 말 것 (CNN,LSTM 등)
  • CNN의 대부분 에러는 크기가 안맞아서 생김 (torchsummary 등으로 사이즈를 맞출 것)
  • tensor의 float precision을 16bit로 줄일 수도 있음
profile
세상아 덤벼라

0개의 댓글