Skip to content

量化与压缩正文

量化不是“把模型改成更小的 dtype”这么简单。一个可用的量化方案,必须同时回答七个问题:压缩了什么对象、误差从哪里来、在什么时候介入、由什么方法或格式表达、由哪个 backend 执行、在目标 workload 下表现如何,以及是否值得采用。

本专题正文采用下面的判断链:

压缩对象 → 误差来源 → 介入时机 → 方法 / 格式 → backend 执行路径 → workload 验证 → 部署决策

它用于组织不同 Notebook 和项目节之间的关系,不把理论估算、CPU 模拟或单次加载结果写成完整的部署结论。

先定位问题

现象首先检查下一步不应直接推出的结论
权重装不进目标显存权重 dtype、量化粒度、额外 scale / zero-point 和加载峰值先做 W8A16 或权重-only 方案,再检查 backend文件变小就一定能加载成功
量化后质量下降校准数据、敏感层、误差分布和评测口径比较 PTQ、GPTQ / AWQ、QAT 或低比特适配bit 数越低,质量一定越差或一定可接受
量化后没有变快反量化位置、低比特 kernel、硬件支持和 backend 路径用固定 workload 分解 prefill、decode、端到端时间显存减少必然带来吞吐提升
长上下文或并发受限KV cache dtype、序列长度、请求数和 cache 管理单独评估 KV cache quant 与调度策略权重量化会自动解决 KV cache 压力
量化模型可以加载但不适合上线格式、算子实现、质量、延迟和运维复杂度运行同口径 baseline / candidate benchmark能加载等于适合生产部署

量化决策的起点应是约束,而不是算法名称。相同的 INT4 可能只改变权重存储,也可能在运行时触发反量化;相同的模型文件在不同 backend 上也可能走不同 kernel。

区分方法、格式与 backend

类别典型对象例子主要回答的问题
量化方法如何估计 scale、处理误差或恢复质量PTQ、QAT、GPTQ、AWQ、SmoothQuant如何得到量化参数,误差如何控制
数值格式权重、激活或 cache 采用什么表示INT8、INT4、NF4、FP8、GGUF数据如何存储和传递
执行 backend如何加载并执行这些表示Transformers、bitsandbytes、vLLM、llama.cpp、TensorRT-LLM哪个 kernel 执行,实际显存和速度如何

GPTQ 和 AWQ 首先是后训练权重量化方法;GGUF 首先是文件格式与部署封装。不能把它们当成同一层面的“量化算法”直接比较,也不能用 GPTQ / AWQ 的启动参数推断 GGUF backend 的行为。

量化对象决定收益和代价

压缩对象主要减少什么主要代价至少应观察的指标
权重模型常驻容量、权重读取带宽scale / zero-point、反量化和 kernel 适配加载峰值、常驻显存、加载是否成功、吞吐与质量
激活中间状态和部分工作区重算、低精度数值误差、算子支持forward / backward 峰值、step time、溢出或 NaN
KV cache长上下文和并发请求的 cache 容量cache 误差、读写带宽、backend 支持单请求长度、并发容量、TTFT、TPOT、质量

权重量化不能代替激活或 KV cache 优化。显存账本中应分别记录参数、梯度、optimizer state、activation、KV cache、临时 workspace 和 allocator 保留量;只记录模型文件大小不足以解释运行时峰值。

介入时机:PTQ、QAT 与低比特训练适配

方案适合的问题训练 / 校准成本主要风险先验证什么
PTQ已有模型需要快速压缩或部署需要代表性校准数据,通常不改训练流程敏感层误差和任务质量下降误差、任务质量、加载与推理指标
GPTQ / AWQ权重量化后需要更好的误差控制需要校准和方法专用实现方法、格式和 backend 绑定量化格式、kernel 路径、同口径质量与速度
QATPTQ 无法满足质量要求需要重新训练或适配训练成本、数值稳定性和部署匹配训练收敛、验证质量、最终格式
QLoRA / 低比特适配训练显存有限,基座权重以低比特加载仍需训练 adapter训练表示与部署表示不是同一件事trainable 参数、显存、验证质量和合并 / 加载路径

选择介入时机时,先固定质量下限和部署目标,再比较成本。QLoRA 的低比特加载不能直接证明 GPTQ、AWQ 或 GGUF 的推理收益;训练侧的节省也不能直接替代 serving benchmark。

为什么量化不一定更快

量化减少的是某一类数据的存储或搬运量,而不是自动减少所有运行时工作。实际速度取决于:

  1. 硬件是否有对应的低比特 Tensor Core 或高效指令;
  2. backend 是否使用匹配的低比特 kernel;
  3. 反量化、scale 读取和临时 workspace 是否抵消了带宽收益;
  4. workload 是长 prefill、短 decode、单请求还是高并发。

因此,必须把“文件大小”“加载峰值”“运行时显存”和“吞吐 / 延迟”分开记录。某种量化在 24 GB GPU 上可能主要改善容量余量,在另一种硬件或短序列 workload 上可能几乎没有速度收益,甚至更慢。

CPU 与真实 GPU 的证据边界

环境可以验证不能单独证明
CPU 或纯 PyTorch 模拟bit / byte 换算、scale / zero-point、舍入误差、误差统计、格式字段和决策逻辑真实 kernel、CUDA workspace、显存峰值、GPU 吞吐、backend 兼容性
GPU + 原生 PyTorchdtype 运算、显存峰值、部分低精度算子和固定 workload 的时间某个 serving backend 的完整部署行为
GPU + 目标 backend量化模型能否加载、实际 kernel、显存、TTFT / TPOT、吞吐、并发和质量不同硬件、版本或 workload 下的普遍结论

真实部署结论至少需要形成闭环:

量化 artifact → backend 成功加载 → 确认格式与执行路径 → 同 workload baseline / candidate → 质量与资源指标 → accept / tune / reject

没有完成这条链时,应把结果标记为“理论估算”“CPU 模拟”“GPU 探针”或“加载验证”,不要写成量化方案已经优于 baseline。

项目分工与收口

量化路线中的项目按问题分工:

  • 65 负责训练侧 QLoRA / 低比特适配的选择,不替代推理部署验证;
  • 66 负责浮点模型的推理 baseline,为量化比较提供固定 workload 和基线指标;
  • 67 负责 GPTQ / AWQ 真实部署,GGUF 作为独立格式与 backend 路径扩展;
  • 40 负责 GPTQ / AWQ 的机制模拟,解释误差补偿,不代替真实 backend;
  • 41 负责 FP8 与 KV cache 量化的机制和边界,重点区分权重、激活与 cache。

67 的最终报告应至少包含:模型与量化 artifact、量化方法和格式、backend 与版本、硬件与 dtype、校准数据摘要、prompt / generated tokens、显存、TTFT、TPOT、端到端延迟、吞吐、质量指标、失败信息和最终决策。

最小决策模板

每次比较都记录:

对象 → 误差边界 → 介入时机 → 方法 → 格式 → backend → workload → 质量 → 显存 → 延迟 / 吞吐 → 部署复杂度 → 决策

建议使用以下决策规则:

  • 质量不达下限或 backend 无法加载:reject
  • 质量与资源均满足,但样本量、硬件覆盖或重复运行不足:tune
  • 在固定 workload、质量下限和资源预算内,候选方案有稳定收益:accept

最终结论必须说明适用的模型、硬件、backend 和 workload。它是有条件的工程决策,不是对所有模型和平台的普遍承诺。

Released under the MIT License.