INT4 和 FP4 的数学表示范围
·
INT4 和 FP4 的数学表示范围
核心区别:
INT4:本身只表示整数,真实范围靠 scale 决定
FP4:本身带指数,裸值就有非均匀动态范围,也仍然要配合 scale
1. INT4 的裸编码范围
常见 INT4 有三种:
| 类型 | 4 bit 原始整数范围 | 说明 |
|---|---|---|
| unsigned INT4 / UINT4 | [0, 15] |
无符号 |
| signed INT4 / two’s complement | [-8, 7] |
有符号二补码 |
| symmetric INT4 量化常用 | [-7, 7] |
为了正负对称,常不用 -8 |
在大模型权重量化里,常用的是:
q ∈ [-7, 7] 或 [-8, 7]
真实数值不是 q 本身,而是:
x ≈ scale × q
或者带 zero point:
x ≈ scale × (q - zero_point)
例如:
scale = 0.1
signed INT4 [-8, 7] → 真实范围 [-0.8, 0.7]
如果:
scale = 2
signed INT4 [-8, 7] → 真实范围 [-16, 14]
所以:
INT4 的真实动态范围不是固定的,是由 scale 决定的。
2. FP4 / NVFP4 的裸编码范围
现在大模型里常说的 FP4,尤其 NVIDIA Blackwell 的 NVFP4,通常是 E2M1:
1 bit sign
2 bit exponent
1 bit mantissa
也就是:
S E E M
FP4 E2M1 的裸值集合是:
{+0, +0.5, +1, +1.5, +2, +3, +4, +6,
-0, -0.5, -1, -1.5, -2, -3, -4, -6}
所以裸范围是:
[-6, 6]
注意:这不是连续范围。它只能表示这些离散点。
3. INT4 和 FP4 的关键差别
| 格式 | 裸值范围 | 裸值分布 | 是否有指数 | 真实范围由什么决定 |
|---|---|---|---|---|
| INT4 signed | [-8, 7] |
等间距整数 | 无 | scale |
| INT4 symmetric | [-7, 7] |
等间距整数 | 无 | scale |
| FP4 E2M1 / NVFP4 | [-6, 6] |
非均匀:越大间隔越大 | 有 | FP4 值 × block scale × global scale |
INT4 是线性的:
-7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7
FP4 是非线性的:
-6, -4, -3, -2, -1.5, -1, -0.5, -0,
+0, +0.5, +1, +1.5, +2, +3, +4, +6
也就是说:
INT4 的刻度是均匀的;FP4 的刻度是不均匀的。
4. 为什么 FP4 比 INT4 更适合某些大模型路径?
神经网络里的数值分布通常不是均匀的:
大多数值接近 0
少数值比较大
INT4 是等间距:
0, 1, 2, 3, 4, 5, 6, 7
FP4 E2M1 是非等间距:
0, 0.5, 1, 1.5, 2, 3, 4, 6
FP4 给小值保留了一定相对精度,同时还能用指数覆盖更大的幅值。
再叠加 block scale 后,它可以更灵活地适配每个 block 的动态范围。
NVFP4 的真实值可以理解成:
x = x_e2m1 × s_block × s_global
其中:
x_e2m1 :4-bit E2M1 值
s_block :局部 block scale
s_global:整个 tensor 的 global scale
5. 最简洁结论
INT4 signed 裸范围:[-8, 7]
INT4 symmetric 常用范围:[-7, 7]
UINT4 裸范围:[0, 15]
FP4 E2M1 / NVFP4 裸范围:[-6, 6]
可表示值:
0, ±0.5, ±1, ±1.5, ±2, ±3, ±4, ±6
真正用于大模型时:
INT4 真实值 ≈ INT4 整数 × scale
FP4 / NVFP4 真实值 ≈ FP4_E2M1 值 × block_scale × global_scale
一句话:
INT4 是等间距整数格点;FP4 是带指数的非均匀浮点格点。A800 有 INT4 Tensor Core 路线,但没有 Blackwell 那种 NVFP4 / FP4 原生 Tensor Core 路线。
更多推荐


所有评论(0)