模型多源确认79°

SGLang × Qwen × NVIDIA 三方合作:用 NVFP4 KV Cache 突破长上下文与 Agentic 推理瓶颈

SGLang × Qwen × NVIDIA 三方合作:用 NVFP4 KV Cache 突破长上下文与 Agentic 推理瓶颈 长上下文和 Agentic 场景下,KV Cache 是推理系统最...

精选理由

SGLang、Qwen和NVIDIA联手推出NVFP4 KV Cache,4-bit精度下1.78倍容量提升,长上下文推理提速近80%。

SGLang、Qwen与NVIDIA合作,将Blackwell架构的NVFP4格式应用于KV Cache,实现4-bit精度下保持推理性能。测试显示,Qwen3.5-397B-A17B大模型在NVFP4下几乎无精度损失,而Qwen3.8-27B在SWE-bench Verified上下降1.6个百分点。在RTX PRO 6000 Blackwell上,NVFP4的decode吞吐量提升26-78%,上下文越长收益越大,1M token时提升近80%。AgentX基准测试表明,并发超过12后,NVFP4相比FP8吞吐量持续上升,缓存命中率显著提高。

原文 · shao__meng

SGLang × Qwen × NVIDIA 三方合作:用 NVFP4 KV Cache 突破长上下文与 Agentic 推理瓶颈 长上下文和 Agentic 场景下,KV Cache 是推理系统最...

SGLang × Qwen × NVIDIA 三方合作:用 NVFP4 KV Cache 突破长上下文与 Agentic 推理瓶颈 长上下文和 Agentic 场景下,KV Cache 是推理系统最大的内存压力源:既要存得下,又要读得快。业界已有两条互补路线:分层缓存和 KV 量化。FP8 KV 已把占用相对 BF16 砍半,但再往下压到 4-bit,量化误差会显著放大,一直是难点。这篇博客的核心贡献是:把 NVIDIA 在 Blackwell 上推出的 NVFP4 格式落地到 SGLang 的 KV Cache 中,在 4-bit 精度下同时保住了精度和性能。 lmsys.org/blog/2026-09-1… # NVFP4 格式:两级缩放是关键 朴素 4-bit 量化的痛点是动态范围太窄。NVFP4 的解法是 两级缩放: · 数值本身用 4-bit E2M1(1 符号 + 2 指数 + 1 尾数); · 每 16 个值一个块,配一个 FP8 (E4M3) 的块级缩放; · 整个张量再配一个 FP32 全局缩放。 存储账很直观:16 个值打包占 8 字节,加上 1 字节块缩放,共 9 字节;而 FP8 同样 16 个值要 16 字节。即 9/16 ≈ 56.25% 的 FP8 占用,理想容量比约 1.78×。注意这不是 4-bit 理论上的 2×,那 1 字节的块缩放就是为精度付出的"税",这笔账算得很诚实。 # SGLang 实现:三条注意力路径 实现接入了 SGLang 的分页 KV Cache,按阶段分三条路径,设计上很讲究: 1. 初始 prefill:注意力直接用 BF16 Q × FP8 K/V 计算(不牺牲算力),同时把 KV 从 FP8 量化成 NVFP4 写入持久缓存。此阶段不读缓存,所以没有反量化开销。 2. 分块 prefill / extend:把缓存的前缀 gather 出来,反量化到一个跨层共享的 FP8 workspace,与当前块的 KV 拼在一起做 FP8 注意力;算完再把本块量化进 NVFP4 缓存。共享 workspace 是为了控制额外显存开销。 3. Decode:这是最关键的一环。Decode 是访存受限的,如果先反量化再计算,就多了一次完整的显存往返。因此 kernel 直接读 NVFP4,在 kernel 内部即时反量化到 FP8/BF16:打包的 K/V tile 和 E4M3 块缩放进 shared memory,用 cvt.rn.bf16x2.e2m1x2 指令在寄存器里成对转换,全局缩放则通过 BMM 的 scaling 参数传入。计算全程 BF16。 这套设计的核心思想可以概括为:prefill 阶段可以容忍一次量化的额外写入(因为是计算受限),decode 阶段则必须做到读多少算多少(因为是访存受限)。 # 精度:基本无感,但有一个值得注意的缺口 两组模型都配合 FP8 权重测试(--kv-cache-dtype nvfp4): · Qwen3.5-397B-A17B(大模型):几乎无差异。GSM8K 只少对 1 题(约 0.08 pp),GPQA-Diamond 和 AIME 2025 的合计正确数与 FP8 完全一致。 · Qwen3.8-27B(小模型):出现任务相关的退化。GSM8K −0.31 pp、GPQA −1.01 pp、AIME 持平(98.33%);最大的缺口在 SWE-bench Verified:76.20% vs 77.80%(−1.60 pp)。 团队的表述很克制且专业:两个模型、几个任务不足以建立"模型规模 vs 量化容忍度"的规律,任务级验证不可省略。尤其 SWE-bench 这类多轮、长轨迹的 agent 任务对 KV 误差更敏感,这个 −1.6 pp 是全文最值得使用者警惕的数字。 还有一个重要的说明:实验中 FP32 全局缩放被直接设为 1.0(未做校准)。也就是说,NVFP4 的两级缩放只用了其中一级。作者认为合理的校准(用满全局缩放)有可能缩小与 FP8 的差距,这意味着当前精度结果其实是 NVFP4 的"下界",还有免费的提升空间。 # 性能:收益随上下文长度放大 测试在单张 RTX PRO 6000 Blackwell 上,Qwen3.8-27B,固定输入 32K / 160K / 1M token、各输出 1K,关闭 radix cache。 等并发对比(两种格式驻留相同的 decode 请求数:44/10/1):NVFP4 的峰值 decode 吞吐提升 约 26–30%。这纯粹来自 KV 读取量减少,是最"干净"的收益。 等容量对比(同样的显存,尽量塞满):可驻留并发从 44→70、10→15、1→2;峰值 decode 吞吐分别提升 37.37% / 57.75% / 78.46%。规律非常清晰:上下文越长,收益越大。1M 上下文时提升近 80%,因为此时 KV Cache 几乎独占显存,压缩它等于直接扩大 batch。 Prefill(TTFT):等并发下 TTFT 仅增加 0.20–0.40%(量化/反量化的固定税,几乎可忽略);容量驱动负载下 TTFT 反而下降 0.74–10.72%,但作者明确指出这主要来自排队效应(更多请求能驻留),不是 prefill 算得更快。这个归因分析避免了常见的误导性宣传。 文中也有诚实提醒:decode 提升不等于端到端提速。prompt 很长时 prefill 仍占主导,收益会被稀释。 # Agentic 负载:真正的杀手级场景 在 AgentX 基准上(8× RTX 6000D,Qwen3.5-397B-A17B,TP8,并发 1–16 扫描),结果呈现明显的分水岭: · 并发 ≤ 8 时,NVFP4 与 FP8 相当; · 并发 > 12 后,FP8 的吞吐和交互性急剧恶化,而 NVFP4 吞吐持续上升。 背后的机制比数字本身更有洞察:agent 会话有大量可复用的共享前缀(系统提示、工具定义、历史轨迹)。显存更省意味着 radix tree 能保留更多前缀,缓存命中率远高于 FP8(Fig 11),从而避免昂贵的前缀重算。也就是说,NVFP4 在 agent 场景的收益是双重叠加的:既减少了 KV 读取量,又通过更高的缓存命中率减少了 prefill 重复计算。对正在大规模部署 agent 的团队来说,这是全文最有实用价值的结论。 LMSYS Org @lmsysorg 🚀New blog: Accelerating Long-Context and Agentic Inference with NVFP4 KV Cache 4-bit KV cache is here! NVFP4 KV in SGLang packs ~1.78× more context into GPU memory and speeds up long-context decode by up to 78%. Together with @Alibaba_Qwen and @nvidia , we brought NVFP4 KV cache to Blackwell: - NVFP4 stores KV in just ~56% of FP8's footprint per token -️ Decode throughput jumps +37% / +58% / +78% at 32K / 160K / 1M context - Near-lossless accuracy: matches FP8 on GPQA-Diamond & AIME 2025 (Qwen3.5-397B-A17B) - Higher cache hit rate keeps AgentX throughput scaling where FP8 drops off The whole recipe combines NVFP4 two-level scaling, in-kernel dequantization on decode, and paged KV cache, and you can enable it in SGLang with a single flag --kv-cache-dtype nvfp4 🔗 View Quoted Tweet 💬 1 🔄 0 ❤️ 3 👀 322 📊 1 ⚡