06. 量化、算子与编译
本篇导读
前五篇已经理解一次请求的计算、状态和调度。本篇进一步优化一次计算的成本:用更少刻度表示数值、减少中间搬运、复用提交过程。以资料助手为例,先观察“材料变小”与“计算更快”为什么不是同一件事,再看权重、KV、算子和编译各自的位置。
一个模型从 BF16 换成 INT4,权重文件明显缩小,却未必更快。存储字节减少,只是加速的一个条件;目标硬件能否高效读取这种布局、反量化和完成矩阵计算,才决定实际收益。
量化用更少的刻度表示数值
把连续温度记录成整数,会丢失小数,但减少存储。量化也在做类似的映射,只是模型不同层、不同通道的范围和敏感度差异很大。常用方案会分组使用 scale,某些还需要 zero point,或者保留敏感层的高精度。
如同用粗刻度尺测长度,原来能区分的细小差别可能落到同一个刻度。上图只演示均匀量化的直觉;实际浮点、分组量化和不同硬件格式有各自的表示规则。
位数越低,每个数可选择的表示越少。究竟影响事实、推理、代码、长上下文还是音频质量,需要真实任务评估;短问答通顺不等于精度已验收。
权重、激活与 KV 是三个对象
| 对象 | 主要节省 | 可能付出的代价 | 验证重点 |
|---|---|---|---|
| 权重量化 | 权重显存、读取字节 | 反量化、布局转换、参数误差 | 任务质量、算子支持、decode |
| 激活量化 | 中间张量与部分计算 | 动态范围、异常值、校准 | 不同输入分布与矩阵形状 |
| KV 量化 | 长上下文状态容量与读取 | scale、读取转换、历史信息误差 | 长上下文、多轮、prefill 与 decode |
W4A16 表示 4-bit 权重、16-bit 激活,不说明 KV 已是 4 bit。FP8、INT8、NVFP4 和 MXFP4 的数值格式、分组和硬件条件不同,不能只按“都是低位”互换。
回到显存计算器,分别调整权重和 KV,可以看到小并发与长上下文服务的收益分布不同。量化元数据和未量化部分会让实际占用高于原始位数下界。
算法、容器、kernel 不是同一个名词
AWQ、GPTQ 是量化方法及相关格式路线;GGUF 和 safetensors 是存储容器;kernel 负责把特定布局真正算起来。一个文件能被读取,不代表引擎拥有最适合该设备的执行路径。
同一量化方案也可能因分组大小、对称性、激活顺序和未量化层不同而不兼容。部署前应核对模型卡、量化配置、设备架构与引擎支持矩阵,不能只看后缀。
算子融合减少中间搬运
原始路径可能分别启动归一化、激活、缩放等 kernel,每一步写回中间结果。融合把相邻操作合到更少的 kernel 中,让中间值更多留在寄存器或片上存储。
收益取决于具体 shape、带宽和寄存器压力。融合过多也可能降低占用率,或限制动态形状。它通常是在实现同一组计算,不会自动改变模型知识或上下文长度。
compile 与 CUDA Graph 各做什么
| 机制 | 改变的部分 | 常见代价 |
|---|---|---|
torch.compile | 捕获和变换图,选择或生成执行 kernel | 编译时间、图断裂、重新编译、兼容性 |
| CUDA Graph | 捕获 GPU 操作及依赖,后续复用提交 | 捕获和预热、额外内存、shape 覆盖限制 |
| Kernel autotune | 为形状和设备选择实现参数 | 首次搜索耗时、缓存与环境依赖 |
小 batch decode 每步很短,CPU 不断提交小 kernel 的开销会更明显,执行图可能减少这部分成本。但启动更快与运行更快是不同指标:首次编译慢的配置,长期运行可能更快;频繁重启的任务又可能更重视冷启动。
排错时可以使用框架提供的 eager 路径帮助判断故障是否来自编译或图捕获。eager 能运行,只说明缩小了问题范围,不能直接作为最终性能结论。
哪些优化会改变计算语义
分页和执行组织主要处理状态与运行方式;量化引入数值误差;剪枝、蒸馏、上下文压缩、稀疏注意力或 KV 淘汰可能进一步改变可使用的信息或模型。不同类型需要不同验收强度。
如果更小的原生模型已满足业务,直接用它可能比复杂量化更易维护。但要以同一质量集比较,不能只凭参数量推断能力。
最小验收闭环
先建立未量化基线,固定模板、采样、长度和硬件。一次只改变一种精度或执行路径,分别记录权重占用、活跃 KV、峰值显存、TTFT、decode、吞吐和质量。覆盖短任务、长输入、多轮、结构化输出,以及量化可能敏感的数字与边界样例。
出现退化时,先确认不是模板、停止条件或输出长度变化,再定位精度和 kernel。保留可回退的权重与镜像;“安装成功”和“模型能答一句”都不足以作为上线验收。
本篇回顾
- 量化减少表示成本,也引入数值误差;权重、激活、KV 要分别确认。
- 算子融合减少中间搬运,编译与执行图改善执行组织和提交;它们不是同一个开关。
- 文件更小不保证回答更快,质量、kernel、形状和真实瓶颈共同决定收益。
现在优化了每轮怎么计算。下一篇换一个角度:能否先写一段草稿,让大模型一次检查多个位置,减少串行轮次? 进入推测解码。
