Projeleriniz için GPU · KYC'siz kripto ödeme Nasıl kiralanır
Türkçe
Konsolu aç
Uygulamalı rehber / KERNODECK

Sayısal kontrolü kaybetmeden karma duyarlılığa geçin

Normal duyarlılıkta bir referans oluşturun, autocast'i ileri hesaplama ve kayıp üzerinde etkinleştirin, ardından aynı girdiler üzerinde çıktıları, gradyanları ve kaliteyi karşılaştırın. FP16 eğitiminde GradScaler, küçük genlikli gradyanları yönetmeye yardımcı olur; ancak her modeli uyumlu hale getirmez. BF16 farklı bir sayısal davranışa sahiptir. Bellek veya hız kazancı aramadan önce açık bir geri dönüş kriteri belirleyin.

6 dk okuma · Geliştiriciler için rehber

İhtiyaca yanıt veren bir referansla başlayın

Sıradan girişler, sınır durumlar ve karar sınırları içeren kısa bir veri kümesi seçin. Modeli, ağırlıkları, ön işlemeyi ve train veya eval modunu sabitleyin. İki model veya iki batch arasındaki karşılaştırma, aralarındaki farkı kesinliğe atfetmenize olanak tanımaz.

Uygulamanız için faydalı olan çıktıyı kaydedin, yalnızca kaybı değil. Bir sınıflandırıcı için bu, skorları ve kararları içerebilir; bir regresyon için hata ve uç değerleri. Referansta NaN veya inf olup olmadığını şimdiden kontrol edin. Hatalı bir FP32 çalıştırması, daha fazla bite sahip olduğu için güvenilir bir temel hâline gelmez.

Denemeden önce toleransı, minimum kaliteyi ve sonlu olmayan değerlerin bulunmamasını belirleyin. PyTorch, kayan noktalı hesaplamanın cihazlar veya yürütme yolları arasında aynı sonuçları garanti etmediğini hatırlatır.

Autocast, sayısal format ve GradScaler'ı birbirinden ayırt edin

autocast, belirli işlemlerin türünü kendi hesaplama politikalarına göre seçer. Tüm programı tek bir biçime dönüştürmez. Bu kullanımla, tüm modeli elle half() ile dönüştürmekten kaçının. Güncel dokümantasyon torch.autocast veya torch.amp.autocast önerir; eski torch.cuda.amp arayüzleri kullanımdan kaldırılmıştır.

GradScaler, eğitim sırasında kayıp ve gradyanların ölçeği üzerinde etki eder. Geri yayılım yapmayan çıkarım için bir hızlandırıcı olarak kullanılmaz. FP16, BF16'dan daha dar bir sayısal aralığa sahiptir; BF16 için tasarlanmış bir model FP16'da taşabilir. Dolayısıyla ölçeğin tekrar tekrar düşmesi sorunun çözüldüğünü göstermez.

Biçimi, modelin kısıtlarına ve gerçekten kullanılan işlemlere göre seçin, ardından hedefin desteklediğini doğrulayın. Bir kartın ticari adı veya bir PyTorch hazırlık tercihi, özel operatörünüzün istenen çekirdeğe sahip olduğunu kanıtlamaz.

Tüm sütunları görmek için tabloyu kaydırın.
Projede doğrulanması gereken hassasiyet kararları
SeçimRolGerekli kontrol
FP32 referansıProjenin karşılaştırma noktasıSonlu çıktılar ve beklenen kalite
Autocast FP16Bazı işlemler indirgenmiş hassasiyetteSayısal aralık ve gradyanlar
Autocast BF16Aralık/hassasiyet arasında farklı bir dengeKullanılabilir operatörler ve kalite
GradScalerGradyan ölçeğinin yönetimiGerçekte yapılan güncellemeler

Eğitim adımlarını doğru sıraya yerleştirin

Önerilen parça, model ve iyileştiricinin (optimizer) zaten oluşturulmuş olduğunu, girdi ile hedefin aynı GPU'da olduğunu ve kaybın skaler olduğunu varsayar. Çalıştırılmamıştır ve bir teklifin doğrulaması niteliğinde değildir. autocast bağlamı forward ve kaybı sarar; backward onun kapanmasından sonra gerçekleşir. scaler, eğitim oturumu için bir kez oluşturulur, her batch için değil.

Gradyanları incelemek veya kırpmak için önce ölçek faktörlerini unscale_ ile kaldırın. Resmi AMP örnekleri bunun her iyileştirici için yalnızca bir kez ve güncellemesine yönelik gradyanlar toplandıktan sonra yapılmasını belirtir. Aşağıdaki 1,0 kırpma eşiği, projeniz için seçilecek örnek bir değerdir, evrensel bir öneri değildir.

Buradaki koruma kontrolleri, kayıp, gradyanlar veya toplam norm sonlu değilse tanılamayı keser. Bu CPU okumaları müdahalecidir: bu parçayı zamanlamayın. Biriktirme, birden çok iyileştirici ve zamanlayıcı, güncellemenin kendi tanımını gerektirir.

GPU üzerinde eğitsel AMP dizisi, çalıştırılmamış
import torch

# Ön koşullar: model, optimizer, loss_fn, inputs ve targets mevcut.
# Model ve girdiler aynı CUDA/HIP aygıtında.
dtype = torch.float16  # Doğrulanması gereken seçim; BF16 başka bir denemedir.
scaler = torch.amp.GradScaler("cuda", enabled=(dtype == torch.float16))

# Döngünüze yerleştirin, scaler batch'ler arasında korunur.
optimizer.zero_grad(set_to_none=True)
with torch.autocast(device_type="cuda", dtype=dtype):
    prediction = model(inputs)
    loss = loss_fn(prediction, targets)
if not bool(torch.isfinite(loss).item()):
    raise FloatingPointError("Perte non finie : interrompre le diagnostic")
scaler.scale(loss).backward()
scaler.unscale_(optimizer)
if any(p.grad is not None and
       not bool(torch.isfinite(p.grad).all().item())
       for p in model.parameters()):
    raise FloatingPointError("Gradient non fini : interrompre le diagnostic")
torch.nn.utils.clip_grad_norm_(
    model.parameters(), max_norm=1.0, error_if_nonfinite=True,
)
scaler.step(optimizer)
scaler.update()

İşlenmiş örnek: birbirine yakın iki karar birbirinin yerine geçmez

En yüksek skora göre sınıf seçen bir hizmet varsayalım. Eğitsel bir girdide referans, birbirine çok yakın iki skor üretir: 1,0000 ve 1,0003. Başka bir sayısal yol, bunların sırasını değiştirebilir veya bir eşitlik yaratabilir. Bu sayılar bir karar sınırını örnekler; FP16 veya BF16'nın ölçülmüş çıktıları değildir.

Doğru doğrulama iki düzey içerir. Skorları açık toleranslarla karşılaştırın, ardından kararı ve eşitliklere uygulanan kuralı karşılaştırın. Mutlak değerde küçük bir fark, seçilen eylemi değiştirebilir. Buna karşılık, gözlemlenen skorlardan uzakta bir eşiği olan bir görev için görünür bir sayısal fark sonuçsuz kalabilir.

Kimlikleri, referans çıktıları, AMP denemesini ve karara etkisini kaydedin. Kabul kuralını sonuçları okumadan önce belirleyin. Rahatsız edici bir durumu ortadan kaldırmak için toleransı genişletmeyin; farklı ölçeklerdeki çıktılar ayrı ölçütler gerektirebilir.

Tüm sütunları görmek için tabloyu kaydırın.
Karşılaştırma için eğitici bilgi kartı, ölçümlerle tamamlanmalıdır
ÖlçütReferansAMP denemesiKarar
Sonlu çıktılarKontrol edileceklerKontrol edileceklerAçıklanamayan sonlu olmayan değerleri reddedin
Sayısal sapmaKorunan değerlerHesaplanacak sapmaDenemeden önce tanımlanan tolerans
Uygulama kararıSınıf veya eylemSınıf veya eylemDeğişiklikleri inceleyin
Sabit küme üzerinde kaliteÖlçülecekÖlçülecekProjenin eşiğine uyun

NaN değerlerini ve atlanan güncellemeleri yorumlayın

Sonlu olmayan değerler ortaya çıktığında, bunları üreten ilk adımı arayın: girdi, ara çıktı, kayıp veya gradyan. Aynı durumu referans olarak yeniden çalıştırın, ardından şüpheli işlemin çevresinde autocast'i yerel olarak devre dışı bırakın ve girdilerinin türünü de kontrol edin. Tüm bir eğitimi FP32'de yeniden çalıştırmak karşılaştırma için yararlı olabilir, ancak sorunu otomatik olarak yerelleştirmez.

Scaler, gradyanlar inf veya NaN içerdiğinde bir güncellemeyi atlayabilir. Dolayısıyla devam eden bir döngü, mutlaka iterasyon sayısı kadar güncelleme gerçekleştirmiş olmayabilir. Bu davranışı tanılama sırasında kaydedin. Gerçekleşen güncellemeleri takip ettiği varsayılan bir öğrenme politikasını körü körüne ilerletmeyin.

Sonlu bir kayıp, sonlu gradyanları garanti etmez. Tersine, tek seferlik bir olay bir eğitimi kullanılamaz ilan etmeye yetmez: sıklığını, ilerlemeyi ve kaliteyi inceleyin. AMP tarifi, ikisinden biri şüpheli olduğunda autocast ile scaling'i ayrı ayrı izole etmek için bir yöntem sunar.

Yeniden üretilebilir bir geri dönüş hazırlayın

Denemeden önce referans yapılandırmayı, ağırlıkları, optimize edici durumunu ve tutarlı bir checkpoint'i saklayın. Eğitiminiz bir scaler kullanıyorsa, onun durumu da devam etme sürecinin bir parçasıdır. dtype'ı ve varsa FP32'de bırakılan bölgeleri belgeleyin. Farklı bir politikayla devam etmek, örtük olarak eşdeğer bir sürdürme değil, tanımlanması gereken deneysel bir değişikliktir.

Çıktılar sonlu olmaktan çıkarsa, kalite belirlenen ölçütün dışına çıkarsa veya güncellemeler kullanılabilir biçimde ilerlemeyi durdurursa önceki yapılandırmaya dönün. Bu geri dönüşe neden olan durumu saklayın. Bir değişiklikten sonra, süreyi uzatmadan önce karşılaştırmayı aynı küme üzerinde yeniden başlatın.

Kernodeck'in checkpoint alıştırması, AMP olmadan bir CPU devam etme sürecini doğrular. Karşılaştırma yöntemini, döngünüzün gerçekte tükettiği durumları ekleyerek yeniden kullanın.

Kazançları yalnızca sayısal doğrulamadan sonra ölçün

Doğrulamadan sonra, ayrıntılı tanılama olmadan bellek ve süreyi ölçün. Şekilleri, batch'i, modeli ve kaliteyi koruyun. Skaler okumaları, senkronizasyonlar ve profiler süreleri değiştirebilir; son ölçümden müdahaleci kontrolleri kaldırın.

ROCm'de PyTorch cihaz adı cuda olarak kalır ve ilgili arayüzler yeniden kullanılır. Bu, NVIDIA ile aynı çekirdekleri veya aynı sonuçları garanti etmez. Projenin backend'ini ve operatörlerini hedef üzerinde doğrulayın. Bu kılavuz sabit bir bellek azaltımı, hız çarpanı veya Kernodeck kurulum uyumluluğu vaat etmez.

Sorularınız

AMP, tüm tensörlerin FP16'ya geçtiği anlamına mı gelir?

Hayır. autocast, işlem başına bir politika uygular. Bazı işlemler farklı bir hassasiyette kalır. Tüm modeli elle half() biçimine dönüştürmek autocast kullanmaya eşdeğer değildir ve kararlılık koşullarını değiştirebilir.

BF16, FP16'nın yerini her zaman avantajlı biçimde alır mı?

Hayır. İki formatın farklı ödünleşimleri vardır ve desteklenmeleri işlemlere ve ortama bağlıdır. Kaliteyi ve maliyeti kendi iş yükünüzde karşılaştırın; BF16'nın daha geniş aralığı tek başına gereken hassasiyeti garanti etmez.

Bir çıkarım için GradScaler gerekli midir?

Scaler, gradyanlı eğitimde devreye girer, backward'sız bir çıkarımda değil. İkincisi için, beklenen değerlendirme modunu koruyarak bunun yerine autocast altındaki çıktıları ve kaliteyi kontrol edin.

Sonlu bir kayıp AMP'yi kabul etmeye yeter mi?

Hayır. Gradyanları, güncellemeleri, kaliteyi ve uygulama kararlarını da kontrol edin. Küçük bir sayısal fark bir eşiğin yakınında belirleyici olabilir; devam eden bir eğitim bazı güncellemeleri de atlayabilir.