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
:
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.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.