状态传导图
这里比较概念位宽,不把 INT、FP 的编码结构混为一谈。
观察点 01
刻度密,数值近似误差小,但搬运量大
BF16 / FP16 常作为训练或推理基线。每个参数约占 2 字节,硬件支持成熟,但大模型权重与 KV Cache 会吃掉大量显存带宽。
- 容量 / 带宽占用约 2B / 值
- 量化近似误差很低
高位宽的主要优势是动态范围或精度余量,不代表所有算子必须一直用它。
量化先选择 scale 和粒度,再把连续值 round / clamp 到有限格子。位数越低,容量和带宽越省,但离群值、误差与 kernel 支持更关键。
状态传导图
这里比较概念位宽,不把 INT、FP 的编码结构混为一谈。
观察点 01
BF16 / FP16 常作为训练或推理基线。每个参数约占 2 字节,硬件支持成熟,但大模型权重与 KV Cache 会吃掉大量显存带宽。
高位宽的主要优势是动态范围或精度余量,不代表所有算子必须一直用它。
状态传导图
SmoothQuant 等方法会在权重与激活之间迁移量化难度。
观察点 02
INT8 常按 tensor、channel 或 group 共享 scale。权重可提前量化,激活则依赖运行时数据与校准;离群值可能让大部分刻度被浪费。
量化质量常由 scale 粒度和离群值处理决定,不只看“8”。
状态传导图
GPTQ、AWQ 与 QAT 在何时和怎样控制误差上各有不同。
观察点 03
INT4 / FP4 可进一步压低权重搬运,但经常需要更细 group、校准、保留少量高精度通道或 QAT。若硬件需频繁反量化,速度收益会被吃掉。
4-bit 是“模型 + 格式 + kernel + 硬件”的联合方案,不是改文件后缀。
状态传导图
K 与 V 的敏感度可能不同,量化策略也不必相同。
观察点 04
即使权重已 4-bit,KV Cache 仍可能按 FP16/BF16 增长。对 K/V 采用低比特、分层精度或近期高精度策略,可降低容量与读取带宽。
权重量化解决常驻模型账;KV 量化解决随上下文和并发增长的账。
你现在应该能解释:权重量化解决常驻模型账;KV 量化解决随上下文和并发增长的账。
量化不是简单把小数四舍五入成整数。真正难的是:哪些值能低精度、哪些通道有 outlier、scale 怎么选、误差会不会在长上下文里放大、硬件到底支不支持。这篇把 INT8/INT4/FP8/FP4 和 GPTQ/AWQ/SmoothQuant 串起来。
| 先分对象 | 权重量化省模型大小;激活量化只有在中间结果确实低比特存储/通信时才省相应容量;KV 量化面向上下文与并发缓存。 |
| 先分方法 | PTQ 是训练后压缩,QAT 是训练时就模拟低精度,QLoRA 是微调时压基座权重。 |
| 核心问题 | scale 怎么选、outlier 怎么处理、group size 多大、硬件是否真支持低精度。 |
大模型落地时,权重容量、decode 阶段的权重/KV 读取带宽经常成为瓶颈;但在大 batch、prefill 或计算密集 kernel 中也可能是算力受限。量化把高精度数字换成低比特表示,首先减少容量与数据搬运;能否同时省计算,要看硬件和 kernel 是否真正执行低精度运算。
模型参数从 FP16/BF16 压到 INT8/INT4/FP8/FP4。最直接省显存,也能减少 decode 每步搬权重的带宽。
若激活以低比特存储或通信,可省相应容量与流量;若只在 GEMM 输入处临时量化、输出仍保留高精度,则不能把全部激活显存都按位宽等比例缩小。输入相关的 outlier 也让它通常更难量化。
长上下文推理时 KV 随序列长度线性增长。低比特存储会省容量;只有 attention kernel 直接读取/反量化该格式时,才会同步减少有效读取带宽并可能提速。
| 格式 | 每个数 | 相对 FP16 容量 | 常见位置 |
|---|---|---|---|
| FP16 / BF16 | 16 bit | 1× | 训练/推理默认高精度基线。 |
| FP8 / INT8 | 8 bit | 约 1/2 | FP8 训练/推理,INT8 权重/激活推理。 |
| INT4 / FP4 | 4 bit | 约 1/4 | 权重量化、部分后训练/推理低比特。 |
| 2-bit / 3-bit | 更低 | 更小 | 已有研究原型和部分可部署格式,但质量、打包与 kernel 覆盖通常比 4/8-bit 更受约束。 |
真实压缩率会被 scale、zero-point、group metadata、对齐 padding、kernel layout 吃掉一部分,所以“INT4 = 精确 4 倍省显存”只是理想上限。
低比特常见两大家族。INT8/INT4 用均匀整数格子配合 scale;FP8/FP4 则保留符号、指数和尾数位,并常配合张量级或块级 scale。浮点格式能用指数换动态范围,但位数很低时仍必须精心缩放;它并不天然比整数更准确。
| 格式 | 直觉 | 优势 | 风险 |
|---|---|---|---|
| INT8 | 256 个均匀刻度 | 成熟、部署广、权重/激活都能做。 | 激活 outlier 会让 scale 变大,普通值精度被挤压。 |
| INT4 | 16 个均匀刻度 | 权重容量大降,本地推理常见。 | 误差更大,需要 group-wise、校准、重排序或补偿。 |
| FP8 | 8 bit 浮点,常见 E4M3/E5M2 | E4M3 精度较细、E5M2 动态范围较大;NVIDIA Ada(SM89)、Hopper(SM90)和 Blackwell 都有受支持的 FP8 Tensor Core 路径。 | 架构支持不等于每个算子、shape 和框架路径都覆盖;通常仍配合更高精度累加、缩放与敏感算子。 |
| NVFP4 | E2M1 值 + 两级 scale | Blackwell 原生路径;基础格式每 16 个连续值共享 E4M3 scale,再叠加每张量 FP32 scale。Transformer Engine 当前训练 recipe 默认让权重用 16×16 二维 scale,激活/梯度用 16 元素一维 scale。 | 二维/一维布局、转置副本、随机舍入与 Hadamard 变换属于具体 recipe,不能只写“FP4”就假定兼容。 |
| MXFP4 | E2M1 值 + OCP MX scale | OCP 规范规定 32 个值共享一个 8-bit E8M0(2 的幂)scale;Blackwell 等平台提供相应 kernel。 | 其 block=32、scale 编码和 NVFP4 不同,二者 checkpoint 不能仅凭位宽互换。 |
| NF4 | 非均匀 4 bit,适配近似正态分布权重 | QLoRA 常用,微调时把基座权重压得很小。 | 主要面向微调存储,不等同于所有场景最快推理格式。 |
16×4=64 bit,再加一个 8-bit E4M3 block scale,共 72/16=4.5 bit/值;MXFP4 是 (32×4+8)/32=4.25 bit/值。两者还没计全局 scale(NVFP4)、padding、对齐与训练时可能保留的转置/高精度副本;所以“4 bit”不是最终内存账。最基础的线性量化,就是用 scale 和 zero-point 把浮点数映射到整数,再用同一套参数反量化回来。误差来自“格子太少”和“范围被 outlier 拉得太大”。
s 是 scale,z 是 zero-point;对称量化常令 z=0,非对称量化允许范围偏移。
这里采用 signed symmetric 的窄范围约定:整数范围是 [-(2^(b-1)-1), +(2^(b-1)-1)],因此 INT4 用 -7…7 并留空 -8,让正负刻度严格对称。也有 checkpoint/kernel 使用完整的 -8…7 范围,scale 与边界必须跟格式约定一致。
N × bit。每个 group 的 scale/zero-point 也要存;这就是为什么同样 INT4,不同 group size 的模型文件大小和速度会不同。x=[-1.0,-0.3,0,0.2,0.9]。取可用整数 -7…7,则 s=max|x|/7=1/7≈0.1429。量化后 q=round(x/s)=[-7,-2,0,1,6],反量化得到 [-1.0,-0.2857,0,0.1429,0.8571]。其中 0.2 变成 0.1429,绝对误差约 0.0571。若同一组出现最大值 10,scale 会变成约 1.4286,-0.3 与 0.2 等普通值会被舍入为 0——这正是细分 group 和处理 outlier 的动机。很多人把量化方法当成名字背。更好的理解方式是:先问它量化什么,是训练后量化还是量化感知训练,主要处理权重误差还是激活 outlier。
| 方法 | 对象 | 核心思想 | 适合记法 |
|---|---|---|---|
| LLM.int8() | 权重/激活 INT8 矩阵乘 | 对大多数特征做 vector-wise INT8;把 outlier 特征维度分离到 FP16 矩阵乘。原论文称其分解中超过 99.9% 的被乘值走 8-bit 路径,这不是所有模型/实现的固定比例。 | “把系统性 outlier 维度拆到高精度旁路”。 |
| SmoothQuant | 权重 + 激活 INT8 | 在全精度下做数学等价的逐通道缩放,把激活 outlier 的量化难度迁移到相对易量化的权重,再执行 W8A8 PTQ。 | “把激活的尖峰迁到权重”。 |
| GPTQ | 权重 PTQ,论文主打 3/4-bit | 逐层做 one-shot 量化,用近似二阶信息更新尚未量化的权重,以补偿层输出误差。 | “量一个,再调剩下的来补误差”。 |
| AWQ | weight-only PTQ,常见 4-bit | 用离线激活统计识别显著权重通道,再做等价的 per-channel 缩放以降低量化误差;不是把那 1% 单独存成高精度。 | “由激活识别重要性,用缩放保护”。 |
| QLoRA | 4-bit 基座 + LoRA 微调 | 冻结的基座用 NF4 存储,计算时反量化到计算 dtype,梯度只更新 LoRA;论文还用 double quantization 压 scale、用 paged optimizer 管显存峰值。 | “压住冻结底座,只训练小适配器”。 |
| QAT | 训练/微调阶段 | prepare 阶段插入 fake quant:数值仍以高精度保存/运算,但模拟量化→反量化误差;训练后 convert 才生成真正低比特模型。 | “先模拟部署误差,再转换格式”。 |
训练完成后量化,不更新原始模型训练流程。简单 round-to-nearest 可不使用数据;GPTQ/AWQ/SmoothQuant 等 data-aware PTQ 通常用小规模代表性校准数据。
训练或微调时插入 fake quantization(伪量化)来模拟低精度误差;fake-quant 张量仍是高精度,convert 后才成为部署格式。它不等同于“直接用 FP4 做完整预训练”;后者还涉及混合精度、缩放、累加与优化器配方。
“INT4 模型”信息不够。工程上必须同时说清权重(W)、激活(A)与 KV Cache 的位宽和 scale 粒度,再确认序列化格式、packing/layout、运行时 kernel 与目标 GPU 能否对上。dtype 名称存在,也不代表算子已经有高效实现。
| 速记 | 实际含义 | 不能顺手推断什么 |
|---|---|---|
| W4A16 | 权重低比特存储/读取,激活通常为 FP16 或 BF16;kernel 可边读边反量化或直接走混合低比特矩阵乘。 | 不代表激活、KV、累加器和输出都变成 4/16 bit,也不保证比 W8A8 快。 |
| W8A8 / FP8 W8A8 | 矩阵乘两侧输入都量化到 8 bit;scale 可静态或按 token/row 动态计算,累加与输出通常更高精度。 | 不代表 LayerNorm、Softmax、路由器等所有算子都用 8 bit。 |
| W4A8 | 4-bit 权重配 8-bit 激活,是独立于 W4A16 的 kernel/格式组合。 | 不能拿只有 W4A16 kernel 的 checkpoint/runtime 直接等价执行。 |
| KV8 / KV4 | 描述 KV Cache 的存储格式与 attention 读取路径,可独立于 W/A 配置。 | 不代表模型权重或普通激活也被量化。 |
| 截至 2026-07-14 的官方文档 | 能说明什么 | 边界 |
|---|---|---|
| vLLM | 列出 AWQ、GPTQModel、LLM Compressor 的 W8A8/W4A16/W4A8、ModelOpt、在线量化、TorchAO 与量化 KV Cache 等路径;硬件矩阵把 Ada(SM89)与 Hopper(SM90)分开。 | 官方明确提示兼容表会变化;方法名受支持,不等于每个模型层、MoE 实现或 shape 都覆盖。 |
| TensorRT-LLM | 文档列出 FP4、多种 FP8、FP8/NVFP4 KV,以及 W4A16/W4A8 的 GPTQ/AWQ recipe。 | 当前 NVFP4 KV 需先用 ModelOpt 离线量化,并要求 FP8 W/A;不是任意 checkpoint 加一个参数即可。 |
| torchao 0.17 | 稳定/近稳定路径含 FP8、INT8 与 INT4 weight-only;NVFP4/MXFP4 工作流仍标为 prototype,其 NVIDIA 动态 W/A 路径要求 Blackwell(SM100+),MX 路径另列 AMD MI350+。 | API 有 dtype/config 只代表工作流入口;设备、算子、布局和 kernel 要逐项核对。 |
权重量化解决“模型本体放不下”;KV 量化解决“上下文和并发一上来,缓存撑爆显存”。这和 KV Cache 专题 是同一条线。
把 bytes_kv 从 2 bytes(FP16/BF16)降到 1 byte 或更低,理想张量容量按位宽下降;实际还要加 scale、zero-point、未量化残留窗口、padding 和 allocator 开销。
L=80 层、S=32,768、Hkv=8、D=128、batch 1。FP16 KV 为 80×32768×8×128×2(K/V)×2 bytes = 10 GiB;若 K/V 都用理想 8-bit 存储则是 5 GiB,4-bit 则是 2.5 GiB,尚未计 metadata。上下文升到 128K 时这三者各乘 4,所以 KV 量化的价值会随长度与并发线性放大。| 量化对象 | 收益 | 风险 |
|---|---|---|
| K cache | 减少注意力 score 计算读取量。 | K 误差会影响 softmax 分布,可能放大选择错误。 |
| V cache | 减少加权求和读取量。 | V 误差直接进入输出表示。 |
| per-token scale | 适配 token 间动态范围;KIVI 观察到它适合其 value cache 分布。 | 结论来自特定模型研究,不代表所有架构的 V 都应固定使用该粒度。 |
| per-channel scale | 适配通道 outlier;KIVI 观察到它适合其 key cache 分布。 | 访问模式与在线量化更复杂,端到端速度需要 kernel 实测。 |
2.6×、batch 最多扩大 4×、吞吐提高 2.35–3.47×。这些是特定模型、长度、batch 与 kernel 下的结果,不是任意引擎开启 KV4/2-bit 后的固定倍率。推理量化常关心“模型能不能更小地跑起来”;训练低精度关心矩阵乘输入、通信、保存的激活与状态分别用什么精度。Transformer Engine 当前在 Ada、Hopper、Blackwell 提供 FP8 路径,并在 Blackwell 支持 MXFP8 与 NVFP4。低精度 GEMM 不意味着所有张量和算子都按同一位宽保存或计算,训练仍是混合精度系统。
| 场景 | 怎么用 | 关键点 |
|---|---|---|
| FP8 训练 | 把适合的 GEMM 输入转为 E4M3/E5M2 或块缩放 FP8,累加与敏感算子保留更高精度。 | 需要 amax/scale 配方、溢出控制、逐算子精度选择和硬件支持;不能把整个训练状态简单除以 2。 |
| DeepSeek-V3 | 技术报告采用细粒度块缩放 FP8 混合精度框架,并让部分敏感组件保持原精度。 | 这是特定系统配方,不等于任意模型打开“FP8”开关都能复现其稳定性或成本。 |
| NVFP4 | Transformer Engine 已提供 Blackwell 的 NVFP4 训练 recipe;MLCommons 的 MLPerf Training v6.0(2026-06)资料也记录了包含 NVFP4 的 NVIDIA 提交。 | recipe 还包含权重二维缩放、梯度随机舍入、输入/梯度随机 Hadamard 变换与高精度保留;“4-bit 训练”仍是混合精度。 |
| MoE + low-bit | 专家权重低比特,减少专家权重容量和读取带宽。 | 专家并行的主要跨卡流量常是 token 激活而非权重;能否降低通信要看激活是否量化与并行实现。 |
不一定。要看 kernel、反量化成本、batch size、内存带宽和硬件是否有原生支持。
不够。代码、数学、长上下文检索、函数调用格式都可能比通用 PPL 更敏感。
权重、激活、KV Cache、optimizer state 是不同对象,难度和收益不同。
细粒度 scale 精度好,但 metadata、访存和 kernel 复杂度会上升。
量化改变 logits 后,某些边界 token 可能翻转,进而改变拒答、JSON、工具调用或长链输出;是否显著必须用目标任务和解码配置实测。
模型架构、激活分布、MoE 专家分布、上下文长度都会改变最佳量化策略。
| 量化是什么 | 用更少 bit 表示权重/激活/KV Cache,并常用 scale、zero-point 或 codebook 保持数值近似。 |
| 最常见收益 | 省显存、省带宽,并可能让模型以更低成本或更高并发运行;速度仍由 kernel 与瓶颈决定。 |
| 动态对象 | 激活和 KV Cache 随输入变化,离线校准更难覆盖;但究竟哪一项最难取决于模型和目标位宽。 |
| PTQ vs QAT | PTQ 通常成本较低;QAT 增加训练成本,但在不少激进低比特设置中能更好适应部署误差,仍需实测。 |
| 方法速记 | SmoothQuant 处理激活 outlier,GPTQ 做误差补偿,AWQ 保护重要权重通道,QLoRA 用 NF4 微调。 |
| 下一层专题 | 分布式训练会继续讲 FP8/FP4、ZeRO/FSDP、通信压缩和混合精度如何一起工作。 |
核查日期:2026-07-14。硬件支持、kernel 覆盖与端到端速度会随 GPU、库版本、张量 shape、batch 和模型架构变化;论文或厂商报告中的质量/速度不能直接外推到你的部署。