bf16
https://gyazo.com/8cee67778bcdd9a8c6379de1782903b7
bfloat16 の数値形式
指数部がfp32と同じため、メモリ容量が半分でもダイナミックレンジが同じ
ニューラル ネットワークは、仮数のサイズよりも指数のサイズに敏感です。アンダーフロー、オーバーフロー、NaN で同じ動作になるように、bfloat16 の指数サイズは float32 と同じです。
bfloat16 は、float32 とは異なる方法で非正規化を処理し、ゼロにフラッシュします。
損失スケーリングなどの特別な処理が通常必要な float16 とは異なり、bfloat16 はディープ ニューラル ネットワークをトレーニングして実行する際の float32 の一時的な代替となります。
実証研究
Our results show that deep learning training using BFLOAT16 tensors achieves the same state-of-the-art (SOTA) results across domains as FP32 tensors in the same number of iterations and with no changes to hyper-parameters.
https://arxiv.org/abs/1905.12322
A Study of BFLOAT16 for Deep Learning Training
2019
bfloat16
Nvidia GPUの場合、Compute Capabilityというのが8.0以降じゃないと使えない(以下情報元)
17.2. Features and Technical Specifications — CUDA C++ Programming Guide
自分のGPUがいくつなのかは以下で確認できる
NVIDIA CUDA GPU Compute Capability
Legacy CUDA GPU Compute Capability | NVIDIA Developer
GPU Database | TechPowerUp(CUDAの値)