bf16 vs fp16: jangkauan atau ketelitian dalam 16 bit yang sama
fp16 dan bf16 sama-sama menyimpan angka dalam 16 bit: 1 bit tanda, bit exponent yang menentukan seberapa besar atau kecil angka itu, dan bit mantissa yang menentukan seberapa halus pembulatannya. fp16 memakai 5 bit untuk exponent dan 10 untuk mantissa. bf16 memakai 8 dan 7, exponent yang sama dengan fp32 yang berukuran 32 bit.
2 menit baca · Lensa ML
- Grafik atas menunjukkan jangkauan tiap format, dari nilai terkecil di atas nol sampai nilai terbesarnya. fp16 berkisar dari sekitar 6e-8 sampai 65.504, sedangkan bf16 mencakup jangkauan fp32, sekitar 9e-41 sampai 3.4e38. Pita kuning tua adalah 400 sampel gradient, kemiringan yang dipakai training untuk memperbarui weight, tersebar di sekitar nilai slider dengan simpangan baku satu pangkat sepuluh. Sampel ini dibangkitkan, bukan diambil dari model sungguhan.
- Saat pita bergeser ke bawah 1e-5, fp16 mulai membulatkan gradient ke nol: 27% pada 1e-7, 68% pada 1e-8, dan semuanya pada 1e-12. bf16 tidak membulatkan satu pun ke nol di seluruh sapuan, dan mean relative error-nya tetap sekitar 0,14%. Inilah sebabnya training dengan fp16 perlu loss scaling, yaitu mengalikan loss dengan pangkat 2 yang besar supaya gradient kembali masuk jangkauan, sedangkan training dengan bf16 biasanya tidak perlu.
- Di ujung atas sapuan, keadaannya berbalik. Dengan pusat di 1e-3, 92% gradient merupakan angka fp16 normal, dan kelebihan 3 bit mantissa membuat rata-rata error fp16 hanya 0,025%, dibandingkan 0,13% pada bf16. Grafik bawah menunjukkan alasannya: antara 1 dan 1,0625, fp16 punya 64 langkah sebesar 2^-10, sedangkan bf16 punya 8 langkah sebesar 2^-7. Pada GPU yang mendukung keduanya, seperti A100 dan H100, keduanya menjalankan operasi matriks dengan kecepatan yang sama.
Intinya
Untuk training, pilih bf16 kalau perangkat kerasnya mendukung, karena format ini mempertahankan gradient kecil tanpa loss scaling. fp16 lebih teliti untuk nilai di dalam jangkauannya, dan masih menjadi pilihan pada GPU lama seperti V100 dan T4, yang tidak punya tensor core bf16.
Pelajari lebih dalam · interaktif
Mixed Precision Training
Di langkah 5, geser ukuran khas gradient dan lihat fp16 kehilangan gradient kecil sementara bf16 mempertahankannya.
Buka penjelasan interaktif