เหตุใดฉันจึงทำให้หน่วยความจำ CUDA ไม่เพียงพอเมื่อใช้งานรุ่น PyTorch [ที่มีหน่วยความจำ GPU เพียงพอ]

Aug 17 2020

ฉันถามคำถามนี้เพราะฉันประสบความสำเร็จในการฝึกอบรมเครือข่ายการแบ่งส่วนบน GTX 2070 บนแล็ปท็อปที่มี 8GB VRAM และฉันใช้รหัสเดียวกันทุกประการและไลบรารีซอฟต์แวร์เดียวกันที่ติดตั้งบนพีซีเดสก์ท็อปของฉันด้วย GTX 1080TI และมันยังคงหลุดออกมา หน่วยความจำ.

เหตุใดจึงเกิดขึ้นโดยพิจารณาว่า:

  1. Windows 10 + CUDA 10.1 + CUDNN 7.6.5.32 + Nvidia Driver 418.96 เดียวกัน (มาพร้อมกับ CUDA 10.1) มีทั้งบนแล็ปท็อปและบนพีซี

  2. ความจริงที่ว่าการฝึกกับ TensorFlow 2.3 ทำงานได้อย่างราบรื่นบน GPU บนพีซีของฉัน แต่มันไม่สามารถจัดสรรหน่วยความจำสำหรับการฝึกอบรมด้วย PyTorch เท่านั้น

  3. PyTorch รู้จัก GPU (พิมพ์ GTX 1080 TI) ผ่านคำสั่ง: print(torch.cuda.get_device_name(0))

  4. PyTorch จัดสรรหน่วยความจำเมื่อรันคำสั่งนี้: torch.rand(20000, 20000).cuda() #allocated 1.5GB of VRAM.

วิธีแก้ปัญหานี้คืออะไร?

คำตอบ

5 TimbusCalin Aug 17 2020 at 17:27

คนส่วนใหญ่ (แม้แต่ในเธรดด้านล่าง) ข้ามไปแนะนำว่าการลด batch_size จะช่วยแก้ปัญหานี้ได้ ในความเป็นจริงมันไม่ได้อยู่ในกรณีนี้ ตัวอย่างเช่นมันเป็นเรื่องที่ไม่สมเหตุสมผลสำหรับเครือข่ายที่จะฝึกบน VRAM ขนาด 8GB และยังไม่สามารถฝึกบน VRAM 11GB ได้เนื่องจากไม่มีแอปพลิเคชั่นอื่น ๆ ที่ใช้หน่วยความจำวิดีโอในระบบที่มี VRAM 11GB และมีการติดตั้งการกำหนดค่าเดียวกันทั้งหมดและ ใช้แล้ว

สาเหตุที่สิ่งนี้เกิดขึ้นในกรณีของฉันคือเมื่อใช้DataLoaderออบเจ็กต์ฉันตั้งค่าworkersพารามิเตอร์ไว้สูงมาก (12) การลดค่านี้เป็น 4 ในกรณีของฉันช่วยแก้ปัญหาได้

ในความเป็นจริงแม้ว่าจะอยู่ที่ด้านล่างของเธรดคำตอบของ Yurasyk ที่ https://github.com/pytorch/pytorch/issues/16417#issuecomment-599137646 ชี้ฉันไปในทิศทางที่ถูกต้อง

การแก้ไข: ลดจำนวนของworkersใน DataLoaderPyTorch แม้ว่าฉันจะไม่เข้าใจว่าทำไมโซลูชันนี้ถึงใช้งานได้ แต่ฉันคิดว่ามันเกี่ยวข้องกับเธรดที่เกิดขึ้นเบื้องหลังสำหรับการดึงข้อมูล อาจเป็นกรณีที่ในโปรเซสเซอร์บางตัวข้อผิดพลาดดังกล่าวปรากฏขึ้น