模型数值精度
下载模型时,常会看见 FP32、FP16、BF16、INT4。同一个模型,文件大小可以相差好几倍,输出也可能略有变化。它们改动的第一件事很具体:用多少个二进制位,怎样保存模型里的每一个数。
这个系列沿着一个数走六步:先看怎样存,再比较能存多大、分得多细,然后观察误差怎样进入计算,最后理解混合精度和量化。只需会小数、乘法与加法,可以直接从第一篇开始。
有限的位,怎样装下一个数
想象一把刻度尺。刻度密,能分清相邻的小差别;量程大,能容纳更大的数。浮点数这把尺的刻度还会随数量级变化,越大的数之间通常隔得越远。计算机给一个数分配的位数有限,浮点格式要在量程和刻度之间分配这份预算。FP16 与 BF16 都占 16 位,差别就在这份预算怎样分。
保存 1.0351 | 每个数占用 | 读回的数值 |
|---|---|---|
| FP32 | 4 字节 | 约 1.0350999832 |
| FP16 | 2 字节 | 1.03515625 |
| BF16 | 2 字节 | 1.03125 |
FP16 与 BF16 都只用一半空间,读回的小数却不同。后面的文章会把这张对照表里的每个差别推导出来。
按名称查看存储结构
常见数值格式存储图解把 FP32、FP16、BF16、FP8、FP4、INT8、INT4 等逐个拆开:每种格式都有自己的字段图、位编号、编码例子和读回过程。NF4、MXFP4、NVFP4 与 GGUF 量化块也放在这里,方便遇到名称时随手查阅。
第一次学习,可以继续按下面六篇读;想先弄清某种格式的位怎样分,就直接进入图解。
从表示方式读到计算结果
01—03:先把一个数看明白
01. 数字怎样存进计算机从 0 和 1、字节与二进制小数讲起,亲手把 1.25 拆成浮点编码。
02. FP32、FP16 与 BF16比较三种格式的范围、刻度和空间。读完能解释:为什么同样是 16 位,BF16 能存更大的数,FP16 却能在 1 附近分得更细。
03. 舍入、溢出与计算误差在数轴上切换格式,观察 1.0351 落在哪个刻度,再看小增量为什么会在连续相加时消失。
04—06:再把数字放回模型
04. 混合精度怎样计算从一次乘加认识权重、激活和累加,解释为什么同一模型会同时使用 BF16 和 FP32。
05. FP8、FP4 与整数量化用一组具体数值理解缩放因子,再比较浮点和整数刻度,读懂 W4A16、INT8 和分组量化。
06. 怎样选择与验证精度比较各类精度省下什么、付出什么代价,区分训练、推理和长对话的选择,再用 70 亿参数的显存预算案例和对照实验完成判断。
学完这六篇,看到一个精度名称,就可以继续问清楚:它用在哪些数上,保留多少范围与细节,计算时怎样累加,最终节省了什么、改变了什么。先从数字怎样存进计算机开始。
