[RFC]: FlashInfer NVFP4 KV serving on pre-SM100 GPUs

在 Ampere/Hopper(pre-SM100)或 SM120 显卡上,用 --kv-cache-dtype nvfp4 启动 vLLM + FlashInfer 时,可能遇到 “kv_cache_dtype not supported” 或缺少 FlashInfer NVFP4 slot-ma

快速结论:在 Ampere/Hopper(pre-SM100)或 SM120 显卡上,用 --kv-cache-dtype nvfp4 启动 vLLM + FlashInfer 时,可能遇到 “kv_cache_dtype not supported” 或缺少 FlashInfer NVFP4 slot-mapping 更新的报错,优先排查 attention backend 选择、FlashInfer 版本以及本机是否走 native NVFP4 更新路径。

适用环境:Issue 中确认涉及 vLLM、FlashInfer(0.6.14 nightly / 0.6.15 及以上含相关 helper)、--kv-cache-dtype nvfp4、FLASHINFER attention backend;实测硬件为 RTX 3090(SM86)和 RTX PRO 6000(SM120),Qwen3-0.6B / Qwen3.6 / Gemma 4 类负载,enforce_eager。Issue 未给出确认可用的 CUDA、PyTorch、Python 版本,需自行按 vLLM 官方要求核对。

最快修复方案:暂无确认的一步修复方案。可优先尝试把 FlashInfer 升级到包含 nvfp4_quantize_append_paged_kv_cache_with_slot_mapping 和 nvfp4_kv_dequantize_paged 的版本(0.6.15 起已进入稳定发布),并确认 attention backend 为 FLASHINFER。

注意事项:SM120 上走的是 slot-mapping fallback 路径,不是 native TRT-LLM 路径;Hopper 侧作者没有硬件验证;量化 KV cache 输出与 bf16-KV 基线存在量化级差异属预期现象。vLLM 对 FlashInfer 的版本 pin 会变化,需以所用 vLLM 版本的依赖要求为准。

问题场景

用户在 vLLM 中以 FlashInfer 为 attention backend,启用 --kv-cache-dtype nvfp4 服务大上下文模型(如 Qwen3.6、Gemma 4、Qwen3-0.6B),目标是在 pre-SM100(Ampere/Hopper)甚至 SM120 显卡上使用 NVFP4 KV cache,以获取约 3 倍 KV cache 容量收益。触发问题的典型情况有两种:一是 backend 选择器认为该显卡没有任何支持的 attention backend;二是 FlashInfer 版本过旧,缺少 NVFP4 paged KV append / dequant 所需 helper,导致初始化失败。

报错原文

kv_cache_dtype not supported

FlashInfer NVFP4 slot-mapping KV cache update is required

原因分析

可能原因一:FlashInfer 的 NVFP4 KV cache 更新在设计中分为 native 路径与 slot-mapping fallback 路径。早期实现中 native 路径的启用条件依据 SM 家族号(如 SM100/SM120),而 SM120 当时并没有可用的 native 路径,于是被错误地排除在所有路径之外,backend 选择器对所有候选都报 kv_cache_dtype not supported。后续修复把 native 路径的启用条件改为 can_use_trtllm_attention 在 prefill 和 decode 下都为真,其余情况回退到 slot-mapping writer。

可能原因二:所用 FlashInfer wheel 中不含 nvfp4_quantize_append_paged_kv_cache_with_slot_mapping 与 nvfp4_kv_dequantize_paged,vLLM 无法完成 slot-mapping 路径的 KV 更新,从而抛出 FlashInfer NVFP4 slot-mapping KV cache update is required。Issue 中提到 0.6.12/0.6.13/0.6.14 早期版本均缺少这些 helper,0.6.15 起才随稳定版发布。

环境排查

  • 确认显卡与 SM 架构:SM86(RTX 3090)、SM120(RTX PRO 6000)在 Issue 中有实测记录;Hopper 未在该讨论中硬件验证。
  • 确认 vLLM 版本及其对 FlashInfer 的依赖 pin,Issue 中提到 pin 曾从 0.6.13 迁移到 0.6.15、再到 0.6.16.post3。
  • 确认 FlashInfer 版本是否包含 nvfp4_quantize_append_paged_kv_cache_with_slot_mapping 和 nvfp4_kv_dequantize_paged。
  • 确认 attention backend 是否为 FLASHINFER,以及启动参数中是否有 --kv-cache-dtype nvfp4 与 enforce_eager。
  • CUDA、PyTorch、Python 版本 Issue 未明确给出,需按 vLLM 对应版本的官方要求核对。

解决步骤

  1. 先确认当前报错属于哪一类:若 backend 选择器对 FLASHINFER 报 kv_cache_dtype not supported,重点排查 native 路径的启用条件;若初始化时提示缺少 slot-mapping 更新,重点排查 FlashInfer 版本。
  2. 把 FlashInfer 升级到包含上述两个 helper 的版本(Issue 中 0.6.15 已随稳定版发布,无需 nightly 或源码 checkout)。若暂时无法升级到该版本,可优先尝试 FlashInfer nightly wheel,并配合 FLASHINFER_DISABLE_VERSION_CHECK=1,但该做法仅为版本绕过,Issue 中已说明 helper 进入稳定发布后不再需要。
  3. 确认所用 vLLM 版本已将 FlashInfer pin 提升到含 helper 的版本;若 vLLM 仍固定在旧版本,升级 vLLM 或核对其依赖声明。
  4. 若在 SM120 上仍无法选择 backend,请确认所用 vLLM 已包含 native gate 修复(改为依据 can_use_trtllm_attention,而不是仅按 SM 家族号判断)。
  5. 使用 Qwen3-0.6B 等小模型做最小复现:FLASHINFER backend、--kv-cache-dtype nvfp4、enforce_eager,先验证能否正常启动并生成。

验证方法

启动日志中不再出现 kv_cache_dtype not supported 和 slot-mapping helper 缺失报错,模型能正常加载并生成连贯文本;用约 2K token 的 needle-recall 提示词,检查能否通过量化页精确召回目标内容,可说明 paged read 路径正常。另可做负向对照:在缺少 helper 的 wheel 上应复现 FlashInfer NVFP4 slot-mapping KV cache update is required,以此确认当前实际走的是 slot-writer fallback 路径而非 native 路径。输出与 bf16-KV 基线的差异应仅为量化级差异。

参考来源

vllm-project/vllm #47684

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 34867

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注