以前3月に4ビットの浮動小数点数の話題を挙げたが,公式のドキュメントも少なかったので断定的な書き方ができなかった。
fp4の話(4ビット浮動小数点数) - 48's diary
いくつか(素人向けにも)公になってきたので簡単にまとめておく。
6月のNVIDIAのテクニカルブログによるNVFP4の説明
Introducing NVFP4 for Efficient and Accurate Low-Precision Inference | NVIDIA Technical Blog
FP4 (E2M1)の定義は私の予想通りのようである。
ご丁寧に「For example, the values in the range could include 0.0, 0.5, 1.0, 1.5, 2, 3, 4, 6 (same for the negative range)」と私が以前書いたものと同じように記載されている。
加えてMXFP4がFP4の値32個に対して共通に2の階乗スケールのスケーリングパラメータを持つ。NVFP4はFP4の値16個に対して共通にFP8スケールのパラメータを持つと書かれている。
私の以前の書き方だと0~1スケールに正規化もしくは2の階乗でスケーリングと予測していたが実質的に両方それぞれ実装があったようである。MXFP4が対数スケールでNVFP4が乗数スケール(といってもFPなので対数部を持つ)なのが面白い点である。
NVFP4の方が流用しやすく応用が利きそうだがMXFP4の方が実装コストが安いのがミソである。
で,MXFP4の規格化が遅れていたのかというとそうでもなく2023年には業界内で共通規格として文書が残っている。
といっても大規模半導体の実装期間として十分かどうかは私には測りかねる。
NVIDIA内部で保守的な対応をされたと憶測するのが妥当だろうか。
で,面白いのがこのMXFP4(に近い)実装したのがAMDである。
正確にはBlock FP16と表記されておりINT8に共通に2の階乗スケールのスケーリングパラメータを持つものである。記載されていないがINT4実装もあるのではないかと推察される。
ASCII.jp:Ryzen AI 300に搭載された「RDNA 3.5」「XDNA 2」がAI処理を高速化 AIが常時動く未来はそう遠くない! AMD Tech Dayレポート (1/4)
例に挙げられているのがINT8を8個に対して8ビットのスケーリングパラメータを置き72ビットで構成するとなっている。変則的だが専用機実装としてアリと判断したのだろう。
BFP16(実質INT8)で50TOPSであればINT4の50TOPSよりは大変だがAI演算の実行性能はほぼ同じとなる。NVIDIAの保守的判断に比べやや狙い過ぎで外している感がある。
ということで修正舵の噂もある。
以上がNVIDIAとAMDのハードウェア実装であるが,肝心のソフトウェアはどうなっているかというとパッケージングにMXFP4を採用したらしい。
【AI】gpt-ossの核心的技術「MXFP4」とは|STEAM/acc
昨今のLLMでは低ビット多パラメータが極められており3ビットの声も聞こえたが4ビットくらいが落としどころのようで,gpt-ossでMXFP4だそうである。
他のLLMがどうしているかは以下のところが詳しい。
うさぎでもわかるLLM量子化手法完全ガイド: q4_K_Mの謎を解く
MXFP4で4.25ビット,q4_K_Mで約4.8ビットとなっている。
これが120bのgpt-ossが65GBに収められている構造だそうな。RLEとか入ってないのだろうか。
ollamaのモデルではgpt-ossがMXFP4でQwen3やGemma3がQ4_K_Mであることを確認した。昨今Q4_K_Mが主流のようだ。
https://ollama.com/library/gpt-oss
ということで4ビット浮動小数点数の最近の動向のまとめである。
収束しそうな気配と言って良いだろうか。
---
おまけ:
AMDから最新のアップスケーリング技術であるFSR4の実装の一部ソースが流出したようで,簡単に言うと最新ハードウェアでないと最新のFSR4に対応できないとしていたが実際はINT8演算でもちょっと遅くなる程度で対応できたという話である。
Block FP16がどういうものか分かれば腑に落ちると思われる。
---
ぼやっと:
136ビットレジスタとか72ビットレジスタとかブロック浮動小数点数を扱うGPU内部ではあるんだろうか。