📏 Numerical Formats & Quantization Precision

大模型权重精度全解
FP32 vs FP16 vs BF16 vs FP8 vs INT4

从“用纳米尺去量卡车长度的算力浪费”,到“用最少比特锁住最高智慧 —— 为什么训练必选 BF16、推理狂飙 FP8/INT4,甚至演化出 1-bit 极限?”

高精度 / 全精度 (FP32)
🔬📐 显微镜级精密·臃肿笨重

每个数字占用 32 位(4 字节)。小数点后有 7 位有效数字,精度极高,但对大模型来说相当于“杀鸡用牛刀”,光存一个 70B 模型就要吃掉 280 GB 显存,显卡带宽不堪重负!

1b符号
8 bits指数位 (Range)
23 bits尾数位 (Precision)
❌ 4 字节/参数 (显存极度膨胀) ❌ 显存带宽与算力利用率极低 ✅ 数值稳定,绝不溢出
VS
现代低位宽量化 (BF16 / FP8 / INT4)
⚡🏎️ 恰到好处·极致轻盈狂飙

大模型具有极强的“抗噪鲁棒性”BF16 保持了与 FP32 相同的动态范围却省下一半显存;FP8/INT4 让每个参数只需 1 字节甚至半字节,吞吐速度直接翻 4~8 倍!

1b符号
8 bits (同FP32)指数位 (不溢出)
7b尾数位
✅ 显存占用骤降 50% ~ 87.5% ✅ GPU Tensor Core 矩阵乘法极速狂飙 ⚡ 智商几乎 0 损失 (无损量化)
💡

5岁核心顿悟:把权重精度想象成“买不同刻度的尺子” 📏

FP32(32位单精度)纳米级激光扫描尺!精确到小数点后好几位,但量一棵大树(大模型)太慢太重;
FP16(16位半精度)普通毫米钢卷尺!轻便一半,但在极小数值时容易“尺子不够长直接爆表(Underflow 溢出)”;
BF16(Bfloat16 谷歌大脑定制)聪明的折叠尺!保留了激光尺的测量跨度(指数位),只切掉了不重要的微米刻度,大模型训练的终极黄金标准
INT4 / FP8(低比特量化)厘米级便携木折尺!每个参数只占几个比特,70B 模型瞬间压缩进普通游戏显卡,速度飞起!

大模型精度的三大硬核秘密

二进制底层结构、动态范围与量化魔法

🧩

1. 浮点数的解剖结构 (S + E + M)

任何浮点数都由三部分构成: $$\text{Value} = (-1)^{\text{Sign}} \times 2^{\text{Exp} - \text{Bias}} \times (1 + \text{Mantissa})$$ • 指数位 (Exponent) 决定数字能有多大/多小(动态范围);
尾数位 (Mantissa) 决定数字有多精准(分辨率)。

🔥

2. 为什么大模型训练独爱 BF16?

大模型训练时梯度变化剧烈,FP16 只有 5 位指数位,极易发生下溢(Underflow 变0)或上溢(NaN 爆炸)。BF16 拥有与 FP32 完全一致的 8 位指数位,彻底消灭了训练过程中的梯度溢出崩溃!

🧙‍♂️

3. 推理为什么要量化到 FP8 / INT4?

大模型推理是显存带宽受限(Memory Bound)任务。将权重从 16 位压缩到 4 位(INT4),GPU 搬运数据的速度瞬间翻 4 倍,显存砍掉 75%,千亿大模型才能在单台服务器上高并发响应。

📊 主流大模型精度全景技术规格表

精度格式 位宽 (Bits / 字节) 结构 (符号+指数+尾数) 70B 模型裸显存 核心应用场景
FP32 (Single) 32 bits (4 Bytes) 1 + 8 + 23 ~ 280 GB 传统科学计算、模型优化器 Master Weights 累计
FP16 (Half) 16 bits (2 Bytes) 1 + 5 + 10 ~ 140 GB 旧款 GPU (V100/T4) 推理与微调,需配合 Loss Scaling
BF16 (Bfloat16) 16 bits (2 Bytes) 1 + 8 + 7 ~ 140 GB 现代大模型预训练与微调的绝对工业标准 (A100/H100)
FP8 (E4M3 / E5M2) 8 bits (1 Byte) 1 + 4 + 3 或 1 + 5 + 2 ~ 70 GB DeepSeek-V3 / H100 原生训练与高速生产级推理
INT4 / Q4 4 bits (0.5 Byte) 整数量化 + Scale ~ 35-38 GB 端侧与个人电脑离线运行 70B 模型主流首选
1-bit (BitNet) 1.58 bits ({-1, 0, 1}) 三值量化 (Ternary) < 15 GB 下一代纯加法计算无乘法(Add-only)极速绿色 AI

🎮 交互模拟器:不同精度对浮点数值的表示与显存损耗

选择不同格式,观察系统如何对同一个权重数值 $W = 0.123456789$ 进行底层二进制编码与硬件调度: