[Pytorch] CUDA out of memory

zhenxi·2022년 3월 3일
1

troubleshooting

목록 보기
2/2

문제 상황

코랩 환경에서 모델 test를 위해 모델을 load하고 predict하려는 순간, CUDA out of memory 에러가 발생했다.

시도한 것들

1. nivia-smi로 memory 현황 보기

다음과 같은 코드로 볼 수 있다. 보다싶이 꽉 차있다..

! nivia-smi 

2. colab새로운 창에서 다시 시작

memry를 다시 확인해본 결과, 전보다는 비었지만, 다시 실행하니 또 out of memory가 떴다.

3. 캐시 지우기

import gc
gc.collect()
torch.cuda.empty_cache()

4. 파이썬 좀비 프로세스 종료 (이런게 있었는지 몰랐다)

좀비프로세스란, 종료되었는데 리소스만 차지하고 있는 녀석들이다.

아래 코드로 현재 파이썬이 실행중인 프로세스들을 볼 수 있다.

! ps -ef | grep python

보면 root 옆의 숫자들이 바로 프로세스들의 id 란다. 이걸 하나씩 kill해준다.

! kill -9 {process_id}

해결 방법

이걸로 세시간 가까이 삽질하다가, 방법을 찾았다. 왜 자꾸 외부에서 범인을 찾으려 했는지는 몰라도, 진범은 코드 안에 있었다.

 with torch.no_grad():
 	logits = model(**batch_input)

parameter에 대해 no_grad를 해주지 않아, grad가 계산되는 족족 소중한 메모리 공간을(아주 많이) 차지해버렸고.....나는 눈물의 삽질을 했던 것이다.
validation과 test를 할때는 굳이 역전파를 해주지 않아도 되기 때문에 grad를 계산할 필요가 없다. (기억하자!)

profile
인문학도(였던 것)

0개의 댓글