一句话回答:模型量化是把权重、激活或 KV cache 从较高精度表示转换为更低位宽或更紧凑格式,以降低存储和运行内存,并在有合适硬件内核时改善吞吐或延迟。它不是“把 FP16 改成 INT4 就自动快四倍”:真实结果取决于量化对象、分组与标度、模型架构、运行时、硬件、上下文、批量和任务质量门槛。
本文面向准备在本地工作站、边缘设备或推理服务器部署语言、视觉语言与生成模型的中文用户。重点不是列举所有算法,而是回答:显存怎么估、格式怎么匹配、质量怎么测、速度为什么可能不升反降,以及什么证据足以支持上线。资料复核日期为 2026 年 7 月 18 日。
先分清:你要量化的是权重、激活还是 KV cache
| 量化对象 | 主要目的 | 典型写法 | 容易忽略 |
|---|---|---|---|
| 权重 | 缩小模型文件和常驻权重内存 | W8、W4、INT4 weight-only | 标度、零点、分组和打包仍占空间 |
| 激活 | 降低矩阵运算和中间张量开销 | W8A8、FP8 W8A8 | 输入分布、异常值和硬件内核 |
| KV cache | 降低长上下文和并发解码内存 | FP8 KV、INT8 KV | 上下文长度、层数、头维度和质量变化 |
| 训练状态 | 降低训练或微调的参数、梯度、优化器开销 | 低比特优化器、量化训练 | 这与仅推理加载 4 bit 权重不是同一问题 |
torchao 量化概览把体系分为量化流程、量化张量与派生数据类型、底层原语和高效内核,并区分 weight-only、动态激活、静态量化、QAT 与量化训练。这个分层很重要:文件写着 INT4,只说明表示的一部分;如果运行时需要不断解量化到高精度,或硬件没有匹配内核,速度不一定更好。
量化值是怎么从浮点数得到的
常见仿射量化使用 scale 和可选 zero point,把一段浮点值映射到有限整数格点。概念上可写为:q = clamp(round(x / scale) + zero_point);恢复时近似为 x ≈ scale × (q - zero_point)。舍入和截断会引入误差,scale 的计算范围决定误差如何分布。
| 粒度 | 含义 | 优势 | 代价 |
|---|---|---|---|
| per-tensor | 整个张量共享一组参数 | 元数据少、实现简单 | 容易被异常值拉大范围 |
| per-channel | 按输出或输入通道独立缩放 | 通常更能适应通道差异 | 参数和内核更复杂 |
| per-group | 若干连续权重共享参数 | 在质量、空间和速度间折中 | group size 影响质量与兼容 |
| per-token / per-row | 运行时按 token 或行计算参数 | 适应动态激活分布 | 增加量化计算与内核要求 |
| 非均匀或码本 | 使用离散码本而非等距格点 | 可能更贴合权重分布 | 查表、格式和内核兼容更严格 |
因此“同为 4 bit”也可能完全不同。位宽、对称或非对称、group size、哪些层保留高精度、打包布局和计算精度都应记录。只保存文件名里的 Q4、INT4 或 W4A16,无法复现实验。
PTQ、动态量化、静态量化和 QAT 有什么区别
| 流程 | 何时量化 | 是否需要代表性数据 | 适合场景 |
|---|---|---|---|
| 权重直接加载量化 | 加载或转换时 | 部分方法不需要校准集 | 快速降低权重占用、先做可行性试验 |
| PTQ | 训练完成后 | 静态或数据感知方法通常需要 | 不能重训、希望控制成本 |
| 动态激活量化 | 推理时按输入计算量化参数 | 通常不固定校准范围 | 输入分布变化较大但接受运行开销 |
| 静态量化 | 用校准阶段确定固定范围 | 需要贴近生产的校准样本 | 内核支持好且输入分布稳定 |
| QAT | 训练或微调中模拟量化误差 | 需要训练数据与算力 | PTQ 质量不足且有训练条件 |
torchao 静态量化说明指出,静态流程在校准期观察输入分布以确定范围;torchao QAT 文档则使用 fake quantization 在训练中模拟量化与反量化的数值影响。QAT 可能改善量化后质量,但不是无需成本的“高级开关”。
校准集怎么选:代表运行分布,而不是随便抓几段文本
需要校准或激活统计的方法会把样本分布写进量化参数。样本过短、语言单一、没有代码或多模态输入,可能让转换在演示问题上正常、在真实请求上失真。校准集应来自允许使用的数据,并覆盖生产输入的长度、语言、格式、领域、难例与关键安全场景;不能把测试集答案泄漏进调参过程。
| 校准维度 | 应覆盖 | 失败信号 | 修正方式 |
|---|---|---|---|
| 长度 | 短问答、长文、接近目标上下文的样本 | 长输入质量明显下降 | 按生产长度分层抽样 |
| 语言与符号 | 中文、英文、代码、数字、表格或专业符号 | 某语言或数字任务退化 | 按真实占比与高风险任务补样 |
| 任务 | 生成、抽取、分类、工具参数和拒答 | 只对聊天问题有效 | 以任务合同建立分层样本 |
| 领域 | 目标行业术语、文档与数据形态 | 通用基准正常但业务失败 | 加入合规的领域代表样本 |
| 异常值 | 高幅激活、稀有 token、边界格式 | 少数输入引发严重错误 | 分析层与通道,调整粒度或保留精度 |
| 多模态 | 图像尺寸、数量、OCR、音频长度或帧数 | 只量化语言部分却宣称整模有效 | 分别校准并验证各组件 |
校准集不应与最终验收集完全相同。建议保留一套从未参与方法选择、group size 调整或层级例外设置的冻结测试集,用它比较高精度与各量化候选。如果多次试验后只报告最好结果,也要记录尝试过的配置,避免把对测试集的反复适配误当作稳定泛化。
GPTQ、AWQ、bitsandbytes、GGUF 和 FP8 不是同一层概念
| 名称 | 更接近什么 | 主要特点 | 上线前核对 |
|---|---|---|---|
| GPTQ | 训练后权重量化算法与相应格式生态 | 利用近似二阶信息补偿量化误差 | 模型、group size、kernel 与运行时兼容 |
| AWQ | 激活感知的低比特 weight-only PTQ | 用激活统计识别重要权重通道并缩放 | 校准样本、具体实现和硬件支持 |
| bitsandbytes | 加载与计算后端 | 常用于 8 bit、4 bit 加载和 QLoRA 路线 | 平台支持、计算 dtype、推理速度 |
| GGUF | 模型容器与 llama.cpp 生态格式 | 携带张量、量化类型和元数据 | 架构、量化类型、版本、分片和多模态投影 |
| FP8 | 低精度浮点表示与硬件计算路线 | 常用于支持 FP8 的新硬件训练或推理 | E4M3/E5M2、缩放方案和设备内核 |
| W4A16 / W8A8 | 权重与激活位宽记法 | 描述计算路径的一部分 | 没有说明算法、粒度、格式和 kernel |
GPTQ 原论文把方法定义为使用近似二阶信息的一次性权重量化;AWQ 原论文则是激活感知的低比特 weight-only 方法。论文中的模型、GPU、任务与速度结果不能直接移植到你的设备。方法子页应分别解释算法,而本页负责选型和验收边界。
显存怎么估:先算权重,再加运行时预算
最粗略的权重下限是 参数量 × 位宽 ÷ 8。例如 8B 参数按理想 4 bit 裸权重约 4GB;实际文件和内存还包含 scale、zero point、未量化层、词表、张量元数据、对齐与打包。运行时还要加 KV cache、激活、临时 workspace、CUDA context、图缓存、碎片和框架开销。

| 内存项 | 主要变量 | 量化是否直接降低 | 测量方式 |
|---|---|---|---|
| 模型权重 | 参数量、位宽、分组、保留高精度层 | 是,通常最明显 | 加载后静态占用与文件大小 |
| KV cache | 层数、KV 头、头维度、上下文、批量、dtype | 仅在单独启用 KV 量化时 | 逐步增加上下文和并发测峰值 |
| 激活 | 批量、序列、层、算子和计算 dtype | 取决于是否量化激活 | prefill 与 decode 分开测 |
| 工作区与图缓存 | kernel、编译、CUDA Graph、注意力实现 | 不一定 | 冷启动和稳定运行分别测 |
| 运行时与碎片 | 框架、驱动、多模型、加载卸载 | 通常不会按权重位宽同比下降 | 进程与设备监控交叉核对 |
| 安全余量 | 流量波动、最长请求、失败重试 | 不应省略 | 压力测试后保留明确余量 |
MoE 模型还要区分总参数、每 token 激活参数和实际加载权重。即使每次只激活部分专家,所有或大部分专家权重仍可能需要驻留。多模态模型也可能单独加载视觉编码器、投影器或音频组件,不能只按语言模型参数估算。下载模型时应同时保存仓库 ID、revision 或 commit hash、许可证、权重文件哈希、tokenizer 与 config,并记录转换器版本,避免后续把“同名但不同版本”当作同一基线。
为什么量化后不一定更快
| 现象 | 可能原因 | 验证动作 |
|---|---|---|
| 显存下降但延迟变高 | 解量化开销、kernel 不匹配、批量太小 | 检查实际 kernel 与 profiler |
| 单用户快但吞吐不升 | 调度、KV、带宽或 CPU 成为瓶颈 | 分并发测 tokens/s 与请求完成率 |
| prefill 改善、decode 不明显 | 两个阶段受不同算子与带宽约束 | 分别报告 TTFT 和 ITL |
| 文件小但加载仍慢 | 格式转换、分片、磁盘或网络限制 | 记录冷启动各阶段耗时 |
| 同一格式换 GPU 后报错 | 算力版本、指令、kernel 或后端不支持 | 先查运行时硬件兼容表 |
vLLM 量化文档按实现列出不同 GPU、CPU 和加速器支持,并明确兼容表会随项目演进;NVIDIA TensorRT也把量化与内核调优、融合和具体部署栈联系在一起。因此“格式能下载”不等于“目标硬件能高效运行”。
如何选择起点:按硬件和任务,不按排行榜
| 场景 | 可先尝试 | 首要门禁 | 不要默认 |
|---|---|---|---|
| 消费级 GPU 快速试用 | 运行时明确支持的 8 bit 或 4 bit weight-only | 能否装下、回答质量与 kernel | 4 bit 一定比 8 bit 快 |
| CPU / Apple Silicon 本地 | llama.cpp 支持的 GGUF 与设备合适量化 | 内存带宽、线程、上下文和质量 | GPU 格式可直接复用 |
| 数据中心 GPU 服务 | vLLM/TensorRT-LLM 支持的 GPTQ、AWQ、FP8 或压缩格式 | 并发吞吐、P95、稳定性、版本支持 | 单请求速度代表生产吞吐 |
| 边缘视觉或语音 | 设备 SDK 支持的 INT8/FP16/混合精度 | 端到端预后处理、温度和功耗 | 只量化主干即可部署 |
| 质量敏感任务 | 先测 8 bit 或保守混合精度 | 业务切片与严重错误 | 平均困惑度能代表任务质量 |
如果尚未决定本地还是云端,先看本地部署、云端 API 与混合路线;需要理解参数、上下文、KV cache 与生产指标,可参考大语言模型生产评测指南。量化是部署决策的一部分,不应先于模型许可、数据边界和任务定义。
两条常见实践路线
路线一:Transformers 中用 bitsandbytes 做可行性试验
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
model_id = "your-approved-model-revision"
config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.bfloat16,
)
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
quantization_config=config,
device_map="auto",
dtype=torch.bfloat16,
)
这段代码只说明加载路径。正式测试还要固定仓库 revision、Transformers、bitsandbytes、PyTorch、驱动与 GPU,记录实际设备映射和峰值。Transformers 量化概念指南说明其通过统一量化配置集成多个后端;不同后端的导出、微调和推理能力并不相同。
路线二:llama.cpp 中从高精度 GGUF 生成量化文件
./llama-quantize input-bf16.gguf output-q4_k_m.gguf Q4_K_M
./llama-cli -m output-q4_k_m.gguf -p "固定测试提示"
llama.cpp quantize 官方说明建议从较高精度 GGUF 转换,并警告重复量化可能严重降低质量。多模态模型还要处理编码器和 projector。下载别人制作的 GGUF 时,应保存原始模型、转换者、量化类型、imatrix、版本和哈希,不能只凭文件名信任来源。
质量验收:不要只看困惑度或一段聊天

| 测试层 | 要固定 | 主要指标 | 硬失败示例 |
|---|---|---|---|
| 基线一致 | 原始模型、revision、提示、采样和上下文 | 可复现配置 | 比较了不同模型或不同提示 |
| 通用质量 | 公开基准版本与运行方法 | 任务指标、困惑度仅作辅助 | 只挑对量化有利的基准 |
| 业务任务 | 真实分布、难例和切片 | 正确、完整、引用、格式 | 关键字段或数字错误增加 |
| 安全与拒答 | 相同攻击、越权和敏感样本 | 漏放、误拒、严重失败 | 出现新的越权或秘密泄露 |
| 长上下文 | 长度、位置和检索材料 | 召回、引用、稳定性 | 长材料下遗漏关键约束 |
| 性能 | 硬件、批量、并发、输入输出长度 | TTFT、ITL、吞吐、P95 | 只报告峰值 tokens/s |
| 资源 | 冷启动与稳定运行 | 文件、RAM/VRAM、功耗、失败率 | 压力下 OOM 或频繁重启 |
量化可能对少数任务、语言、长尾 token 或多模态细节影响更大。对于视觉语言模型,应分别测试 OCR、定位、图表、图像数量和视觉幻觉,可参考VLM 任务与视觉幻觉验收;具体旧模型兼容边界见CogVLM 部署核验指南。发现事实错误时,应把回答拆成可核验主张,逐项对照来源与原始高精度模型,再固定检索材料、提示和采样设置复现,以区分原模型、量化、检索或提示造成的变化。
推荐的九步量化发布流程
| 步骤 | 动作 | 交付物 |
|---|---|---|
| 1 | 定义任务、硬件、运行时、上下文与并发 | 任务合同和环境清单 |
| 2 | 冻结原始模型 revision、许可和高精度基线 | 来源、哈希与基线结果 |
| 3 | 测未量化质量、内存、延迟和吞吐 | 可复现基线报告 |
| 4 | 从保守位宽与官方支持格式开始 | 候选配置和生成日志 |
| 5 | 用代表性校准集执行 PTQ 或转换 | 样本来源、参数和版本 |
| 6 | 运行质量、安全、长上下文与切片回归 | 逐项差异和严重失败 |
| 7 | 在目标硬件测冷启动、P95、吞吐和峰值 | 性能与资源报告 |
| 8 | 灰度部署,保留高精度或旧版本回滚 | 放量、监控与停止条件 |
| 9 | 模型、runtime、驱动或硬件变化后复测 | 版本化回归记录 |
Hugging Face TGI 量化说明区分预量化权重和加载时量化,并提醒 bitsandbytes 推理可能慢于 GPTQ 或 FP16;这正说明必须在自己的运行栈测量。PyTorch 也已把量化开发重心转向 torchao workflows,旧教程里的 API 不应不加版本说明地复制到新项目。
上线后监控什么:量化版本也会随运行栈变化而漂移
量化文件本身可能不变,但驱动、runtime、kernel、调度器、提示模板、采样参数和上游模型 revision 都会改变结果。生产监控应把“量化配置”作为可追踪版本,而不是只记录一个模型名称。对同一请求同时保存原始模型 ID、量化方法、位宽、group size、计算 dtype、运行时和硬件类别,才能在退化时定位。
| 监控项 | 观察信号 | 触发复测或回滚 |
|---|---|---|
| 质量 | 关键字段错误、引用、格式、拒答和人工修改 | 任何硬失败或切片持续恶化 |
| 性能 | TTFT、ITL、P50/P95、吞吐与队列 | 升级后延迟或超时超过目标 |
| 资源 | VRAM/RAM 峰值、OOM、功耗、重启 | 安全余量不足或压力下不稳定 |
| 版本 | 模型、量化器、runtime、driver、kernel | 任一核心组件变更 |
| 分布 | 输入语言、长度、任务和并发结构 | 明显偏离校准与验收样本 |
| 回滚 | 旧版本可用性、切换时间和数据兼容 | 演练失败时暂停继续放量 |
用户体验退化不一定直接表现为基准分数下降。还应记录任务完成率、返工次数、等待时间、错误恢复成功率和人工接管比例,并把无法恢复的失败设为硬门槛。若新 runtime 宣称支持某格式,但实际走 fallback 或改变采样实现,应把它当作新候选重新验收。
常见误区
| 误区 | 为什么不成立 | 正确做法 |
|---|---|---|
| 4 bit 就省 75% 全部显存 | 只按 FP16 裸权重比较,忽略元数据与运行时 | 按完整进程峰值测量 |
| 量化越低越划算 | 质量、内核和兼容可能快速恶化 | 用满足硬门禁的最低总成本方案 |
| 同一 GGUF 名称质量相同 | 原始 revision、转换、imatrix 和工具版本可能不同 | 保存来源、参数与哈希 |
| 困惑度变化小就可上线 | 无法覆盖业务事实、格式、安全和多语言切片 | 用真实任务与严重失败门禁 |
| 能加载就代表硬件支持 | 可能走慢速 fallback 或运行中失败 | 确认实际 kernel 并做压力测试 |
| 量化能解决所有部署问题 | 数据、许可、权限、检索和服务可靠性仍独立存在 | 把量化放回完整上线流程 |
常见问题
INT4 模型一定比 FP16 快吗?
不一定。权重更小可能降低内存带宽压力,但解量化、kernel、批量、上下文和硬件支持共同决定速度。应同时测 TTFT、每 token 延迟、吞吐和峰值内存。
选 GPTQ 还是 AWQ?
先看目标运行时和硬件是否原生支持,再用同一原始模型、校准样本与任务集比较质量和性能。算法论文结果不能代替你的模型、语言和任务测试。
量化会不会让模型更容易幻觉?
低精度误差可能改变 token 概率和任务表现,但不能简单写成“必然增加多少”。应对事实、推理、长上下文、引用和拒答分别回归,并与完全相同的高精度基线对照。
什么时候应该放弃 4 bit?
当业务硬门禁失败、目标硬件缺少高效内核、运行不稳定,或节省的资源不足以抵消返工和质量损失时,应回到 8 bit、FP8、混合精度、较小模型或云端方案。
结论:量化是一个测量问题,不是文件后缀选择题
正确路线是先固定任务、模型、硬件和运行时,建立高精度基线,再选择受支持的量化对象、流程和格式;随后用相同样本验证质量、安全、长上下文、延迟、吞吐和完整内存。只有通过硬门禁并在目标负载下产生净收益,量化版本才具备上线价值。交付时应把量化文件与原始模型 revision、转换命令、依赖版本、哈希和验收报告绑定保存,避免留下一个无法追溯、无法重建的孤立文件。
编辑复核与纠错记录:本文由兰塞 AI 编辑流程于 2026 年 7 月 18 日重构。旧稿只有概念定义,未区分权重、激活、KV cache、PTQ、QAT、格式、内核和运行内存,也没有来源与站内任务路径。本次依据 PyTorch/torchao、Hugging Face、vLLM、NVIDIA、llama.cpp、GPTQ 与 AWQ 原始论文重建,并增加三张原创图、显存预算和九步验收流程。本站的来源、更新与纠错原则见关于本站与编辑规范。
