Accelerate documentation

Metode pelatihan presisi rendah

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

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 OptimasiKomputasi(GEMM)KomunikasiBobotMaster BobotGradien BobotStatus Optimizer
FP16 AMPFP16FP32FP32N/AFP32FP32+FP32
Nvidia TEFP8FP32FP32N/AFP32FP32+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.LayerNorm menjadi te.LayerNorm
  • nn.Linear menjadi te.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 penskalaan
  • amax_compute_algo: Algoritma yang digunakan untuk perhitungan faktor penskalaan. Harus berupa salah satu dari max atau most_recent.
  • override_linear_precision: Apakah akan mengeksekusi GEMM fprop, dgrad, dan wgrad dalam 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