Transformers documentation
Karışık hassasiyetli eğitim
Karışık hassasiyetli eğitim
Tam hassasiyet (fp32) eğitimi, her şeyi 32 bit olarak saklar ve hesaplar. Karma hassasiyet, yoğun hesaplama gerektiren ileri ve geri geçişler için fp16 veya bf16 kullanırken, optimizasyon güncellemesi için ağırlıkların fp32 kopyasını korur. Hesaplama daha hızlıdır, ağırlık ve aktivasyon belleği azalır ve eğitim kararlılığı korunur.
┌─────────────────────────────────────────────────────┐ │ MIXED PRECISION TRAINING LOOP │ │ │ │ fp32 master weights ──cast──▶ fp16/bf16 │ │ ▲ │ │ │ │ FORWARD (autocast) │ │ │ matmuls in fp16/bf16 │ │ │ reductions stay fp32 │ │ │ │ loss │ │ │ LOSS SCALE ×S ──fp16 │ │ │ │ │ │ │ BACKWARD │ │ │ grads in fp16/bf16 │ │ │ │ │ │ │ UNSCALE ÷S ──fp16 │ │ │ check inf/nan │ │ │ cast grads → fp32 │ │ └────────────────────────── optimizer.step │ └─────────────────────────────────────────────────────┘
Karışık hassasiyetli eğitimi etkinleştirmek için bf16() veya fp16() değerini True olarak ayarlayın. İkisi de 16 bitlik türlerdir, ancak bf16'nın fp32 ile aynı üstel aralığı olduğu için neredeyse hiç taşma yapmaz. Ampere veya daha yeni GPU'larda (A100, H100) bf16 kullanın ve V100 veya T4 gibi daha eski donanımlarda fp16'ya geri dönün.
Modeli fp32 olarak yükleyin, aksi takdirde autocast işlevsiz hale gelir. bf16 veya fp16 olarak yükleme, optimizasyonun güncelleme yapabileceği bir fp32 ana kopyasını bırakmaz.
from transformers import TrainingArguments
args = TrainingArguments(..., bf16=True)
args = TrainingArguments(..., fp16=True)Modeliniz bf16/fp16'da sayısal olarak kararlıysa, karma hassasiyeti tamamen atlayabilir ve doğrudan bf16/fp16'da yükleyip eğitebilirsiniz. Bu, bellekteki ağırlıkların fp32 kopyasını önler.
tf32
tf32, Ampere GPU'larda matmullar için 23 bit yerine 10 bitlik mantis kullanan bir hesaplama modudur. Bu, özellikle bf16/fp16 ile birlikte kullanıldığında hızlanma sağlayabilir. PyTorch, Ampere ve daha yeni GPU'larda matmullar için tf32'yi varsayılan olarak etkinleştirir; ancak bunu TrainingArguments içinde açıkça ayarlamak, PyTorch sürümünden veya ortam varsayılanlarından bağımsız olarak etkin olduğundan emin olmanızı sağlar.
from transformers import TrainingArguments
args = TrainingArguments(..., bf16=True, tf32=True)Sonraki adımlar
- Özel füzyonlu çekirdeklerle eğitimi nasıl hızlandıracağınızı öğrenmek için Kernels rehberine bakın.
- İlave bant genişliği için ileri ve geri geçişleri derleme yöntemini öğrenmek için torch.compile kılavuzuna göz atın.