왜 발생했는지 알기 어려움
어디서 발생했는지 알기 어려움
Error backtracking이 이상한데로 감
메모리의 이전상황의 파악이 어려움
단순한 해결법 : Batch Size를 줄이고 GPU를 클린시키고 다시 실행(좋은 방법임)
!pip install GPUtill
import GPUtil
GPUtil.showUtilization()
사용되지 않은 GPU상 cache를 정리
가용 메모리를 확보
del 과는 구분이 필요. del은 메모리에 연결해놓은 관계를 끊어줌으로써 메모리를 비우는것
reset 대신 쓰기 좋은함수
del tensorList를 한다고 해서 메모리를 바로 비우는것이 아님. garbage collect가 작동 할 때 비워지는 것인데 그것을 강제하는것이 torch.cuda.empty_cache()이다.
total_loss : loss는 backpropagation을 계산하고나면 더이상 쓸모없지만 total_loss를 계산하기 위해 메모리를 유지하므로 메모리를 잠식한다. 이런 코드를 조심해야함
1-d tensor의 경우 python 기본 객체로 변환하여 처리하면 된다.
필요가 없어진 변수는 적절한 삭제가 필요함
python의 메모리 배치 특성상 loop이 끝나도 메모리를 차지함
for문이 끝났음에도 i는 메모리에 남아 계속 값이 찍힌다. 따라서 적절한 시점에 del을 사용해 메모리 free를 시켜주면 좋다.
-Inference 시점에서는 torch.no_grad()구문을 사용
backward pass로 인해 쌓이는 메모리에서 자유로움
torch.no_grad() 내에서 돌아가는 동안은 backward가 일어나지 않기 때문에 메모리도 추가적으로 사용하지 않는다.
https://brstar96.github.io/devlog/shoveling/2020-01-03-device_error_summary/