English version

AI Precision Playground 日本語版

FP4 / FP8 / BF16 / FP16 / TF32 / FP32 / FP64 / MPFR風高精度デモ

AIで使われる低精度,混合精度accumulation,スケーリング,高精度参照値との比較を体験する教材ページです。

シナリオは demo_scenario.txt で自由に編集できます

関数の量子化 demo

観察ポイント
参照値(太い線)から各量子化形式の線がどこで離れるか、下の【絶対誤差グラフ(対数軸)】でどの形式の誤差が大きいかに注目。スケーリングをブロック単位に変えると外れ値付近の誤差がどう減るか比べましょう。

この単一ファイル版では,参照値はJavaScriptの倍精度で計算しています。真のMPFRによる表生成には「従来MPFRグラフ」タブを使用してください。

代表値の表

Softmaxの安定化 demo

観察ポイント
初期値のように1000前後の大きな値を入れると naive 版は exp がオーバーフローして崩れやすいのに対し、max-shift 版は安定します。入力形式を FP8 などに落とすと確率がどれだけ崩れるかを表の【|誤差|】列で確認しましょう。

Softmaxアルゴリズム

入力ベクトル \(\mathbf{x}=(x_1,\ldots,x_n)\) を確率分布へ変換します。

\[ y_i = \frac{\exp(x_i)}{\sum_{j=1}^{n}\exp(x_j)} \]

ただし \(x_i\) が大きいと \(\exp(x_i)\) がオーバーフローするため,実装では最大値 \(m=\max_j x_j\) を引きます。

\[ y_i = \frac{\exp(x_i-m)}{\sum_{j=1}^{n}\exp(x_j-m)} \]

この変形は数学的には同じ値ですが,数値計算では大きく安定になります。

内積とaccumulation demo

観察ポイント
accumulator を低精度のままにすると部分和が途中で潰れ、FP32 accumulator にすると参照値に沿うことを【部分和グラフ】で確認できます。分布を「一様分布 + 外れ値」にすると低精度入力の弱点が強調されます。

内積とaccumulation

内積は行列積やニューラルネットワークの基本演算です。

\[ s = \sum_{i=1}^{n} x_i y_i \]

AIアクセラレータでは,入力 \(x_i,y_i\) をFP8やFP16などの低精度で保持し,積和の累積値 \(s\) はFP32など広い形式で持つことが多くあります。

\[ s_k = \operatorname{round}_{\mathrm{acc}}\left(s_{k-1} + \operatorname{round}_{\mathrm{mul}}(x_k y_k)\right) \]

低精度入力でメモリ帯域と演算量を減らし,高精度accumulatorで丸め誤差の蓄積を抑えるのが狙いです。

形式の可視化

小さな浮動小数点形式で表現可能な正の値を数直線上に表示します。表現範囲と有効桁数のトレードオフの説明に使えます。

観察ポイント
点の間隔(表の「次の値との差」)が右へ行くほど広がることに注目。指数が上がるほど表現できる値が疎になり、同じbit数でも大きな値ほど分解能が粗くなる様子が分かります。

解説:AI時代向けの高性能な高精度計算法の追求

「高性能計算研究室」(High Performance Computing Laboratory)の研究の一環をこのページで紹介します。

キーワードは AI,高性能計算,高精度計算 です。AIでは4〜16ビット程度の大量低精度計算が中心である一方,科学技術計算では64ビット以上の高精度計算が主流です。このギャップを埋めるために,「高性能計算研究室」ではAI向け計算機上で高精度な科学技術計算を高速化する技法を追求します。

AI時代の低精度計算

  • FP4, FP6, FP8, BF16, FP16 など,4〜16ビット級の形式を大量に使います。
  • 行列積・内積・畳み込みを短時間で処理するため,専用アクセラレータやTensor Core系の演算器が活用されます。
  • 低精度化では,丸め誤差・アンダーフロー・オーバーフローを抑えるためにスケーリングが重要になります。

科学技術計算の高精度計算

  • 通常はFP64が標準で,必要に応じてDD, TD, QD, MPFRなどの多倍長・任意精度を使います。
  • 数値線形代数,非線形方程式,固有値問題,ODEなどでは,精度不足が結果の信頼性に直結します。
  • AI向けハードウェアの高い演算性能を,高精度計算にも活かすことが研究上の焦点になります。

浮動小数点数の基本構造

浮動小数点数は,実数を「符号」「指数」「仮数」に分けて表します。正規化数では概念的に次の形になります。

\[ x = (-1)^S \times (1.M)_2 \times 2^{E-\mathrm{bias}} \]
S: 符号部 — 0なら正,1なら負です。
E: 指数部 — 表現できる値の範囲を決めます。指数部が多いほど,極端に大きい値・小さい値を扱いやすくなります。
M: 仮数部 — 有効桁数を決めます。仮数部が多いほど,近い値の差を細かく表現できます。
scale — FP4/FP8などの低精度AI計算では,テンソル全体またはブロックごとに倍率を持たせて表現範囲を調整します。

低精度形式では指数部と仮数部のbit数をどう配分するかが重要です。たとえばFP8 E4M3は仮数が多く精度寄り,FP8 E5M2は指数が多く範囲寄りです。

浮動小数点フォーマットの長さ比較

下の図は,このページで使用する浮動小数点形式を MPFR 128bit を最大幅 として,実際のbit長に比例する長さで並べたものです。横スクロールなしで,FP4/FP8とFP64/MPFR 128bitの長さの違いを一覧できます。

横軸の目安:左から 0, 32, 64, 96, 128 bit。FP4〜TF32は非常に短いため,ラベルが読めるように最小表示幅だけ確保しています。
符号部 S 指数部 E(範囲) 仮数部 M(精度) MPFR 任意精度 scale 倍率
FP4 E2M1
S
E×2
M×1
4 bit
4bitの極端な低精度形式です。\(S=1\), \(E=2\), \(M=1\) なので単独では粗いですが,scaleと組み合わせるとAI推論の量子化デモに向きます。
FP6 E3M2
S
E×3
M×2
6 bit
FP4とFP8の中間例です。\(E=3\), \(M=2\) により,範囲と精度の折衷を確認できます。
FP8 E4M3
S
E×4
M×3
8 bit
FP8の精度重視型です。\(E=4\), \(M=3\) なのでE5M2より仮数が1bit多く,重みや活性値の量子化比較に向きます。
FP8 E5M2
S
E×5
M×2
8 bit
FP8の範囲重視型です。\(E=5\), \(M=2\) なので仮数は粗くなりますが,大きさが激しく変わる値や勾配の説明に使いやすい形式です。
BF16
S
E×8
M×7
16 bit
\(1+8+7=16\) bitです。指数部はFP32と同じ8bitなので範囲が広く,仮数部7bitにより精度は粗くなります。
FP16
S
E×5
M×10
16 bit
\(1+5+10=16\) bitの半精度です。AIでは入力や重みに使い,累積はFP32で行う混合精度計算がよく使われます。
TF32
S
E×8
M×10
19 bit相当
概念的には \(1+8+10\) bit相当です。FP32の指数幅を保ちながら仮数を短くし,行列積を高速化するための形式です。
FP32
S
E×8
M×23
32 bit
\(1+8+23=32\) bitの単精度です。AI計算の標準的な基準形式で,低精度入力のaccumulatorとしても使われます。
FP64
S
E×11
M×52
64 bit
\(1+11+52=64\) bitの倍精度です。科学技術計算で標準的な形式で,低精度AI計算との差を確認する基準になります。
MPFR 128
任意精度仮数 128 bit
128 bit指定
MPFRは仮数精度を任意に指定できます。このページでは従来MPFRグラフタブで,128bitなどの高精度参照値を生成できます。
scale併用
テンソルまたはブロックごとの倍率 scale
補助情報
FP4/FP8などでは,低精度の値そのものに加えて,テンソル全体またはブロック単位の倍率 \(\mathrm{scale}\) を持たせることで,限られたbit数でも実用的な範囲を扱いやすくします。

バーの長さは全体bit長を表します。各バー内部の赤は符号部,青は指数部,緑は仮数部です。指数部が長いほど表現範囲が広く,仮数部が長いほど近い値の差を細かく表せます。MPFRはIEEE形式の固定長ではなく,指定した仮数精度を持つ任意精度形式として表示しています。

このデモページとの対応

資料の観点このページで試すタブ確認できること
4〜16bitの低精度AI計算関数の量子化Softmaxの安定化丸め誤差,飽和,スケーリングの効果
混合精度計算内積とaccumulation低精度入力 + 高精度accumulator の効果
高精度計算従来MPFRグラフMPFR指定bit数による関数表・グラフ
フォーマット理解形式の可視化,資料解説指数部と仮数部の配分,表現可能値の粗密

任意精度MPFRグラフ・表生成(統合版)

元ページの入力フォームに加え,アップロードされた mathfunc.phpmathfunc_mpfr.php の評価関数をこのスクリプト内へ統合しました。mpfr_gexpr が使える環境ではMPFR指定bit数で評価し,利用できない環境ではPHP標準倍精度へフォールバックします。

MPFR利用可能
mathfunc_mpfr.php 由来の mpfr_gexpr 呼び出しを検出しました。従来MPFRグラフ・表生成では MPFR 指定bit数評価を優先します。
MPFRエンジン使用時は mpfr_gexpr が解釈できる式をそのまま渡します。フォールバック時は演算子 + - * / ^ ( ),関数 sin, cos, tan, exp, log, log10, sqrt, abs, floor, ceil, tanh, pow, min, max,定数 pi, e に対応します。

このページの使い方

  1. まず「浮動小数点数の解説」で形式の全体像とbit長の違いを把握します。
  2. 「関数の量子化」「Softmaxの安定化」「内積とaccumulation」で低精度・混合精度の振る舞いを実験します(各タブの黄色い「観察ポイント」を参照)。
  3. 「任意精度MPFRグラフ」で高精度の参照値・関数表を生成し、低精度の結果と比較します。

▲ 上部メニューに戻る

Copyright (c) Tomonori Kouya, 高性能計算研究室 (High Performance Computing Laboratory)
AI Precision Playground v20 改善版 / 教育目的での利用を想定しています。