모델을 사용하면서 gpu 메모리가 계속 누적되는 현상이 발생했다. 안그래도 부족한데 왜 작꾸누적되는지!!!!!! 아직 이유는 찾지 못했고, 모델을 한번 돌릴때마다 마지막 부분에 사용하지 않는 cache를 삭제하는 코드를 넣었더니 증상은 해결되었다. 근본적인 원인이 있을텐데ㅜ 그게뭘까\
print(f"torch cache pre: alloc {torch.cuda.memory_allocated()}, reserved {torch.cuda.memory_reserved()}")
torch.cuda.empty_cache()
print(f"torch cache after: alloc {torch.cuda.memory_allocated()}, reserved {torch.cuda.memory_reserved()}")
다음은 gpt 답변:
torch.cuda.empty_cache()는 PyTorch에서 CUDA 메모리 캐시를 비우는 데 사용되는 함수입니다.
때로는 딥러닝 모델을 학습하거나 추론할 때 GPU 메모리 사용량이 증가하는데,
일부 메모리는 캐시로 잠깐 사용되었다가 반환되지 않을 수 있습니다. 이런 경우,
GPU 메모리가 부족해질 수 있어, 이 함수를 호출하여 불필요한 캐시를 비워 메모리를 회수할 수 있습니다.
그러나, torch.cuda.empty_cache()를 호출하는 것만으로는 큰 메모리 공간을 확보할 수 없으며,
일반적으로 사용 중인 텐서들에 대한 메모리를 해제하지 않습니다.
이 함수는 주로 메모리 단편화 문제를 방지하고, 작은 메모리 조각들을 회수하는데 유용합니다.
답변만 봐도 근본적인 해결책은 아니라고 한다. 이유를 찾아봐야지