ML araştırması için GPU · KYC'siz kripto ödeme
IteraGPU
Eğitim · Bellek ve optimizasyon

Güncelleme sayısını kaybetmeden mikrobatch'i küçültmek.

Birikim, parametre güncellemesinden önce birkaç geri geçişin katkılarını toplar. Eşit mikrobatch'lerle, etkin batch her replikadaki mikrobatch'i, biriken geçiş sayısını ve katılan veri replikalarını hesaba katar. Mikrobatch'i küçültmek saklanan aktivasyonları hafifletebilir, ancak ne ağırlıkları ne de optimize edici durumlarını ortadan kaldırır ve aynı eğitimi garanti etmez.

01 /

Mikrobatch, geri geçiş ve güncellemeyi ayırmak

Mikrobatch, bir replikada ileri geçiş tarafından işlenen örnek grubudur. Geri geçiş, bunun gradyanlara katkısını hesaplar. Optimize edici güncellemesi, mevcut gradyanları kullanarak parametreleri değiştirir. Birikimle birlikte, bu güncellemeden önce birkaç ileri/geri geçiş yapılır; parametreler grup boyunca değişmeden kalır.

PyTorch'ta gradyanlar bunun için ayrılmış tensörlerde birikir. Dolayısıyla her mikrobatch'ten sonra gradyanları silmek, istenen birikimi iptal eder. Tersine, iki grup arasında sıfırlamayı unutmak, önceki güncellemenin örneklerinin katkıda bulunmasına yol açar.

Günlükleme biriminizi tanımlayın: mikrobatch numarası, optimize edici güncellemesi, görülen örnekler veya tokenlar. Yalnızca "step" sözcüğü belirsizdir. Eksen, denemelerden birinde sekiz kat daha fazla örneği temsil ediyorsa bir kayıp eğrisi doğru şekilde karşılaştırılamaz.

Teknik kaynaklar: PyTorch — gradyan birikimi ve sıfırlama

02 /

Etkin batch'i GPU'ları iki kez saymadan hesaplamak

Mikrobatch ve replika başına örnek sayısını m, biriken mikrobatch sayısını A, veri paralelliği replika sayısını D olarak gösterelim. Bu boyutlar sabitse ve örnekler doğru şekilde dağıtılmışsa, genel bir güncellemeye katkıda bulunan örnek sayısı m × A × D'dir.

D faktörü mutlaka makinedeki tüm kartları ifade etmez. Tensor veya pipeline paralelliğiyle aynı modeli paylaşan GPU'lar, o kadar veri replikası hâline gelmez. Yalnızca ticari lot miktarını değil, gerçekten yapılandırılmış grupları yazın.

Aritmetik örnek: mikro yığın başına iki örnek, sekiz birikim ve iki replika, küresel güncelleme başına 32 örnek verir. Her replika bu grupta on altı örneği işler. Tablo sayımları karşılaştırır; bunların belleğini veya hızını sıralamaz.

Örnek cinsinden etkin yığın = replika başına mikro yığın m × birikim A × veri replikaları D
Örnekleyici sayımlar, performans ölçümü olmaksızın; tam mikro yığınlar ve dağıtılmış örnekler.
mADKüresel güncelleme başına örnek
28232
116232
44232
28116

Teknik kaynaklar: PyTorch — karma duyarlılıkta etkin yığın ve birikim · PyTorch — DistributedDataParallel replikalarının davranışı

03 /

Kaybı gerçekten değerlendirilen öğelere göre normalleştirin

Aynı sayıda ilgili öğe içeren mikro yığınlar üzerinde ortalama kayıp için, her katkıyı A'ya bölmek grubun ortalamasını verir. Bu kural, çerçevenin bu normalleştirmeyi zaten yapmadığını varsayar. Birikimi yöneten bir araçla, manuel bir bölme eklemeden önce sözleşmesini yeniden okuyun.

Ortalama token başına kayıpta, farklı uzunluklar paydayı değiştirir. Kayıpların toplamını, grubun dolgu ve yok sayılan konumlar hariç gerçekten denetlenen tokenlarına oranlamak gerekir. Mikro grupların ortalamalarının ortalaması genellikle aynı hedefi vermez.

Teorik örnek: bir mikro grupta ortalama kaybı 2 olan 512 denetlenen token var; bir diğerinde ortalaması 4 olan 1.536 token var. Ağırlıklı ortalama (512 × 2 + 1.536 × 4) ÷ 2.048 = 3,5 olur. Ağırlıksız ortalama ise 3 olur ve küçük gruba fazla ağırlık verir. Bu değerler yalnızca hesaplamayı örneklemektedir.

Teknik kaynaklar: Hugging Face Accelerate — değişken boyutlu örneklerle birikim

04 /

Tam bir birikim grubunu organize etme

Önce grubun sınırlarını ve paydasını hazırlayın. Her mikro grup için çıktıyı, normalleştirilmiş kaybı ve ara güncelleme yapmadan geri geçişi hesaplayın. Artık ihtiyaç duymadığınız çıktıları serbest bırakın; kayıpları grafiklerine bağlı olarak bir listede tutmak, ayırmaların ömrünü uzatabilir.

Son katkıdan sonra, tam gradyan üzerinde öngörülen işlemleri, ardından güncellemeyi uygulayın. Sonra bir sonraki grup için gradyanları sıfırlayın. Tur, A mikro gruptan daha azıyla bitiyorsa, bu kısmi grubu gerçek paydasıyla işlemeyi ya da dışarıda bırakmayı açıkça seçin; ilgili örnekleri not edin.

GradScaler kullanan karışık hassasiyette, ölçek faktörü birikim boyunca sabit kalır. Gerçek yeniden ölçekleme ve olası kırpma, katkılardan sonra devreye girer; scaler güncellemesi adım denemesini izler. Sonlu olmayan değer kontrolleri, parametrelerin değiştirilmesini engelleyebilir.

Zamanlayıcı, döngünüzün duyurduğu birimi izlemelidir. Optimize edici güncellemesiyle tanımlanmışsa, her mikro grupta çağırmak takvimi değiştirir. Sisteminiz bazılarını atlayabildiğinde, denemeleri ve gerçekten uygulanan güncellemeleri ayrı ayrı kaydedin.

Teknik kaynaklar: PyTorch — geri yayılım için korunan autograd grafikleri ve tensörler · PyTorch — biriktirme, ölçek kaldırma, kırpma ve GradScaler

05 /

Çoklu GPU'da örneklerin indirgenmesini ve dağıtımını doğrulayın

DistributedDataParallel, gradyanları replikalar arasında senkronize eder. Olağan davranışında indirgeme bunların ortalamasını alır; bu nedenle toplanmış bir kayıp ile yerel olarak ortalaması alınmış bir kayıp aynı ölçeğe sahip değildir. Replikalar arasında token sayıları farklıysa, genel payda ile bu indirgeme birlikte değerlendirilmelidir.

Gerçekte işlenen ID'leri doğrulayın: aynı örnekleri istemeden tüm kartlarda çoğaltmak, grubun bilgisini o oranda artırmaz. Ara iletişimleri geciktirmek için, son senkronizasyondan önceki mikro partilerde no_sync kullanılabilir; bağlamı ileri geçişi de kapsamalıdır.

Bu kuralı tüm dağıtık sistemlere uyarlamayın. Durum parçalama, pipeline, iletişim kancaları ve çerçeveler gerçekleşen işlemleri değiştirebilir. Aracınızın desteklediği yapılandırmayla başlayın, ardından her replikada eksiksiz bir grubu kontrol edin.

Teknik kaynaklar: PyTorch — DDP'de gradyan indirgemesi ve no_sync kapsamı

06 /

Aynı etkin batch neden aynı deneyimi garanti etmez

m × A × D eşitliği bir sayımdır. Büyük bir batch'in gradyanını yeniden elde etmek için özellikle doğru şekilde ağırlıklandırılmış katkılar, grup boyunca aynı parametre durumu ve bu ayrıştırmayla uyumlu işlemler gerekir. Sayısal yakınlık uygun bir toleransla doğrulanır; yalnızca çarpımdan çıkarılamaz.

BatchNorm, geçişinin girdilerinden istatistikleri hesaplar: birden çok küçük microbatch ona büyük bir batch'in gruplarını sunmaz. Rastgele işlemler, hesaplama sırası ve yuvarlamalar da farklılık gösterebilir. Nihai ağırlıkların bit bit aynı olacağını vaat etmeyin.

Genel batch'teki bir değişiklik, aynı sayıda görülen örnek için güncelleme sayısını da değiştirebilir. Karşılaştırma eksenini ve kalite kuralınızı önceden belirleyin. Öğrenme oranını, scheduler'ı ve süreyi bu yeni varsayımları belgelemeden aynı anda değiştirmeyin.

Teknik kaynaklar: PyTorch — BatchNorm1d istatistikleri · PyTorch — yeniden üretilebilirlik sınırları

07 /

Belleği kontrol edin ve sonrasına karar verin

Geri geçişleri ve ilk güncellemeyi içeren bir grubu, ardından sonraki grupları izleyin. Forward'daki bir başarı, gradyanları veya optimizer'ın oluşturduğu durumları doğrulamaz. Sayaçlar device başına kapsamlarını korumalıdır. Bellek dosyası, baseline ve piklerin okunma yöntemini sunar.

Bir grup başarısız olursa microbatch'i küçültün ve bu seçim hâlâ uygunsa hedeflenen efektif batch'i korumak için A'yı yeniden hesaplayın. Bu değişiklik ne pikte orantılı bir bölünmeyi ne de daha iyi bir süreyi garanti eder. Ağırlıklar veya durumlar baskınsa, yalnızca biriktirme yetersiz kalabilir.

Bir kampanyadan önce, küçük ve kontrol edilen bir küme üzerinde bir güncellemeyi doğrulayın: aynı örnekler, ağırlıklı kayıp, sonlu gradyanlar, grup sınırı ve adım sayısı. Ardından kaliteyi seçilen protokolle değerlendirin. İndirilebilir dosyadaki küçük çıkarım MLP'si bu eğitim tarifini çalıştırmaz; bu kontrolün yerini tutmaz.

Nihai kaydınız m, A, D, denetimli token'lar, hassasiyet, normalizasyon, son grubun işlenmesi ve gözlemlenen pikleri bir araya getirir. Ardından hazırlık, denemeler ve gerçekten kabul edilen sonuçları ayırarak yapılandırma seçimine ve deney bütçesine geri dönün.

  • Anormal derecede küçük kayıp: biriktirme yoluyla çift bölme olup olmadığını araştırın.
  • Bölümlemeye göre değişen sonuç: yok sayılan token'ları ve ortalamaların ortalamasını kontrol edin.
  • Etkisiz biriktirme: zero_grad ve optimizer.step'i kontrol edin.
  • Artan bellek: microbatch'ler arasında tutulan referansları araştırın.
  • Kaymış takvim: geri geçişleri ve güncellemeleri ayırt edin.

Teknik kaynaklar: Hugging Face — bir eğitimin bellek kontrol noktaları

Pratik sorular

On altı microbatch biriktirmek belleği on altıyla çarpar mı?

Mutlaka değil: katkılar art arda işlenir. Gradyanlar kalıcıdır, gereksiz aktivasyonlar ise serbest bırakılabilir. Ancak pik; modele, tutulan referanslara ve optimizer durumlarına bağlıdır; tam grubu ölçün.

İki GPU her zaman efektif batch'i ikiye katlar mı?

Yalnızca bu GPU'lar, belirtilen microbatch ile iki veri replikası olarak katılırsa. Aynı modeli paylaşan kartlar otomatik olarak iki replika oluşturmaz. Dağıtılmış grupları ve işlenen örnekleri doğrulayın.

Tüm kayıpları biriktirme sayısına bölebilir miyim?

Bu basit kural, framework tarafından zaten yönetilmeyen bir normalizasyon olmadan eşit ağırlıklı microbatch'lere karşılık gelir. Değişken sayıda denetimli token veya eksik bir son grupla, hedefin gerçek paydasını kullanın.