เหตุใดฉันจึงทำให้หน่วยความจำ CUDA ไม่เพียงพอเมื่อใช้งานรุ่น PyTorch [ที่มีหน่วยความจำ GPU เพียงพอ]
ฉันถามคำถามนี้เพราะฉันประสบความสำเร็จในการฝึกอบรมเครือข่ายการแบ่งส่วนบน GTX 2070 บนแล็ปท็อปที่มี 8GB VRAM และฉันใช้รหัสเดียวกันทุกประการและไลบรารีซอฟต์แวร์เดียวกันที่ติดตั้งบนพีซีเดสก์ท็อปของฉันด้วย GTX 1080TI และมันยังคงหลุดออกมา หน่วยความจำ.
เหตุใดจึงเกิดขึ้นโดยพิจารณาว่า:
Windows 10 + CUDA 10.1 + CUDNN 7.6.5.32 + Nvidia Driver 418.96 เดียวกัน (มาพร้อมกับ CUDA 10.1) มีทั้งบนแล็ปท็อปและบนพีซี
ความจริงที่ว่าการฝึกกับ TensorFlow 2.3 ทำงานได้อย่างราบรื่นบน 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 จะช่วยแก้ปัญหานี้ได้ ในความเป็นจริงมันไม่ได้อยู่ในกรณีนี้ ตัวอย่างเช่นมันเป็นเรื่องที่ไม่สมเหตุสมผลสำหรับเครือข่ายที่จะฝึกบน VRAM ขนาด 8GB และยังไม่สามารถฝึกบน VRAM 11GB ได้เนื่องจากไม่มีแอปพลิเคชั่นอื่น ๆ ที่ใช้หน่วยความจำวิดีโอในระบบที่มี VRAM 11GB และมีการติดตั้งการกำหนดค่าเดียวกันทั้งหมดและ ใช้แล้ว
สาเหตุที่สิ่งนี้เกิดขึ้นในกรณีของฉันคือเมื่อใช้DataLoader
ออบเจ็กต์ฉันตั้งค่าworkers
พารามิเตอร์ไว้สูงมาก (12) การลดค่านี้เป็น 4 ในกรณีของฉันช่วยแก้ปัญหาได้
ในความเป็นจริงแม้ว่าจะอยู่ที่ด้านล่างของเธรดคำตอบของ Yurasyk ที่ https://github.com/pytorch/pytorch/issues/16417#issuecomment-599137646 ชี้ฉันไปในทิศทางที่ถูกต้อง
การแก้ไข: ลดจำนวนของworkers
ใน DataLoader
PyTorch แม้ว่าฉันจะไม่เข้าใจว่าทำไมโซลูชันนี้ถึงใช้งานได้ แต่ฉันคิดว่ามันเกี่ยวข้องกับเธรดที่เกิดขึ้นเบื้องหลังสำหรับการดึงข้อมูล อาจเป็นกรณีที่ในโปรเซสเซอร์บางตัวข้อผิดพลาดดังกล่าวปรากฏขึ้น