FP4 / FP8 / BF16 / FP16 / TF32 / FP32 / FP64 / MPFR風高精度デモ
AIで使われる低精度,混合精度accumulation,スケーリング,高精度参照値との比較を体験する教材ページです。
この単一ファイル版では,参照値はJavaScriptの倍精度で計算しています。真のMPFRによる表生成には「従来MPFRグラフ」タブを使用してください。
入力ベクトル \(\mathbf{x}=(x_1,\ldots,x_n)\) を確率分布へ変換します。
ただし \(x_i\) が大きいと \(\exp(x_i)\) がオーバーフローするため,実装では最大値 \(m=\max_j x_j\) を引きます。
この変形は数学的には同じ値ですが,数値計算では大きく安定になります。
内積は行列積やニューラルネットワークの基本演算です。
AIアクセラレータでは,入力 \(x_i,y_i\) をFP8やFP16などの低精度で保持し,積和の累積値 \(s\) はFP32など広い形式で持つことが多くあります。
低精度入力でメモリ帯域と演算量を減らし,高精度accumulatorで丸め誤差の蓄積を抑えるのが狙いです。
小さな浮動小数点形式で表現可能な正の値を数直線上に表示します。表現範囲と有効桁数のトレードオフの説明に使えます。
「高性能計算研究室」(High Performance Computing Laboratory)の研究の一環をこのページで紹介します。
キーワードは AI,高性能計算,高精度計算 です。AIでは4〜16ビット程度の大量低精度計算が中心である一方,科学技術計算では64ビット以上の高精度計算が主流です。このギャップを埋めるために,「高性能計算研究室」ではAI向け計算機上で高精度な科学技術計算を高速化する技法を追求します。
浮動小数点数は,実数を「符号」「指数」「仮数」に分けて表します。正規化数では概念的に次の形になります。
低精度形式では指数部と仮数部のbit数をどう配分するかが重要です。たとえばFP8 E4M3は仮数が多く精度寄り,FP8 E5M2は指数が多く範囲寄りです。
下の図は,このページで使用する浮動小数点形式を MPFR 128bit を最大幅 として,実際のbit長に比例する長さで並べたものです。横スクロールなしで,FP4/FP8とFP64/MPFR 128bitの長さの違いを一覧できます。
バーの長さは全体bit長を表します。各バー内部の赤は符号部,青は指数部,緑は仮数部です。指数部が長いほど表現範囲が広く,仮数部が長いほど近い値の差を細かく表せます。MPFRはIEEE形式の固定長ではなく,指定した仮数精度を持つ任意精度形式として表示しています。
| 資料の観点 | このページで試すタブ | 確認できること |
|---|---|---|
| 4〜16bitの低精度AI計算 | 関数の量子化,Softmaxの安定化 | 丸め誤差,飽和,スケーリングの効果 |
| 混合精度計算 | 内積とaccumulation | 低精度入力 + 高精度accumulator の効果 |
| 高精度計算 | 従来MPFRグラフ | MPFR指定bit数による関数表・グラフ |
| フォーマット理解 | 形式の可視化,資料解説 | 指数部と仮数部の配分,表現可能値の粗密 |
元ページの入力フォームに加え,アップロードされた mathfunc.php と mathfunc_mpfr.php の評価関数をこのスクリプト内へ統合しました。mpfr_gexpr が使える環境ではMPFR指定bit数で評価し,利用できない環境ではPHP標準倍精度へフォールバックします。