← 返回笔记列表
AI 技术与原理 第 21 / 28 篇

AI 原理学习笔记(二十一):量化、显存与推理性能怎样估算

查看“AI 技术与原理”专题目录(21/28)
本文目录 11 个小节

返回系列导读 · 先修:KV Cache、LoRA

1. 模型参数量不是完整硬件需求

“7B”通常表示约 70 亿参数,不是 7GB。参数需要按数值格式保存:

Mweight≈N×sM_{\text{weight}}\approx N\times s

NN 是参数个数,ss 是每参数平均字节数。70 亿参数按 FP16 每个 2 字节,裸权重约 140 亿字节,即 14GB,约 13.04GiB。

这只算了裸权重,不包含 KV Cache、激活、运行框架、临时缓冲与碎片。显卡刚好有 14GB,并不保证就能正常服务。

2. 不同数值格式在取舍什么

格式理论元素大小先理解什么
FP324 字节常见单精度浮点
FP162 字节精度与范围都比 FP32 有所取舍
BF162 字节指数范围较宽,尾数精度较低
INT81 字节常需缩放、零点等量化信息
INT4半字节两个值可打包进一字节,另有元数据

FP16 与 BF16 大小相同,不意味着数值特性相同。INT4 的半字节也只是理论数值存储,实际文件还包含 scales、分组信息和未量化部分。

存储格式与计算格式可以不同。低位权重读出后,可能转换为合适精度参与计算。

3. 量化可以怎样理解

把连续的数映射到有限刻度。例如刻度间隔为 0.1,0.26 可近似为整数 3,再还原成 0.3。

一种常见仿射量化写法:

q=clip⁡(round⁡(x/s)+z),x^=s(q−z)q=\operatorname{clip}\left(\operatorname{round}(x/s)+z\right), \qquad \hat x=s(q-z)

ss 是 scale,zz 是 zero point。clip 限制整数范围。对称量化可能取合适的零点约定,非均匀量化则不是这套等间隔刻度。

范围选得太宽,小值分辨率差;选得太窄,大值会被截断。离群值、每张量/每通道/每组不同尺度,都会影响误差和存储。

量化不是“无损压缩”。应检查生成质量、关键数字、长文、工具参数与边界任务,而不只看几段聊天是否流畅。

4. PTQ、QAT、剪枝与蒸馏

PTQ在已有模型上做训练后量化,有些方法需要校准样本。校准集应代表实际输入,并与最终测试管理清楚。

QAT在训练中考虑量化影响,使参数适应相应误差。通常比直接转换更复杂。

剪枝减少部分权重、通道或模块。非结构化的稀疏零值不必然带来速度提升,需要硬件和内核支持。

蒸馏让学生学习教师的输出或中间信息,用更小模型承担任务。它与数值量化可以组合,但含义不同。

选择优化方法时,要说明省的是模型存储、显存、计算、访存、通信还是调用次数。

5. 推理显存的完整账

教学拆分:

Minference≈Mweight+MKV+Mactivation/workspace+MruntimeM_{\text{inference}} \approx M_{\text{weight}}+M_{\text{KV}}+ M_{\text{activation/workspace}}+M_{\text{runtime}}

权重在多个请求间常可以共享,KV Cache 通常随驻留请求、长度和结构增长。并发与长上下文可能让缓存成为显存大项。

不同请求长度不同时,应按实际驻留 Token 或合理高分位负载估计,不能只用平均输入长度做极限容量承诺。

6. 训练还多了哪些内容

训练常增加梯度与优化器状态。举一个明确配置假设:低精度权重 2 字节、低精度梯度 2 字节、FP32 主权重 4 字节、Adam 两个 FP32 状态共 8 字节,每参数合计约 16 字节。

70 亿参数对应约 112GB,还没加激活和工作区。这只是该假设的乘法,不代表所有训练实现都使用这套配置。

分片、offload、低精度优化器和 PEFT 会改变内存分布;梯度检查点通过重算部分前向过程减少保存激活,通常以更多计算换内存。

7. 算得慢,还是搬得慢

先分清硬件角色:CPU 擅长通用控制与较复杂分支,GPU 通过大量并行计算单元处理适合并行的工作,NPU 是面向神经网络等计算设计的加速器类别。它们都要依赖软件、内存、算子与数据搬运配合;名字里有 AI 不等于任何任务都会更快。

算力用 FLOP/s,数据传输能力用 byte/s。别把一次运算量 FLOPs 与每秒运算能力 FLOP/s 混淆。

算术强度是每搬运一字节做多少运算。若每次只做少量运算,却要读取很大的权重或缓存,可能受内存带宽限制;若可复用数据且运算很多,可能更受计算吞吐限制。

简化下界可以写:

t≳max⁡(FCeffective,QBWeffective)t\gtrsim\max\left(\frac{F}{C_{\text{effective}}}, \frac{Q}{BW_{\text{effective}}}\right)

FF 是运算量,QQ 是搬运量。实际还包括同步、调度、网络、算子效率等开销,有效性能常低于标称峰值。

Prefill 与 Decode 的典型瓶颈不同,但要结合批量、长度、架构和硬件测量,不能只背“某阶段永远只受某一种限制”。

8. Batch、并发与并行

批处理把多个请求的运算集中,提高复用与利用率,但可能增加等待。并发是同时有多个请求,不等于它们所有计算都在同一瞬间执行。

常见并行包括:

  • 数据并行:各副本处理不同数据,训练时同步相应更新。
  • 张量并行:一个层的计算拆到多卡。
  • 流水并行:不同层组分到不同设备。
  • 专家并行:MoE 的专家分布到不同设备。

多卡会增加通信与调度。两张卡不保证比一张正好快两倍。

9. 怎样验证优化收益

固定模型、输入输出长度、并发、硬件和精度,比较质量、TTFT、TPOT、吞吐、P95、峰值显存与失败率。

预热与冷启动分开,模型加载不混入所有稳定请求;若真实业务经常冷启动,则应另报其体验。

不要只用理论权重大小宣布“能跑”。最终以对应负载的实测为准,并保留余量。

复习卡片与自测

  • 参数量乘每元素字节,只得到一部分内存。
  • 量化减少数值存储并引入误差,是否加速取决于实现。
  • 训练显存与推理显存不同。
  • 算力峰值不是实际端到端吞吐。

1. INT4 权重是 FP16 的四分之一,完整显存也一定如此吗?

参考答案不一定。缓存、激活、元数据、未量化模块和运行缓冲不必同比例缩小。

2. 把很多权重置零,为什么可能没变快?

参考答案若仍由稠密内核计算,零值并不会自动减少实际执行的工作;需适合的稀疏模式与硬件支持。

3. 增加 batch 为什么可能提高吞吐却降低体验?

参考答案总处理量可能提高,但单个请求要等待组批或共享资源,延迟可能增加。

原文定位

依据:原资料 4.14、13.1—13.2、13.5—13.6。更深入的底层分析可沿 CANN 硬件与算子基础继续学习。

继续学习本专题