Accelerate documentation

Düşük hassasiyetli eğitim yöntemleri

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.15.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Düşük hassasiyetli eğitim yöntemleri

Yeni donanım türlerinin piyasaya sürülmesi, bu donanımları daha iyi kullanan yeni eğitim paradigmalarının ortaya çıkmasına yol açtı. Şu anda bu, TransformersEngine (TE) veya torchao (yerel PyTorch FP8) gibi paketler kullanılarak 8-bit hassasiyette eğitim şeklinde gerçekleşmektedir.

Bugün ele alınan konulara giriş için, bu dokümantasyonun düzenli olarak atıfta bulunacağı düşük hassasiyet kullanım kılavuzunu incelemenizi öneririz.

Hızlı Bir Grafik

Aşağıda, eğitim sırasında her çözüm için farklı bit hassasiyetlerini gösteren hızlı bir grafik bulunmaktadır:

Optimizasyon SeviyesiHesaplama(GEMM)İletimAğırlıkAna AğırlıkAğırlık GradyanıOptimizatör Durumları
FP16 AMPFP16FP32FP32N/AFP32FP32+FP32
Nvidia TEFP8FP32FP32N/AFP32FP32+FP32

TransformersEngine

TransformersEngine, 8-bit kayan nokta ile eğitim denemelerine yönelik ilk çözümdür. Modeldeki belirli katmanlar için yerinde değiştirilebilir katmanlar kullanarak ve bu katmanların FP8 motorunu, modelin nihai doğruluğunu düşürmeden bit sayısını (örneğin 32'den 8'e) azaltmak için çalışır.

Özellikle, Accelerate aşağıdaki katmanları bulup TransformersEngine sürümleriyle değiştirecektir:

  • te.LayerNorm için nn.LayerNorm
  • te.Linear için nn.Linear

Sonuç olarak, katmanlarının çoğu BF16'da, bazı katmanları ise FP8'de olan, bu sayede bellek kullanımını kısmen azaltan bir modele sahip oluyoruz.

Deneyimlerimize göre, TransformerEngine kullanıldığında performans kazanımları, modeldeki katmanların büyük çoğunluğu bu iki katmanla değiştirilecek şekilde yapılandırılmadıkça belirgin hale gelmemektedir. Sonuç olarak, parametre sayısı birkaç milyarın üzerinde olan yalnızca daha büyük modellerde performans iyileşmeleri gözlemlenmiştir.

TransformerEngine, FP8 hesaplamalarının nasıl gerçekleştirileceğini ve bunların ne işe yaradığını özelleştirmek için birçok farklı argüman alabilir. Argümanların tam listesi aşağıda yer almaktadır:

  • margin: Gradyan ölçeklendirmesi için kullanılacak pay.
  • interval: Ölçekleme faktörünün ne sıklıkla yeniden hesaplanacağı için kullanılacak aralık.
  • fp8_format``: The format to use for the FP8 recipe. Must be one ofHYBRIDorE4M3. (GenerallyHYBRIDfor training,E4M3` for evaluation)
  • amax_history_len: Ölçekleme faktörü hesabında kullanılacak geçmişin uzunluğu
  • amax_compute_algo: Ölçekleme faktörü hesabı için kullanılacak algoritma. max veya most_recent değerlerinden biri olmalıdır.
  • override_linear_precision: fprop, dgrad ve wgrad GEMM'lerinin daha yüksek hassasiyetle çalıştırılıp çalıştırılmayacağı.

Model performansını optimize etmeye yardımcı olmak için bunların her birini utils.TERecipeKwargs parçası olarak özelleştirebilirsiniz.

Daha önce bahsedilen grafikte de görüldüğü üzere TE, hesaplama katmanlarını yalnızca FP8'e dönüştürürken her şeyi FP32'de tutar. Sonuç olarak bu yöntem en fazla belleği kullanır ancak eğitim sırasında nihai doğrulukta en az miktarda kayıp yaşanmasını garanti etme avantajına sahiptir.

Update on GitHub