CUDA OOM-แต่หมายเลขมันพวกนี้มันไม่เพิ่ม upp?

0

คำถาม

ฉันกำลังพยายามฝึกเป็นนางแบบการใช้ PyTorch. ตอนที่เริ่มต้นนางแบบฝึกฉันไปตามข้อความผิดพลาดคือ:

RuntimeError: CUDA out of memory. Tried to allocate 5.37 GiB (GPU 0; 7.79 GiB total capacity; 742.54 MiB already allocated; 5.13 GiB free; 792.00 MiB reserved in total by PyTorch)

ฉันสงสัยว่าทำไมมันถึงเกิดข้อผิดพลาดคือ occurring. จากที่ฉันเห็นมันฉันต้อง 7.79 กิกะไบต์ทั้งหมดคืนนี้ ตัวเลขพวกมันเป็นแค่ชี้ถึงข้อ(742 เมกะไบต์+5.13 กิ๊บ..+792 เมกะไบต์)ทำไม่ได้เพิ่มขึ้นเป็นสิ่งที่ยิ่งใหญ่กว่า 7.79 กิกะไบต์. ตอนที่ฉันเช็ค nvidia-smi ฉันเห็นพวกนี้กำลังโพรเซส

|    0   N/A  N/A      1047      G   /usr/lib/xorg/Xorg                168MiB |
|    0   N/A  N/A      5521      G   /usr/lib/xorg/Xorg                363MiB |
|    0   N/A  N/A      5637      G   /usr/bin/gnome-shell              161MiB |

ฉันรู้ว่าสรุปได้แรงทั้งหมดขอตัวเลขพวกนี้อาจจะตัดมันปิด(168 + 363 + 161 + 742 + 792 + 5130 = 7356 เมกะไบต์)แต่งเรื่องนี้ยังน้อยกว่าที่กล่าวความจุของตัวประมวลผลกราฟิกของฉัน.

1

คำตอบที่ดีที่สุด

3

นี่คือมากกว่าความคิดเห็นหน่อยแต่ก็คุ้มที่จะชี้ออกไป

เหตุผลอยู่ทั่วไปแน่อยู่แล้วเข้าชุดเหมาะเหม็งอะไร talonmies ยังแต่คุณสรุปได้แรงขึ้นตัวเลขที่เกิดจาก. มาดูกันว่าจะเกิดอะไรขึ้นเมื่อ tensors รย้ายเพื่อตัวประมวลผลกราฟิก(ฉันพยายามเรื่องนี้พิวเตอร์ของฉันกับ RTX2060 กับ 5.8 G ภัยตัวประมวลผลกราฟิกความทรงจำในทั้งหมด):

ให้วิ่งไปที่ทำตามคำสั่งของไพธอนแบบโต้ตอบ:

Python 3.8.10 (default, Sep 28 2021, 16:10:42) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> a = torch.zeros(1).cuda()
>>> b = torch.zeros(500000000).cuda()
>>> c = torch.zeros(500000000).cuda()
>>> d = torch.zeros(500000000).cuda()

ต่อไปนี้เป็นที่แสดงผลของ watch -n.1 nvidia-smi:

หลังจาก torch นำเข้า:

|    0   N/A  N/A      1121      G   /usr/lib/xorg/Xorg                  4MiB |

หลังจากการสร้างของ a:

|    0   N/A  N/A      1121      G   /usr/lib/xorg/Xorg                  4MiB |
|    0   N/A  N/A     14701      C   python                           1251MiB |

อย่างที่คุณเห็นคุณต้องการ 1251MB เพื่อให้ pytorch เพื่อเริ่มใช้ CUDA ถึงแม้ว่าคุณแค่ต้องการนัดเดียวลอยตัว

หลังจากการสร้างของ b:

|    0   N/A  N/A      1121      G   /usr/lib/xorg/Xorg                  4MiB |
|    0   N/A  N/A     14701      C   python                           3159MiB |

b ต้องการ 500000000*4 bytes = 1907MBนี่คือเหมือนกันกับที่ increment อยู่ในความทรงจำที่ถูกใช้โดยที่เป็นภาษาไพธอนการประมวลผล

หลังจากการสร้างของ c:

|    0   N/A  N/A      1121      G   /usr/lib/xorg/Xorg                  4MiB |
|    0   N/A  N/A     14701      C   python                           5067MiB |

ไม่เซอร์ไพรซ์อยู่ที่นี่

หลังจากการสร้างของ d:

|    0   N/A  N/A      1121      G   /usr/lib/xorg/Xorg                  4MiB |
|    0   N/A  N/A     14701      C   python                           5067MiB |

ไม่มีความทรงจำ allocation และ OOM เกิดข้อผิดพลาดขึ้น:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: CUDA out of memory. Tried to allocate 1.86 GiB (GPU 0; 5.80 GiB total capacity; 3.73 GiB already allocated; 858.81 MiB free; 3.73 GiB reserved in total by PyTorch)

เห็นได้ชัดว่า:

  • คำว่า"อยู่แล้วจัดห้อ"ส่วนรวมในกอง"จอยู่ในทั้งหมดโดย PyTorch"ส่วนหนึ่ง. คุณไม่สามารถรวมมันขึ้นไม่อย่างนั้นศูนย์ exceeds งทั้งหมดที่มีอยู่หน่วยความจำจนหมดแล้ว
  • ที่น้อยที่สุดความทรงจำต้องเอา pytorch อนวิ่งบนตัวประมวลผลกราฟิก(1251M)ไม่ถูกรวมในกอง"จอยู่ในทั้งหมด"ส่วนหนึ่ง.

ดังนั้นในกรณีของคุณศูนย์ควรจะ consist ของ:

  • 792MB(ไว้ในทั้งหมด)
  • 1251MB(น้อยที่สุดเพื่อให้ pytorch อนวิ่งบนตัวประมวลผลกราฟิกสันนิษฐานได้เลยว่านี่คือคนเดียวกันสำหรับเราทั้งคู่)
  • 5.13 กิกะไบต์(อิสระ)
  • 168+363+161=692MB(อีกโพรเซส)

ผลรวมพวกเขาจะประมาณ 7988MB=7.80 กิกะไบต์ซึ่งเป็นจริงแล้วคุณทั้งหมดตัวประมวลผลกราฟิกหน่วยความจำจนหมดแล้ว

2021-11-23 06:13:39

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่