코랩 환경에서 모델 test를 위해 모델을 load하고 predict하려는 순간, CUDA out of memory 에러가 발생했다.
다음과 같은 코드로 볼 수 있다. 보다싶이 꽉 차있다..
! nivia-smi
memry를 다시 확인해본 결과, 전보다는 비었지만, 다시 실행하니 또 out of memory가 떴다.
import gc
gc.collect()
torch.cuda.empty_cache()
좀비프로세스란, 종료되었는데 리소스만 차지하고 있는 녀석들이다.
아래 코드로 현재 파이썬이 실행중인 프로세스들을 볼 수 있다.
! 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를 계산할 필요가 없다. (기억하자!)