LLM の重みがどの程度の情報を運んでいるか:無駄なビットを探して
本記事は、LLM推論における最大のボトルネックがデータ転送速度にあると指摘し、単なる量子化では解決できない根本的な課題として「メモリを計算に変換する」アプローチの重要性を説いている。
キーポイント
推論のボトルネックはデータ移動
LLM推論の主要な課題は、データを場所間で転送し、その後で計算を行うプロセスにあり、特に計算ユニットがデータバスの速度不足によりアイドル状態になることが最大の非効率要因となっている。
量子化の限界と誤解
量子化はデータを半分にする代わりに計算量を倍増させる効果はあるものの、本質的にメモリを計算に変換するものではなく、データ転送のボトルネック自体を解消するわけではない。
次世代アーキテクチャへの示唆
真の解決策は、従来の「データを運んで計算する」パラダイムから、「メモリそのものを計算機能として活用する」新しいハードウェア・ソフトウェアアーキテクチャへの転換にある。
影響分析・編集コメントを表示
影響分析
この記事は、現在のLLM推論最適化の主流である量子化技術の限界を鋭く指摘し、業界が単なるデータ圧縮から「メモリと計算の融合」という根本的なアーキテクチャ転換へと視点を移す必要性を強調しています。これにより、ハードウェアベンダーや研究者は、データ移動コストを無効化する新しいプロセッサ設計やシステムアーキテクチャへの投資を加速させる可能性があります。
編集コメント
技術的な洞察に富む記事ですが、具体的な実装例や企業名が言及されていないため、現状の理論的課題提起としての価値が高いと言えます。
モデルの重みを bfloat16 で保存する場合、各パラメータは 16 ビットを占有します。これが予算です。問題は、その予算を適切に使用しているかどうかです。
情報理論はこの問いを明確に扱うための手段を提供します。シャノンエントロピー(Shannon entropy)は、データストリーム内の記号あたりの平均情報量を測定する指標です。もしすべての可能なバイト値が等しく頻繁に出現するなら、エントロピーは最大となり、圧縮できる余地はありません。一方、特定の値が支配的であれば、エントロピーはビット幅を下回り、その差が浪費となります:割り当てられたが情報を運んでいないビットです。
これは実証的に答えられるような問いです。
どのように?§
入手可能な限り多くのオープンウェイトモデルの重みファイルを収集しました。11. 偶然にも、私たちはこれらのモデルのほとんどを doubleword で提供しています - 今日サインアップして無料トークン 10 ドルを獲得しましょう。— 異なるラボ(Qwen, DeepSeek, Google, OpenAI, Moonshot, MiniMax, NVIDIA, StepFun, Zhipu)、異なる規模(0.6B から 1.4T パラメータまで)、異なる保存形式(BF16, FP8, MXFP8, MXFP4, NVFP4, INT4)— それぞれの重み分布に対してシャノンエントロピーを計算しました。
シャノンの情報源符号化定理は、独立同分布 (i.i.d.) の情報源から得られる単一のシンボルを表すために必要な平均ビット数の最小値が、その情報源のシャノンエントロピーに等しいことを示しています。訓練済みの重みが実際には独立同分布に見えることは私にとって驚きでした:同じ役割を持つ重み(層内の機能単位や MoE の専門家グループなど)は結合した分布を発達させるだろうと予想するかもしれませんが、統計的にはそれが現れることなく、それぞれが専門化しているようです。モデルの重みのエントロピーとフォーマットが実際に割り当てているビット数の間のギャップこそが、私たちが探しているスラックです。
ベースライン:1 重みあたり 16 ビット§
まず BF16 です。BF16 の重みは、フォーマットが割り当てる 16 ビットのうち、要素あたり約 10.6 ビットのエントロピーを運んでいます。予算の 3 分の 1 がスラックです。
なぜでしょうか?
チャートはインタラクティブです — フォーマットチップをクリックすると、対応するモデルの表示・非表示を切り替えられます。各棒グラフは、各フィールド(符号、指数部、仮数部)が実際に運ぶエントロピーと、フォーマットが割り当てているビット数を積み上げて比較しています。灰色のキャップは未使用の予算であり、各棒グラフ上のパーセンテージは総廃棄率を示します。任意のセグメントにカーソルを合わせると、1 ビットあたりの数値が表示されます。
測定したすべての BF16 モデルにおいて、スラックは 1 つの場所に集中しています。指数部は割り当てられた 8 ビットのうち約 2.6 ビットのエントロピーしか運んでいません。仮数部は割り当てられた 7 ビットのうち約 7 ビットを運んでいます。符号部は公平なコインのように振る舞い、1 ビット中 1 ビットを使用しています。BF16 の重みに対して費やしている 16 ビットの中で、無駄になっているのは指数部だけです。
そのギャップは驚くほど安定しています。パラメータ数が 2 桁も異なり、4 つのラボ、異なるトレーニングレシピを用いても、指数部分のエントロピーはおよそ 0.05 ビットの幅を持つバンド内に収まります。
なぜ指数部分なのか?§
仮数部はその予算をフルに使い果たし、符号部は公平なコインのように振る舞います。スラック(余裕)があるのは指数部分だけです。では、これらの重みの分布のどのような特徴が、指数部分を特に無駄な領域にしているのでしょうか。
浮動小数点数における指数部分は、その大きさによって決定されます。およそ log₂|w| です。したがって、テンソル全体における指数部分のエントロピーは、重みの大きさがどれだけ広がっているかという直接的な関数となります。もし重みが BF16 が表現できるすべての大きさに対して均等に分布していれば、指数部分はほぼ最大限の情報量を持ち、8 ビットすべてが使用されることになります。しかし、それらが狭い大きさのバンドに集中している場合、256 個の可能な指数値のほとんどが現れることなく、エントロピーは崩壊します。
実は、重みはクラスター化されています。測定したすべての訓練済みモデルにおいて、重みの大きさは 2⁻⁷ から 2⁻⁶ のどこかで鋭くピークを迎えています。これは小さな大きさへと長く伸びる左側の尾を持つ、狭い単峰性の形状です。
各線は一つのモデルを表します。色相(Hue)はラボを符号化し、同じ色相内の明度(lightness)はそのラボ内でのパラメータ数を符号化しています(暗いほど大きい)。実線は BF16 を、破線は量子化フォーマットを示します。任意の線上にマウスを乗せるとモデルが表示されます。
そして、各モデルが狭い範囲に限定されているだけでなく、それらすべてが*同じ*狭い範囲にあるのです。各分布をその平均値だけシフトし、標準偏差で再スケーリングすると、(ほぼ)すべてのモデルが同じ曲線に収束します。
μ と β は、各モデルにおける log₂|w| の平均値と標準偏差です。|w| < 2⁻¹⁶ の重みは、「小さい」バケットに分類され(大きさヒストグラムの左端に表示)、μ と β の計算からは除外されます。これにより、デッドなエキスパート重みを持つ少数の MoE モデルが収束を歪めるのを防いでいます。
つまり、BF16 におけるスラックは、特定のアーキテクチャやトレーニングレシピの詳細に敏感ではありません。これは、訓練された重みがどのように分布しているかという堅牢な規則性とフォーマットの組み合わせによる性質です。BF16 の指数部は、実際にどのモデルも使用しないよりも広い範囲の大きさを想定して設計されています。
私たちが、LLM にはより精度の低い数値形式が有用であることを初めて発見したわけではありません。NVIDIA の主要な FLOPS 数は、ここ数年ビット幅を半分にすることで倍増し続けてきました。これらのより狭いフォーマットは、すべてのスラックを排除できるのでしょうか?
ビットの半分:重みあたり 8 ビット§
最も単純な狭いフォーマットが FP8 です。BF16 と同じ 3 部構成ですが、割り当てが半減し、1/4/3(符号ビット/指数ビット/仮数ビット)となります。これは BF16 の 1/8/7 に対するものです。
この図の形式は、素晴らしい 記事 から借用し、bf16 に合わせて調整したものです。
これらのモデルを FP8(Floating Point 8 ビット)[FP8] に到達させたレシピはすべて異なります。ネイティブな FP8 の事前学習、ポストトレーニング中の QAT(Quantization Aware Training:量子化意識型トレーニング)からの MXFP8、BF16 に細粒度の量子化パスを加えたもの、その他さまざまですが、バイトレベルでの分布の大きさはそれらすべてで同じです。1
FP8 の重みは 8 ビット中約 6.5 ビットのエントロピーを運んでおり、BF16 は 16 ビット中 10.6 ビットです。つまり、予算の約 80% が使用されているのに対し、BF16 では 66% です。したがって、フォーマットを縮小することで絶対的な余裕は確かに埋まります。興味深いことに、これは指数部の余裕を減らすのではなく、仮数部の精度を下げることで実現されています。
バイトの床の下:重みあたり 4 ビット§
FP8 までであれば、分布の大きさを移動させる必要はありません。これまで見てきたすべてのバイトレベルのフォーマット(BF16、FP8、MXFP8、Qwen のブロック FP8)は、要素ごとの指数部に少なくとも 4 ビットを与えており、分布が求める約 2.6 ビットのエントロピーよりも十分に余裕があります。この余裕は確かに存在しますが、フォーマットがそれを吸収しており、分布は利用可能な予算の範囲内に収まっています。
FP4 ではこれが崩れます。要素ごとの指数部には 2 ビットしかなく、6 に近い値を必要とする分布に対して 4 つのコードしか用意されていません。つまり、分布を変えるか、フォーマットがその予算を分割するかのどちらかです。
サブバイト形式は予算を因数分解します。ブロックごとのスケールが各要素ブロックの絶対的な大きさを吸収し、要素ごとのビットはブロック内のばらつきをカバーする役割を果たします 33.MXFP8 および MXFP4 は、E8M0 スケール(8 ビットの 2 のべき乗指数)を持つ 32 要素ブロックを使用します。NVFP4 は、16 要素ブロックに E4M3 FP8 スケールを採用し、さらにテンソル全体のスケールとして単一の FP32 を追加する(二重量子化)構成です。Qwen のブロック FP8 は 128 要素ブロックに BF16 スケールを使用します。Moonshot の INT4 は、より高精度なグループごとのスケールとともに 4 ビット整数をパックします。しかし、要素あたりの予算は依然として 2 ビットのままであり、問題は単にグローバルな分布からブロック内の分布へと移るだけです。モデルがブロック内の範囲を 2 ビットに収められるように自らを構成できるでしょうか?もし可能であれば分布は適応しますが、不可能であれば情報が失われます。
ここでいう「大きさ」とは、*再構築された*重みを指します:要素ごとのコード × ブロックスケール(× テンソル全体のスケール)。単一のブロック内では約 8 の異なる大きさが観測されるのみですが、異なるスケールを持つ数千のブロックにわたると、これらの離散的なコードブックがスライドして重なり合い、連続的な曲線のように見えるようになります。
適応します。サブバイトモデルのマグニチュードヒストグラムは、BF16 や FP8 が従う曲線上には存在しません。それはより狭く、しばしば異なるピークを持ちます。MXFP4 で低損失を得る分布が、BF16 で低損失を得る分布とは一致しないのです。
したがって 8 ビット未満では、初めてフォーマットが分布を形作る側となり、その逆ではありません。FP8 まで、マグニチュード分布の普遍性はモデルの性質でした。制約条件を十分に緩く設定して訓練すれば、重みは同じ形状に収束します。FP8 を下回ると、制約は 2.6 ビットの床を超えて厳しくなり、モデルは譲歩せざるを得なくなります。
そして、エントロピーがどこへ消えたかがわかります。
FP4 では要素ごとのビット数が飽和に近づきます。指数部はほぼ完全に使用され(約 1.9 / 2)、仮数部も完全に使用されます(約 1 / 1)。要素ごとの余裕はほとんど枯渇しています。残りの部分はフォーマットによって異なります。MXFP4 は両方の箇所にわずかな余裕を保ちます:要素ごとの指数部は完全には満たされず、ブロックごとのスケールが割り当てられた 0.25 ビットのうちエントロピーを 0.03〜0.10 ビットのみ保持します。INT4 と NVFP4 は要素ごとのビット数を床まで押し下げ、残りのすべてをスケールに依存させます。これは要素あたり約 0.26 ビット(割り当てられた 0.5 ビット中)です。
要素ごととスケールを合わせたネットのエントロピー使用率は、3 つのフォーマットすべてで約 93% に達します。一方、FP8 では約 80%、BF16 では約 66% です。床に近い状態では、INT4 と NVFP4 の場合の残りの余裕はスケールに存在し、MXFP4 の場合は指数部とスケールの間で分割されています。
What's left?§
狭い重み分布は、LLM の重みを表現するために使用する固定長フォーマットに『ゆとり』を残しています。その固定長をより小さくするための多大な努力が払われてきましたが、各量子化世代ごとにその差は縮まっており、完全に解消されたわけではありません。シャノンエントロピー(Shannon entropy)は、記号あたりに実際に必要なビット数の下限を設定しており、フォーマットによっては、LLM の分布の中にまだ 7% から 30% の不要なビットが残っています。
これは重要です。なぜなら、LLM の推論の多くは、データをある場所から別の場所に転送し、到着した場所で計算を行うことだからです——推論カーネル内の重みと KV キャッシュ(KV cache)、階層間の KV キャッシュ、アクセラレータ間の活性化値と重みなど。これらのシステムにおける最も苛立たしいボトルネックは、*メモリーバウンド*状態にあるときです。つまり、データバスが供給する速度が追いつかないために、計算ユニットがアイドル状態になっている場合です。
私たちが必要としているのは、メモリを計算に変換するトリックです。つまり、総データ転送量を減らし、相手の側で追加の計算を行うことで元の内容を復元することです。ある意味では、これがまさに圧縮解凍の役割です。量子化は一種の圧縮技術44です。量子化の情報理論的な枠組みはシャノンの損失源符号化定理、特にベクトル量子化に基づいています。TurboQuant はこれらのアイデアを実装した最近の取り組みで、嬉しい副産物として復元処理が不要になる点があります。圧縮形式での計算自体が、元の形式よりも効率的だからです。しかし、この副産物は同時に、メモリと計算を交換するわけではないことを意味します。実際には、転送データ量を半分にしつつ、そこで2倍の計算を行える場所へデータを移動しているに過ぎません。
固定長フォーマットはハードウェアにとって素晴らしいものです。これらのフォーマットの背後にある7〜30% の余剰分を取り出すことはできるでしょうか?
脚注§
- 図表内の各低精度モデルがその精度に至った経緯。
DeepSeek-V3.1 (FP8): ウェイトと活性化値に UE8M0 スケールデータフォーマットを用いて FP8 で事前学習。モデルカード。
- MiniMax-M2.7 (FP8): FP8 でトレーニング済み。HF での議論。
- DeepSeek-V4 アテンション (MXFP8) とエキスパート (MXFP4): FP8 で事前学習済み。ポストトレーニング中に MoE エキスパートウェイトに対して MXFP4 量子化対応トレーニングを適用。V4 技術報告書 §3.4。
- GLM-5.1 (FP8): SFT では INT4 QAT を、RL ロールアウトでは FP8 を使用。GLM-5 技術レポート。
- Step-3.5-Flash (FP8): 完全な FP8 モデルとして出荷されましたが、トレーニング精度に関する詳細は論文で軽視されています。Step-3 論文。
- Qwen FP8 ファミリー — Qwen3-14B, Qwen3.5-35B-A3B, Qwen3.5-122B-A10B, Qwen3.5-397B-A17B, Qwen3.6-27B, Qwen3.6-35B-A3B, Qwen3-VL-30B-A3B, Qwen3-VL-235B-A22B: 公開時に微細な FP8 量子化(ブロックサイズ 128)を適用した BF16 モデル。例。
- gpt-oss-20b / 120b (MXFP4): 訓練後のネイティブ MXFP4。gpt-oss-120b。
- Kimi-K2.6 エキスパート (INT4): INT4 量子化意識トレーニング。Kimi-K2-Thinking。
- Nemotron-3-Super-120B (NVFP4): NVFP4 で事前訓練済み。Nemotron-3 Super 技術レポート。
- Nemotron-3-Nano-30B (NVFP4): BF16 から量子化意識蒸留を用いた訓練後の量子化。Nemotron QAD ページ。
原文を表示
If you store a model’s weights in bfloat16, each parameter gets 16 bits.
That’s the budget. The question is whether we’re spending it well.
Information theory gives us a clean way to ask this. Shannon entropy measures
the average information content per symbol in a stream of data. If every
possible byte value appears equally often, entropy is maximal and there’s
nothing to squeeze out. If certain values dominate, entropy drops below the
bit-width, and the difference is waste: bits allocated but carrying no
information.
It’s the kind of question you can just answer empirically.
How?§
We pulled weight files from as many open-weight models as we could get our
hands on 11.Coincidentally, we serve almost all of these models at doubleword - sign up today for 10$ in free tokens. — different labs (Qwen, DeepSeek, Google, OpenAI, Moonshot,
MiniMax, NVIDIA, StepFun, Zhipu), different scales (0.6B up to 1.4T
parameters), different storage formats (BF16, FP8, MXFP8, MXFP4, NVFP4,
INT4) — and computed the Shannon entropy of each weight distribution.
Shannon’s source coding theorem
tells us that the minimum average number of bits needed to represent a single
symbol from an i.i.d. 22.Independently and identically distributed. That trained weights actually look i.i.d. surprised me: you might expect weights with similar roles (functional units within layers, MoE expert groups) to develop coupled distributions, but apparently they specialize without it showing up statistically. source is exactly its Shannon entropy. The gap
between the entropy of a model’s weights and the bits a format actually
allocates is the slack we’re looking for.
Baseline: 16 bits per weight§
BF16 first. BF16 weights carry about 10.6 bits of
entropy per element, out of the 16 the format allocates. A third of the
budget is slack.
Why?
The charts are interactive — click a format chip to toggle its models in or out. Each bar stacks the entropy each field actually carries (sign, exponent, mantissa) against what the format allocates; the grey cap is unused budget, and the percentage above each bar is the total waste. Hover any segment for the per-bit numbers.
Across every BF16 model we measured, the slack is concentrated in one
place. The exponent carries about 2.6 bits of entropy, out of 8
allocated. The mantissa carries roughly 7 of its 7. The sign behaves like
a fair coin — 1 bit out of 1. Of the 16 bits we spend on a BF16 weight,
the only wasteful one is the exponent.
And the gap is remarkably stable. Two orders of magnitude in parameter
count, four labs, different training recipes, and the exponent entropy
lands in a band roughly 0.05 bits wide.
Why the exponent?§
The mantissa uses its full budget; the sign behaves like a fair coin. Only
the exponent has slack. So the question is what, about the way these
weights are distributed, makes the exponent specifically the wasteful
field.
A floating-point number’s exponent is determined by its magnitude — roughly,
log₂|w|. So the entropy of the exponent across a tensor is a direct
function of how spread out the weight magnitudes are. If weights were
distributed evenly across all the magnitudes BF16 can represent, the
exponent would be near-maximally informative and we’d be using all 8 bits.
If they’re all clustered in a narrow magnitude band, most of the 256
possible exponent values never appear, and the entropy collapses.
It turns out they’re clustered. Every trained model we measured has its
weight magnitudes peaked sharply somewhere between 2−72^{-7} and 2−62^{-6} —
a narrow, unimodal shape with a long left tail toward small magnitudes.
Each line is one model. Hue encodes lab; lightness within a hue encodes parameter count within that lab (darker = larger). Solid lines are BF16; dashed lines are quantized formats. Hover any line to see the model.
And it’s not just that each model is narrow — they’re all the *same*
narrow. Shift each distribution by its mean, rescale by its standard deviation, and
(almost) every model collapses onto the same curve.
μ\mu and β\beta are the mean and standard deviation of log2∣w∣\log_2|w| for each model. Weights with ∣w∣<2−16|w| < 2^{-16} are bucketed into a separate “small” bin (visible at the left edge of the magnitude histogram) and excluded from μ\mu and β\beta so a handful of MoE models with dead expert weights don’t distort the collapse.
So the slack in BF16 isn’t sensitive to specific architectural or
training-recipe details. It’s a property of the format combined with a
robust regularity in how trained weights are distributed: BF16’s exponent
is sized for a wider range of magnitudes than any model actually uses.
We’re obviously not the first to notice that less precise number formats
are useful for LLMs — NVIDIA’s headline FLOPS numbers have been doubling
on the back of halving bitwidths for a couple of years now. Do these
narrower formats cut out all the slack?
Half the bits: 8 bits per weight§
The simplest narrower format is FP8. Same three-part structure as BF16,
allocations halved: 1/4/3 instead of 1/8/7.
Format of the diagram stolen from this amazing article & adjusted for bf16.
The recipes that got these models to FP8 are all different — native FP8
pre-training, MXFP8 from QAT during post-training, BF16 plus a fine-grained
quantization pass, others — but the magnitude distribution at the byte
level is the same across all of them.1
FP8 weights carry about 6.5 bits of entropy out of 8, vs BF16’s 10.6 of 16
— roughly 80% of the budget used, vs 66%. So shrinking the format does close
some slack, in absolute terms. Interestingly, it does so by reducing the
precision of the mantissa, and not by reducing the slack in the exponent.
Below the byte floor: 4 bits per weight§
Up to FP8, the magnitude distribution didn’t have to move. Every byte-level
format we’ve looked at — BF16, FP8, MXFP8, Qwen’s block-FP8 — gives the
per-element exponent at least 4 bits, comfortably more than the ~2.6 bits
of entropy the distribution wants. The slack is real but the format absorbs
it; the distribution sits inside whatever budget is available.
FP4 is where this breaks. The per-element exponent has 2 bits — 4 codes
for a distribution that wants something closer to 6. Either the
distribution has to change, or the format has to factor its budget.
Sub-byte formats factor the budget. A per-block scale absorbs the
absolute magnitude of each block of elements, leaving the per-element bits
to cover variation *within* the block 33.MXFP8 and MXFP4 use 32-element blocks with an E8M0 scale (an 8-bit power-of-two exponent). NVFP4 uses 16-element blocks with an E4M3 FP8 scale, plus a single FP32 per-tensor scale on top (double-quantization). Qwen’s block-FP8 uses 128-element blocks with BF16 scales. Moonshot’s INT4 packs four-bit integers with a higher-precision scale per group.. But the per-element budget
stays at 2 bits, and the question simply moves from the global distribution
to the within-block one. Can the model arrange itself so within-block
ranges fit in 2 bits? If so, the distribution adapts. If not, information
is lost.
“Magnitude” here means the *reconstructed* weight: per-element code × block scale (× any tensor scale). Within a single block you’d only see ~8 distinct magnitudes; across thousands of blocks with different scales, those discrete codebooks slide and overlap into the continuous-looking curve.
It adapts. The magnitude histogram for sub-byte models doesn’t sit on the
same curve that BF16 and FP8 do — it’s narrower, often with a
different peak. The distribution that gets you low loss at MXFP4 isn’t the
distribution that gets you low loss at BF16.
So below 8 bits, for the first time, the format is shaping the distribution
rather than the other way around. Up to FP8 the universality of the magnitude
distribution was a property of the model: train under loose enough constraints and the weights
settle into the same shape. Below FP8, the constraint tightens
past the 2.6-bit floor, and the model has to give.
And we can see where the entropy went.
At FP4 the per-element bits get pushed close to saturation. The exponent is
nearly fully used (~1.9 / 2) and the mantissa is fully used (~1 / 1) — the
per-element slack has mostly drained out. What’s left over depends on the
format. MXFP4 keeps a little headroom in both places: the per-element exponent
isn’t quite full, and the per-block scales carry only 0.03–0.10 bits of entropy
out of the 0.25 allocated. INT4 and NVFP4 push the per-element bits all the way
to the floor, and the entire residual lives in the scales — about 0.26 bits per
element out of 0.5 allocated.
Net per-element-plus-scale entropy lands around 93% used across all three
formats, vs ~80% at FP8 and ~66% at BF16. Close to the floor, with the
remaining slack now living in the scales for INT4 and NVFP4, and split between
exponent and scales for MXFP4.
What’s left?§
Narrow weight distributions leave ‘slack’ in the fixed length formats we use to
represent LLM weights. Lots of effort has gone into making that fixed length
smaller, and the gap is closing with each quantization generation — but it
isn’t closed. Shannon entropy sets a lower bound on how many bits per symbol you actually
need, and depending on the format, we’ve still got between 7% and 30%
extraneous bits sitting in our LLM distributions.
That matters because so much of LLM inference is transferring data from one
place to another and then computing on it when it’s there — weights and KV
cache in inference kernels, KV cache between tiers, activations and weights
between accelerators. The most frustrating bottlenecks in these systems are
when you’re *memory-bound*: compute units sitting idle because the data bus
feeding them isn’t fast enough.
The trick we need is to transform memory into compute — to transfer less data
in total, and recover the original through additional computation on the other
side. On some level, that’s exactly what decompression is. Quantization is a
kind of compression44.The information theoretical framing for quantization is Shannon’s lossy source coding theorems, specifically, vector quantization. TurboQuant is a recent implementation of these ideas., with the nice side effect that you don’t need to
decompress: computation in the compressed format is also more efficient than in
the original. But that side effect also means that you never actually trade
memory for compute — you transfer half as much data to a place where you can
do twice as much computation.
Fixed-length formats are great for hardware. Can we get out the last 7–30% of the slack by leaving them behind?
Footnotes§
- How each low-precision model in the chart got to its precision.
DeepSeek-V3.1 (FP8): pre-trained at FP8 using the UE8M0 scale data format on weights and activations. Model card.
- MiniMax-M2.7 (FP8): trained at FP8. HF discussion.
- DeepSeek-V4 attention (MXFP8) and experts (MXFP4): pre-trained at FP8, with MXFP4 quantization-aware training applied to MoE expert weights during post-training. V4 technical report §3.4.
- GLM-5.1 (FP8): INT4 QAT in SFT and FP8 used in RL rollouts. GLM-5 technical report.
- Step-3.5-Flash (FP8): shipped as a full FP8 model; paper is light on training-precision detail. Step-3 paper.
- Qwen FP8 family — Qwen3-14B, Qwen3.5-35B-A3B, Qwen3.5-122B-A10B, Qwen3.5-397B-A17B, Qwen3.6-27B, Qwen3.6-35B-A3B, Qwen3-VL-30B-A3B, Qwen3-VL-235B-A22B: BF16 models with fine-grained FP8 quantization (block size 128) applied at release. Example.
- gpt-oss-20b / 120b (MXFP4): native MXFP4 post-training. gpt-oss-120b.
- Kimi-K2.6 experts (INT4): INT4 quantization-aware training. Kimi-K2-Thinking.
- Nemotron-3-Super-120B (NVFP4): pre-trained at NVFP4. Nemotron-3 Super technical report.
- Nemotron-3-Nano-30B (NVFP4): post-training quantization from BF16 with quantization-aware distillation. Nemotron QAD page.
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み