Accelerate documentation
Düşük hassasiyetli eğitim yöntemleri
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 Seviyesi | Hesaplama(GEMM) | İletim | Ağırlık | Ana Ağırlık | Ağırlık Gradyanı | Optimizatör Durumları |
|---|---|---|---|---|---|---|
| FP16 AMP | FP16 | FP32 | FP32 | N/A | FP32 | FP32+FP32 |
| Nvidia TE | FP8 | FP32 | FP32 | N/A | FP32 | FP32+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.LayerNormiçinnn.LayerNormte.Lineariçinnn.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ğuamax_compute_algo: Ölçekleme faktörü hesabı için kullanılacak algoritma.maxveyamost_recentdeğerlerinden biri olmalıdır.override_linear_precision:fprop,dgradvewgradGEMM'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