PyTorch 모델 [충분한 GPU 메모리 사용]을 실행할 때 CUDA 메모리가 부족 해지는 이유는 무엇입니까?
8GB VRAM이 장착 된 랩톱의 GTX 2070에서 세그먼트 화 네트워크를 성공적으로 교육하고 있고 GTX 1080TI가있는 데스크톱 PC에 설치된 정확히 동일한 코드와 정확히 동일한 소프트웨어 라이브러리를 사용하기 때문에이 질문을하고 있습니다. 기억.
다음을 고려할 때 왜 이런 일이 발생합니까?
동일한 Windows 10 + CUDA 10.1 + CUDNN 7.6.5.32 + Nvidia Driver 418.96 (CUDA 10.1과 함께 제공됨)이 랩톱과 PC 모두에 있습니다.
TensorFlow 2.3을 사용한 훈련은 내 PC의 GPU에서 원활하게 실행되지만 PyTorch로만 훈련을위한 메모리 할당에 실패합니다.
PyTorch는 다음 명령을 통해 GPU (GTX 1080 TI 인쇄)를 인식합니다.
print(torch.cuda.get_device_name(0))
PyTorch는 다음 명령을 실행할 때 메모리를 할당합니다.
torch.rand(20000, 20000).cuda()
#allocated 1.5GB of VRAM.
이것에 대한 해결책은 무엇입니까?
답변
대부분의 사람들 (심지어 아래 스레드에서도)은 batch_size를 줄이면이 문제가 해결 될 것이라고 제안합니다. 사실이 경우에는 그렇지 않습니다. 예를 들어, 11GB VRAM이있는 시스템에서 비디오 메모리를 사용하는 다른 애플리케이션이없고 똑같은 구성이 설치되어 있다는 점을 고려할 때 네트워크가 8GB VRAM에서 훈련을했지만 11GB VRAM에서 훈련하는 데 실패하는 것은 비논리적이었을 것입니다. 익숙한.
제 경우에 이런 일이 발생한 이유는 DataLoader
객체를 사용할 때 workers
매개 변수에 대해 매우 높은 (12) 값을 설정 했기 때문 입니다. 제 경우에는이 값을 4로 줄이면 문제가 해결되었습니다.
사실, 스레드의 맨 아래에 있지만 Yurasyk가 제공 한 답변은 https://github.com/pytorch/pytorch/issues/16417#issuecomment-599137646 나를 올바른 방향으로 가리 켰습니다.
솔루션 : workers
PyTorch 의 수를 줄 이십시오 DataLoader
. 이 솔루션이 작동하는 이유를 정확히 이해하지는 못하지만 데이터 가져 오기를 위해 백그라운드에서 생성 된 스레드와 관련이 있다고 가정합니다. 일부 프로세서에서 이러한 오류가 나타날 수 있습니다.