LoginSignup
4
6

More than 3 years have passed since last update.

BFloat16の適用と実装状況

Last updated at Posted at 2020-03-03

はじめに

bfloat16は、いろいろソフトが出てきているので、まとめてみる。

Bfloat16の適用範囲について

Bfloat16では、学習ができるとの現象論的論文が出ている。すでに、ResNet以外にGAN等複雑な計算を行って、そん色ない結果を出している。
また、Ising modelのモンテカルロでもFP32と比べてそん色ない結果が出ている。

使い方

TensorFlow

tf.castコードの例がある。

PyTorch

TPUを使った場合、bfloat16を使える。サンプルコードもある。

AWS inf1

コンパイラで、FP32からBF16に自動変換する。推論だけだから?

フレームワーク等での対処

深層学習ソフトでの数値変換

FP32からBFloat16に変換する際、丸め誤差およびNaNに対する処理が必要との知見が、Googleがメインに開発しているTensorFlowの実装が出ておりそこで説明されている。もともとは、こちらの記事にあったが、ちょっと整理してみた。
まず、NaNの値は、例外を発生しないquiet NaNに変更している。
次に、丸め誤差は、若干複雑なので、表にして示す。

符号 指数(8ビット) 仮数(23ビット)
S E E E E E E E E F F F F F F L R T T T T T T T T T T T T T T T

ここで、FとLの7ビットは、bfloat16の仮数である。そして、Lは最下位のビットである。次に、Rは、丸めるビットである。Tは、それ以下のビットである。ここで、RとTのビットの値によって、Lのビットの繰上か繰下を決める。

L R T 繰上繰下
0 0 - 繰下
1 0 - 繰下
0 1 全て0 繰下
1 1 - 繰上
0 1 1がある 繰上

ソフトの実装状況

ツールは、未成熟であり2020年1月現在サポートされつつあるといった感じである。以下にサポートされているソフトを示す。

参考文献

一般

使えている例

ソフト側対応

一般

深層学習フレームワーク

数値演算ライブラリ

ツール

CPU/GPU

Amazon(GPU)(提供済)

AMD(GPU)

ARM(CPU)

Google(TPUv2/v3)(提供済み)

Intel(CPU/GPU)

NVIDIA(GPU)

その他

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6