vLLM 社区近期 100 个未关闭重要 Issues 分析
数据来源:github.com/vllm-project/vllm/issues 抓取时间:2026 年 10 月 13 日 筛选条件:
is:issue is:open,按创建时间倒序取前 100 个 当前未关闭 issue 总数:2703
一、总体概览
近期 vLLM 社区的 open issues 集中反映了几个核心方向的痛点:
| 类别 | Issue 数量 | 严重程度 |
|---|---|---|
| 推测解码 (Speculative Decoding) | 12 | 高 |
| DeepSeek-V4.1 模型支持 | 10 | 高 |
| API 兼容性(Responses API / Anthropic API / Tool Calling) | 14 | 中高 |
| 量化 / 精度问题 | 9 | 高 |
| KV Cache / 连接器 | 11 | 高 |
| CUDA Graph / 编译 | 6 | 高 |
| 多模态 | 6 | 中高 |
| ROCm / AMD GPU | 6 | 中高 |
| 性能优化 | 8 | 中 |
| LoRA | 3 | 中 |
| Intel XPU | 2 | 中 |
| 安装 / 兼容性 | 7 | 中 |
| 新硬件支持 (SM120 / GB10 / Jetson) | 5 | 中高 |
| 其他 (RFC / 文档 / CPU 后端等) | 8 | 低-中 |
二、分类详细分析
2.1 推测解码 (Speculative Decoding) — 12 个
涉及 DSpark、Eagle、MTP、Dynamic SD 等多种推测解码方案。
核心问题
| # | Issue | 问题摘要 | 评论 |
|---|---|---|---|
| #63439 | [RFC] Reduce CPU overhead in Model Runner V2 for long-context P/D serving | P/D 分离部署下 decode GPU 空闲 17%,CPU 侧 per-request Python 列表/GC 成为瓶颈 | 1 |
| #63359 | [RFC] Use session Agent Hints to reuse prompt tokens and block hashes | Agent 场景每次对话都要重新 tokenize + 构建 block hash,即使 KV 已缓存 | 0 |
| #63157 | [Spec Decode][DeepSeek-V4.1] Support DSpark with pipeline parallelism | DSpark 在 PP 下被 capability check 拒绝,引擎无法初始化 | 1 |
| #63128 | [Bug][Spec Decode] MTP draft 在 PP 下 embedding 未初始化导致接受率崩溃 | 0 | 1 |
| #63152 | [Tracking] Dory looped model: per-request loops, spec decode, GB10 perf | Dory 模型推测解码、循环、GB10 性能跟踪 | 0 |
| #63004 | [RFC] add eagle4 spec decode | 请求集成 EAGLE-4 推测解码 | 1 |
| #62939 | [Bug][MRV2] DSpark + adaptive verification 启动崩溃 | max_num_batched_tokens < max_num_seqs × draft rows 时 device assert | 3 |
| #62793 | [Bug] MRV2 adaptive verification 降低 Eagle3 接受率 | draft-prefill CUDA graph padding 不匹配 | 0 |
| #62818 | [RFC] Preserve output distribution under structured-output + spec decode | 结构化输出 + 推测解码时输出分布被破坏 | 3 |
| #62694 | [Feature] Support model-based drafters (target hidden states) via custom_class | custom_class 不支持需要 target hidden states 的 drafter (DFlash, Orthrus) | 0 |
| #62740 | [Feature] Measure the Dynamic SD table instead of writing it by hand | Dynamic SD 表需手写,用户无法知道是否适配自己的 GPU/模型 | 0 |
| #62707 | [Bug] v0.25.1 流式输入超 max_model_len 产生负 token count 崩溃 V2 runner | 1 |
分析与解决方向
- CPU 开销瓶颈 (#63439, #63363, #63359):长上下文 P/D 场景下,Python
list[int]持有 prompt token 的双份拷贝导致 GC 暂停随 prompt 长度线性增长。解决方向:(1) 用array.array或torch.Tensor替代 Python list 存储 token ids;(2) 引入 session-level agent hints 复用已缓存的 block hash,避免重复 tokenize。 - PP 兼容性 (#63157, #63128):DSpark 和 MTP 在 pipeline parallelism 下存在根本性限制——
_maybe_share_embeddings只在pp_world_size==1时共享,draft-only checkpoint 的 embedding 未初始化。需要扩展 embedding 共享逻辑到 PP 场景。 - Adaptive verification (#62939, #62793):MRV2 的 adaptive verification 在
max_num_batched_tokens较小时触发 device-side assert;同时 draft-prefill CUDA graph 与 verifier 的 padding 不一致导致接受率下降。需要在 graph capture 阶段统一 padding 策略。 - EAGLE-4 集成 (#63004):社区请求将 EAGLE-4 加入 vLLM,需评估其 API 与现有
custom_class机制的兼容性。 - 结构化输出 + 推测解码 (#62818):当前
StructuredOutputManager的三步流程在同步/异步调度下可能破坏输出分布,需要设计在 grammar validation 不 commit state 的前提下保持分布正确性。
2.2 DeepSeek-V4.1 模型支持 — 10 个
DeepSeek-V4.1 是近期重点支持的新模型,围绕它有大量 bug 和兼容性问题。
| # | Issue | 问题摘要 | 评论 |
|---|---|---|---|
| #63343 | [Bug][SM120] enable_adaptive_verification 在 SM120 被拒绝 | device-query-lens 只支持 SM90/SM100 | 4 |
| #63340 | [Feature][ROCm] Mono decode: enable MI350P (gfx950, 128 CUs) | 128 CU 的 MI350P 需要不同 grid 配置 | 2 |
| #63276 | [Bug] DS V4.1 Flash1017 输出错误数字 | 数字序列 echo 不稳定 | 1 |
| #63250 | [Bug] DeepSeek-V4.1-Flash(-1017) 返回 U+FFFD | 12 token prompt 返回替换字符,TP8+EP, 8xH20 | 1 |
| #63240 | [Question] Qwen4Exp PLE n-gram table 密集 bf16 材料化 | 能否保持在 pinned host memory 中压缩 | 1 |
| #62965 | [Feature] Capture DSv4.1 decoder replay graphs on model graphs’ stream | replay graph 在独立 stream 捕获,不共享 graph pool | 0 |
| #62935 | [Bug] DS-V4.1-Flash-1017 GB300 长 agent 回复陷入重复循环 | 1 | |
| #62811 | [Bug] DS-V4.1 chunked prefill 最后一块走 PIECEWISE CUDA graph 输出错误 | 0 | |
| #62839 | [RFC] Fuse DSpark confidence-head GEMV into single TileLang kernel | 融合后 kernel 延迟降低 ~1.9x | 1 |
| #62939 | (见推测解码) DSpark + adaptive verification 启动崩溃 | 3 |
分析与解决方向
- 输出正确性 (#63276, #63250, #62935, #62811):多个 issue 报告 V4.1-Flash 在不同配置下输出错误——数字漂移、U+FFFD 替换字符、重复循环、chunked prefill 最后一块 CUDA graph 路径错误。这些指向 piecewise CUDA graph 捕获/回放逻辑 的根本性缺陷,尤其在边界条件(最后一块 prefill chunk 很小)下。解决方向:(1) 对 PIECEWISE graph 的最后一块强制使用 eager 或 FULL 模式;(2) 修复 split-KV combine kernel 的 tile scheduler 使用 capture-time dummy batch 的问题 (#62626)。
- 新硬件适配 (#63343, #63340):SM120 (Blackwell RTX PRO 6000) 的 adaptive verification 被 device-query-lens 门控拒绝;MI350P (gfx950, 128 CUs) 的 mono decode kernel 需要调整 grid width。解决方向:扩展
resolve_tiling()支持 128-CU 架构,移除 SM 级别的硬门控改为 capability-based 检查。 - 性能优化 (#62965, #62839, #63240):decoder replay graph 应共享 model graphs 的 stream 以复用 graph pool;DSpark confidence-head GEMV 可融合为单个 TileLang kernel 延迟降低近 2x;Qwen4Exp PLE n-gram table 可保持在压缩 pinned host memory 中减少 GPU 显存占用。
2.3 API 兼容性(Responses API / Anthropic API / Tool Calling)— 14 个
vLLM 的 OpenAI 兼容层和 Anthropic 兼容层存在大量协议偏差和 parser 一致性问题。
| # | Issue | 问题摘要 | 评论 |
|---|---|---|---|
| #63358 | Hermes tool parser: streaming vs non-streaming 不一致 | 有效 tool call 后跟 malformed <tool 区域时两条路径结果不同 |
0 |
| #63356 | Chat derender 忽略 --response-role, add_generation_prompt: false, echo |
总是返回 role: "assistant" |
0 |
| #63346 | Streaming chat 对 tool_choice: "none" 仍返回 tool calls |
batch 正确丢弃,stream 不丢弃 | 1 |
| #63309 | Hermes tool parser streaming 丢弃 << 后所有内容 |
prose 中出现 << 标记时静默丢弃 |
1 |
| #63331 | Anthropic /v1/messages: inline system 消息合并导致 prefix cache 失效 | Claude Code 每轮都 miss prefix cache | 1 |
| #63310 | Responses API 拒绝无 type 字段的 assistant input items |
客户端 (ECA/Emacs) 发送的历史格式被 400 拒绝 | 0 |
| #63185 | Responses API 拒绝 include: ["web_search_call.*"] |
虽然 web_search tool 被接受 |
0 |
| #63184 | Responses API: reasoning.summary 总是返回空数组 |
接受并回显但 reasoning items 的 summary 始终为 [] |
1 |
| #63183 | Responses API: completed responses 不带 completed_at 字段 |
0 | |
| #63130 | Strict serde 拒绝 reasoning + reasoning_content 重复字段 |
Agent harness 回显两个字段时 Rust 前端 400 | 3 |
| #62830 | [Bug] Anthropic API /v1/messages 忽略 assistant prefill | 关闭最后一轮 assistant 并新开一轮 | 1 |
| #62639 | [Bug] Responses API: tool_choice=allowed_tools 不工作 |
3 | |
| #62641 | [Usage] 变更工具集时避免完整 prompt 重处理 | 0 | |
| #62743 | K2 Horizon reasoning parser 只接受请求 effort 的结束标签 | 模型用 </ifm\|think> 关闭 medium/low thinking 时 reasoning 泄漏 |
0 |
分析与解决方向
- Streaming vs Non-streaming 一致性 (#63358, #63346, #63309):多条 issue 都指向同一根因——batch 路径通过
assemble_chat_message_fields()过滤 tool calls,而 streaming 路径绕过了这个逻辑。解决方向:抽取共享的 tool-call 过滤逻辑,确保两条路径使用同一套规则。 - Responses API 字段缺失 (#63183, #63184, #63185, #63310):
completed_at、reasoning.summary、web_search_call.*include 等多个 OpenAI Responses API 字段未实现或实现不完整。需要逐项对齐 OpenAI API 规范,补全 protocol model 字段。 - Anthropic API 兼容性 (#63331, #62830):(1) inline system 消息合并到 leading system prompt 导致 prefix cache 失效——需要在合并时保留可缓存边界;(2) assistant prefill 被忽略——
/v1/messages应支持 prefill 语义,保留最后一轮 assistant turn 不闭合。 - Rust 前端 serde 严格性 (#63130):
reasoning_content作为reasoning的 serde alias 导致同时出现两个字段时被 serde 拒绝。解决方向:改为#[serde(alias = "reasoning_content", alias = "reasoning")]或在反序列化前做 dedup。
2.4 量化 / 精度问题 — 9 个
| # | Issue | 问题摘要 | 评论 |
|---|---|---|---|
| #63043 | Native FlashInfer BF16 Q + 非 unit q_scale 产生 garbage output | FP8 KV 下 q_scale 被错误应用 | 0 |
| #62820 | FlashInfer fp4_gemm autotune 改变 temperature=0 token | Qwen3.8-27B NVFP4 (SM120) | 1 |
| #62851 | Qwen3.6 GDN greedy DFlash2 批次依赖数值偏差 + preemption/recompute | 3 | |
| #62803 | D3 checkpoint loaded as Qwen3.5 产生均匀 decision scores | 1 | |
| #62762 | [Performance] XPU block FP8: W8A16 比 W8A8 快 64% | decode 35→58 tok/s | 1 |
| #63240 | (见 DSv4.1) Qwen4Exp PLE n-gram table 密集 bf16 | 1 | |
| #63000 | 长上下文生成中途以 <\|im_end\|> 停止 |
Qwen3.8-27B fp8 KV cache | 1 |
| #62707 | (见推测解码) v0.25.1 流式输入超限崩溃 | 1 | |
| #62677 | v0.32.0 官方镜像: deepep_v2 ZeroDivisionError | ibstat 带宽检测失败 | 0 |
分析与解决方向
- FlashInfer q_scale bug (#63043):FP8 KV cache 下,当 Q 为 BF16/FP16 且未经 FP8 量化时,
_q_scale_float仍被传入 attention kernel,非 unit scale 错误改变了 attention 输出。修复方向:在 Q 不是 FP8 时强制q_scale=1或跳过 scale 传递。 - NVFP4 autotune 非确定性 (#62820):FlashInfer fp4_gemm 的 autotune 会选择不同 kernel 配置,导致 temperature=0(greedy)下 token 发生变化。需要固定 autotune cache 或在 greedy 模式下跳过 autotune。
- GDN fp16 溢出 (#62851, #62781):Qwen3.5/3.6 GDN 在 fp16 下长上下文 needle 测试 0/9,溢出导致 attention 输出错误。已有修复 (#54146/#62119) 但未覆盖 XPU 路径。需要在 GDN linear attn 路径加入 fp32 中间计算或 clamp。
- W8A16 vs W8A8 (#62762):Intel XPU 上 block FP8 的 W8A8 路径比 W8A16 慢 40%。解决方向:在 XPU 上默认使用 W8A16 路径(
apply_input_quant=False)。
2.5 KV Cache / 连接器 — 11 个
| # | Issue | 问题摘要 | 评论 |
|---|---|---|---|
| #63336 | [RFC] MoRIIO transfer contract: safe KV reclamation for P/D | READ 模式 60s 后释放 block 但 decode 可能仍在读 | 1 |
| #63149 | [Tracking] KV event correctness and compatibility | 跨架构/推测解码 KV 事件可靠性跟踪 | 8 |
| #63037 | [Bug] Reused OffloadKey 从延迟 BlockStored 事件丢失 metadata | 0 | |
| #63006 | [RFC] Reduce descriptor/WR overhead for Mooncake KV transfer | Mooncake 比 NIXL 慢 35-67% | 4 |
| #63058 | [Feature] keep_tags for CuMemAllocator.sleep | 保留 kv_cache 映射只 offload weights | 2 |
| #62862 | [Performance] MultiConnector 禁用 divergent local hybrid cache hits | NixlConnector + OffloadingConnector 组合时 decode 侧本地缓存命中被禁用 | 0 |
| #62931 | [Bug] Tiered KV offload: 二级 tier hit 大于 CPU tier 时加载 0 | 0 | |
| #62808 | [Bug] LMCacheConnectorV1 不转发 shutdown(),LMCache 不停止 | EngineCore 被 force-kill | 2 |
| #62810 | [RFC] Expose allocator-issued KV block generations to async connectors | block_id 复用后无法验证 DMA 目标有效性 | 0 |
| #62866 | [Doc] MooncakeStoreConnector 文档未提及 kv_load_failure_policy | 默认 “fail” 导致 load 失败返回空响应 | 0 |
| #63020 | (见安装) flint NVFP4 GGUF checkpoint serving 需 workarounds | 2 |
分析与解决方向
- KV 事件正确性 (#63149, #63037):这是一个 tracking issue,覆盖 attention block、recurrent checkpoint、partial hit、speculative rollback 等场景的 KV 事件可靠性。核心目标是让下游消费者(Dynamo、llm-d、vLLM Router)能准确判断哪些 cache entry 仍然驻留。需要系统性修复事件发布/恢复路径。
- MoRIIO 安全释放 (#63336):RDMA KV 传输中,READ 模式 prefill 在 60s 后释放 block 但 decode 可能仍在异步读取,导致读到其他请求的 KV。需要引入显式 ownership transfer contract——在 decode 确认完成前不释放。
- Mooncake 带宽优化 (#63006):大量小 transfer descriptor + 串行 WR 构建/post 导致 Mooncake 比 NIXL 慢 35-67%。优化方向:(1) 批量合并小 transfer 为大 WR;(2) 并行化 WR 构建与提交;(3) 减少 descriptor 数量。
- Connector 生命周期 (#62808, #63037):LMCacheConnectorV1 未实现
shutdown();OffloadKey 从延迟事件丢失 metadata。需要补全 connector 的生命周期管理方法,并确保事件顺序的正确性。 - Block generation 暴露 (#62810):block_id 复用后无法验证异步 DMA 目标有效性。建议为
KVCacheBlock增加 generation number,让 connector 能验证 block 是否仍属于原始 allocation。
2.6 CUDA Graph / 编译 — 6 个
| # | Issue | 问题摘要 | 评论 |
|---|---|---|---|
| #62811 | (见 DSv4.1) chunked prefill 最后一块走 PIECEWISE graph 输出错误 | 0 | |
| #63052 | [Bug] PIECEWISE capture 在废弃 stream 上残留 warmup activations | 0 | |
| #62626 | [Bug] cudagraph_mode=FULL + FA3 split-KV 返回错误 logits |
combine kernel tile scheduler 从 capture-time dummy batch 选择 | 1 |
| #62939 | (见推测解码) DSpark adaptive verification 启动崩溃 | 3 | |
| #62793 | (见推测解码) MRV2 adaptive verification 降低 Eagle3 接受率 | 0 | |
| #62865 | [Bug] Compile mode 2 + Transformers backend 产生错误 kernel | 0 |
分析与解决方向
- FULL graph + FA3 split-KV (#62626):capture-time dummy batch 的 tile scheduler 与实际 runtime 的 split 数不匹配,导致 combine kernel 输出错误 logits。临时方案:设
flash_attn_max_num_splits_for_cuda_graph=1关闭 captured graph 内的 split-KV。根本修复:在 graph replay 时重新选择 tile scheduler。 - PIECEWISE 边界 (#62811, #63052):chunked prefill 的最后一块(可能只有 10 个 token)在 PIECEWISE graph 路径下输出错误;capture stream 被废弃后 warmup activations 未清理。需要在 capture 后正确释放临时资源,并对边界 chunk 使用不同路径。
- Compile mode 2 (#62865):Transformers backend 在 compile mode 2 下生成错误 kernel,可能是 inductor 的 kernel 融合与 vLLM 的自定义 op 产生冲突。
2.7 多模态 — 6 个
| # | Issue | 问题摘要 | 评论 |
|---|---|---|---|
| #63414 | [Bug] compile_mm_encoder 对 RADIO/NaViT encoder 致命崩溃 | 第一张图片请求即 EngineDeadError | 0 |
| #63187 | [Bug] 多模态 pruning: encoder 计算预算被 placeholder count 扣减 → CUDA OOM | 2 | |
| #62969 | [Bug] Video pruning (EVS): M-RoPE positions 在 chunk 内部错误 | 2 | |
| #62968 | [Bug][PaliGemma] mm_prefix 双向 range 只覆盖 image tokens 不含 instruction | 0 | |
| #62937 | [Bug] Qwen3-VL video pruning: M-RoPE recompute 提前 num_timestamp_tokens+1 | 0 | |
| #62705 | [Bug] DiffusionGemma 对 image tokens 使用 causal attention | config 要求 bidirectional | 1 |
分析与解决方向
- M-RoPE 位置计算 (#62969, #62937):video pruning 时 M-RoPE 的位置重计算在 chunk 边界处出错——当 placeholder 的外层
<|vision_start|>标签被保留时,recompute 起始位置偏移了num_timestamp_tokens + 1。需要修复recompute_mrope_positions()的 chunk 边界逻辑。 - Encoder 编译 (#63414):
compile_mm_encoder=true对 RADIO/NaViT encoder 在首次图片请求时崩溃,NoneTypeattribute error。需要处理编译路径中 encoder 无mm_encoder属性的情况。 - Pruning 计算预算 (#63187):多模态 pruning 时 encoder 的计算预算被已 pruned 的 placeholder count 扣减,导致单步发送数倍于 profiled 的 patches 到 ViT,引发 CUDA OOM。需要改为按实际 patch 数而非 placeholder 数扣减。
- Bidirectional attention (#62968, #62705):PaliGemma 的 prefix 应包含 image + instruction(整体 bidirectional),但 vLLM 只对 image tokens 建立 bidirectional range;DiffusionGemma 的 image token 应 bidirectional 但被 causal 处理。需要将 bidirectional range 扩展到完整 prefix。
2.8 ROCm / AMD GPU — 6 个
| # | Issue | 问题摘要 | 评论 |
|---|---|---|---|
| #63340 | (见 DSv4.1) Mono decode enable MI350P (128 CUs) | 2 | |
| #63336 | (见 KV Cache) MoRIIO transfer contract safe KV reclamation | 1 | |
| #63049 | [Bug] TritonW4A16 GEMM 在 M×N 或 M×K > 2^31 时 fault | int32 row offset 溢出 | 1 |
| #62828 | [Bug] ROCM_ATTN sliding-window kernel 对 NaN/Inf KV slot 输出 NaN | 0 | |
| #62697 | [Bug] ROCM_ATTN 在 RDNA head size ≥ 96 + block ≠ 16 返回错误 attention | 可 fault GPU | 2 |
| #62844 | [Installation] Gemma4 多模态在 ROCm 0.32.0 因视频编码器内存预留过多无法启动 | 2 |
分析与解决方向
- Triton int32 溢出 (#63049):
triton_w4a16_gemm_kernel的offs_m = pid_m * BLOCK_M + tl.arange(...)在 int32 下当 M×K 或 M×N 超过 2^31 时溢出。修复:将 offset 计算改为 int64。 - ROCM_ATTN NaN 传播 (#62828):sliding-window 层中,window 外的 KV slot 被 mask(softmax weight=0)但仍然被加载,如果该 slot 含 NaN/Inf 会污染 softmax 计算。修复:对 masked slot 在加载后用 0 覆盖。
- RDNA 兼容性 (#62697):RDNA4 (gfx1201) 上 HIP paged-attention kernel 只支持 head 128 / block 16 / GQA 3-16,其余走 Triton fallback,但 fallback 在 head size ≥ 96 + block ≠ 16 时返回错误结果或 fault。需要扩展 HIP kernel 支持的 layout 范围或修复 Triton fallback。
2.9 性能优化 — 8 个
| # | Issue | 问题摘要 | 评论 |
|---|---|---|---|
| #63399 | [Performance] FlashInfer workspace 从 394→32 MiB,KV cache +21% | 4 并发 16K input,batch 完成时间 -5~6% | 1 |
| #63198 | [Performance] SM100 prefill indexer: BF16 logits → FP32 top-k 多一次 pass | BF16-native top-k 快 20-25% | 0 |
| #62919 | [Performance] Mamba2 continued prefill 密集 initial-state 材料化 | 可用 indexed gather 替代 | 0 |
| #62768 | [Performance] RoutedExperts.load_weights 每次调用重建 expert mapping | runai_streamer 下 ~95k 次重建,50s | 4 |
| #62862 | (见 KV Cache) MultiConnector 禁用 divergent local hybrid cache hits | 0 | |
| #62752 | [Performance] hybrid Attention/Mamba decode block 转换时不必要 preemption | 1 | |
| #62689 | [RFC] Layered prefill: split prefill across decoder layer groups | 替代 chunked prefill 降低 MoE expert 重载 | 0 |
| #63006 | (见 KV Cache) Mooncake KV transfer bandwidth 优化 | 4 |
分析与解决方向
- FlashInfer workspace sizing (#63399):启动时将 workspace 从默认 394 MiB 缩减到 32 MiB 可回收 21% KV cache 容量。建议根据 GPU 显存动态计算 workspace 大小。
- BF16-native top-k (#63198):DeepGEMM 返回 BF16 logits 后,prefill indexer 先 upcast 到 FP32 再做 top-k,浪费了 DeepGEMM 的加速。实现直接读取 BF16 的
top_k_per_row_prefill可快 20-25%。 - Expert mapping 缓存 (#62768):
RoutedExperts.load_weights每次调用都重建 expert mapping,在runai_streamer按张量交错到达时产生 ~95k 次重建。修复:缓存 mapping 和 index,仅在首次调用时构建。 - Layered prefill (#62689):传统 chunked prefill 按 token 维度切分,每个 chunk 都要重载所有层的 expert weights。Layered prefill 按 layer 维度切分,一次推进一大批 token 通过一组 layer,减少 expert weight 重载次数。这是对 MoE 模型 prefill 吞吐的架构级优化。
- Mamba2 initial state (#62919):continued prefill 时
torch.where材料化整个 dense state 张量,可用 indexed gather + scatter 避免全量临时分配。
2.10 LoRA — 3 个
| # | Issue | 问题摘要 | 评论 |
|---|---|---|---|
| #63285 | [Bug] SEQ_CLS adapters (modules_to_save=null) 加载崩溃 | classifier.weight 被误解析为 LoRA B 条目 | 0 |
| #63278 | [Bug] BERT seq classification 丢弃 bert.pooler.dense 上的 LoRA | #61279 后 pooler 保持 nn.Linear | 0 |
| #62801 | [Bug] MoE LoRA 接受不兼容的 round-robin expert placement + EP | LoRA 加载假设 contiguous ownership | 0 |
分析与解决方向
- SEQ_CLS adapter 解析 (#63285):PEFT 的
SEQ_CLStask type 总是将classifier加入modules_to_save,但 vLLM 不读task_type,导致classifier.weight被误解析为 LoRA B 条目(无对应 A)。修复:在 LoRA name 解析时检查task_type并正确处理modules_to_save字段。 - Pooler LoRA 丢失 (#63278):
all-lineartarget_modules 训练的 adapter 会在bert.pooler.dense上放 LoRA,但 vLLM 将该层保持为nn.Linear不支持 LoRA。需要将 pooler 层也纳入 LoRA 支持范围。 - MoE LoRA + EP (#62801):round-robin expert placement 与 LoRA 的 contiguous ownership 假设不兼容。需要在启动时检测不兼容的 placement 并拒绝或自动转换。
2.11 新硬件支持 (SM120 / GB10 / Jetson / Ascend) — 5 个
| # | Issue | 问题摘要 | 评论 |
|---|---|---|---|
| #63343 | (见 DSv4.1) SM120 adaptive verification 被拒绝 | 4 | |
| #63267 | [Bug] Jetson Thor (sm_110) 无 FA extensions 启动崩溃 | vllm_flash_attn import 时报错 | 1 |
| #62984 | [Bug] b12x 1.5.1 paged-priming compile 崩溃 engine-core | unguarded fake_mode | 1 |
| #63011 | [Bug] b12x attention backend head_dim 64 全部崩溃 | 无有效 NUM_MMA_KV typed shared-memory 分配 | 0 |
| #63003 | [Bug] MiniMax-M3 ViT mRoPE on Ascend A5 UB 容量耗尽 | 0 |
分析与解决方向
- Jetson / sm_110 (#63267):无 FA extensions 的平台上
vllm_flash_attn在 import 时就崩溃,但 FA 仍被自动选为 attention backend。修复:(1) import 时 graceful degradation;(2) 在无 FA extensions 时自动 fallback 到其他 backend。 - b12x backend (#62984, #63011):b12x 1.5.1 在 paged attention + chunked prefill 下
fake_mode未保护导致编译崩溃;head_dim 64 无有效 shared-memory 分配。需要 b12x 上游修复 + vLLM 侧增加 fallback 逻辑。 - Ascend A5 (#63003):MiniMax-M3 的 ViT mRoPE 在 BLOCK_N=32 时超出 Unified Buffer 容量。需在 vllm-ascend 插件侧调整 block size。
2.12 安装 / 兼容性 — 7 个
| # | Issue | 问题摘要 | 评论 |
|---|---|---|---|
| #63121 | [Bug] torchcodec 未 pin 版本,cu129 镜像拉到 CUDA-13 wheel | vllm serve 无法启动 | 2 |
| #62842 | [Installation] cu129 nightly 安装困难 | 总是拉到 cu13 库 | 0 |
| #62844 | (见 ROCm) Gemma4 多模态 ROCm 0.32.0 内存预留过多 | 2 | |
| #62848 | [Bug] DeepSeek-OCR Triton CompilationError: LOG2E |
v0.32.0 | 0 |
| #62677 | (见量化) v0.32.0 deepep_v2 ZeroDivisionError | 0 | |
| #63020 | (见 KV Cache) flint NVFP4 GGUF serving 需 workarounds | 2 | |
| #63019 | [Bug] “Loading weights took” 日志显示 raw clock 而非耗时 | 197518 秒 | 1 |
分析与解决方向
- torchcodec 版本 pin (#63121):cu129 镜像中 torchcodec 未 pin 版本,pip 解析到 CUDA-13 的 wheel,链接
libnvrtc.so.13在 CUDA-12.9 环境下崩溃。修复:在requirements/build/cuda.txt或 image build 时固定 torchcodec 版本到 cu129 变体。 - Triton LOG2E (#62848):DeepEncoder 的 rel-pos attention kernel 使用了
math.LOG2E全局变量,Triton jit 函数无法访问全局变量。修复:将LOG2E改为硬编码常量或tl.constexpr。 - 日志 bug (#63019):
DefaultLoader不从 weights iterator 拉取时,计时器记录的是 raw clock(~主机 uptime)而非实际加载耗时。修复:正确记录 start/end 时间差。
2.13 其他 — RFC / 文档 / CPU 后端等
| # | Issue | 问题摘要 | 评论 |
|---|---|---|---|
| #63140 | [RFC] Stream request-level prefill progress over gRPC | 让 Router 的 kv_aware 策略用 worker 上报的 prefill 进度 | 0 |
| #62815 | [Feature] Qwen4Exp PLE cpu_offload without UVA | NVIDIA Confidential Computing 下 UVA 不可用 | 0 |
| #63057 | [Feature] Worker.sleep device-wide memory check 应 warn 而非 assert | 多实例共享 GPU 时 false positive | 0 |
| #63164 | [Feature] Cohere grounding citations on derender paths | derender 路径丢失 grounding citations | 0 |
| #63162 | [Bug] return_tokens_as_token_ids 在 derender 路径被忽略 |
2 | |
| #62776 | [Bug] Qwen3.8-Flash-Next GB10: 超过 indexer_budget (2048) 的 prompt 不可见 | 8 | |
| #62687 | [Bug] CPU backend: seeded request + chunked prefill 崩溃 | torch.Generator 不支持 get_offset() |
1 |
| #62645 | [Bug] 加载另一个 config alias 改变已加载 config 的 model_type | 2 | |
| #62640 | [RFC] Improve MTP configuration warning | 当前警告过于激进且无具体建议 | 0 |
分析与解决方向
- indexer_budget 截断 (#62776):Qwen3.8-Flash-Next 的 indexer 默认 budget 2048 token,超出部分对模型”不可见”。这是架构级问题——indexer 只看前 2K token 决定 top-k 路由,但需要确认是否应为长上下文场景增大 budget 或实现分层索引。
- CPU 后端 seed + chunked prefill (#62687):
torch.Generator.get_offset()在 CPU 上不支持,chunked prefill 切分带 seed 的 prompt 时崩溃。修复:在 chunked prefill 下禁用 seed 或改用确定性采样。 - Config alias 污染 (#62645):加载新的 config alias 会修改已加载 config 的序列化
model_type。这是一个全局状态污染 bug,需要在 config 加载时做深拷贝隔离。
三、关键趋势与建议
3.1 趋势总结
-
DeepSeek-V4.1 是当前最大痛点来源:10 个 issue 直接相关,涉及输出正确性、新硬件适配、推测解码集成、性能优化等多个维度。V4.1 的 piecewise CUDA graph 路径有系统性缺陷。
-
推测解码生态快速扩张但稳定性不足:DSpark、Eagle3/4、MTP、Dynamic SD 等多种方案并存,但 PP 兼容性、adaptive verification、graph padding 等方面都有未解决的 bug。
-
API 兼容性债务累积:Responses API 大量字段未实现或实现不完整;streaming vs non-streaming 路径逻辑分叉;Anthropic API 的 prefix cache 和 prefill 语义未正确实现。
-
新硬件适配滞后:SM120 (Blackwell)、GB10、Jetson Thor、MI350P、Ascend A5 等新硬件/新架构都有适配问题,attention backend 的自动选择逻辑需要更智能的 fallback。
-
KV 连接器生态复杂化:Mooncake、NIXL、LMCache、MoRIIO 等多种 connector 并存,但生命周期管理、事件正确性、安全释放等基础合约尚未统一。
3.2 建议优先级
| 优先级 | 方向 | 关键 Issues |
|---|---|---|
| P0 | DeepSeek-V4.1 piecewise CUDA graph 输出正确性 | #62811, #63276, #62935 |
| P0 | FULL graph + FA3 split-KV logits 错误 | #62626 |
| P0 | torchcodec 版本 pin (cu129 镜像无法启动) | #63121 |
| P1 | Streaming vs non-streaming tool calling 一致性 | #63346, #63358, #63309 |
| P1 | KV connector 生命周期与安全释放 | #62808, #63336, #63149 |
| P1 | MoE LoRA + EP expert placement 兼容性 | #62801 |
| P1 | Qwen3.8-Flash-Next indexer_budget 截断 | #62776 |
| P2 | FlashInfer q_scale / NVFP4 autotune 非确定性 | #63043, #62820 |
| P2 | M-RoPE video pruning 位置计算 | #62969, #62937 |
| P2 | Layered prefill RFC (MoE 吞吐优化) | #62689 |
| P3 | Responses API 字段补全 | #63183, #63184, #63185 |
| P3 | EAGLE-4 / model-based drafter 支持 | #63004, #62694 |
四、完整 Issue 列表
| # | 标题 | 创建日期 | 评论 | 标签 |
|---|---|---|---|---|
| #63439 | [RFC]: Reduce CPU overhead in Model Runner V2 for long-context P/D serving | 2026-10-24 | 1 | |
| #63414 | [Bug]: compile_mm_encoder is engine-fatal for RADIO/NaViT encoders | 2026-10-23 | 0 | |
| #63399 | [Performance]: Startup sizing of FlashInfer workspace to recover KV-cache capacity | 2026-10-23 | 1 | performance |
| #63363 | [RFC]: Keep per-request token lists out of EngineCore garbage collection | 2026-10-23 | 0 | |
| #63359 | [RFC]: Use session Agent Hints to reuse prompt tokens and block hashes | 2026-10-23 | 0 | RFC |
| #63358 | [Bug]: Hermes tool parser: streaming and non-streaming disagree | 2026-10-23 | 0 | bug,tool-calling |
| #63356 | [Bug]: Chat derender ignores --response-role, add_generation_prompt: false and echo |
2026-10-23 | 0 | bug |
| #63346 | [Bug]: Streaming chat keeps tool calls for tool_choice: "none" |
2026-10-23 | 1 | bug,tool-calling,gpt-oss |
| #63343 | [Bug][DSv4.1][SM120] enable_adaptive_verification is rejected on SM120 | 2026-10-23 | 4 | DSv4.1 |
| #63340 | [Feature][ROCm][DSv4.1] Mono decode: enable MI350P (gfx950, 128 CUs) | 2026-10-23 | 2 | rocm,DSv4.1 |
| #63336 | [RFC]: MoRIIO transfer contract: safe KV reclamation and bounded failure for P/D | 2026-10-23 | 1 | rocm,RFC |
| #63331 | Anthropic /v1/messages: inline system messages merged → prefix cache miss | 2026-10-23 | 1 | |
| #63310 | [Bug]: Responses API rejects assistant input items without “type” | 2026-10-23 | 0 | bug |
| #63309 | [Bug]: Hermes tool parser streaming silently drops content after << marker |
2026-10-23 | 1 | bug,tool-calling |
| #63285 | [Bug][LoRA] SEQ_CLS adapters saved with modules_to_save=null crash on load | 2026-10-23 | 0 | |
| #63278 | [Bug][LoRA] BERT sequence classification drops LoRA on bert.pooler.dense | 2026-10-23 | 0 | pooling |
| #63276 | [Bug]: DS V4.1 Flash1017 outputs incorrect numbers | 2026-10-23 | 1 | bug |
| #63267 | [Bug]: CUDA builds without FA extensions (Jetson Thor sm_110) cannot start | 2026-10-23 | 1 | |
| #63250 | [Bug]: DeepSeek-V4.1-Flash(-1017) returns U+FFFD for a 12-token prompt | 2026-10-23 | 1 | deepseek,DSv4.1 |
| #63240 | [Question]: Qwen4Exp PLE n-gram table is materialised dense in bf16 | 2026-10-23 | 1 | quantization |
| #63215 | [RFC]: Declared ownership and layout for WeightSource | 2026-10-22 | 3 | RFC |
| #63198 | [Performance]: SM100 prefill indexer: BF16 logits upcast to FP32 before top-k | 2026-10-22 | 0 | |
| #63187 | [Bug]: Multimodal pruning: encoder compute budget debited by pruned placeholder count → OOM | 2026-10-22 | 2 | bug,multi-modality |
| #63185 | [Bug]: Responses API rejects include: ["web_search_call.*"] with 400 |
2026-10-22 | 0 | tool-calling |
| #63184 | [Bug]: Responses API: reasoning.summary always returns [] |
2026-10-22 | 1 | tool-calling |
| #63183 | [Bug]: Responses API: completed responses never carry completed_at |
2026-10-22 | 0 | |
| #63175 | [Bug]: Triton ReplaySSM (V1) drops un-flushed ring tokens when request skips a step | 2026-10-22 | 0 | |
| #63170 | [Bug]: GLM-5.x (DSA) under PP: reuse layers read stale top-k indices | 2026-10-22 | 4 | bug,glm |
| #63168 | [Bug]: GLM-5.3-Flash kpool prefill writer leaves pool straddling unaligned chunk | 2026-10-22 | 0 | glm |
| #63164 | [Feature]: Cohere grounding citations on the derender paths | 2026-10-22 | 0 | feature request |
| #63162 | [Bug]: return_tokens_as_token_ids is ignored on derender paths |
2026-10-22 | 2 | bug |
| #63157 | [Spec Decode][DeepSeek-V4.1] Support DSpark with pipeline parallelism | 2026-10-22 | 1 | deepseek,DSv4.1 |
| #63152 | [Tracking] Dory looped model: per-request loops, spec decode, GB10 performance | 2026-10-22 | 0 | speculative-decoding,quantization |
| #63149 | [Tracking] KV event correctness and compatibility | 2026-10-22 | 8 | |
| #63140 | [RFC] Stream request-level prefill progress over gRPC | 2026-10-22 | 0 | |
| #63130 | [Bug]: Strict serde rejection of duplicate field reasoning breaks agent harnesses |
2026-10-22 | 3 | bug,tool-calling |
| #63128 | [Bug][Spec Decode] MTP draft runs with uninitialised embedding under PP | 2026-10-22 | 1 | quantization |
| #63121 | [Bug]: torchcodec is unpinned, resolves to CUDA-13 wheel in cu129 builds |
2026-10-22 | 2 | bug |
| #63058 | [Feature]: keep_tags for CuMemAllocator.sleep | 2026-10-22 | 2 | |
| #63057 | [Feature]: Worker.sleep device-wide memory check should warn, not assert | 2026-10-22 | 0 | |
| #63052 | [Bug]: Breakable PIECEWISE capture leaves warmup activations cached | 2026-10-22 | 0 | bug |
| #63049 | [Bug]: TritonW4A16 GEMM faults on ROCm once M × N or M × K > 2^31 | 2026-10-22 | 1 | rocm |
| #63043 | [Bug]: Native FlashInfer produces garbage output with BF16 Q and non-unit q_scale | 2026-10-22 | 0 | quantization |
| #63037 | [Bug][KV Offload] Reused OffloadKey can lose metadata from delayed BlockStored events | 2026-10-22 | 0 | |
| #63020 | [Bug]: vllm-openai:flint can’t serve NVFP4 GGUF checkpoint without workarounds | 2026-10-22 | 2 | |
| #63019 | [Bug]: “Loading weights took” logs raw clock (~host uptime) | 2026-10-22 | 1 | |
| #63011 | [Bug]: b12x attention backend advertises head_dim 64 but crashes at first forward | 2026-10-22 | 0 | |
| #63006 | [RFC]: Reduce descriptor and WR overhead to improve Mooncake KV transfer bandwidth | 2026-10-22 | 4 | RFC,kv-connector |
| #63004 | [RFC]: add eagle4 spec decode | 2026-10-22 | 1 | RFC |
| #63003 | [Bug]: MiniMax-M3 ViT mRoPE setup BLOCK_N=32 exceeds UB capacity on Ascend A5 | 2026-10-22 | 0 | minimax |
| #63000 | Question: long-context generation stops mid-sentence with <\|im_end\|> on Qwen3.8-27B |
2026-10-21 | 1 | quantization |
| #62984 | [Bug]: [b12x] extra pins b12x 1.5.1 — unguarded fake_mode crashes engine-core |
2026-10-21 | 1 | |
| #62969 | [Bug]: Video pruning (EVS): M-RoPE positions are wrong for chunks inside video placeholder | 2026-10-21 | 2 | |
| #62968 | [Bug][PaliGemma] mm_prefix bidirectional ranges cover only image tokens | 2026-10-21 | 0 | |
| #62965 | [Feature]: Capture DSv4.1 decoder replay graphs on model graphs’ stream | 2026-10-21 | 0 | feature request,deepseek,DSv4.1 |
| #62945 | [Bug]: nvidia/GLM-5.3-NVFP4: silent garbage output with EP + TP>1 + PCP>1 | 2026-10-21 | 0 | bug,nvidia,glm |
| #62939 | [Bug][MRV2][Spec Decode] DSpark + adaptive verification fails at startup | 2026-10-21 | 3 | |
| #62937 | [Bug]: Qwen3-VL video pruning: M-RoPE recompute starts too early | 2026-10-21 | 0 | bug |
| #62935 | [Bug]: DeepSeek-V4.1-Flash-1017 on GB300: long agent replies fall into repetition loops | 2026-10-21 | 1 | deepseek,quantization,DSv4.1 |
| #62931 | [Bug]: Tiered KV offload: secondary-tier hit larger than CPU tier loads nothing | 2026-10-21 | 0 | |
| #62919 | [Performance]: Avoid dense initial-state materialization in Mamba2 continued prefill | 2026-10-21 | 0 | performance |
| #62866 | [Doc]: MooncakeStoreConnector guide does not mention kv_load_failure_policy | 2026-10-21 | 0 | |
| #62865 | [Bug]: Compile mode 2 leads to incorrect kernels with Transformers backend | 2026-10-21 | 0 | bug,kimi |
| #62862 | [Performance]: MultiConnector disables divergent local hybrid cache hits on Decode | 2026-10-21 | 0 | |
| #62851 | [Bug]: Qwen3.6 GDN greedy DFlash2 divergence from batch-dependent numerics | 2026-10-21 | 3 | quantization |
| #62848 | [Bug]: DeepSeek-OCR / Unlimited-OCR fail to start — Triton CompilationError LOG2E | 2026-10-21 | 0 | bug,deepseek |
| #62844 | [Installation]: [ROCm] Gemma4 multimodal fails to start due to excessive video encoder memory | 2026-10-21 | 2 | installation,rocm,multi-modality |
| #62842 | [Installation]: cu129 | 2026-10-21 | 0 | installation |
| #62839 | [RFC]: Fuse DSpark confidence-head GEMV into a single TileLang kernel | 2026-10-21 | 1 | |
| #62830 | [Bug][Anthropic API] /v1/messages ignores assistant prefill | 2026-10-21 | 1 | |
| #62828 | [Bug][ROCm]: ROCM_ATTN sliding-window kernels output NaN for out-of-window NaN/Inf KV | 2026-10-21 | 1 | rocm |
| #62820 | [Bug]: FlashInfer fp4_gemm autotune changes temperature-0 tokens on Qwen3.8-27B NVFP4 | 2026-10-21 | 1 | quantization |
| #62818 | [RFC]: Preserve output distribution under structured-output + speculative decoding | 2026-10-21 | 3 | structured-output,RFC,speculative-decoding |
| #62815 | [Feature]: Qwen4Exp PLE cpu_offload without UVA (NVIDIA Confidential Computing) | 2026-10-21 | 0 | nvidia,quantization |
| #62811 | [Bug]: DeepSeek-V4.1: wrong output when last chunk of chunked prefill runs as PIECEWISE graph | 2026-10-21 | 0 | deepseek,DSv4.1 |
| #62810 | [RFC] Expose allocator-issued KV block generations to asynchronous connectors | 2026-10-21 | 0 | |
| #62808 | [Bug]: LMCacheConnectorV1 does not forward shutdown(), EngineCore force-killed | 2026-10-21 | 2 | kv-connector |
| #62803 | [Bug]: Investigate uniform decision scores for a D3 checkpoint loaded as Qwen3.5 | 2026-10-21 | 1 | bug,quantization |
| #62801 | [Bug]: MoE LoRA accepts incompatible round-robin expert placement with EP | 2026-10-21 | 0 | |
| #62793 | [Bug]: MRV2 adaptive verification reduces Eagle3 acceptance due to mismatched graph padding | 2026-10-21 | 0 | quantization |
| #62781 | [Bug][XPU] GDN fp16 overflow reproduces on Intel XPU (Qwen3.5-family) | 2026-10-21 | 3 | intel-gpu |
| #62776 | [Bug] Qwen3.8-Flash-Next on GB10: prompt beyond indexer_budget (2048) is invisible | 2026-10-20 | 8 | |
| #62768 | [Performance]: RoutedExperts.load_weights rebuilds expert mapping on every call (~50s) | 2026-10-20 | 4 | |
| #62762 | [Performance]: XPU block FP8: W8A16 instead of W8A8 took decode from 35 to 58 tok/s | 2026-10-20 | 1 | intel-gpu,quantization |
| #62752 | [Performance]: Avoidable preemption at hybrid Attention/Mamba decode block transitions | 2026-10-20 | 1 | |
| #62743 | [Bug]: K2 Horizon reasoning parser only accepts end tag of requested effort | 2026-10-20 | 0 | tool-calling,quantization |
| #62740 | [Feature]: Measure the Dynamic SD table instead of writing it by hand | 2026-10-20 | 0 | |
| #62724 | [Feature]: Token-aware control-token sanitization for DeepSeek renderers | 2026-10-20 | 3 | deepseek |
| #62707 | [Bug]: v0.25.1 streaming input beyond max_model_len crashes V2 runner | 2026-10-20 | 1 | quantization |
| #62705 | [Bug]: DiffusionGemma prefills image tokens causally, config asks for bidirectional | 2026-10-20 | 1 | |
| #62697 | [Bug][ROCm] ROCM_ATTN returns wrong attention on RDNA for head size ≥ 96 | 2026-10-20 | 2 | rocm |
| #62694 | [Feature]: [Spec Decode] Support model-based drafters (target hidden states) | 2026-10-20 | 0 | feature request |
| #62689 | [RFC]: Layered prefill: split prefill across decoder layer groups | 2026-10-20 | 0 | |
| #62687 | [Bug]: CPU backend: seeded request + chunked prefill kills engine | 2026-10-20 | 1 | cpu |
| #62677 | [Bug]: v0.32.0 official image: deepep_v2 fails with ZeroDivisionError | 2026-10-20 | 0 | bug,quantization |
| #62645 | [Bug]: Loading another config alias changes previously loaded config’s model_type | 2026-10-20 | 2 | |
| #62641 | [Usage]: Attempts to avoid full prompt processing when changing the tool set | 2026-10-20 | 0 | usage,tool-calling |
| #62640 | [RFC]: Improve MTP configuration warning | 2026-10-20 | 0 | RFC |
| #62639 | [Bug]: Responses API: tool_choice=allowed_tools does not work | 2026-10-20 | 3 | bug,tool-calling |
| #62626 | [Bug]: cudagraph_mode=FULL + FA3 split-KV returns wrong logits |
2026-10-20 | 1 | bug,scheduler |