状态:草案(2026-10-27),已实际测量 FP8、GPTQ、AWQ,未实际测量 GGUF、bitsandbytes。 于 2026-10-27 使用单张 8GB 级笔记本 GPU(Ada 架构)、vLLM 0.31.0、Qwen3-Reranker-0.6B 进行测量。初次测量时需要重新下载预量化的检查点(AWQ、GPTQ),因此未进行测量,在批准后的小节 3-1 中进行了测量。KV 缓存 8 位容量的实际测量结果在《Toss ML/AI Infra 准备》第 14 篇中。 2026-10-27 新增。 获得批准后,拉取了 vLLM 0.32.0 镜像以及 Qwen3-0.6B、Qwen3-0.6B-GPTQ-Int8、Qwen3-4B-AWQ(均为 Apache-2.0,safetensors),并添加了小节 3-1。前文的 0.31.0 数值保持不变。 编写规则:以实际测量数据为基础,无法测量的标记为“未实际测量”,未能确认的标记为“未确认”。
目录
- 1. 为什么会变快
- 2. vLLM 的量化指南
- 3. 亲自测量:在线 FP8
- 3-1. 2026-10-27 重新测量:对话模型与预量化检查点
- 4. KV 缓存 8 位
- 5. 运维层面的取舍
- 6. 未能确认的内容
- 参考
1. 为什么会变快
在解码过程中,每个请求为了生成一个 Token,需要完整读取一次 GPU 内存中的所有权重。对于 0.6B 模型,以 bf16 格式存储时,每一步都需要传输约 1.2GB 数据。相比之下计算量较小,因此步骤耗时大致由“权重字节数 ÷ 内存带宽”决定。将权重缩减至 8 位后,需要读取的字节数减半,从而缩短了步骤耗时。
由此衍生出两点:
- 批处理规模越大,收益越小。 当单个步骤中的请求增多时,权重读取量保持不变,但 KV 读取量和计算量增加,导致权重在步骤耗时中所占的比例减小。
- 如果连激活值也能以 8 位进行计算(W8A8),计算速度也会加快。 这在配备 FP8 张量核心(Tensor Core)的 GPU(Ada、Hopper 及更新架构)上可行。仅减小权重而以 16 位进行计算的方法(W4A16、W8A16)仅能减少内存读取。
2. vLLM 的量化指南
| 方法 | 缩减对象 | 检查点 | 原理(论文) |
|---|---|---|---|
在线 FP8(fp8_per_tensor, fp8_per_block) |
权重与激活值 8 位 | 保持 bf16 不变,加载时转换 | FP8 格式(Micikevicius 等,2022):E4M3、E5M2 |
| llm-compressor FP8 W8A8 | 权重与激活值 8 位 | 提前转换 | 相同格式,通过校准数据决定缩放比例 |
| AWQ | 权重 4 位 | 提前转换 | 保护激活值较大的通道的权重(Lin 等,MLSys 2024) |
| GPTQ | 权重 3、4 位 | 提前转换 | 利用二阶信息补偿误差并按列进行量化(Frantar 等,ICLR 2023) |
| Marlin 内核 | 加速 GPTQ、AWQ、FP8、FP4 | 上述格式 | 4 位权重与 16 位激活值的乘积内核 |
| GGUF、bitsandbytes | 权重 | 各自格式 | llama.cpp 格式,读取时进行量化 |
KV 缓存 FP8(--kv-cache-dtype fp8) |
KV 存储 | 无关 | 相同内存可存两倍 Token |
官方文档的硬件表格显示,FP8 W8A8 仅在 Ada、Hopper 及以上架构受支持,而 AWQ 和 GPTQ 在大多数 Turing 及更新架构上运行。论文报告的数字在不同条件下各有差异。AWQ 称其 4 位权重在桌面和移动 GPU 上比 Hugging Face FP16 实现快 3 倍以上;GPTQ 报告称将拥有 1,750 亿参数的模型部署在单张 GPU 上,在 A100 上比 FP16 快约 3.25 倍,在 A6000 上快 4.5 倍(两者均基于摘要)。
0.31.0 文档将在线量化方法列为 fp8_per_tensor, fp8_per_block, mxfp8, mxfp4 。MXFP8 的 W8A8 仅在 Blackwell(SM 100)及以上架构上运行,其余 GPU 则回退到仅将权重设为 8 位的路径。
3. 亲自测量:在线 FP8
方法
- 加载了两次相同的 bf16 检查点。一次保持原样,另一次使用
--quantization fp8. - 。0.31.0 版本对该选项发出警告:“
--quantization fp8不再推荐用于在线量化,请改用fp8_per_tensor。”只是名称发生了更改,运作方式保持不变(每个张量一个缩放比例)。质量对比是在使用新名称重新启动的服务器上进行的。 - 负载与第 2 篇相同(输入 256 个 Token,输出 128 个 Token,每种并发级别下对四批中的第一批进行预热)。
- 输出对比:使用贪婪解码通过十二个固定提示词(六个直接复制文章,六个串联随机单词)生成 128 个 Token,并对比每个请求的输出哈希。
- 质量代理指标:获取四篇亲笔撰写的英文文章(共 338 个 Token)中每个 Token 的对数概率(
echo+logprobs),并计算出困惑度。
结果
| 项目 | bf16 | FP8(在线) | 比例 |
|---|---|---|---|
| 权重内存(日志) | 1.12GiB | 0.71GiB | 0.63 |
| KV 容量 | 40,208 个 Token | 42,080 个 Token | 1.05 |
| 吞吐量,并发 1 | 174.2 tok/s | 236.3 tok/s | 1.36 |
| Token 间隔中位数,并发 1 | 5.6ms | 4.1ms | 0.73 |
| 吞吐量,并发 16 | 1,683.1 tok/s | 2,085.8 tok/s | 1.24 |
| 吞吐量,并发 64 | 2,899.3 tok/s | 3,143.3 tok/s | 1.08 |
| 贪婪输出与 bf16 相同的请求 | 标准 | 12 个中的 6 个 | |
| 困惑度(四篇文章) | 36.03 | 36.46(+1.2%) |
- 权重缩减到 63% 而非一半的原因:该模型的词表嵌入(151,669 × 1,024,约 0.3GB)与输出层绑定,该层和归一化层保留为 bf16。模型越小,这部分占比越大,量化效果就越有限。
- 批处理规模越大,吞吐量收益越小(1.36 → 1.24 → 1.08 倍)。 正如第 1 节所述。单用户使用时,Token 间隔从 5.6ms 缩短至 4.1ms,缩短了 27%。
- 输出有所不同。 六个复制提示词的输出与 bf16 字字精确相同,而六个随机单词串联提示词则在最初的几个 Token 开始出现分歧。在概率相近的候选词中,微小的数值差异会导致选出不同的 Token。这种差异对任务准确率的影响在此次测试中未予评估。
- 困惑度上升了 1.2%(36.03 → 36.46)。 四篇中有两篇反而略有下降(54 个 Token 的文章从 228.5 降至 223.5,55 个 Token 的文章从 19.07 降至 18.80),而在最长的 190 个 Token 文章中则从 19.63 上升至 20.24。338 个 Token 属于小样本,1% 左右的差异仅可理解为“没有明显变差”。
3-1. 2026-10-27 重新测量:对话模型与预量化检查点
在 vLLM 0.32.0 官方容器中,以对话模型 Qwen3-0.6B 为基准,对比了在线 FP8 与 GPTQ 8 位版本,并在同一 GPU 上部署了 AWQ 4 位的 4B 模型。负载与困惑度测试方法同上。
| 模型与方法 | 权重内存 | KV 容量 | 吞吐量并发 1 | 并发 16 | 并发 64 | 困惑度 |
|---|---|---|---|---|---|---|
| Qwen3-0.6B bf16 | 1.12GiB | 38,224 个 Token | 174.1 | 1,678.0 | 2,898.7 | 30.29 |
Qwen3-0.6B 在线 FP8(fp8_per_tensor) |
0.71GiB | 42,080 个 Token | 237.9(1.37 倍) | 2,094.5(1.25 倍) | 3,148.2(1.09 倍) | 29.88(-1.4%) |
| Qwen3-0.6B GPTQ 8 位(Marlin) | 0.74GiB | 42,048 个 Token | 244.3(1.40 倍) | 2,023.0(1.21 倍) | 2,996.5(1.03 倍) | 30.78(+1.6%) |
| Qwen3-4B AWQ 4 位(Marlin) | 2.5GiB | 15,424 个 Token | 80.0 | 651.9 | 736.4 | 21.02 |
吞吐量单位为 tok/s,括号内为相较于 bf16 的倍数。
- GPTQ 8 位与在线 FP8 表现相近。 单用户使用时 GPTQ 稍快(244.3 对 237.9),而并发度越高,FP8 越占优势(并发 64 时为 3,148 对 2,997)。这可能是因为 GPTQ 仅将权重设为 8 位、计算为 16 位(W8A16),而该 GPU 的 FP8 连激活值也以 8 位计算。在这两种情况下,vLLM 都在日志中记录了选用了 Marlin 内核(GPTQ)。
- 预先校准的 GPTQ 在困惑度上并未占优。 在这四篇文章中,FP8 反而低了 1.4%,而 GPTQ 高了 1.6%。由于是 338 个 Token 的小样本,应当理解为“两者与 bf16 并没有显著差异”。在第 4 篇和第 5 篇的提取与工具调用任务中,三种方法的结果均为 18/18 和 36/36。
- AWQ 4 位使 8GB 显存能够运行 4B 模型。 如果是 bf16,仅权重就约为 8GB,该模型无法在此 GPU 上运行。取而代之的是,KV 容量缩减至 15,424 个 Token,导致并发 64 时的首个 Token 延迟中位数增加到 3.1 秒(排队现象)。困惑度低于 0.6B(21.02),且在第 4 篇的提取任务中,无需强制约束即可 18 次全部输出合规的 JSON。是运行小型模型的更大并发,还是以 4 位运行大型模型,取决于并发量和质量需求。
4. KV 缓存 8 位
--kv-cache-dtype fp8 并非缩减权重,而是将 KV 缓存存储为 8 位。在先前使用 1.7B 模型在同款 GPU 上的实际测量中,KV 容量从 22,048 个 Token 增加到 41,920 个 Token(每个 Token 的字节数刚好减半),因长输入导致 KV 不足而产生队列的瓶颈点向后推迟了(第 14 篇)。此处仅补充了相同的困惑度测试和贪婪输出对比。
| 项目 | KV bf16(默认) | KV FP8 |
|---|---|---|
| KV 容量(日志) | 40,208 个 Token | 69,920 个 Token(1.74 倍) |
| 困惑度(同四篇文章,338 个 Token) | 36.03 | 36.50(+1.3%) |
| 贪婪输出与 bf16 KV 相同的请求 | 基准 | 12 个中的 5 个 |
- KV 空间不是刚好两倍而是 1.74 倍,原因似乎是每个服务器上 KV 剩余的内存略有不同(该服务器的“用于 KV 的内存”这一行未记录,故无法确认)。在用 1.7B 测量的先前实测中,每个 Token 的字节数刚好是一半。
- 困惑度(Perplexity)上升了 1.3%,与权重 FP8 类似。
- 在贪婪输出中,六个复制提示词中有五个与 bf16 相同,有一个开始写了不同的内容:“The scheduler is a class with a method schedule() that …”。而在权重 FP8 中,六个复制都完全相同,因此在这个测试中,KV 端改变了更多的输出。连接随机单词的六个测试则全部不同。
5. 运维层面的建议
- 并发度越低的对话式服务,对权重量化的感知越明显。 在并发为 1 时为 1.36 倍的收益,在并发为 64 时为 1.08 倍。如果是通过大批次来提升吞吐量的批处理任务,批次和 KV 容量比量化更重要。
- 量化就是更换模型。 由于输出会发生变化,因此在开启前后必须运行自己任务的评估集。困惑度只是一个快速的初步检查。
- 在获取预先量化的检查点时,应查看其来源和格式。 Python pickle(
.bin,.pt) 权重在读取时可以执行代码,因此应选择 safetensors 版本,并记录其哈希值。 - 随着版本的更迭,名称也在发生变化。在 0.31.0 中,
--quantization fp8伴随着警告正在被移至fp8_per_tensor,而在 0.32.0 中引入了将检查点的量化层以不同精度重新量化的功能(未实测)。
6. 未验证的事项
- GGUF 和 bitsandbytes 需要获取新的检查点或包,因此未进行实测。GPTQ 4-bit、与 AWQ 同尺寸的 bf16 比较(4B bf16 无法放入该 GPU)也未进行实测。
- FP8 对任务准确率(问答、代码生成等)的影响未进行实测。由于本次模型用于重排序(Re-ranking),通用评估没有意义。
- 大模型带来的收益(预计权重占比更大,收益会更高)未进行实测。
参考资料
- vLLM 文档, Quantization, Online Quantization, Quantized KV Cache(0.31.0·0.32.0): https://docs.vllm.ai/en/latest/features/quantization/
- Micikevicius 等, 「FP8 Formats for Deep Learning」, 2022. https://arxiv.org/abs/2209.05433
- Lin 等, 「AWQ: Activation-aware Weight Quantization for LLM Compression and Acceleration」, MLSys 2024. https://arxiv.org/abs/2306.00978
- Frantar 等, 「GPTQ: Accurate Post-Training Quantization for Generative Pre-trained Transformers」, ICLR 2023. https://arxiv.org/abs/2210.17323
- 先前实测:用小模型亲自重新测量 vLLM