数值精度、显存与推理优化题¶
这类题很适合区分“只懂模型结构”和“能做工程落地”。回答时要把 dtype、字节数、显存来源、吞吐和延迟讲清楚。
如果想先建立从硬件、kernel、框架到推理服务的全局图像,可以先读 大模型 Infra 全景:从硬件到服务。本页重点把其中的数值精度、显存和推理优化拆成代表题。
题目:FP32、FP16、BF16 的主要区别是什么?¶
来源背景:华为 / 字节大模型训练和推理工程题改写。
考点定位:浮点格式、动态范围、精度。
先给结论:
- FP32 稳定但占显存多。
- FP16 精度和范围都更小,容易 overflow / underflow。
- BF16 指数位和 FP32 一样多,动态范围大,更适合大模型训练。
解题思路:
| 格式 | 字节 | 特点 |
|---|---|---|
| FP32 | 4 | 稳定基准 |
| FP16 | 2 | 快、省显存,但范围窄 |
| BF16 | 2 | 范围大,尾数少 |
大模型训练常用 BF16,因为梯度和激活的数值范围可能很宽。
易错点:
- BF16 不是比 FP16 更“精细”,它是动态范围更大。
- 低精度训练通常仍保留一些 FP32 状态,例如 optimizer state。
关联阅读:数值精度。
题目:为什么 FP16 训练需要 loss scaling?¶
来源背景:混合精度训练面试题改写。
考点定位:underflow、梯度缩放、反向传播。
先给结论:FP16 能表示的很小数有限,小梯度可能下溢为 0。loss scaling 先把 loss 放大,让梯度落在可表示范围内,更新前再缩回来。
解题思路:
若原 loss 为 \(L\),缩放后:
反向传播得到:
optimizer 更新前再用:
易错点:
- loss scaling 不改变真实优化目标。
- 如果缩放太大导致 overflow,需要动态降低 scale。
- BF16 因为动态范围大,通常不需要同样程度的 loss scaling。
关联阅读:数值精度。
题目:一个 7B 参数模型用 FP16 权重大约占多少显存?¶
来源背景:大模型部署估算题改写。
考点定位:参数量、dtype、GB/GiB。
先给结论:只算权重:
解题思路:
FP16 每个参数 2 bytes。显存估算先从权重开始,再加:
- KV cache。
- activation。
- framework workspace。
- CUDA kernel 临时 buffer。
- 如果训练,还要加梯度和 optimizer state。
易错点:
- 推理显存不等于权重显存。
- 训练显存远大于推理显存。
- GB 是 \(10^9\) bytes,GiB 是 \(2^{30}\) bytes。
关联阅读:数值精度。
题目:KV cache 显存怎么估算?¶
来源背景:大模型推理优化高频题改写。
考点定位:KV cache、序列长度、batch size、层数。
先给结论:
解题思路:
其中:
- \(2\):K 和 V 两份。
- \(L\):decoder 层数。
- \(B\):batch size。
- \(h\):head 数。
- \(N\):上下文长度。
- \(d_h\):每个 head 的维度。
因为 \(h d_h=d_m\),也可以写成:
易错点:
- KV cache 随上下文长度线性增长。
- 多用户并发时 batch 维也会增加。
- GQA / MQA 会减少 K/V head 数,显著降低 cache。
关联阅读:KV Cache、大模型 Infra 全景。
题目:INT8 量化为什么能加速推理?¶
来源背景:模型部署和推理优化题改写。
考点定位:量化、内存带宽、矩阵乘法。
先给结论:INT8 把权重或激活从浮点数压缩到 8-bit,减少显存和内存带宽,并可利用硬件 INT8 矩阵乘加加速。
解题思路:
简单对称量化:
其中 \(s\) 是 scale。
量化收益:
- 权重体积约为 FP32 的 1/4。
- 相比 FP16 也可约减半。
- 更少数据搬运通常提升吞吐。
易错点:
- 量化不一定总加速,取决于硬件和 kernel。
- 激活 outlier 会影响量化误差。
- 训练后量化和量化感知训练效果不同。
关联阅读:数值精度。
题目:吞吐和延迟有什么区别?¶
来源背景:线上推理系统面试题改写。
考点定位:系统指标、batching、服务优化。
先给结论:延迟是单个请求等待多久;吞吐是单位时间处理多少请求或 token。
解题思路:
- latency:用户等待时间。
- throughput:tokens/s 或 requests/s。
增大 batch 往往提高吞吐,但可能增加单请求延迟。LLM 服务常通过 continuous batching 平衡两者。
易错点:
- 只看 tokens/s 不够,交互式应用还要看首 token 延迟。
- batch 太大可能被 KV cache 或显存限制。
关联阅读:KV Cache。
题目:Softmax 为什么容易有数值问题?¶
来源背景:深度学习数值稳定题改写。
考点定位:指数溢出、log-sum-exp。
先给结论:softmax 需要计算指数,logit 很大时 \(e^x\) 可能 overflow;通常先减最大值。
解题思路:
令:
则:
数值更稳定。
易错点:
- 数学等价不代表数值实现等价。
- attention score、classification logits、language model logits 都可能遇到这个问题。
关联阅读:数值精度。
题目:推理时为什么可以用比训练更低的精度?¶
来源背景:模型部署面试题改写。
考点定位:训练 / 推理差异、梯度、鲁棒性。
先给结论:推理只做 forward,不需要保存反向传播中间量和 optimizer state,对小数值误差通常更鲁棒,因此可以更激进地使用低精度或量化。
解题思路:
训练需要:
- 参数。
- 激活。
- 梯度。
- optimizer state。
推理主要需要:
- 参数。
- 当前激活。
- KV cache。
所以推理更适合使用 FP16/BF16/INT8/INT4。
易错点:
- 低精度可能损害小模型、长上下文或数学推理任务。
- 量化前后需要评估任务指标。
关联阅读:数值精度。