Post

Conversation

LLMの推論においてブロック毎に4bit量子化が普及しつつあるが、学習においても4bit量子化が使われはじめている。4bitとなると16通りの値しか使わないことになる。 しかし、とりうる値の範囲が大きいこと、また値に外れ値がある場合が多いため、16要素や32要素といったブロック毎にスケールを持つ。4bitは1bitが符号, 2bitが指数部、1bitが仮数部(e2m1)が一般的だが、スケール方式で亜種がある。 MXFP4形式はブロックサイズが32でスケールはe8m0で表すのに対し、NVFP4形式はブロックサイズが16でスケールはe4m3で表す。さらにテンソル毎にFP32のスケーリングを持ち、二段階のスケーラがある。 学習結果など(gpt-oss)ではスケーラが一部の値に集中することが観測されており、MXFP4形式では表現可能な値の8通りしか使われていないと報告されている。こうした場合、NVFP4の方が有効と考えられる。 このような低bit量子化が進んだ場合の利点はメモリ使用量や転送量の低下と計算処理の低下である。メモリ使用量は、圧縮した分だけそのまま改善される。計算処理の場合、一番重い行列演算処理の計算量がbit数が半分になると大体1/4になる。ただし、4bitぐらいになってくると乗算処理より、その周辺のオーバーヘッドが無視できない大きくなってくるため、4bitより小さくなっても高速化は難しくあんってくる (なのでよくある1bit演算が効率的という話しはそれほど単純ではない) このようなブロック毎のスケーラを持っても外れ値対応が必要である。学習や推論においても、アダマール行列をかけておくことで外れ値を散らすことができ、広く使われている。 アダマール行列で散らせる直感的な理解は、アダマール行列は回転行列とみなすことができ、ランダムに軸を回転させるとみなせる。ベクトルが、ある次元に対して大きな値を持っていたとしても、軸をランダムな方向に回転させると高い確率で各軸を小さな値にすることができる。例えばn次元においても(1, 0, ..., 0) は大体 1/\sqrt{n} (1, ..., 1)のような小さな値にできる。アダマール行列は高速変換が存在する。 もう一つが確率的な丸め込みで、数値が近似可能な2つの値に応じてランダムに切り上げ/切り下げされる(確率は数値の近さに比例する)。この処理は丸め誤差の影響を軽減し、特に学習時の勾配の不偏推定を実現する。 これらにより、推論だけでなく学習でも4bit量子化が使えそうになっている。 LLMの学習や推論で使われているこれらの技術は、他分野でも同様に使えると考えられる。例えば値の範囲が広くFP32やFP64(場合によってはFP128)を使わなければ計算できないような問題であっても、ブロック毎に値のスケールが同じようにできるなら、ブロック毎にスケールを持った低bit量子化が使えるし、さらに常にアダマール行列変換をつかうことで分布をガウシアンに従うような形で保持することができる(アダマール行列変換は可逆変換なので常に元に戻せる)。