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基准,其存储开销比例为:

$$\frac{8 + 1}{16} = 0.5625$$


这意味着存储体积降至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 完整推理加速方案。其主要贡献与技术突破包括:

  1. 提出基于 NVFP4 的超低位宽 KV 缓存设计:首次在开源推理系统 SGLang 中完整实现了 NVFP4(4位浮点,E2M1)KV 缓存机制。利用 Blackwell 架构创新的双层缩放格式(每 16 个值共享一个 FP8 块级缩放因子,结合张量级 FP32 缩放因子),在大幅压缩缓存体积的同时精细保留动态范围,克服了传统 4-bit 量化精度严重受损的难题。
  2. 构建三路径协同的 SGLang 系统级执行流:针对不同推理阶段设计了高内聚的 Attention 执行路径:

    • 初始 Prefill(Initial prefill):注意力机制直接在未量化的 FP8 KV 上计算以保证精度,计算完成后异步量化为 NVFP4 写入持久化缓存;
    • 分块 Prefill 与扩展(Chunked prefill / Extend):跨层复用预分配的 FP8 工作空间(Workspace),将前缀 NVFP4 缓存反量化与当前分块拼接后执行计算;
    • 解码阶段(Decode):开创性地设计了算子内即时反量化(On-the-fly dequantization)机制,消除了单独反量化的显存读写往返开销。
  3. 针对 SM120 深度定制的 Decode Attention 算子:编写了高效的高性能解码算子,加载打包数据与 E4M3 块缩放因子至共享内存(Shared Memory),在寄存器层级利用硬件原生指令 cvt.rn.bf16x2.e2m1x2 进行高速解包与转换,将理论显存数据搬运量降至 FP8 的约 56.25%。

  4. 长上下文与复杂 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/设计原则

图 1. NVFP4 双层缩放(每块与每张量)量化策略
图 1. NVFP4 双层缩放(每块与每张量)量化策略

图 1. NVFP4 双层缩放(每块与每张量)量化策略


A2 方法细节

SGLang 中的 NVFP4 KV 缓存系统架构实现

图 2. SGLang 中的 NVFP4 KV 缓存实现架构
图 2. SGLang 中的 NVFP4 KV 缓存实现架构

图 2. SGLang 中的 NVFP4 KV 缓存实现架构

NVFP4 KV 解码注意力算子实现与开销建模

图 3. NVFP4 KV 注意力解码算子设计
图 3. NVFP4 KV 注意力解码算子设计

图 3. NVFP4 KV 注意力解码算子设计

$$\frac{8 + 1}{16} = 0.5625$$

换而言之,在处理完全相同数量的 K/V 元素时,NVFP4 的打包数据与块缩放因子的物理占用仅为 FP8 存储量的约 56.25%(即压缩掉了 43.75% 的显存消耗)。上述推导排除了可忽略不计的全局 FP32 缩放因子开销以及少量的系统内存池/工作空间开销。这从根本机理上解释了 NVFP4 能够大幅降低 GPU 显存读取流量、突破显存带宽瓶颈并显著提高解码执行效率的底层物理原因。


A4 实验环境

1. 数据集与基准测试

2. 模型架构与参数

3. 硬件配置

4. 软件配置与执行参数


A4 实验结果

1. 模型精度基准实验(Accuracy Benchmarks)

图 4. Qwen3.5-397B-A17B 精度评测基准
图 4. Qwen3.5-397B-A17B 精度评测基准

图 4. Qwen3.5-397B-A17B 精度评测基准

图 5. Qwen3.8-27B 精度评测基准
图 5. Qwen3.8-27B 精度评测基准

图 5. Qwen3.8-27B 精度评测基准

2. 解码性能基准实验(Decode Performance)

图 6. Qwen3.8-27B 等并发解码性能
图 6. Qwen3.8-27B 等并发解码性能

图 6. Qwen3.8-27B 等并发解码性能

图 7. Qwen3.8-27B 等容量负载解码性能
图 7. Qwen3.8-27B 等容量负载解码性能

图 7. 等容量负载解码性能

图 8. Qwen3.8-27B 在 32K/1K 序列下的帕累托前沿曲线
图 8. Qwen3.8-27B 在 32K/1K 序列下的帕累托前沿曲线

图 8. Qwen3.8-27B 在 32K/1K 序列下的帕累托前沿曲线

3. Prefill 阶段性能分析(Prefill Performance)

图 9. Qwen3.8-27B 上通过 TTFT 衡量的 Prefill 性能
图 9. Qwen3.8-27B 上通过 TTFT 衡量的 Prefill 性能

图 9. Qwen3.8-27B 上通过 TTFT 衡量的 Prefill 性能

4. 智能体工作负载评测(Agentic Workloads)

图 10. Qwen3.5-397B-A17B 上的 AgentX 性能表现
图 10. Qwen3.5-397B-A17B 上的 AgentX 性能表现

图 10. Qwen3.5-397B-A17B 上的 AgentX 性能表现

图 11. Qwen3.5-397B-A17B 上的 AgentX 输入 Token 缓存命中率分析
图 11. Qwen3.5-397B-A17B 上的 AgentX 输入 Token 缓存命中率分析

图 11. Qwen3.5-397B-A17B 上的 AgentX 输入 Token 缓存命中率分析


A7 补充细节

局限性与正在开展的工作(Limitations and Ongoing Items)

致谢(Acknowledgement)


A5 结论

本文系统性地阐述了在现代开源大语言模型推理框架中引入 NVFP4 KV 缓存的工程动机、系统架构与算子级实现方案。通过在包含 Qwen3.5-397B-A17B 与 Qwen3.8-27B 在内的多个代表性模型以及严苛的任务基准上进行对比评测,充分证明了相比于目前工业界主流采用的 FP8 KV 缓存,NVFP4 KV 能够凭借其近 56% 的显存物理尺寸压缩,从根本上打破长上下文自回归解码阶段的显存读取带宽壁垒,显著提升多并发处理吞吐量。更为关键的是,在复杂的长程多轮 Agentic 任务中,大幅压缩的缓存尺寸使得 GPU 显存能够驻留近 1.78 倍的历史前缀上下文,极大地提升了前缀缓存命中率,彻底消除了由于显存频繁驱逐引发的二次 Prefill 算力雪崩。

未来展望:

  1. 多硬件架构泛化:从 SM12x 和 SM100 架构向更广泛的计算平台推广演进。
  2. 新型注意力机制覆盖:完善对 Sparse GQA 等新型注意力机制的全面支持。
  3. 全局缩放因子动态校准:通过精确校准张量级 FP32 全局缩放因子,进一步压制数值截断误差,彻底抹平 4-bit 与 8-bit 的精度鸿沟。
  4. 混合低位宽量化配方:探索更多高阶 4-bit 量化与异常值保护配方,赋能更广泛的极限长文本与智能体应用部署。

A6 附录

复现步骤与环境搭建(Reproduction Steps)

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)

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)

# 测量前的预热执行(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 基准测试复现流程

需提前下载好模型权重,并确保评测环境有权访问基准数据集 semianalysis_cc_traces_weka_062126_256k。

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)处于启用状态。

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