Post
计算瓶颈FP16、FP32、FP64:精度选择背后的工程现实
精度不是数学洁癖,而是吞吐、误差、带宽和可维护性之间的系统级权衡。
讨论精度时,最常见的误区是把它当成一个纯数学问题。实际上它首先是工程问题,因为精度会同时影响速度、显存占用、带宽压力和误差传播。
精度不是越高越好
更高的精度意味着:
- 更大的数据体积
- 更高的带宽压力
- 更低的吞吐
但更低的精度也不是免费午餐,因为它会带来:
- 数值不稳定
- 梯度或中间量崩坏
- 结果不可复现
一个更现实的问法
不该问“该不该用 FP16”,而该问:
- 哪些阶段必须高精度
- 哪些中间量可以降精度
- 误差容忍度在哪里
- 带宽是否已经是第一瓶颈
常见的系统策略
实际工程里更合理的方式通常是混合精度,而不是全局统一精度。也就是说,把精度当成可分层设计的资源。
critical accumulation -> FP32 / FP64
bulk tensor movement -> FP16 / BF16
aggressive inference -> FP8 when validated
我的原则
精度选择必须和性能剖析一起讨论。没有 profile 的精度讨论,大概率只是偏好,不是工程判断。