「Bfloat16」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の6版が非表示)
1行目: 1行目:
'''bfloat16''' (brain floating point、BF16)とは、浮動小数点を16ビット長で表す形式のひとつである。
+
{{小文字}}
 +
'''bfloat16''' (brain floating point、BF16)とは、[[浮動小数点]]を16ビット長で表す形式のひとつです。
  
[[Google]]が[[TensorFlow]]向けに開発しているもの。
+
[[Google]]が[[TensorFlow]]向けに[[開発]]したものです。
  
BF16は「単純に[[FP32]]の仮数部を切り詰めた」というものである。
+
BF16は「単純に[[FP32]]の仮数部を切り詰めた」という[[仕様]]になっています。汎用的な「[[FP16]]」に対して「BF16はFP32と高速変換できる」のが利点であり、FP32との変換が頻繁に発生する用途(主に[[人工知能]])向けだと言われています。
汎用的な[[FP16]]に対して、BF16は「FP32から高速変換できる」のが利点で、出し入れの激しい[[人工知能]]向けだと言われている。
 
  
 
{| class="wikitable" style="text-align:center; border-width:0;"
 
{| class="wikitable" style="text-align:center; border-width:0;"
49行目: 49行目:
 
| colspan="23" style="border-width:0; background:#FFFFFF;" |┌───────────────────────────────────────────┐
 
| colspan="23" style="border-width:0; background:#FFFFFF;" |┌───────────────────────────────────────────┐
 
|- style="font-size:9pt;"
 
|- style="font-size:9pt;"
| style="border-width:0; background:#FFFFFF;" | || style="background:#C4FCFF;" | 0 || style="background:#9FFFAC;" | 0 || style="background:#9FFFAC;" | 1 || style="background:#9FFFAC;" | 1 || style="background:#9FFFAC;" | 1 || style="background:#9FFFAC;" | 1 || style="background:#9FFFAC;" | 1 || style="background:#9FFFAC;" | 0 || style="background:#9FFFAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 1 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" |1|| style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 
+
| style="border-width:0; background:#FFFFFF;" | || style="background:#C4FCFF;" | 0 || style="background:#9FFFAC;" | 0 || style="background:#9FFFAC;" | 1 || style="background:#9FFFAC;" | 1 || style="background:#9FFFAC;" | 1 || style="background:#9FFFAC;" | 1 || style="background:#9FFFAC;" | 1 || style="background:#9FFFAC;" | 0 || style="background:#9FFFAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 1 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#ACFFAC;" | 1 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 || style="background:#FFACAC;" | 0 
 
|-
 
|-
 
| style="border-width:0; background:#FFFFFF;" | || style="border-width:0; background:#FFFFFF;" |31|| style="border-width:0; background:#FFFFFF;" |30|| colspan="6" style="border-width:0; background:#FFFFFF;" | || style="border-width:0; background:#FFFFFF;" |23|| style="border-width:0; background:#FFFFFF;" |22|| colspan="21" style="border-width:0; background:#FFFFFF;" | || style="border-width:0; background:#FFFFFF;" |0
 
| style="border-width:0; background:#FFFFFF;" | || style="border-width:0; background:#FFFFFF;" |31|| style="border-width:0; background:#FFFFFF;" |30|| colspan="6" style="border-width:0; background:#FFFFFF;" | || style="border-width:0; background:#FFFFFF;" |23|| style="border-width:0; background:#FFFFFF;" |22|| colspan="21" style="border-width:0; background:#FFFFFF;" | || style="border-width:0; background:#FFFFFF;" |0
 
|}
 
|}
 +
 +
FP32からBF16への丸め処理の発動条件は
 +
* FP32の仮数部の「7ビット目が0」かつ「8ビット目が1」
  
 
==主なBF16をサポートする製品==
 
==主なBF16をサポートする製品==
 
 
*[[Intel]]の[[CPU]] ([[AVX-512]]対応製品の一部)
 
*[[Intel]]の[[CPU]] ([[AVX-512]]対応製品の一部)
 
*[[NVIDIA]]の[[GPU]] ([[NVIDIA Ampere]]搭載品)
 
*[[NVIDIA]]の[[GPU]] ([[NVIDIA Ampere]]搭載品)
 +
 +
== 関連項目 ==
 +
* [[半精度浮動小数点数]]
 +
* [[binary16]]
 +
* [[bfloat16]]
 +
 +
[[category: 人工知能]]

2023年10月2日 (月) 01:49時点における最新版

bfloat16 (brain floating point、BF16)とは、浮動小数点を16ビット長で表す形式のひとつです。

GoogleTensorFlow向けに開発したものです。

BF16は「単純にFP32の仮数部を切り詰めた」という仕様になっています。汎用的な「FP16」に対して「BF16はFP32と高速変換できる」のが利点であり、FP32との変換が頻繁に発生する用途(主に人工知能)向けだと言われています。

FP16
sign exponent (5 bit) fraction (10 bit)
  ┃ ┌───────┐ ┌─────────────────┐
 0   0   1   1   0   0   0   1   0   0   0   0   0   0   0   0 
15 14 10 9 0
bfloat16
sign exponent (8 bit) fraction (7 bit)
  ┃ ┌─────────────┐ ┌───────────┐
 0   0   1   1   1   1   1   0   0   0   1   0   0   0   0   0 
15 14 7 6 0
FP32
sign exponent (8 bit) fraction (23 bit)
  ┃ ┌─────────────┐ ┌───────────────────────────────────────────┐
 0   0   1   1   1   1   1   0   0   0   1   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 
31 30 23 22 0

FP32からBF16への丸め処理の発動条件は

  • FP32の仮数部の「7ビット目が0」かつ「8ビット目が1」

主なBF16をサポートする製品[編集 | ソースを編集]

関連項目[編集 | ソースを編集]