发表时间: 2026-05 · Blog post by Eldar Kurtić, Michael Goin, Alexandre Marques (Red Hat AI) (blog.vllm.ai)
原文: https://blog.vllm.ai/blog/2026-05-11-turboquant
作者/机构:Eldar Kurtić, Michael Goin, Alexandre Marques (Red Hat AI)
一句话结论
本文在 30B 到 200B+ 参数规模的大模型和长上下文、复杂推理任务上全面评估了 TurboQuant 键值缓存量化方法,发现其激进的低比特变体虽能大幅节省显存,但会带来严重的精度下降与延迟开销,而 FP8 依然是兼顾容量与性能的最佳默认选择。
要解决什么问题
大语言模型在长上下文生成和高并发服务时,键值缓存(KV-cache)会占用海量 GPU 显存,导致系统极易触及显存瓶颈,进而引发请求排队、首字延迟(TTFT)激增甚至系统崩溃。为了缓解显存压力,社区近期推出了 TurboQuant 这一极低比特(3 到 4 比特)的 KV-cache 量化方法,并宣称能大幅节省显存。然而,原有的评估做法存在明显的局限性:此前的测试大多局限于小规模模型,且仅在短上下文基准测试上运行。这种测试环境根本无法真正对 KV-cache 量化施加压力。在真实的生产环境中,模型规模往往在数百亿参数以上,且需要处理极长的上下文检索(如 256K 长度)或生成大量 token 的复杂推理任务。在这些极端场景下,极低比特量化是否会导致误差随序列长度累积而引发外推失效?复杂的解量化过程是否会拖慢系统吞吐量?原有做法无法回答这些关于精度掉点和并行度下降的核心机制问题,导致工程师在部署时缺乏可操作的真实数据指导。
怎么做的
本文的核心思路不是提出新的量化算法,而是构建一套严苛的压力测试体系,从机制底层拆解并对比不同 KV-cache 量化路线的真实代价。研究的关键设计围绕两种截然不同的量化架构展开。第一条路线是硬件原生的 FP8 KV-cache 量化,其机制是将查询、键和值均以 FP8 精度存储,并且直接调用 GPU 硬件原生的 FP8 Tensor Core 指令来完成注意力机制的矩阵计算。第二条路线则是本文重点考察的 TurboQuant 方法,其内核是“仅压缩存储,不改变计算精度”。TurboQuant 仅将 KV-cache 的存储压缩到极低的 3 到 4 比特,但在执行注意力计算之前,必须在内存读取阶段将其动态解量化回 BF16 精度。为了探究这种架构差异带来的影响,作者引入了四种具体的 TurboQuant 变体进行消融对比:k8v4(8 比特键,4 比特值)、4bit-nc(4 比特键值,带范数校正)、k3v4-nc(3 比特键,4 比特值,带范数校正)以及最激进的 3bit-nc(3 比特键值,带范数校正)。由于 TurboQuant 的核心机制是动态解量化,其计算复杂度与访问的 KV-cache 数据量强相关。我们可以将其单次注意力计算的开销抽象为访存与计算两部分:
其中 $N$ 为上下文长度,$d$ 为隐藏层维度,$b$ 为量化比特数。第一项代表从低比特存储中读取并解量化的访存开销,第二项代表 BF16 精度下的注意力计算开销。这种设计虽然绕开了低比特直接计算的精度损失,但意味着随着批处理大小和上下文长度的增加,解量化的开销会显著放大,从而可能成为限制吞吐量的新卡点。为了验证这一点,作者在 vLLM 框架下,针对预填充密集型的长上下文检索和解码密集型的复杂推理任务,全面测试了这些变体。
效果如何
实验在 2xH100 和 4xH100 硬件上搭建,选取了涵盖稠密与混合专家架构的四个模型:Llama-3.3-70B-Instruct、Qwen3-30B-A3B-Instruct-2507、Qwen3-30B-A3B-Thinking-2507 以及 200B+ 参数的 MiniMax-M2.7。对比基线为两条路线:代表不压缩上限的无量化 BF16,以及代表计算与存储双量化路线的 FP8。量化结果表明,FP8 依然是最佳默认选择:它能提供 2 倍的 KV-cache 容量,精度几乎无损,且在吞吐量上持平甚至超越 BF16。相比之下,TurboQuant 的表现存在明显的代价。在精度方面,对于 256K 长上下文检索任务,激进的 3bit-nc 变体会导致准确率从 BF16 的 45.8% 暴跌至 31.2%(相对下降约 30%);在 AIME25 等复杂推理任务上,k3v4-nc 和 3bit-nc 更是出现了高达 20 个百分点的严重掉点,证明低比特量化误差会在长生成任务中急剧放大。在性能方面,TurboQuant 降低存储成本并未转化为更快的服务速度。由于解量化开销,所有 TurboQuant 变体均会导致吞吐量下降,仅为 BF16 的 66% 到 80%,且延迟开销随批处理大小增加而增加(最高达 68% 的延迟惩罚)。作者承认的唯一有效场景是极度受限的显存环境:在突发高负载下,BF16 会因显存耗尽导致首字延迟飙升至 17 秒,此时 4bit-nc 变体能提供 3.4 倍的容量,将延迟压制在 3.5 秒以内。但即便如此,FP8 在该场景下依然能将延迟控制在 1.5 秒以内。因此,除非硬件显存极度匮乏且无法使用 FP8,否则不建议在生产环境中使用激进的 TurboQuant 变体。
本文针对近期在社区中获得广泛关注的KV-cache量化方法TurboQuant进行了首次全面的准确性与性能研究。此前的报告大多基于小型模型和短上下文基准测试,未能对KV-cache量化进行极限压力测试。为了向社区提供更具指导意义的数据,本文的研究目标是跨越不同规模(从30B到200B+参数)、不同架构(仅稠密模型和MoE模型)的四个模型,在包含重预填充(prefill-heavy)的长上下文检索和重解码(decode-heavy)的推理任务等五个基准测试上,全面评估TurboQuant的实际表现。
本文的核心创新点与贡献在于:通过构建详尽的帕累托前沿(Pareto frontier),系统性地量化了不同TurboQuant变体在内存节省与吞吐量/延迟之间的权衡关系,并将其与未量化的BF16基线以及FP8 KV-cache量化进行了深度对比,得出了在生产环境中部署KV-cache量化的最佳实践建议。
FP8与TurboQuant的架构差异。FP8 KV-cache量化(通过--kv-cache-dtype fp8启用)不仅对KV-cache的存储进行量化,还利用硬件原生的FP8 Tensor Core操作对注意力计算本身进行量化。与此形成鲜明对比的是,TurboQuant仅仅将KV-cache的存储压缩至$3$-$4$ bits,在进行注意力计算时,必须先将其反量化(dequantize)回BF16格式。这一核心的架构差异对模型的最终准确性和推理性能产生了深远的影响。
量化方案的配置与对比。本文对四种TurboQuant变体(通过--kv-cache-dtype turboquant_{k8v4, 4bit_nc, k3v4_nc, 3bit_nc}启用)与未量化的BF16以及FP8 KV-cache基线进行了基准测试对比。具体而言,turboquant_k8v4采用$8$-bit的键(keys)和$4$-bit的值(values);turboquant_4bit_nc采用带有范数校正(norm correction)的$4$-bit键和值;turboquant_k3v4_nc采用带有范数校正的$3$-bit键和$4$-bit值;而turboquant_3bit_nc则采用带有范数校正的$3$-bit键和值。FP8基线(--kv-cache-dtype fp8)将查询(queries)、键(keys)和值(values)均存储为FP8精度,并对注意力计算本身进行量化。
快速启动代码实现。以下是部署FP8和TurboQuant 4bit-nc变体的vLLM服务启动代码示例:
# 为所有层启用FP8 KV-cache
vllm serve MiniMaxAI/MiniMax-M2.7 --kv-cache-dtype fp8
# 启用TurboQuant KV-cache,并跳过最初和最后的两层
vllm serve MiniMaxAI/MiniMax-M2.7 --kv-cache-dtype turboquant_4bit_nc
数据集与基准测试:
openai/mrcr(一个具有挑战性的多轮上下文检索任务),测试序列长度直至每个模型支持的最大长度。模型架构:包含四个模型,涵盖小规模与大规模、稠密与MoE架构:Llama-3.3-70B-Instruct、Qwen3-30B-A3B-Instruct-2507、Qwen3-30B-A3B-Thinking-2507以及MiniMax-M2.7(参数量达200B+)。注:TurboQuant目前仅支持具有标准注意力机制(如GQA)的模型,尚不支持滑动窗口或混合注意力模型。
Qwen3-30B-A3B-Instruct-2507在2xH100上运行;Llama-3.3-70B-Instruct在4xH100上运行。0.20.2(commit 6ec9bbec3)。在openai/mrcr任务上,报告了每个序列长度桶在$5$次重复下的平均pass@1分数,以及作为聚合指标的曲线下面积(AUC)。
报告了平均pass@1分数:AIME25和LiveCodeBench-v6重复$10$次,GPQA:Diamond和MATH500重复$5$次。
使用vllm bench latency,输入长度$1024$,输出长度$256$,批量大小(batch sizes)分别为$1$、$8$、$32$和$64$。$10$次预热后进行$30$次测量。
使用vllm bench throughput,$200$个提示词,输入/输出长度对为:$256$/$256$、$1024$/$512$、$4096$/$256$。
使用vllm bench serve,输入$1024$,输出$512$,$300$个测量提示词,$5$次预热。请求率(request rates)设为$2$、$8$和inf(尽可能快地发送)。测量TPOT(每个输出Token耗时)和P99 TTFT(首个Token耗时)。
基于跨越准确性和性能基准的全面评估,本文得出以下关键发现与实用建议:
--kv-cache-dtype fp8)仍然是KV-cache量化的最佳默认选择。FP8提供了$2$倍的KV-cache容量且没有吞吐量成本,准确度损失可忽略不计,有时甚至通过量化注意力提高了性能。对于绝大多数工作负载而言,它是最安全且最可预测的选择。