05. Runtime Quantization Paths | 运行期量化路径
学习问题
本节回答三个相互关联但不能混为一谈的问题:激活表示、FP8 计算路径和 KV Cache 状态分别改变什么;硬件、执行后端和上下文长度如何改变选择。
输出不是笼统的“低精度有效”,而是三类独立候选:激活量化、FP8 执行和 KV Cache 量化,各自记录对象、缩放因子、计算内核或缓存行为、质量与资源证据。
核心机制
三条路径都会减少某类数据的字节数,但改变的对象和阶段不同:
- 激活量化处理层间张量范围、异常值和矩阵乘输入;
- FP8 依赖硬件、缩放因子与计算内核,改变低精度计算路径;
- KV Cache 量化压缩请求生命周期中的追加状态,主要影响长上下文和并发预算。
它们都不同于只改变权重驻留的仅权重量化路线,不能共用一份执行结论。
选择运行时低精度路径前,先确认:
- 当前瓶颈来自执行栈,还是来自缓存预算。
- 硬件是否已经原生支持 FP8。
- 长上下文和并发是否已经使 KV Cache 成为第一约束。
激活量化需要在异常值与执行收益之间取舍;FP8 需要硬件和计算内核栈配合;KV Cache 量化能扩大上下文和并发预算,但会增加状态量化、读取和质量风险。
运行时路径
激活量化先改变中间张量的表示,再决定 FP8 是否能沿着硬件和计算内核路径执行;KV Cache 量化则改变请求生命周期中 K/V 状态的存储与读取方式。三者都可能减少字节数,但影响的阶段不同:激活量化影响算子间状态,FP8 影响执行路径,KV Cache 量化集中在解码阶段的缓存读写。权重量化与 KV Cache 量化可以同时出现,但必须分别记录容量和质量,组合收益不能直接相加。
| 路线 | 主要对象 | 关键变量 | 需要对齐的工作负载 |
|---|---|---|---|
| 激活量化 | 中间激活与矩阵乘输入输出 | 校准、缩放因子、异常值、累积精度 | prefill / decode、输入长度、输出长度 |
| FP8 | 权重、激活或矩阵乘输入输出 | 缩放、硬件能力、计算内核、混合精度边界 | prefill / decode、输入长度、输出长度 |
| KV Cache 量化 | 每个请求的 K/V 状态 | 缓存数据类型、量化粒度、更新与反量化位置 | 上下文长度、并发、前缀共享、TPOT |
选择条件与验证证据
- 先判断主要约束来自激活范围、低精度计算路径,还是缓存预算。
- 激活异常值或层间搬运是主因时,先看激活量化与平滑。
- 执行栈和硬件支持是主因时,验证 FP8。
- 长上下文和高并发预算是主因时,验证 KV Cache 量化。
- 最后在真实请求链路和容量账本中验证综合效果。
运行时状态如何变化
运行时低精度的关键不只是位宽,还包括缩放因子由谁计算、何时更新,以及读取时在哪里恢复精度:
| 状态 | 量化参数通常在哪里产生 | 读取 / 计算时需要确认什么 |
|---|---|---|
| 激活 | 校准阶段或运行时统计 | 缩放因子是否覆盖当前输入,累积精度是否足够 |
| FP8 输入 / 权重 | 模型配置、历史统计或动态缩放因子 | Tensor Core 路径、累积数据类型、回退路径 |
| KV Cache | 缓存初始化或按块 / 按 Token 更新 | 量化粒度、反量化位置、缓存读写开销 |
证据层级
同样的低比特表示在离线张量误差上可接受,进入长上下文服务后仍可能出现 TPOT、质量或并发收益不稳定。激活范围主导误差时检查平滑与累积精度;计算路径是主因时检查 FP8 计算内核;长上下文容量是主因时检查 KV Cache 粒度、读写成本与质量。完成局部机制验证后,使用 06 产物、执行与工作负载决策检查加载、执行和工作负载证据。
| 证据层级 | 能回答什么 | 不能替代什么 |
|---|---|---|
| CPU / 数值模拟 | 缩放因子、量化误差、字节数、KV Cache 账本 | 真实计算内核、显存和服务延迟 |
| GPU 环境预检 / 局部机制基准测试 | FP8 数据类型、缩放因子、Tensor Core 候选路径是否可运行 | 目标服务执行后端的完整行为 |
| 执行后端基准测试 | 缓存分配、TTFT、TPOT、并发、质量和回退路径 | 不同工作负载下的泛化结论 |
