[十分なGPUメモリを備えた] PyTorchモデルを実行しているときにCUDAがメモリ不足になるのはなぜですか?
この質問をしているのは、8GBVRAMを搭載したラップトップ上のGTX2070でセグメンテーションネットワークのトレーニングに成功し、GTX 1080TIを搭載したデスクトップPCにインストールされているまったく同じコードとまったく同じソフトウェアライブラリを使用しているにもかかわらず、メモリ。
それを考慮して、なぜこれが起こるのですか?
同じWindows10 + 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を減らすとこの問題が解決することを示唆するためにジャンプします。実際、この場合はそうではありません。たとえば、ネットワークが8GB VRAMでトレーニングするのに、11GB VRAMでトレーニングに失敗するのは非論理的でした。これは、11GB VRAMを搭載したシステムでビデオメモリを消費するアプリケーションが他になく、まったく同じ構成がインストールされていることを考えると、中古。
私の場合、これが発生した理由は、DataLoader
オブジェクトを使用するときに、workers
パラメーターに非常に高い(12)値を設定したためです。私の場合、この値を4に減らすと、問題は解決しました。
実際、スレッドの一番下にありますが、Yurasykによって提供された答えは https://github.com/pytorch/pytorch/issues/16417#issuecomment-599137646 私を正しい方向に向けた。
解決策:workers
PyTorchの数を減らしDataLoader
ます。このソリューションが機能する理由は正確にはわかりませんが、データフェッチの舞台裏で生成されたスレッドに関連していると思います。一部のプロセッサでは、このようなエラーが表示される場合があります。