CUDA OOM-Ama rakamlar artmıyor mu?

0

Soru

PyTorch kullanarak bir model yetiştirmeye çalışıyorum. Model eğitimine başlarken aşağıdaki hata iletisini alıyorum:

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)

Bu hatanın neden oluştuğunu merak ediyorum. Gördüğüm kadarıyla toplam 7.79 GiB kapasitem var. Belirttiği sayılar (742 MiB + 5.13 MiB + 792 MiB) 7.79 gib'den büyük olmayacak şekilde eklenmez. Kontrol ettiğimde nvidia-smi Bu süreçlerin çalıştığını görüyorum

|    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 |

Tüm bu sayıların toplanmasının onu kapatabileceğinin farkındayım(168 + 363 + 161 + 742 + 792 + 5130 = 7356 MiB) ama bu hala GPU'MIN belirtilen kapasitesinden daha az.

1

En iyi cevabı

3

Bu daha çok bir yorum, ancak işaret etmeye değer.

Genel olarak sebep, talonmies'in yorumladığı şeydir, ancak sayıları yanlış özetliyorsunuz. Tensörler GPU'ya taşındığında ne olacağını görelim (bunu toplamda 5.8 G kullanılabilir GPU belleği olan RTX2060 ile bilgisayarımda denedim):

Aşağıdaki python komutlarını etkileşimli olarak çalıştıralım:

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()

Aşağıdakiler aşağıdaki çıktılardır watch -n.1 nvidia-smi:

Hemen sonra torch ithalat:

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

Yaratılıştan hemen sonra a:

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

Gördüğünüz gibi, ihtiyacınız var 1251MB pytorch'un Cuda'yı kullanmaya başlamasını sağlamak için, yalnızca tek bir şamandıraya ihtiyacınız olsa bile.

Yaratılıştan hemen sonra b:

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

b ihtiyaçlar 500000000*4 bytes = 1907MB bu, python işlemi tarafından kullanılan bellekteki artışla aynıdır.

Yaratılıştan hemen sonra c:

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

Burada sürpriz yok.

Yaratılıştan hemen sonra d:

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

Başka bellek ayırma yok ve OOM hatası atılıyor:

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)

Kesinlikle:

  • "Zaten ayrılmış" kısmı "PyTorch tarafından toplamda ayrılmış" kısmına dahil edilmiştir. Bunları özetleyemezsiniz, aksi takdirde toplam kullanılabilir belleğin toplamını aşar.
  • Pytorch'un GPU üzerinde çalışmasını sağlamak için gereken minimum bellek (1251M) "toplamda saklıdır" kısmına dahil değildir.

Yani sizin durumunuzda, toplam aşağıdakilerden oluşmalıdır:

  • 792MB (toplam ayrılmış)
  • 1251MB (pytorch'un GPU üzerinde çalışmasını sağlamak için minimum, bunun ikimiz için de aynı olduğunu varsayarsak)
  • 5.13 GB (ücretsiz)
  • 168+363+161 = 692MB (diğer işlemler)

Yaklaşık 7988MB = 7.80 GB'a kadar toplamlar, bu da tam olarak toplam GPU belleğinizdir.

2021-11-23 06:13:39

Diğer dillerde

Bu sayfa diğer dillerde

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