- L-Mul は、LLM の大きなエネルギーコストが 浮動小数点乗算 に由来する点に着目し、乗算を 整数加算 で近似しようとする線形複雑度乗算アルゴリズム
- fp32 乗算は int32 加算よりエネルギーコストが 37倍 高く、テンソル処理ハードウェアに L-Mul を適用すると、要素ごとの浮動小数点テンソル乗算エネルギーの 95%、dot product エネルギーの 80% を削減できる可能性がある
- 計算方式は仮数(mantissa)の乗算と丸めを省略し、符号は XOR で処理し、残りのビットは
x[1:] + y[1:] - offset 形式の加算で構成する
- 実験では 4-bit mantissa L-Mul は float8 e4m3 乗算と同程度の精度を示し、3-bit mantissa L-Mul は float8 e5m2 より良い結果を出した
- 事前学習済み LLM に追加学習なしで L-Mul attention を適用した場合、自然言語推論タスクの平均損失は 0.07% で、ビジョンタスクでは平均精度が 0.12% 向上した
L-Mul が狙うボトルネック
- 大規模ニューラルネットワークは計算の多くを 浮動小数点テンソル乗算 に費やしており、この演算は加算よりエネルギーコストが高い
- L-Mul は浮動小数点数の乗算を整数加算で近似する linear-complexity multiplication アルゴリズム
- 適用対象は複数の計算段階にまたがる
- attention メカニズム内部の乗算
- 行列乗算
- 要素ごとの乗算
- Transformer ベースの LLM で attention は入力コンテキスト長
N に対して O(N²) の複雑度を持ち、高次元テンソル乗算も含めて計算効率の主要なボトルネックとなる
算術演算ごとのエネルギーコスト
- Horowitz(2014) の演算コスト表は、加算と乗算のエネルギー差を直接示している
- int8 加算: 0.03 pJ
- int32 加算: 0.1 pJ
- fp16 加算: 0.4 pJ
- fp32 加算: 0.9 pJ
- int8 乗算: 0.2 pJ
- int32 乗算: 3.1 pJ
- fp16 乗算: 1.1 pJ
- fp32 乗算: 3.7 pJ
- fp32 乗算は fp32 加算より 4倍、int32 加算より 37倍 多くのエネルギーを使用する
- PyTorch のテンソル乗算結果の累積デフォルト精度は fp32 に設定されている
- I/O と制御演算を除くと、fp32 乗算を int32 加算で近似したときのエネルギー使用量は約
1/37 ≈ 2.7% の水準となる
- 累積精度を fp16 に下げても、整数加算は浮動小数点乗算エネルギーの約 4.7% しか使用しない
L-Mul の計算方式
- 一般的な浮動小数点乗算は 2つの数
x, y に対して次の形を取る
(1 + xm) · 2^xe · (1 + ym) · 2^ye
- 結果は
(1 + xm + ym + xm · ym) · 2^(xe+ye) と符号 XOR で構成される
- 計算ボトルネックは
m ビット仮数に対する O(m²) の仮数乗算である
- L-Mul は
xm · ym を取り除き、次の形で近似する
(1 + xm + ym + 2^-l(m)) · 2^(xe+ye)
l(m) は仮数ビット数に応じて変わる
m ≤ 3 なら m
m = 4 なら別の値
m > 4 なら別の値
- ビットレベル実装はさらに単純な式に整理される
- 符号ビット:
x[0] ⊕ y[0]
- 残りのビット:
x[1:] + y[1:] - offset
- 浮動小数点形式が
1 + xm を暗黙的に処理するため、L-Mul は実装上 1つの adder で構成できる
- 仮数和が 2 を超えると carry は自動的に exponent に伝達される
- 従来の浮動小数点乗算に必要な仮数乗算と丸め過程を省くことで計算量を削減する
Transformer attention への適用
- L-Mul ベースの attention は
Q, K, V を作成した後、attention 計算の行列乗算を L-matmul に置き換える
- 計算形は次のとおり
K = H · Wk
Q = H · Wq
V = H · Wv
A = softmax[L-matmul(Q, Kᵀ) / √d]
H′ = L-matmul(A, H)
L-matmul は通常の浮動小数点乗算をすべて L-Mul で実装した行列乗算である
- この構造は浮動小数点乗算を整数加算に置き換え、計算資源の使用を抑える
精度・複雑度分析と実験結果
- 精度分析は、L-Mul が浮動小数点数の fraction を何ビットまで保持した場合と同等かを評価する方式で構成される
- 一様分布の operand を基準にした分析では、L-Mul は fp8 e5m2 より正確である
- 事前学習済み LLM 5種の結合 weight 分布を基準にした実用的分析では、5-bit mantissa operand で fp8 e4m3 より高い精度を達成できる
- 実験結果は理論的誤差推定と一致した
- 4-bit mantissa L-Mul は float8 e4m3 乗算と同程度の精度
- 3-bit mantissa L-Mul は float8 e5m2 より高い精度
- 事前学習済み LLM には標準 attention 実装を L-Mul attention に直接置き換えて適用し、追加学習は行っていない
- commonsense、structured reasoning、language understanding タスクの平均性能損失: 0.07%
- visual question answering、object hallucination、free-form visual instruction タスクの平均精度変化: 0.12% 向上
- fine-tuning 実験では、attention、linear transformation、要素ごとの乗算のすべての乗算を 3-bit mantissa L-Mul に置き換えたモデルが、float8 e4m3 累積精度を使う標準モデルと同程度の性能を示した
- ゲートレベル計算量推定では、通常の乗算は次の水準である
- fp16 乗算: 約 584
- fp8 e4m3 乗算: 約 325
- fp8 e5m2 乗算: 約 296
- L-Mul のゲートレベル計算量推定はさらに低い
- fp16 L-Mul: 約 256
- fp8 L-Mul: 約 157
- GPU には L-Mul のネイティブ実装がないため効率を完全には活用しにくく、L-Mul ベースのモデルは特殊なアーキテクチャ設計が統合されたデバイスで学習・ホスティングすることが推奨される
- この技術は patent pending の状態にある
まだコメントはありません。