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.