Format numerik bfloat16

Menggunakan angka floating point presisi yang dikurangi adalah metode umum yang digunakan untuk mengurangi waktu konvergensi tanpa kehilangan akurasi. TPU menggunakan format angka bfloat16 saat melakukan operasi matriks. Operasi perkalian matriks dilakukan pada nilai bfloat16 dan akumulasi dilakukan pada nilai float32 IEEE.

bfloat16 adalah format floating point 16-bit kustom untuk machine learning yang terdiri dari satu bit tanda, delapan bit eksponen, dan tujuh bit mantissa. Diagram berikut menunjukkan internal dari tiga format floating point: float32: presisi tunggal IEEE, float16: presisi setengah IEEE, dan bfloat16.

gambar

Rentang dinamis bfloat16 dan float32 setara. Namun, bfloat16 menggunakan setengah ruang memori. Untuk mengetahui informasi selengkapnya tentang performa bfloat16, lihat Studi BFLOAT16 untuk Pelatihan Deep Learning.

Memilih bfloat16

Tim hardware Google memilih bfloat16 untuk Cloud TPU guna meningkatkan efisiensi hardware sekaligus mempertahankan kemampuan untuk melatih model deep learning secara akurat, semuanya dengan biaya peralihan minimal dari float32. Ukuran fisik pengganda perangkat keras diskalakan dengan persegi dari lebar mantissa. Dengan bit mantissa yang lebih sedikit dari FP16, pengganda bfloat16 berukuran sekitar setengahnya dalam silikon dari pengali FP16 standar, dan berukuran delapan kali lebih kecil daripada pengganda float32.

Jaringan neural lebih sensitif terhadap ukuran eksponen daripada ukuran mantissa. Untuk memastikan perilaku yang identik untuk underflow, overflow, dan NaN, bfloat16 memiliki ukuran eksponen yang sama dengan float32. bfloat16 menangani denormal secara berbeda dari float32, yang mengosongkannya ke nol. Tidak seperti float16 yang biasanya memerlukan penanganan khusus seperti penskalaan kerugian, bfloat16 adalah pengganti langsung untuk float32 saat melatih dan menjalankan jaringan neural dalam.

Pelatihan presisi campuran

Sebagian besar komputasi dalam jaringan neural dalam dapat menyelesaikan tugas dengan akurasi yang sama menggunakan nilai presisi yang lebih rendah. Beberapa model bahkan dapat mencapai akurasi yang lebih tinggi dengan nilai presisi yang lebih rendah.

Saat memprogram Cloud TPU, compiler XLA akan otomatis mengonversi nilai antara float32 dan bfloat16.

Detail tentang Konversi Format

Konversi format dari float32 ke bfloat16 secara otomatis disisipkan oleh compiler XLA. Di TPU, skema pembulatan dalam konversi membulatkan ke genap terdekat dan overflow ke inf. Selain itu, bfloat16 di Cloud TPU tidak mendukung subnormal, sehingga semua subnormal akan dikosongkan ke nol selama konversi. Nilai khusus, seperti NaN dan inf, dipertahankan dalam konversi.

Konversi format dari bfloat16 ke float32 juga otomatis disisipkan oleh compiler XLA. Karena float32 dapat mewakili semua nilai yang tepat dalam bfloat16, konversi hanya memasukkan 16 angka nol dalam bit mantissa. Nilai khusus dipertahankan dalam konversi.

Portabilitas model

Nilai parameter dan aktivasi dalam model dapat disimpan dalam format 32 bit karena hardware TPU dapat otomatis mentransmisikan nilai ini ke bfloat16. Checkpoint yang diperoleh dari model yang dilatih pada Cloud TPU dapat di-deploy di platform hardware lain (misalnya, inferensi atau fine-tuning pada CPU atau GPU) tanpa konversi manual yang ekstensif.

Meningkatkan performa dengan bfloat16

Meskipun konversi format otomatis di TPU membuat Anda tidak perlu memikirkan presisi numerik, peningkatan performa lebih lanjut dapat dicapai dengan mentransmisikan nilai secara eksplisit ke bfloat16. Ada dua alasan untuk mentransmisikan nilai secara eksplisit ke bfloat16:

  1. Menyimpan nilai dalam format bfloat16 menghemat memori on-chip, sehingga Cloud TPU dapat melatih model yang lebih besar atau menggunakan ukuran tumpukan yang lebih besar.

  2. Beberapa operasi terikat pada bandwidth memori, yang berarti jumlah waktu yang diperlukan untuk memuat data dari memori dapat memperlambat waktu keseluruhan yang dihabiskan untuk melakukan komputasi. Menyimpan operand dan output operasi tersebut dalam format bfloat16 akan mengurangi jumlah data yang harus ditransfer, sehingga meningkatkan kecepatan secara keseluruhan.

Untuk memulai, sebaiknya dapatkan beberapa pengalaman langsung dengan salah satu model referensi yang mendukung bfloat16 yang telah dioptimalkan untuk Cloud TPU. Setelah itu, panduan performa kami, panduan alat pembuatan profil, dan panduan pemecahan masalah memberikan informasi teknis mendalam untuk membantu Anda membuat dan mengoptimalkan model machine learning sendiri.