Meningkatkan performa model dengan bfloat16

Secara default, TPU melakukan operasi perkalian matriks dengan nilai bfloat16 dan akumulasi dengan nilai float32 IEEE. Menggunakan bilangan floating point presisi rendah akan mengurangi waktu untuk konvergensi tanpa kehilangan akurasi.

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.

Menggunakan bfloat16 secara eksplisit

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

  1. Menyimpan nilai dalam format bfloat16 akan menghemat memori di chip, sehingga Cloud TPU dapat melatih model yang lebih besar atau menggunakan ukuran batch yang lebih besar.

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

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

Memformat detail konversi

Konversi format dari float32 ke bfloat16 disisipkan secara otomatis oleh compiler XLA. Di TPU, skema pembulatan dalam konversi adalah bulatkan ke bilangan genap terdekat dan overflow ke inf. Selain itu, bfloat16 di Cloud TPU tidak mendukung subnormal, sehingga semua subnormal dihapus 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 persis dalam bfloat16, konversi akan menambahkan 16 angka nol di bit mantisa. Nilai khusus akan dipertahankan dalam konversi.

Titik pemeriksaan yang diperoleh dari model yang dilatih di Cloud TPU dapat di-deploy di platform hardware lainnya (misalnya, inferensi atau penyesuaian di CPU atau GPU) tanpa konversi manual yang ekstensif.