Mengapa saya mendapatkan CUDA dari memori saat menjalankan model PyTorch [dengan memori GPU yang cukup]?

Aug 17 2020

Saya mengajukan pertanyaan ini karena saya berhasil melatih jaringan segmentasi pada GTX 2070 saya di laptop dengan VRAM 8GB dan saya menggunakan kode yang persis sama dan pustaka perangkat lunak yang persis sama yang diinstal pada PC desktop saya dengan GTX 1080TI dan masih gagal. Penyimpanan.

Mengapa ini terjadi, mengingat:

  1. Windows 10 + CUDA 10.1 + CUDNN 7.6.5.32 + Driver Nvidia 418.96 yang sama (dilengkapi dengan CUDA 10.1) yang sama ada di laptop dan PC.

  2. Fakta bahwa pelatihan dengan TensorFlow 2.3 berjalan mulus pada GPU di PC saya, namun gagal mengalokasikan memori untuk pelatihan hanya dengan PyTorch.

  3. PyTorch mengenali GPU (mencetak GTX 1080 TI) melalui perintah: print(torch.cuda.get_device_name(0))

  4. PyTorch mengalokasikan memori saat menjalankan perintah ini: torch.rand(20000, 20000).cuda() #allocated 1.5GB of VRAM.

Apa solusi untuk ini?

Jawaban

5 TimbusCalin Aug 17 2020 at 17:27

Sebagian besar orang (bahkan di utas di bawah) melompat untuk menyarankan bahwa penurunan batch_size akan menyelesaikan masalah ini. Faktanya, tidak dalam kasus ini. Misalnya, tidak logis jika jaringan berlatih dengan VRAM 8GB namun gagal untuk berlatih pada VRAM 11GB, mengingat tidak ada aplikasi lain yang menggunakan memori video pada sistem dengan VRAM 11GB dan konfigurasi yang sama telah diinstal dan bekas.

Alasan mengapa ini terjadi dalam kasus saya adalah karena, ketika menggunakan DataLoaderobjek, saya menetapkan nilai yang sangat tinggi (12) untuk workersparameter. Menurunkan nilai ini menjadi 4 dalam kasus saya memecahkan masalah.

Padahal, meski di bagian bawah utas, jawaban yang diberikan oleh Yurasyk at https://github.com/pytorch/pytorch/issues/16417#issuecomment-599137646 mengarahkan saya ke arah yang benar.

Solusi: Kurangi jumlah workersdi PyTorch DataLoader. Meskipun saya tidak benar-benar mengerti mengapa solusi ini bekerja, saya berasumsi ini terkait dengan utas yang muncul di belakang layar untuk pengambilan data; mungkin saja, pada beberapa prosesor, kesalahan seperti itu muncul.