PyTorch modelini [yeterli GPU belleğiyle] çalıştırırken CUDA'da neden bellek yetersiz oluyor?
Bu soruyu soruyorum çünkü dizüstü bilgisayarımda 8GB VRAM ile GTX 2070'imde bir segmentasyon ağını başarılı bir şekilde eğitiyorum ve tam olarak aynı kodu ve bir GTX 1080TI ile masaüstü bilgisayarımda yüklü olan yazılım kitaplıklarını kullanıyorum ve hala dışarı atıyor hafıza.
Bunu göz önünde bulundurarak neden böyle oluyor:
Aynı Windows 10 + CUDA 10.1 + CUDNN 7.6.5.32 + Nvidia Driver 418.96 (CUDA 10.1 ile birlikte gelir) hem dizüstü bilgisayarda hem de PC'de bulunur.
TensorFlow 2.3 ile eğitimin bilgisayarımdaki GPU'da sorunsuz çalıştığı gerçeği, ancak yalnızca PyTorch ile eğitim için bellek ayırmada başarısız oluyor.
PyTorch, aşağıdaki komut aracılığıyla GPU'yu tanır (GTX 1080 TI yazdırır):
print(torch.cuda.get_device_name(0))
PyTorch, bu komutu çalıştırırken bellek ayırır:
torch.rand(20000, 20000).cuda()
#allocated 1.5GB of VRAM.
Bunun çözümü nedir?
Yanıtlar
İnsanların çoğu (aşağıdaki başlıkta bile), batch_size'nin azaltılmasının bu sorunu çözeceğini öne sürmek için atlıyor. Aslında bu durumda değil. Örneğin, bir ağın 8 GB VRAM üzerinde eğitim alması ve yine de 11 GB VRAM ile sistemde video belleği kullanan başka bir uygulama olmadığı ve tam olarak aynı konfigürasyonun kurulu olduğu düşünüldüğünde, 11 GB VRAM üzerinde eğitimde başarısız olması mantıksız olurdu ve Kullanılmış.
Benim durumumda bunun olmasının nedeni, DataLoader
nesneyi kullanırken workers
parametre için çok yüksek (12) bir değer ayarlamamdı . Benim durumumda bu değeri 4'e düşürmek sorunu çözdü.
Aslında konunun altında olmasına rağmen Yurasyk'in verdiği cevap https://github.com/pytorch/pytorch/issues/16417#issuecomment-599137646 beni doğru yönü gösterdi.
Çözüm: workers
PyTorch'taki sayısını azaltın DataLoader
. Bu çözümün neden işe yaradığını tam olarak anlamasam da, veri getirme için sahne arkasında ortaya çıkan iş parçacıklarıyla ilgili olduğunu varsayıyorum; bazı işlemcilerde böyle bir hata görünebilir.