Örnek sorular
Aipy Gpu Memory ManagementZorluk 1
Bir PyTorch eğitim script'i CUDA out of memory hatası verdiğinde, bu hata en doğrudan neyi gösterir?
- aPython süreci GPU belleğinde değil, normal (host) RAM'de yer tükenmiştir.
- bGPU, bir tensor veya operasyon için istenen device bellek bloğunu tahsis edemedi.✓
- cCUDA sürücü sürümü, kurulu PyTorch derlemesiyle uyumsuzdur. Sürücü uyumsuzlukları da başlangıçta bildirildiği için bu kulağa makul gelebilir, ama ifade ve bağlam bir tahsis hatasından farklıdır.
- dDiskteki model ağırlık dosyası bozuktur ve yüklenemedi.
Açıklama:CUDA out of memory, CUDA bellek tahsis edicisi bir GPU device bellek isteğini karşılayamadığında ortaya çıkar; çünkü GPU belleği zaten başka tensorlarla (ağırlıklar, aktivasyonlar, gradyanlar, optimizer state, cache'lenmiş bloklar) doludur. (a) host-RAM hatasını anlatır, ki bu farklı bir exception fırlatır. (c) ve (d), farklı hata mesajları üreten ilgisiz arıza türlerini (sürücü uyumsuzluğu, bozuk checkpoint) anlatır.
Aipy Gpu Memory ManagementZorluk 2
Bir ekip bir görüntü sınıflandırıcı eğitiyor ve batch_size'ı 32'den 128'e çıkardıklarında, başka her şey aynıyken CUDA out of memory hatası alıyor. Bunun en olası nedeni nedir?
- aAktivasyon belleği batch size ile kabaca doğrusal ölçeklenir, bu yüzden 4 kat büyük bir batch kabaca 4 kat daha fazla aktivasyon belleği gerektirir.✓
- bDaha büyük batch boyutları, PyTorch'u model ağırlıklarını daha yüksek hassasiyetli bir formatta saklamaya zorlar. Ekipler bazen bu açıklamaya yönelir çünkü hassasiyet ve bellek ikisi de bir tensorun 'ne kadar büyük' olduğuyla ilgili gibi görünür.
- cOptimizer, batch'teki her örnek için modelin ayrı bir kopyasını oluşturur.
- dBatch size yalnızca epoch başına kaç gradyan güncellemesi olduğunu etkiler, belleği değil.
Açıklama:Çoğu mimaride, katman başına aktivasyonlar batch'teki her örnek için ayrı saklanır, bu yüzden toplam aktivasyon belleği batch size ile kabaca doğrusal büyürken, modelin ağırlıklarının kullandığı bellek sabit kalır. (b) ve (c), batch size'ın belleği nasıl etkilediğini yansıtmayan mekanizmalar uyduruyor. (d) yanlıştır çünkü batch size doğrudan bellek baskısını etkiler, sadece güncelleme sıklığını değil.
Aipy Gpu Memory ManagementZorluk 2
Bir CUDA out of memory hatasından sonra bir geliştirici, altta yatan sorunu çözmeyi umarak torch.cuda.empty_cache() çağırıyor ve aynı batch size ile tekrar deniyor. Gerçekte ne olur?
- aSürece ayrılan toplam GPU belleğini kalıcı olarak artırır.
- bŞu anda Python değişkenleri tarafından referans edilen tensorların hâlâ tuttuğu belleği serbest bırakır. Bu doğru olsaydı aslında tehlikeli olurdu, çünkü çalışan bir hesaplamayı sessizce bozardı; bu çağrının yaptığı şey bu değildir.
- cŞu anda kullanılmayan, cache'lenmiş bellek bloklarını CUDA sürücüsüne geri verir, ama hâlâ kullanımda olan belleği serbest bırakmaz, bu yüzden aynı OOM tekrar edebilir.✓
- dGPU üzerindeki tüm tensorları, bellek ayak izlerini azaltmak için sıkıştırır.
Açıklama:empty_cache(), yalnızca PyTorch'un caching allocator'ının tuttuğu ama şu anda kullanmadığı bellek bloklarını CUDA sürücüsüne geri verir; canlı tensorlar tarafından hâlâ referans edilen belleğe dokunamaz ve yeni fiziksel bellek eklemez. Batch gerçekten GPU'nun sahip olduğundan daha fazla belleğe ihtiyaç duyuyorsa, aynı hata tekrar oluşur. (a) ve (d), bu çağrının sahip olmadığı yetenekleri anlatıyor. (b), onu canlı, referans edilen belleği serbest bırakıyormuş gibi yanlış tarif ediyor, ki bu doğruluğu bozardı.
Aipy Gpu Memory ManagementZorluk 1
Bir modeli tam fp32 yerine fp16 veya bf16 mixed precision ile eğitirken, ağırlık ve aktivasyon tensorlarını saklamak için gereken bellek kabaca nasıl değişir?
- aKabaca yarıya iner, çünkü her değer artık 4 byte yerine 2 byte kullanır.✓
- bKabaca ikiye katlanır, çünkü her orijinal sayıyı temsil etmek için artık iki değer gerekir.
- cTam olarak aynı kalır, çünkü hassasiyet yalnızca sayısal doğruluğu etkiler, depolama boyutunu değil.
- dYalnızca batch size'a bağlıdır, kullanılan sayısal formata değil. Bellek takibinin sayısal formatın byte genişliği yerine hesaplama hızına bağlı olduğu varsayılırsa bu sezgisel gelebilir.
Açıklama:fp16 ve bf16, fp32'nin 4 byte'ına karşılık değer başına 2 byte kullanır, bu yüzden bu formatlarda saklanan tensorlar, aynı tensora fp32'de kıyasla belleklerini kabaca yarıya indirir. (b) yönü tersine çeviriyor. (c) ve (d), sayısal formatın depolama boyutunu etkilediğini inkar ediyor, ki bu bu dtype'ların tanımıyla çelişir.
Aipy Gpu Memory ManagementZorluk 2
Backward pass sırasında daha önce GPU belleği tükenen bir modelde gradient checkpointing etkinleştiriliyor. Bu teknik hangi trade-off'u yapar?
- aDaha düşük nihai doğruluk pahasına gereken eğitim adımı sayısını azaltır.
- bModelin katmanlarının bir kısmını kalıcı olarak silerek belleği azaltır. Budama, bellek tasarrufu sağlayan bir teknikle karıştırılırsa bu makul görünebilir, ama checkpointing hiçbir zaman katman kaldırmaz.
- cTüm aktivasyonları GPU belleği yerine host RAM'de saklayarak belleği azaltır.
- dÇoğu ara aktivasyonu saklamayarak, bunun yerine backward pass sırasında son saklanan checkpoint'ten yeniden hesaplayarak belleği azaltır; bunun bedeli ekstra hesaplama süresidir.✓
Açıklama:Gradient checkpointing, çoğu forward-pass aktivasyonunu saklamaktan kaçınır; backpropagation sırasında bu aktivasyonları son saklanan checkpoint'ten yeniden hesaplar, ekstra forward-pass hesaplamasını daha düşük tepe bellek ile takas eder. (a) ve (b), checkpointing'in yapmadığı ilgisiz veya yıkıcı değişiklikleri anlatıyor. (c) bunu farklı bir teknik olan CPU/aktivasyon offloading ile karıştırıyor.
Aipy Gpu Memory ManagementZorluk 2
GPU belleği bağlamında 'memory fragmentation' (bellek parçalanması) neyi ifade eder?
- aGPU'nun toplam bellek kapasitesinin birden çok çip arasında fiziksel olarak bölünmesini. Fiziksel çip düzeni gerçek bir donanım detayıdır, ama allocator'ın boş ve kullanılan bellek bölgelerini nasıl takip ettiğiyle ilgisizdir.
- bBoş belleğin birçok küçük, bitişik olmayan blok halinde bulunmasını; bu yüzden toplam boş bellek yeterli olsa bile yeterince büyük tek bir tahsis başarısız olabilir.✓
- cBir modelin ağırlıklarının dağıtık eğitim için parçalara (shard) bölünmesini.
- dTensor değerlerinin, tekrarlanan fp16 yuvarlamaları nedeniyle kademeli olarak bozulmasını.
Açıklama:Fragmentation, bellek zaman içinde serbest bırakılıp tahsis edildikçe boş alanın küçük, bitişik olmayan parçalar halinde dağılmasıyla oluşur; toplamları yeterince büyük olsa bile hiçbir tek parça yeni büyük bir tahsis için yeterli olmayabilir. (a) ve (c), ilgisiz donanım/paralellik kavramlarını anlatıyor. (d) bir bellek düzeni sorunu değil, sayısal hassasiyet kaymasını anlatıyor.