Accelerate documentation
Metode pelatihan presisi rendah
Metode pelatihan presisi rendah
Rilis jenis hardware baru mendorong munculnya paradigma pelatihan baru yang lebih optimal dalam memanfaatkannya. Saat ini, hal ini berbentuk pelatihan dalam presisi 8-bit menggunakan paket seperti TransformersEngine (TE) atau torchao (PyTorch FP8 native).
Sebagai pengantar untuk topik yang dibahas hari ini, kami merekomendasikan untuk meninjau panduan penggunaan presisi rendah karena dokumentasi ini akan sering merujuknya.
Grafik Singkat
Berikut adalah grafik singkat yang menunjukkan presisi bit yang berbeda untuk setiap solusi selama pelatihan:
| Tingkat Optimasi | Komputasi(GEMM) | Komunikasi | Bobot | Master Bobot | Gradien Bobot | Status Optimizer |
|---|---|---|---|---|---|---|
| FP16 AMP | FP16 | FP32 | FP32 | N/A | FP32 | FP32+FP32 |
| Nvidia TE | FP8 | FP32 | FP32 | N/A | FP32 | FP32+FP32 |
TransformersEngine
TransformersEngine adalah solusi pertama yang mencoba melatih model dalam format floating point 8-bit. Solusi ini bekerja dengan menggunakan lapisan pengganti langsung untuk lapisan tertentu dalam model, yang memanfaatkan mesin FP8-nya untuk mengurangi jumlah bit (misalnya dari 32 menjadi 8) tanpa menurunkan akurasi akhir model.
Secara spesifik, Accelerate akan menemukan dan mengganti lapisan-lapisan berikut dengan versi TransformersEngine:
nn.LayerNormmenjadite.LayerNormnn.Linearmenjadite.Linear
Akibatnya, kami mendapatkan model yang sebagian besar lapisannya dalam BF16, sementara beberapa lapisannya dalam FP8 sehingga mengurangi sebagian memori.
Secara anekdotal, kami mengamati bahwa peningkatan kinerja baru mulai terlihat saat menggunakan TransformerEngine ketika sebagian besar lapisan dalam model terdiri dari dua jenis lapisan yang akan diganti. Akibatnya, hanya model-model besar yang menunjukkan peningkatan kinerja, yaitu ketika jumlah parameternya berada di kisaran beberapa miliar atau lebih.
TransformerEngine dapat menerima banyak argumen berbeda yang menyesuaikan cara ia melakukan perhitungan FP8 dan apa yang dilakukan oleh perhitungan tersebut. Daftar lengkap argumen tersedia di bawah ini:
margin: Margin yang digunakan untuk penskalaan gradien.interval: Interval yang digunakan untuk menentukan seberapa sering faktor penskalaan dihitung ulang.fp8_format``: The format to use for the FP8 recipe. Must be one ofHYBRIDorE4M3. (GenerallyHYBRIDfor training,E4M3` for evaluation)amax_history_len: Panjang riwayat yang digunakan untuk perhitungan faktor penskalaanamax_compute_algo: Algoritma yang digunakan untuk perhitungan faktor penskalaan. Harus berupa salah satu darimaxataumost_recent.override_linear_precision: Apakah akan mengeksekusi GEMMfprop,dgrad, danwgraddalam presisi yang lebih tinggi.
Anda dapat menyesuaikan masing-masing dari ini sebagai bagian dari utils.TERecipeKwargs untuk membantu mengoptimalkan kinerja model Anda.
Jika kita perhatikan pada grafik yang disebutkan sebelumnya, TE hanya mengonversi lapisan komputasi ke FP8, sementara semuanya lainnya berada dalam FP32. Akibatnya, pendekatan ini menggunakan memori paling banyak, tetapi memberikan keuntungan berupa jaminan kehilangan akurasi akhir selama pelatihan yang paling sedikit.
Update on GitHub