นี่คือมากกว่าความคิดเห็นหน่อยแต่ก็คุ้มที่จะชี้ออกไป
เหตุผลอยู่ทั่วไปแน่อยู่แล้วเข้าชุดเหมาะเหม็งอะไร 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 กิกะไบต์ซึ่งเป็นจริงแล้วคุณทั้งหมดตัวประมวลผลกราฟิกหน่วยความจำจนหมดแล้ว