微缩放格式(Microscaling,MX)是一类低比特数值表示法:把若干浮点数分成一组,整组共享一个缩放因子,让每组数都能落到低比特格式能表示的区间里。MXFP4 是其中每 32 个元素共享一个 8 比特缩放因子、每个元素 4 比特的成员。
4 比特浮点本身能表示的数值很少。MXFP4 用的元素格式 E2M1,正数只有 0、0.5、1、1.5、2、3、4、6 等几档。如果整张权重矩阵共用一个缩放因子,几个离群值就会把其余数挤到很粗的刻度上。微缩放的做法是分块:每 32 个数打包成一个小块,给这一块单独配一个缩放因子。缩放因子用 E8M0,也就是 2 的整数次幂。存的时候看这 32 个数在什么数量级,选一个合适的 2 的幂把它们拉到 E2M1 的刻度附近;算的时候再乘回去。
好比仓库里每 32 个箱子共用一张重量校准表,而不是整个仓库共用一张。32 个箱子只多带一张表,平均每个箱子只多花 0.25 比特。MXFP4 的账就是:32×4 比特元素 + 8 比特缩放因子 = 136 比特,平均每元素 4.25 比特。
对比常见做法:
| 做法 | 缩放粒度 | 每元素平均比特 | 缩放因子 |
|---|---|---|---|
| per-tensor INT8 | 整个张量 | 8 | 通常 FP32 |
| per-channel INT8 | 每个通道 | 8 | 通常 FP32 |
| NF4(常见实现) | 每 64 个元素 | 约 4.1 | FP32/FP16 |
| FP8 | 每个元素自带指数 | 8 | 通常无共享缩放 |
| MXFP4 | 每 32 个元素 | 约 4.25 | E8M0,2 的幂 |
关键差别在粒度:per-tensor 太粗,遇到离群值整张图吃亏;per-channel 好一些,但通道内仍可能有数量级差异。NF4 也做块级量化,但走非线性分位点;MXFP4 是标准浮点加共享指数,硬件更容易做,精度上比全局缩放稳。
对从业者,大模型推理的瓶颈常是显存容量和带宽,不是算力。把权重和激活压到 4 比特附近,同样一张卡能放更多参数,搬数据压力更小,矩阵乘吞吐更高。微缩放让 4 比特从“理论格式”变成“工程可用”。精度仍取决于模型、校准数据和内核;某款硬件是否支持 MXFP4、支持到什么程度,以厂商官方页面为准。
对普通人,端侧设备跑模型会更省内存、省电,云端推理的单位算力成本也有望下降;手机里能塞下更大的模型、响应更快,背后可能就有微缩放的功劳。
一句话:MXFP4 用每 32 个数共享一个 2 的幂缩放因子,让 4 比特浮点真正可用。
