两种 16 位精度
FP16 与 BF16 的显存占用相同,区别在位段分配:BF16 指数位宽大、数值范围广,溢出风险低,适合现代大模型;FP16 尾数位更多,精度略高,但在部分模型与场景存在溢出风险。选哪一个主要取决于算力代际与模型自身的配置。
基本信息
| 显存占用 | 两者相同(均为 16 位) |
|---|---|
| BF16 | 范围大、溢出与 NaN 风险低 |
| FP16 | 尾数多、精度略高 |
| 硬件前提 | 图灵及更早的卡多数不支持 BF16 |
| 服务端参数 | --dtype bfloat16 等 |
典型使用场景
- 新卡上默认选 BF16,降低溢出与 NaN 风险
- 老卡或不支持 BF16 的算子只能走 FP16
- 对比两种精度对业务输出的实际影响
- 排查推理出现 NaN 或异常值时,先核对精度选择
- 混合部署时确认哪些环节仍走 FP32,避免以为整条链路都降了精度
指定精度
指定精度
vllm serve <模型路径> --dtype bfloat16
# auto 会按模型配置选择;可用取值见版本文档
# 老卡上先确认是否支持 BF16,再决定要不要显式指定精度选择对照
| 精度 | 数值范围 | 适用场景 |
|---|---|---|
| BF16 | 大 | 新代 GPU 上的默认选择 |
| FP16 | 较小 | 老卡或不支持 BF16 的场景 |
| FP32 | 最大 | 精度敏感任务或排障对照 |
算力代际影响支持情况:图灵及更早的卡多数不支持 BF16,选卡与选精度要放在一起确认,不要分开定。
验证方法:同一提示集用两种精度各跑一版,对比输出一致性与吞吐;多数模型上业务可感知的差异有限,但数值敏感任务要单独评估。
模型自带的 config 里通常已声明推荐精度:先用 auto 让它按配置走,只有需要覆盖时才显式指定。
同一次发布里不要既换精度又换引擎版本:两个变量叠在一起,性能与质量的变化都无法归因,回退时也不知道该退哪一个。