同一个开源大模型,下载页面里常给出 FP16、BF16、INT8 好几个版本,体积能差出一倍。这些字母数字说的是权重精度:模型的每个参数用多少位二进制来记录。位数越多记得越细,文件越大、越吃显存;位数越少越省资源,但记数会有误差。
生活里最接近的类比是体重秤的刻度。能精确到 0.1 公斤的秤,读数比只标整数档的秤更细;后者省地方,但抹掉了细节。模型参数同理,FP16 像精细刻度,INT8 像粗刻度,每个数字占的存储空间直接减半。
这个类比有一处失效:体重秤只称一次,模型要对几十亿个参数反复做加减。单个参数的舍入误差很小,几十亿次运算叠在一起,粗刻度的偏差才真正需要权衡——所以低精度不能闭眼选,要看任务能不能容忍。
FP16 和 BF16:同为 16 位,分家在指数上
FP16 把 16 位拆成 1 位符号、5 位指数、10 位尾数,能表示的数值范围较小,训练大模型时容易溢出。BF16 保持 16 位总长,把指数位加宽到 8 位,范围和 32 位浮点几乎一致,代价是尾数变短、精度略降。近几年的开源模型(例如通义千问的基座版本)训练时多默认 BF16,因为对训练来说,数值范围稳,比每个数字多几位尾数更要紧。
给你的判断:新显卡跑训练或微调,优先找 BF16 权重;只做推理且显卡较老,FP16 兼容面更广。具体支持情况以显卡官方规格为准。
INT8 和更低:省下来的都是实打实的资源
INT8 用 8 位整数近似原来的 16 位数值,模型文件和显存占用大约减半,一个 7B 模型从约 14GB 降到 7GB 上下。代价是要经过一步量化校准,压得越狠、误差越大。更低的 4 位格式还能再省,但小模型压到极低档位后,回答质量的下滑会比较明显。
四个档位摆在一起,差别就落在位数、字节数和误差上。
| 精度格式 | 位数构成 | 每参数占用 | 代价 | 适合的场合 |
|---|---|---|---|---|
| FP16 | 16 位:1 位符号、5 位指数、10 位尾数 | 2 字节,7B 模型约 14GB | 数值范围较小,训练大模型时容易溢出 | 只做推理、显卡较老,兼容面更广 |
| BF16 | 16 位:指数位加宽到 8 位,尾数变短 | 2 字节,7B 模型约 14GB | 尾数变短、精度略降 | 新显卡跑训练或微调,数值范围稳 |
| INT8 | 8 位整数,近似原来的 16 位数值 | 1 字节,7B 模型约 7GB | 要过一步量化校准,压得越狠误差越大 | 显存吃紧时选现成量化版本,提速看硬件 |
| 4 位及更低 | 比 8 位整数再压一档 | 比 INT8 更省 | 小模型压到极低档位,回答质量下滑明显 | 显存极度紧张时才考虑 |
在 ModelScope 这类模型仓库挑文件时,文件名里的精度标记和 safetensors 这样的格式名常并排出现:前者管每个数记多细,后者管文件怎么组织存放。想弄清后者,看站内safetensors一文就够。
显存账怎么估:一个参数占几个字节
有个粗略口诀:参数量乘以每参数字节数。FP16/BF16 每参数 2 字节,INT8 每参数 1 字节,7B 模型据此分别是 14GB 和 7GB,再给运行时的中间结果留出余量。口诀不精确,但足够你在下载前判断自己的显卡带不带得动。
训练途中保存的检查点,体积同样随精度变化——精度减半,存档文件也跟着变小。检查点本身是什么、为什么训练离不开它,见站内检查点一文。
拿到一个模型页,先看精度再看显卡
打开模型详情页,先确认权重精度档位你的硬件是否支持,再看官方有没有发布现成的量化版本。经验法则是:能用官方发布的精度,就不必自己再压一遍;确有显存压力,再选量化版本,并拿几组你自己的典型问题实测效果。
把线索串起来:精度决定文件大小和显存下限;检查点决定训练进度怎么存;而那些只负责把文本变成向量的嵌入模型,对精度的敏感度又是另一番光景,各有各的讲究。
精度速查表
- FP16:每参数 2 字节,老显卡兼容性好,推理通用档;
- BF16:每参数 2 字节,数值范围大,训练和微调更稳;
- INT8:每参数 1 字节,体积显存约减半,提速看硬件;
- 自查一句:先查显卡规格再下载,文件名里的精度标记比文件大小更该先看。
读者对权重精度的常见疑问
- FP16 的模型还能再压成 INT8 吗?:可以,这一步叫量化,多数推理工具都支持,但压完要用你自己的问题重测效果,小模型的损失更明显。
- 精度越低推理就越快吗?:通常如此,它占用更少的显存和带宽,但提速幅度取决于硬件对低精度运算的原生支持。
- 显卡不支持 BF16 怎么办?:老显卡强行跑可能报错或自动回退,此时换 FP16 权重更稳妥,支持列表以官方资料为准。


