Accelerating Long-Context and Agentic Inference with NVFP4 KV Cache
Accelerating Long-Context and Agentic Inference with NVFP4 KV Cache
发表时间: 2026-09 · Blog post by SGLang, Qwen, and NVIDIA teams (lmsys.org)
原文: https://lmsys.org/blog/2026-09-16-nvfp4-kv-cache
作者与机构:SGLang、Qwen 与 NVIDIA 团队(2026年9月16日)
速读
一句话结论 SGLang、Qwen与NVIDIA团队联合推出了基于Blackwell架构的NVFP4(一种结合块级与张量级缩放的4比特浮点格式)KV Cache(键值缓存)系统级方案,在几乎不损失大模型精度的前提下将KV缓存存储体积压缩至FP8的约56%,显著提升了长上下文解码吞吐与高并发智能体任务的处理能力。
要解决什么问题 大语言模型在长上下文与多轮智能体(Agent)场景中极度依赖KV Cache(用于保存历史键和值向量以供后续解码复用)来避免重复计算,但随着序列增长,KV Cache的显存占用与读取带宽成为核心卡点。在容量层面,有限的GPU显存无法持久驻留多轮对话的上下文,导致前缀缓存被频繁淘汰,在后续交互时被迫重新预填充(Prefill)而大幅推高首Token延迟;在带宽层面,自回归解码(Decode)阶段生成的Query极短而需要读取的KV极长,计算完全受限于显存读取带宽。现有工业方案广泛采用FP8量化以将体积缩减至BF16的一半,但若进一步转向传统的4比特量化,由于动态范围受限会引发严重的量化误差,破坏模型的生成精度与推理稳定性,难以在实际部署中落地。
怎么做的 核心思路是利用NVIDIA Blackwell架构原生支持的NVFP4数据格式,通过两级缩放控制局部动态范围以抑制量化误差,并在推理解析框架SGLang中针对不同阶段定制数据流与片上融合算子。NVFP4将数值量化为4比特E2M1浮点数,并结合两级缩放:每16个数值分配一个1字节的FP8(E4M3)块级缩放因子(Block Scale),外加一个张量级FP32全局缩放因子。每16个NVFP4元素仅占8字节数据和1字节块缩放,相对于16字节的FP8基准,其存储开销比例为:
这意味着存储体积降至FP8的约56%,理论容量扩大约1.78倍。在SGLang中,系统将分页KV Cache连接到三条计算路径:第一条是初始预填充(Initial Prefill),无历史缓存的Prompt直接使用投影后的FP8 KV参与注意力计算以避免量化开销,同时将FP8 KV量化为NVFP4异步写入持久缓存;第二条是分块预填充与扩展(Chunked Prefill/Extend),利用层间共享的FP8工作区,将NVFP4历史前缀反量化迁入工作区,与当前Chunk的新KV共同参与注意力计算,并将新KV量化写入缓存;第三条是解码(Decode),也是性能核心,设计了片上即时反量化(On-the-fly Dequantization)解码算子。算子直接把NVFP4缓存与块缩放载入共享内存,在寄存器中借助cvt.rn.bf16x2.e2m1x2硬件指令成对解包并转换至BF16,与缩放因子相乘后直接执行BF16矩阵乘法,完全绕开了将全部KV数据在显存中单独反量化读写的额外往返开销。
效果如何 评测基于单卡与8卡NVIDIA RTX PRO 6000 Blackwell Server Edition(96GB显存)运行,对比基线为工业界代表性的FP8 KV Cache(fp8_e4m3格式,两者模型权重均统一使用FP8),测试模型涵盖Qwen3.5-397B-A17B与Qwen3.8-27B。在精度基准上,Qwen3.5-397B-A17B的NVFP4在GPQA-Diamond和AIME 2025上正确数与FP8完全一致,GSM8K仅少答对1题(准确率下降约0.08个百分点);在较小的Qwen3.8-27B上,NVFP4在GSM8K下降0.31个百分点,GPQA-Diamond下降1.01个百分点,AIME 2025持平于98.33%,SWE-bench Verified解决率从FP8的77.80%微跌至76.20%(下降1.60个百分点)。在单卡Qwen3.8-27B长序列测试中(输入32K、160K、1M tokens,输出1024 tokens),等并发(Iso-concurrency)下减少KV读取使解码吞吐提升约26%–30%;在等显存容量负载(Iso-capacity)下,并发容纳能力大幅提高(32K并发从44提至70,1M从1提至2),峰值解码吞吐分别提升37.37%、57.75%与78.46%。在AgentX多轮智能体基准测试中(8卡TP8),当并发超过12时,FP8因显存不足触发缓存淘汰导致吞吐量断崖式下滑,而NVFP4凭借更高的缓存命中率保持吞吐持续提升。代价与局限在于:由于预填充阶段属于计算受限,等并发下首Token延迟(TTFT)因量化与反量化开销出现0.20%–0.40%的轻微上升;端到端加速受限于长提示词预填充耗时;当前实验将FP32全局缩放固定为1.0而未校准;目前硬件支持仅限SM12x及SM100/SM103架构,支持模型暂限GQA与Sparse MLA,对Sparse GQA等结构的适配仍在进行中。
A1 主要贡献
在现代大语言模型(LLM)推理系统中,键值缓存(KV Cache)是支持长上下文和智能体(Agent)多轮对话的核心组件。然而,随着上下文窗口的急剧扩大,KV 缓存的存储容量与显存读取带宽成为了严重的性能瓶颈。针对这一核心问题,SGLang、Qwen 和 NVIDIA 团队联合提出了基于 NVIDIA Blackwell 架构的 NVFP4 KV Cache 完整推理加速方案。其主要贡献与技术突破包括:
- 提出基于 NVFP4 的超低位宽 KV 缓存设计:首次在开源推理系统 SGLang 中完整实现了 NVFP4(4位浮点,E2M1)KV 缓存机制。利用 Blackwell 架构创新的双层缩放格式(每 16 个值共享一个 FP8 块级缩放因子,结合张量级 FP32 缩放因子),在大幅压缩缓存体积的同时精细保留动态范围,克服了传统 4-bit 量化精度严重受损的难题。
-
构建三路径协同的 SGLang 系统级执行流:针对不同推理阶段设计了高内聚的 Attention 执行路径:
- 初始 Prefill(Initial prefill):注意力机制直接在未量化的 FP8 KV 上计算以保证精度,计算完成后异步量化为 NVFP4 写入持久化缓存;
- 分块 Prefill 与扩展(Chunked prefill / Extend):跨层复用预分配的 FP8 工作空间(Workspace),将前缀 NVFP4 缓存反量化与当前分块拼接后执行计算;
- 解码阶段(Decode):开创性地设计了算子内即时反量化(On-the-fly dequantization)机制,消除了单独反量化的显存读写往返开销。
-
针对 SM120 深度定制的 Decode Attention 算子:编写了高效的高性能解码算子,加载打包数据与 E4M3 块缩放因子至共享内存(Shared Memory),在寄存器层级利用硬件原生指令
cvt.rn.bf16x2.e2m1x2进行高速解包与转换,将理论显存数据搬运量降至 FP8 的约 56.25%。 - 长上下文与复杂 Agent 场景下吞吐与命中率的突破:在 Qwen3.5-397B-A17B 和 Qwen3.8-27B 上进行了充分评测。结果表明,NVFP4 KV 缓存以极其微小的任务精度损失(如 GSM8K 仅下降 0.08~0.31%,AIME 2025 精度无损失),实现了峰值批处理解码吞吐量 37.37%~78.46% 的提升;在长程多轮 AgentX 基准测试中,由于能够容纳近 1.78 倍的上下文前缀,在高并发场景下大幅提高了前缀缓存命中率,彻底避免了由于频繁 Cache Eviction 导致的二次 Prefill 算力雪崩。
A3 背景知识/关键Observation/设计原则
-
KV 缓存是现代 LLM 推理系统的基石与瓶颈:在基于 Transformer 的现代 LLM 推理系统中,智能体(Agent)会话中多轮对话累积的上下文均以键(Keys)和值(Values)的形式缓存在 GPU 显存内,使得模型能够在后续的自回归解码(Decoding)步骤中复用这些历史表示。每当模型生成一个新的 Token 时,新的 Query Token 必须通过注意力机制检索并关注来自 KV 缓存中对应的所有历史 KV Token。然而,随着上下文长度从数千扩展至数十万乃至上百万,存储与读取这些海量的 KV 数据对 GPU 显存容量与显存读取带宽施加了巨大的压力。
-
缓解显存压力的两条互补技术路线:面对长上下文对显存施加的严峻压力,工业界与学术界形成了两种互补的应对策略:一是扩展缓存可用的存储层级,二是缩减每个 Token 所需存储的数据量。由于 GPU 显存虽然能够为活跃的 KV 数据提供极高的访问速度,但其绝对物理容量非常有限,服务系统在应对高并发用户或长时间运行的长程会话时,根本无法在 GPU 上永久驻留所有会话的缓存。层次化 KV 缓存技术(Hierarchical KV Caching,HiCache)通过将缓存层级扩展至主机内存(Host Memory)乃至分布式存储介质,使得系统能够在 GPU 显存之外保留海量的长程上下文。而在另一方面,KV 缓存量化(KV Cache Quantization)则从数据表示的密度切入;例如将 K/V 值的存储格式由标准的 BF16 压缩至 FP8,可以直接将内存占用减半,并成倍减少解码阶段从显存读取的字节数。当显存读取带宽成为整体解码吞吐量的瓶颈时,量化能带来显著的性能收益。然而,量化方案的核心权衡在于数值精度:更低的位宽必然引入量化噪声,必须确保该误差严格控制在不破坏模型有用行为的范围之内。虽然 FP8 KV 缓存目前已被广泛部署,但进一步向 4 位(4-bit)推进面临着极其艰巨的挑战,因为 4 位的量化误差远大于 8 位。
-
NVIDIA Blackwell 架构下的 NVFP4 数据格式及其硬件创新:为了解决超低位宽下的动态范围与量化精度衰减问题,NVIDIA 随其最新的 Blackwell 架构正式推出了 NVFP4 数据格式。NVFP4 格式创新地将 4 位 E2M1 数据格式与双层缩放机制(Two-level scaling)深度结合:该格式针对每连续 16 个数值构成的数据块引入一个独立的 FP8(E4M3)块级缩放因子(Block Scale),同时在整个张量层级引入一个额外的 FP32 全局缩放因子(Tensor-level Scale)。这种细粒度的局部量化控制赋予了该格式远超单一全局缩放因子的动态范围自适应能力,能够精准捕获局部异常值并最大化抑制量化噪声。此外,Blackwell 硬件原生提供了对 NVFP4 格式的高性能指令与计算支持,其极高的计算密度与出色的数值表示灵活性,使其成为实现极低开销 KV 缓存量化的理想底层载体。
图 1. NVFP4 双层缩放(每块与每张量)量化策略
A2 方法细节
SGLang 中的 NVFP4 KV 缓存系统架构实现
- 分页缓存与三条注意力路径的系统对接:SGLang 的底层实现将自身的分页 KV 缓存系统(Paged KV Cache System)与三条差异化的注意力计算路径(Attention Paths)完全打通并联动,这三条路径分别为初始 Prefill(Initial prefill)、分块 Prefill 或扩展(Chunked prefill / Extend)以及解码(Decode)。SGLang 核心调度器负责全权管理整个 NVFP4 缓存池及其辅助计算工作空间,且由于不同推理阶段的数据流与瓶颈特性截然不同,各注意力路径采用了高度定制化的数据流动方案。
图 2. SGLang 中的 NVFP4 KV 缓存实现架构
-
路径 1:初始预填充(Initial prefill)数据流与计算逻辑:初始 Prefill 路径专门负责处理尚未命中任何持久化缓存前缀的全新 Prompt。当输入序列经过 QKV 投影(Projection)与旋转位置编码(Positional Encoding)处理后,底层的注意力计算直接运行于当前 Prompt 的 BF16 精度 Query 张量与 FP8 精度的 Key/Value 张量之上。在执行该注意力计算的同时,当前的这组 Key/Value 张量会被同步执行量化操作,从 FP8 转换为 NVFP4 格式,并写入持久化的分页 KV 缓存池中,以便后续的上下文扩展或解码步骤直接复用。在此路径的设计中,尽管系统将量化后的 NVFP4 数据写入了持久化缓存池,但 Prefill 的注意力计算本身直接消费量化前的 FP8 KV 数据,因此在此阶段系统完全不需要从全局 KV 缓存中执行任何数据读取操作,从而兼顾了 Prefill 计算精度与缓存写入流水线。
-
路径 2:分块预填充与扩展(Chunked prefill / Extend)协同流:分块预填充(Chunked prefill)每次仅推进处理长 Prompt 的某一部分分块,而扩展(Extend)操作则是在现有的上下文历史后追加新的 Token 序列。在这两种工作场景下,注意力计算核心必须同时摄取两个不同的 KV 数据来源:一是已经持久化保存在缓存池中的前缀历史(Cached prefix),二是当前最新输入的分块(Current chunk)。对于已经缓存的前缀部分,SGLang 会搜集对应的离散 NVFP4 条目,执行反量化操作将其还原,并填充至一个预先开辟的 FP8 工作空间缓冲区(FP8 workspace)中。为了严密控制显存峰值开销,该对 Key/Value 工作空间缓冲区是在所有网络层之间全局共享复用的,彻底避免了为每一个网络层都分配一套独立 FP8 工作空间所造成的显存膨胀。而对于当前的新分块,其执行路径则有所不同:在经过 QKV 投影后,当前分块的 KV 数据会直接拷贝至该 FP8 工作空间中,随后注意力算子直接在 FP8 工作空间内整合完毕的完整 KV 视图上执行运算,其执行模式与初始预填充完全一致;与此同时,当前分块的新增 KV 数据也会被量化并追加存储到持久化 NVFP4 缓存池中以备后续解码使用。
-
路径 3:解码阶段(Decode)的算子内即时反量化设计:在自回归解码(Decode)阶段,注意力执行算子直接从显存中的 NVFP4 KV 缓存池中读取打包的 NVFP4 数据,并在算子内部的原语流水线中即时(On-the-fly)将其反量化至 FP8 乃至 BF16 格式,随后立即将解压后的数值送入下游的矩阵计算逻辑。因此,整个解码流程从根本上剔除了单独设立的反量化算子调用环节。与 Prefill 阶段相比,解码阶段的 Query 序列长度极短(通常仅为 1),而对应的 KV 历史序列长度通常极为庞大。在这种工作负载下,注意力算子的计算完全受限于显存读取带宽(Memory-read-bound)。通过将反量化逻辑内嵌融合在 Attention 算子内部,系统完美规避了先由独立算子完整读取并反量化写回显存、再由 Attention 算子二次读取的昂贵显存往返(Memory round-trip)开销,从而带来了解码吞吐的大幅提升。
NVFP4 KV 解码注意力算子实现与开销建模
- SM120 解码注意力核函数内部寄存器级流水线:针对 NVIDIA Blackwell 架构(SM120)定制的解码核函数直接摄取 BF16 精度的 Queries 以及打包格式的 NVFP4 KV 数据,并在 BF16 精度下执行后续的全部矩阵乘法运算。在算子内部的执行流程中,核函数首先将成块打包的 K/V Tiles 及其对应的 E4M3 格式块缩放因子协同载入至共享内存(Shared Memory)中;紧接着,计算线程在寄存器内部将打包数据解包并应用缩放变换。该实现调用了 Blackwell 架构底层的原生硬件指令
cvt.rn.bf16x2.e2m1x2,以极高的单周期吞吐量直接将成对存储的 4-bit E2M1 数值转换还原为一对 BF16 浮点数。与此同时,E4M3 块级缩放因子也被转换至 BF16 精度,核函数使用打包乘法指令(Packed multiply instructions)将这些缩放因子快速施加在成对的值上。随后,注意力矩阵乘法(BMM)算子直接在这些即时还原的 K/V 数据上执行计算,而整体张量级别的全局 K/V 缩放因子则直接作为注意力 BMM 矩阵乘法的全局缩放参数(Scaling parameters)注入计算流程中。
图 3. NVFP4 KV 注意力解码算子设计
- NVFP4 相比 FP8 显存存储占用与读取流量的定量推导:在 NVFP4 格式的具体存储布局中,每连续 16 个 NVFP4 数值需要占用 8 个字节的打包数据载荷,外加 1 个字节用于保存其对应的 E4M3 块缩放因子元数据。与之相对,在标准的 FP8 格式下,16 个数值直接占用 16 个字节的物理显存。由此可以得出精确的物理存储压缩比计算公式:
换而言之,在处理完全相同数量的 K/V 元素时,NVFP4 的打包数据与块缩放因子的物理占用仅为 FP8 存储量的约 56.25%(即压缩掉了 43.75% 的显存消耗)。上述推导排除了可忽略不计的全局 FP32 缩放因子开销以及少量的系统内存池/工作空间开销。这从根本机理上解释了 NVFP4 能够大幅降低 GPU 显存读取流量、突破显存带宽瓶颈并显著提高解码执行效率的底层物理原因。
A4 实验环境
1. 数据集与基准测试
- GSM8K:小学数学推理评测集,共使用 1,319 道题,保留 8 个样本作为 Few-shot Prompt 演示,实际计分评估 1,311 道题;评估执行 1 轮,采用 Temperature=0.6,Top-p=0.95,Top-k=20。
- GPQA-Diamond:高难度研究生级别专业科学推理基准,共 198 道高方差题目;为了消除任务方差,连续执行 2 轮评估并报告两轮汇总后的累计正确率。
- AIME 2025:美国数学邀请赛(AIME 2025 I/II)测试集,包含全部 30 道极高难度数学题;由于方差极高,同样执行 2 轮评估,并在思维/超强推理模式(Thinking/xhigh mode)下统计累计正确率。
- SWE-bench Verified:软件工程自动化 Issue 修复基准,包含 500 个经过严格人工验证的真实复杂软件缺陷修复任务,仅针对 Qwen3.8-27B 开展测试。
- 合成长上下文基准:固定长度性能测试,输入序列长度(ISL)分别固定为 32,768(32K)、163,840(160K)和 1,048,576(1M)Tokens,每个请求的输出序列长度(OSL)固定为 1,024 Tokens。使用随机 Token ID 生成,禁用 Radix Cache。
- AgentX 基准测试:采用 SemiAnalysis 提供的真实长程多轮 Agent 工作负载与生产数据集
semianalysis_cc_traces_weka_062126_256k,单次测试窗口持续 1,200 秒,并发度覆盖 1 至 16 进行全量扫描。
2. 模型架构与参数
- Qwen3.5-397B-A17B-FP8:超大规模混合专家架构(MoE),总参数量 397B,激活参数量 17B,原生采用 FP8 权重;原生最大上下文长度为 262,144 Tokens(在 1M 超长吞吐测试中通过显式上下文覆盖突破)。
- Qwen3.8-27B:中等规模稠密基准模型,模型权重使用 FP8 精度,原生最大上下文长度为 262,144 Tokens。
3. 硬件配置
- 单卡性能基准平台:1 张 NVIDIA RTX PRO 6000 Blackwell Server Edition GPU(基于 Blackwell 架构,计算能力 SM120)。
- 分布式集群平台:单节点配置 8 张 NVIDIA RTX 6000D GPU(单卡显存 96 GB),采用 Tensor Parallelism(TP8)并行方式互联,用于承载 Qwen3.5-397B-A17B 规模的模型评测与 AgentX 基准。
4. 软件配置与执行参数
- 核心推理系统:SGLang(测试锁定特定 Commit:
c8b56b1f44d5c5370f47470ee490da3b04375e1c),运行于支持 SM120 的 CUDA 环境。 - 注意力后端:Prefill 注意力后端采用 FlashInfer(
--prefill-attention-backend flashinfer);Decode 注意力后端采用 TensorRT-LLM MHA 架构(--decode-attention-backend trtllm_mha)。 - 显存与调度配置:短上下文测试下静态显存分配比例
--mem-fraction-static设定为 0.80 或 0.90;在 1M 极限长上下文测试中,NVFP4 将静态显存比例下调至 0.75,以预留临时 Prefill Workspace 空间;FP8 则维持在 0.90。 - 基准测试工具链:测试调用 SGLang 原生测试套件
sglang.test.run_eval、服务基准套件sglang.benchmark.serving,以及 SemiAnalysis 开源的评测套件 AgentX Harness(Commit:56a0cf70f4c0359454ee4bd15a17770b541a3e3e)。
A4 实验结果
1. 模型精度基准实验(Accuracy Benchmarks)
- Qwen3.5-397B-A17B 评测结果:在 397B 的超大模型上,FP8 与 NVFP4 KV 缓存的精度差异微乎其微。如图 4 所示,在 GSM8K 测试中,NVFP4 仅比 FP8 少做对 1 道题目,准确率差异约为 0.08 个百分点;在极高难度的科学推理 GPQA-Diamond 以及数学竞赛 AIME 2025 评估中,两轮测试的累计正确题目总数完全持平,没有任何精度下滑。
图 4. Qwen3.5-397B-A17B 精度评测基准
- Qwen3.8-27B 评测结果:在较小规模的 27B 模型上,精度对量化的敏感度因任务而异。如图 5 所示,在 GSM8K 上,NVFP4 比 FP8 低 0.31 个百分点;在 GPQA-Diamond 上低 1.01 个百分点;而在 AIME 2025 极高推理难度(Thinking/xhigh)模式下,NVFP4 保持了完全一致的 98.33% 超高正确率。在复杂的软件工程任务 SWE-bench Verified 中,在全部 500 个任务里,NVFP4 成功解决了 381 个任务(解决率 76.20%),FP8 解决了 389 个任务(解决率 77.80%),降幅为 1.60 个百分点。测试表明更大规模的模型表现出更低的量化敏感度,但在实际生产部署前仍建议进行特定任务的针对性验证。
图 5. Qwen3.8-27B 精度评测基准
2. 解码性能基准实验(Decode Performance)
- 等并发解码评测(Iso-concurrency):在强制固定调度器并发处理请求数(Concurrency)完全一致的条件下,测试了 32K、160K 和 1M 上下文(如图 6 所示,并发度分别固定为 44、10 和 1)。在此严苛对比下,由于 NVFP4 大幅削减了从显存读取 KV 缓存的带宽消耗,其峰值批处理解码吞吐量(Peak-batch decode throughput)在三个长序列尺度上均稳定提升了约 26% 至 30%。这直接证实了在纯受制于内存读取的解码阶段,减少数据搬运量能够直接转化为计算吞吐的提升。
图 6. Qwen3.8-27B 等并发解码性能
- 等显存容量负载解码评测(Iso-capacity):在同一张物理 GPU 上,充分释放由于 NVFP4 缓存压缩所带来的额外可用并发槽位。如图 7 所示,在 32K 输入长度下,系统能够支撑的解码并发数从 FP8 的 44 个跃升至 NVFP4 的 70 个;在 160K 下从 10 个增加至 15 个;在 1M 上下文下从 1 个倍增至 2 个。由此带来的峰值批处理解码吞吐量提升分别高达 37.37%(32K)、57.75%(160K)和 78.46%(1M)。
图 7. 等容量负载解码性能
- 帕累托前沿曲线分析(Pareto Curve):在 32K 输入/1K 输出的设置下,如图 8 所示,NVFP4 描绘出了全面优于 FP8 的帕累托前沿。在完全相同的请求并发度下,NVFP4 同时取得了更高的输出吞吐量(Tokens/s)以及更出色的交互响应度(Interactivity,即单位生成延迟更低);更进一步,NVFP4 具备运行在更高并发区间的物理能力,使得系统整体的总吞吐边界被大幅向外推展。
图 8. Qwen3.8-27B 在 32K/1K 序列下的帕累托前沿曲线
3. Prefill 阶段性能分析(Prefill Performance)
- 首字生成时间(TTFT)分析:由于 Prefill 阶段属于典型的计算密集型(Compute-bound)操作,且本次优化仅改动了 KV 缓存的存储数据类型,计算矩阵乘法的数据类型保持不变,因此 Prefill 计算本身无法直接获得算力加速。如图 9 所示,在等并发度测试中,NVFP4 的平均首字生成时间(TTFT)仅有 0.20%~0.40% 的微小增加,这部分开销完全来源于 KV 数据的量化/反量化指令消耗。
图 9. Qwen3.8-27B 上通过 TTFT 衡量的 Prefill 性能
- 容量驱动负载下的 TTFT 优势与端到端权衡:而在高负载的等容量场景下,NVFP4 的平均 TTFT 反而缩短了 0.74% 至 10.72%。其核心原因在于 TTFT 的整体统计涵盖了请求准入排队时间;由于 NVFP4 的缓存空间大幅扩容,等待释放显存槽位的排队阻塞大幅减少(例如在 1M 上下文下,NVFP4 能同时接纳 2 个完整长请求并发推进,而 FP8 只能排队容纳 1 个)。需要强调的是,对于超长 Prompt,Prefill 阶段的物理耗时往往主导整个端到端的请求响应耗时,因此解码吞吐的高倍数提升不应直接等同于端到端总延迟的同等比例缩减。
4. 智能体工作负载评测(Agentic Workloads)
- 多轮会话下的命中率与吞吐跃迁:Agent 场景的本质特征是交替出现的多轮 Extend 与 Decode,伴随包含工具调用返回与中间反思的漫长上下文历史。如果上下文前缀因显存不足而被逐出(Eviction),下一次调用将不得不重新执行极其昂贵的全量 Prefill 重算。NVFP4 在理论上将有效驻留容量提升至 FP8 的约 1.78 倍。在 8 卡 RTX 6000D 构成的集群上使用 TP8 评测 Qwen3.5-397B-A17B(如图 10 所示),当并发度较低($C \le 8$)时,由于显存池尚未填满,NVFP4 与 FP8 的系统吞吐和交互性表现相近;但当并发度提升至 12 以上时,FP8 显存发生严重拥塞并频繁驱逐历史前缀,导致吞吐量与交互响应性断崖式暴跌;而 NVFP4 凭借庞大的驻留容量,吞吐量保持稳定线性上升。
图 10. Qwen3.5-397B-A17B 上的 AgentX 性能表现
- 输入 Token 缓存命中率实证:图 11 对 AgentX 执行过程中的输入 Token 缓存命中率(Cache Rate)进行了定量剖析,直接印证了上述性能曲线的物理根因:在高并发区间,FP8 的缓存命中率迅速萎缩至极低水平,被迫频繁触发重新 Prefill 计算;而 NVFP4 凭借高密度存储保持了极高的缓存命中率,从而从根本上化解了长程 Agent 会话的服务雪崩风险。
图 11. Qwen3.5-397B-A17B 上的 AgentX 输入 Token 缓存命中率分析
A7 补充细节
局限性与正在开展的工作(Limitations and Ongoing Items)
-
底层 GPU 硬件架构的适配现状与演进路线:SGLang 当前对 NVFP4 KV 缓存的支持仍处于实验阶段,联合研发团队正在进行持续的高频迭代。在底层 GPU 架构支持方面,目前系统已完整支持 NVIDIA Blackwell 架构中的 SM12x 系列以及 SM100/SM103 系列。针对其他更多 GPU 硬件架构的指令级适配与优化正在按计划加紧开发中,具体的演进规划路线图已在 SGLang 官方仓库的 Issue #29913 中持续对外公开更新。
-
模型注意力变体架构的拓扑支持范围:在模型网络结构支持方面,当前的底层 Kernel 方案已全面覆盖并适配了分组查询注意力(Grouped-Query Attention,GQA)模型以及稀疏多头隐式注意力(Sparse Multi-Head Latent Attention,Sparse MLA)模型。为了进一步拓展适用范围,开发团队目前正着手将其适配扩展至更多前沿的模型注意力拓扑结构,包括稀疏分组查询注意力(Sparse GQA)等变体。
-
数值精度的进阶校准与多样化量化配方探索:在数值量化与精度恢复方面,目前的基准评测并未启用 NVFP4 格式所内建的每张量 FP32 全局缩放因子(为了工程实现的简洁性,系统直接将其固定设定为了常数 1.0)。未来通过引入标准严格的离线校准(Calibration)流程,有望极大消除极值带来的数值溢出(Overflow)或下溢(Underflow)现象,从而进一步弥合 NVFP4 与 FP8 KV 缓存之间残余的细微精度差距。此外,团队目前也正在积极实验除原生纯 NVFP4 KV 之外的更多 4-bit 量化改进配方,力求在特定对量化敏感的模型结构上达成更优的精度保持效果。
致谢(Acknowledgement)
- 跨团队核心贡献者名录与职责分工:本项技术成果是由 SGLang 社区、Qwen 算法团队以及 NVIDIA 系统软件架构团队三方深度协同合作完成的,各团队核心贡献者具体分工如下:
- SGLang 团队(负责整体架构设计讨论与核心代码审查):Baizhou Zhang, Brayden Zhong, Mick Qian。
- Qwen 团队(负责 FP4 KV Cache 量化配方与数值算法设计):Yizhong Cao, Yuxin Zhou, Yi Zhang, Chengruidong Zhang, Yuyan Luo, Jianwei Zhang。
- NVIDIA 团队(负责 FP4 KV 核心配方设计、底层 CUDA/PTX 核函数编写与硬件指令级极致优化):Tian Zheng, Sam Li, Perkz Zheng, Cheng Hang, Zane Sun, Triston Cao, Mengdi Wang, Zihua Wu, Meng Wang, Enwei Zhu, Ajit Mistry, Po-Han Huang, Jack Chen, Gary Ji, Chandler Zhou, Julien Demouth。
A5 结论
本文系统性地阐述了在现代开源大语言模型推理框架中引入 NVFP4 KV 缓存的工程动机、系统架构与算子级实现方案。通过在包含 Qwen3.5-397B-A17B 与 Qwen3.8-27B 在内的多个代表性模型以及严苛的任务基准上进行对比评测,充分证明了相比于目前工业界主流采用的 FP8 KV 缓存,NVFP4 KV 能够凭借其近 56% 的显存物理尺寸压缩,从根本上打破长上下文自回归解码阶段的显存读取带宽壁垒,显著提升多并发处理吞吐量。更为关键的是,在复杂的长程多轮 Agentic 任务中,大幅压缩的缓存尺寸使得 GPU 显存能够驻留近 1.78 倍的历史前缀上下文,极大地提升了前缀缓存命中率,彻底消除了由于显存频繁驱逐引发的二次 Prefill 算力雪崩。
未来展望:
- 多硬件架构泛化:从 SM12x 和 SM100 架构向更广泛的计算平台推广演进。
- 新型注意力机制覆盖:完善对 Sparse GQA 等新型注意力机制的全面支持。
- 全局缩放因子动态校准:通过精确校准张量级 FP32 全局缩放因子,进一步压制数值截断误差,彻底抹平 4-bit 与 8-bit 的精度鸿沟。
- 混合低位宽量化配方:探索更多高阶 4-bit 量化与异常值保护配方,赋能更广泛的极限长文本与智能体应用部署。
A6 附录
复现步骤与环境搭建(Reproduction Steps)
-
测试环境基准参数与模型权重说明:所有的复现测试示例均采用
Qwen/Qwen3.5-397B-A17B-FP8模型进行,部署于 8 张单卡显存为 96 GB 的 NVIDIA RTX PRO 6000 Blackwell Server Edition GPU 之上,并开启 8 卡张量并行(TP8)。在全部对比实验中,模型自身的权重参数始终固定保持为 FP8 格式不变,仅通过推理配置参数在fp8_e4m3与nvfp4之间切换 KV 缓存的数据类型。 -
系统依赖安装与 SGLang 服务端启动指令:运行环境需要具备支持 SM120 架构的 CUDA 工具链。安装 SGLang 框架及其评测依赖套件时,必须严格指定基准测试所锁定的 Git Commit 版本
c8b56b1f44d5c5370f47470ee490da3b04375e1c:
pip install --upgrade "sglang[test] @ git+https://github.com/sgl-project/sglang.git@c8b56b1f44d5c5370f47470ee490da3b04375e1c#subdirectory=python"
随后,执行如下命令启动后端推理服务,启用 FlashInfer 进行 Prefill,采用 TensorRT-LLM 架构的 MHA 执行 Decode,并启用 NVFP4 缓存:
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python -m sglang.launch_server \
--model-path Qwen/Qwen3.5-397B-A17B-FP8 \
--trust-remote-code --tp-size 8 --kv-cache-dtype nvfp4 \
--prefill-attention-backend flashinfer \
--decode-attention-backend trtllm_mha \
--disable-radix-cache --context-length 262144 \
--mem-fraction-static 0.8 --reasoning-parser qwen3 \
--random-seed 20260826 --watchdog-timeout 3600 \
--host 127.0.0.1 --port 8005
待后台服务完全启动就绪后,在另一终端即可发起下游的精度、吞吐与 Agent 基准评测脚本。此时模型权重及基准测试数据集将由客户端自动完成拉取下载。
精度评测复现指令(GSM8K, GPQA-Diamond, AIME 2025)
- 三大精度基准执行命令与采样超参数:使用 SGLang 内置的评测执行入口
sglang.test.run_eval,针对三个数据集分别发起测试。其中 GSM8K 采用 8-shot 配置,评估 1,319 个样例并排除前 8 个演示项;GPQA 重复评测 198 题共 2 轮;AIME 2025 评测全部 30 题共 2 轮:
python -m sglang.test.run_eval --base-url http://127.0.0.1:8005 \
--eval-name gsm8k --num-examples 1319 --num-shots 8 \
--num-threads 1319 --max-tokens 10240 --repeat 1 \
--temperature 0.6 --top-p 0.95 --top-k 20
python -m sglang.test.run_eval --base-url http://127.0.0.1:8005 \
--eval-name gpqa --num-examples 198 --num-threads 512 \
--max-tokens 81920 --repeat 2 \
--temperature 0.6 --top-p 0.95 --top-k 20
python -m sglang.test.run_eval --base-url http://127.0.0.1:8005 \
--eval-name aime25 --num-examples 30 --num-threads 512 \
--max-tokens 81920 --repeat 2 \
--temperature 0.6 --top-p 0.95 --top-k 20
吞吐量性能评测复现指令(32K Input / 1K Output)
- 合成数据集下的服务端基准压测流程:在相同服务器实例上,通过
sglang.benchmark.serving发送 128 个并发请求,固定每个请求包含 32,768 个输入 Token 与 1,024 个输出 Token。客户端使用合成随机 Token ID 驱动并在默认情况下忽略 EOS 结束符。评测前先执行 1 轮 Warmup 预热,随后正式发起测试并导出详细性能指标日志:
# 测量前的预热执行(Warm up)
python -m sglang.benchmark.serving \
--backend sglang --base-url http://127.0.0.1:8005 \
--model Qwen/Qwen3.5-397B-A17B-FP8 \
--dataset-name random-ids --tokenize-prompt \
--random-input-len 32768 --random-output-len 16 --random-range-ratio 1 \
--num-prompts 1 --max-concurrency 1 --request-rate inf \
--temperature 0 --seed 20260826 --flush-cache
# 正式吞吐量评估
python -m sglang.benchmark.serving \
--backend sglang --base-url http://127.0.0.1:8005 \
--model Qwen/Qwen3.5-397B-A17B-FP8 \
--dataset-name random-ids --tokenize-prompt \
--random-input-len 32768 --random-output-len 1024 --random-range-ratio 1 \
--num-prompts 128 --max-concurrency 32 --request-rate inf \
--temperature 0 --seed 20260826 --flush-cache \
--output-details --output-file nvfp4-32k-1k.jsonl
若需执行 FP8 Baseline 对照实验,仅需在服务端将启动参数替换为 --kv-cache-dtype fp8_e4m3 并重新启动服务执行上述相同压测。此处并发度 32 仅为示例测试点,并非极限峰值吞吐上限。
AgentX 基准测试复现流程
- 第 1 步:环境隔离与软件版本锁定:AgentX 依赖两个相互隔离的独立运行环境,分别安装特定 Commit 的 SGLang 与 SemiAnalysis AgentX Harness:
- SGLang 版本 Commit:
c8b56b1f44d5c5370f47470ee490da3b04375e1c - AgentX Harness 版本 Commit:
56a0cf70f4c0359454ee4bd15a17770b541a3e3e
- SGLang 版本 Commit:
需提前下载好模型权重,并确保评测环境有权访问基准数据集 semianalysis_cc_traces_weka_062126_256k。
- 第 2 步:启动支持 Agent 指标汇报的 SGLang 服务:在 SGLang 专属环境中启动服务。在针对一种 KV 数据格式(先测试
fp8_e4m3,全量扫描完毕后停止并切换为nvfp4重复执行)测试时,必须开启指标汇报与缓存报告特性(--enable-metrics与--enable-cache-report):
export MODEL_PATH=/path/to/Qwen3.5-397B-A17B-FP8 export KV_DTYPE=fp8_e4m3 # 随后替换为 nvfp4 重复测试 export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python -m sglang.launch_server \ --model-path "$MODEL_PATH" \ --served-model-name Qwen/Qwen3.5-397B-A17B-FP8 \ --trust-remote-code --tp-size 8 \ --kv-cache-dtype "$KV_DTYPE" \ --prefill-attention-backend flashinfer \ --decode-attention-backend trtllm_mha \ --context-length 262144 --mem-fraction-static 0.8 \ --reasoning-parser qwen3 --random-seed 20260827 \ --watchdog-timeout 3600 \ --enable-metrics --enable-cache-report \ --host 127.0.0.1 --port 8005
启动完毕后通过访问 /server_info 接口,核验 TP8 并行度、KV 数据类型无误,并确保层次化缓存处于禁用、Radix 树前缀缓存(Radix Cache)处于启用状态。
- 第 3 步:执行多并发自动化压测脚本:在另一个加载了 AgentX 评测环境的独立终端中,配置匹配的系统环境变量,对并发度列表($C \in \{1, 4, 8, 12, 13, 14, 16\}$)执行循环自动化测试。在每个测试并发点发起前,强制向服务端发送
/flush_cache请求执行冷重置以排除历史干扰,并在评测执行前后导出 Prometheus 监控指标:
export MODEL_PATH=/path/to/Qwen3.5-397B-A17B-FP8
export KV_DTYPE=fp8_e4m3 # 需与当前正在运行的服务端保持一致
export AIPERF_DATASET_CONFIGURATION_TIMEOUT=1800
export AIPERF_SERVICE_PROFILE_CONFIGURE_TIMEOUT=1800
export AIPERF_HTTP_KEEPALIVE_TIMEOUT=4
export AIPERF_HTTP_TCP_USER_TIMEOUT=1000000
set -euo pipefail
for C in 1 4 8 12 13 14 16; do
OUT="results/${KV_DTYPE}/c${C}"
mkdir -p "$OUT"
# 在运行每个并发测试点前必须完成服务端的缓存冷重置
RESET=$(curl -fsS -X POST http://127.0.0.1:8005/flush_cache)
[[ "${RESET,,}" == *"cache flushed"* ]] || { echo "$RESET"; exit 1; }
curl -fsS http://127.0.0.1:8005/metrics > "$OUT/metrics_before.prom"
aiperf profile \
--scenario inferencex-agentx-mvp \
--url http://127.0.0.1:8005 \
--model Qwen/Qwen3.5-397B-A17B-FP8 \
--tokenizer "$MODEL_PATH" --endpoint-type chat \
--public-dataset semianalysis_cc_traces_weka_062126_256k \
--concurrency "$C" --benchmark-duration 1200 --streaming \
--system-idle-gap-cap-seconds 10.0 \
--trajectory-start-min-ratio 0.0 --trajectory-start-max-ratio 1.0 \
--cache-bust first_turn_prefix --use-server-token-count \
--extra-inputs ignore_eos:true --random-seed 20260707 \
--burst-phase-starts --ui simple --artifact-dir "$OUT/profile"
curl -fsS http://127.0.0.1:8005/metrics > "$OUT/metrics_after.prom"
# 评测数据导出完毕后,清空服务端残留的任务与显存占用
curl -fsS -X POST http://127.0.0.1:8005/abort_request \
-H 'Content-Type: application/json' -d '{"abort_all":true}'
done
方法细节与系统设计中的关键文献/库引用汇总
| 引用实体/技术 | 涉及模块/位置 | 原文描述内容与作用 | 来源/链接/文献标识 |
|---|---|---|---|
| Hierarchical KV Caching (HiCache) | 引言 / 背景知识 | 原文描述:"Hierarchical KV Caching (HiCache) extends the cache hierarchy into host memory and distributed storage, allowing the system to retain more context beyond the GPU." 用于指出通过向 Host 内存和分布式存储扩展缓存层级来突破 GPU 显存限制的互补路线。 | SGLang 官方文档:https://docs.sglang.io/docs/advanced_features/hicache |
| KV Cache Quantization | 引言 / 背景知识 | 原文描述:"KV cache quantization addresses the other side of the problem. Storing K/V values in FP8 instead of BF16 roughly halves the data footprint and reduces the bytes read during decoding." 指出低位宽压缩减少显存足迹和解码读取带宽开销的技术路径。 | SGLang 官方文档:https://docs.sglang.io/docs/advanced_features/quantized_kv_cache |
| NVFP4 数据格式 | 引言 / 背景设计 | 原文描述:"NVIDIA introduced the NVFP4 data format with the Blackwell architecture... combines four-bit E2M1 values with two levels of scaling: an FP8 scale for each block of 16 values and an additional FP32 tensor-level scale." 阐述其利用 Blackwell 架构双层缩放实现 4-bit 浮点极低量化误差的机理。 | NVIDIA 官方开发者博客:https://developer.nvidia.com/blog/introducing-nvfp4-for-efficient-and-accurate-low-precision-inference/ |
cvt.rn.bf16x2.e2m1x2 指令 |
方法细节 / Decode Kernel 实现 | 原文描述:"It uses cvt.rn.bf16x2.e2m1x2 to convert pairs of E2M1 values to BF16... Packed multiply instructions apply scaling factors to pairs of values." 详细指出了在 Blackwell SM120 寄存器级实现极速低延迟解包的核心底层硬件原生汇编指令。 |
NVIDIA Blackwell PTX ISA / 硬件架构指令集 |
| FlashInfer | 方法细节 / Prefill 阶段与复现环境 | 原文参数:--prefill-attention-backend flashinfer。系统在 Prefill 计算路径中指定的高性能前向注意力计算后端。 |
SGLang 核心集成后端库 |
| TensorRT-LLM (trtllm_mha) | 方法细节 / Decode 阶段与复现环境 | 原文参数:--decode-attention-backend trtllm_mha。系统在自回归解码阶段指定的高性能多头注意力算子集成实现。 |
NVIDIA TensorRT-LLM 算子库 |
| AgentX Harness | 实验评测 / Agent 场景复现 | 原文描述:采用 SemiAnalysis 提供的专用 Agent 测试框架与脚本,锁定 Git Commit:56a0cf70f4c0359454ee4bd15a17770b541a3e3e。 |
SemiAnalysis 官方开源仓库:https://github.com/SemiAnalysisAI/agentx-harness |
| SGLang 硬件支持路线图 | 补充细节 / 局限性与规划 | 原文描述:"We currently support SM12x and SM100/SM103. Enabling additional architectures is on the way. The roadmap can be found here." | SGLang 社区官方 Issue:https://github.com/sgl-project/sglang/issues/29913 |
💬 评论讨论
欢迎在这里分享您的想法和见解!