AI Infra Daily Radar
导言
这篇文章记录 AI infra、post-training 和 multimodal serving 方向的每日 PR / issue 雷达。每轮只深入少量 P0/P1 项:优先性能、多模态、调度、attention、padding、KV cache、MTP、NPU / Ascend 相关变化。
2026-07-10¶
扫描范围¶
- 窗口:2026-07-09T02:11:30Z 至 2026-07-10T02:14Z,按上轮自动化时间回看约 24 小时;
verl#6901按种子任务只复核是否有新变化。 - 仓库:
verl-project/verl、verl-project/verl-omni、vllm-project/vllm、vllm-project/vllm-omni、THUDM/slime、ByteDance-Seed/VeOmni。 - Release:本窗口内未发现新的正式 release;最近仍是
vllm-omni v0.24.0、verl-omni v0.1.0、verl v0.8.0、vllm v0.24.0、slime v0.3.0、VeOmni v0.1.11。 - 噪声处理:
verl主仓在 2026-07-10T01:24Z 至 01:35Z 有大量旧 issue 批量关闭 / 更新,未按“最近更新”直接提权;只记录与性能、多模态、调度、NPU / Ascend、padding、attention 或数据平面相关的项目。 - 深入上限:本轮深入 5 个 P0/P1 项;没有启动自动 NPU 适配,因为高价值项要么仍是 draft / open PR,要么依赖 CUDA / FlashInfer / NPU graph 运行时验证。
P0 / P1¶
| 优先级 | 项目 | 状态 | NPU 分级 | 结论 |
|---|---|---|---|---|
| P0 | vllm#47808 DSpark capacity reallocation without sampler padding | open draft | L | 实现 DSpark confidence-scheduled verification,支持 mask 与 varlen 两种容量执行模式;varlen path 物理压缩 verifier batch,同时保持 target verify 和 DSpark draft step 的 FULL CUDA graph。 |
| P0 | vllm#48196 DCP sparse MLA output-merge optimizations | open | L | 从 vllm#47355 拆出的 DCP half:先做 W_UV projection 再 DCP merge,缩小 A2A payload;FlashInfer helix A2A 自报 15.5us,相比 NCCL all_to_all_single 45-74us。 |
| P0 | vllm-omni#4925 Qwen3-TTS prefix NPU graph | open | M | 在 Qwen3-TTS code predictor 中加入 prefix NPU graph bucket;A2 NPU、concurrency=1、5 requests 下 Mean E2EL 8.183s -> 7.276s,Mean AUDIO_TTFP 195.30ms -> 188.01ms。 |
| P1 | VeOmni#898 packed ChunkMBS support | open | M | 为 packed sequence 训练增加 layer-level ChunkMBS:从 cu_seq_lens_q 构造 chunk ranges,按 chunk 切 position_ids、attention_mask、cu_seq_lens_q/k、max_length_q/k 等 sequence kwargs,并覆盖 Qwen3-VL dense config。 |
| P1 | vllm#48165 shm multimodal decode pinned memory opt-out | open | S/M | MiniMax-M3 multimodal kwargs 经 shm object-storage ring 反序列化时,pin_memory() 让 CUDA host caching allocator 持续保留 page-locked buffers;PR 增加 VLLM_SHM_OBJECT_STORAGE_DISABLE_PIN_MEMORY=1 改走 pageable clone()。 |
重点机制¶
vllm#47808 是本轮最重的 spec decode / padding 项。PR 把 DSpark paper 的 capacity scheduling 落到 vLLM:capacity manager 按 prefix-survival score 做全局贪心 admission,sum(capacities) == spent budget;dspark_sps_curve="auto" 在 graph capture 后按 power-of-two request count profile worker decode step,并广播到所有 TP rank;dspark_online_sts 用在线 Sequential Temperature Scaling 校准不同 draft position 的 acceptance probability。关键工程收益来自 varlen 模式:低置信 draft token 不再只是 mask 成 padding row,而是物理压缩 verifier batch,并在 FULL CUDA graph replay 下维持 batch shape / buffer address 约束。
性能证据来自 DeepSeek-V4-Flash-DSpark、TP4 B300、128 prompts x 512 output tokens:concurrency=256 时 no-capacity 为 10,362 tok/s、median ITL 32.84ms、AL 3.63;Varlen + SPS 为 10,798 tok/s、median ITL 28.45ms、AL 3.38,吞吐 +4.2%、median ITL 约 -13.4%。concurrency=32 时 varlen 仍亏损,说明收益只在 contention regime 出现。NPU 分级 L:代码触及 43 个文件,依赖 CUDA graph、DSA varlen decode、FlashAttention / FlashInfer sparse path、MoE padding skip 和 TP-rank deterministic replay;Ascend 只能先抽象出 capacity scheduling / varlen verifier 的验证矩阵,不能自动适配。
vllm#48196 继续推进 sparse MLA decode 的 DCP 优化。它把 attention output 先通过 all-gathered W_UV 投影到 v_head_dim,再做 DCP LSE-weighted merge;因为线性投影与 LSE-weighted merge 可交换,payload 从 kv_lora_rank 缩到每 head 的 v_head_dim。第二个点是默认使用 FlashInfer fused decode-CP all-to-all(helix),不可用时回退 Triton / NCCL。第三个点是把 per-row valid counts 传进 pack / combine,避免空 sparse rows 额外 zero-fill。
changed files 集中在 vllm/v1/attention/ops/dcp_alltoall.py、vllm/v1/attention/backends/mla/flashinfer_mla_sparse.py、vllm/model_executor/layers/attention/mla_attention.py 和 tests/distributed/test_dcp_a2a.py。PR 自测包括 4-rank pack/combine vs reference、valid-count handling、CUDA graph capture,以及 GLM-5.1-NVFP4 TP4/DCP4 GSM8K-64 accuracy parity。NPU 分级 L:机制对 DCP sparse MLA 有参考价值,但实现强绑定 FlashInfer helix A2A、TRTLLM sparse-MLA workspace 和 CUDA graph;Ascend 侧应先 profile HCCL A2A / all-gather、DCP merge payload、空 row valid-count 语义,而不是复用代码。
vllm-omni#4925 是本轮最直接的 Ascend / NPU 性能项。PR 只改 vllm_omni/model_executor/models/common/qwen3_code_predictor.py,在 _capture_npu_graphs 中按 prefix CUDA graph 模式增加 prefix NPU graph bucket:code_predictor_prefix_graphs=true 时,对 code predictor 的 autoregressive sequence length 做更细 bucket capture,减少短 prefix / 增量 decode 的运行时开销。A2 NPU、vLLM-Ascend commit 4885d8e7、vLLM-Omni commit 65bc737、Qwen3-TTS-12Hz-1.7B-Base、concurrency=1、5 requests 下,Mean E2EL 8.183s -> 7.276s,Mean AUDIO_RTF 0.627 -> 0.576,Mean AUDIO_TTFP 195.30ms -> 188.01ms。
NPU 分级 M:它已经是 NPU patch,不需要做 CUDA->NPU 迁移;但证据规模较小,且配置同时包含 shared-memory streaming、codec chunk、decode graph capture 和 fixed seed。下一步应在 concurrency 1/4/8、不同 ref audio 时长、不同 code_predictor_prefix_graph_seq_lens、decode_cudagraph_capture_sizes、seeded / unseeded 下复测 E2EL、TTFP、RTF、audio quality、graph capture time 和内存峰值,再决定是否可作为稳定默认策略。
VeOmni#898 把 packed sequence 的 micro-batching 下沉到 transformer layer 内部。新增 veomni/distributed/chunk_mbs.py,通过 train.chunk_mbs_config 配置 enable、chunk_mbs、apply_modules、sequence_dim、strict;在 batch tensor 迁移到 accelerator 前,从 packed cu_seq_lens_q 构造 chunk ranges,并对 position_ids、position_embeddings、attention_mask、cu_seq_lens_q/k、linear_attn_cu_seq_lens_q、max_length_q/k 做 chunk slice。主模型和 DPO reference model 的 parallelization 都会透传配置,Qwen3-VL dense config 增加 language decoder layer pattern 示例。
NPU 分级 M:主路径是 Python / shape / packed metadata 逻辑,但 reviewer 已指出两个风险:_replace_hidden_states 原地修改 kwargs 可能跨 chunk iteration 泄漏;_slice_linear_attn_cu_seq_lens 若在 GPU / NPU tensor 上执行,会触发同步 device-to-host copy,建议提前放到 CPU。PR 自测 make quality、tests/parallel/test_chunk_mbs.py、tests/tools/test_training_utils.py、tests/data/test_prepare_fa_kwargs.py、tests/data/test_collators.py,但没有真实 Qwen3-VL GPU / NPU e2e ChunkMBS training run,因此不自动适配。
vllm#48165 命中 multimodal serving 的 host memory 边界。PR 用 memray t0->t5 pair 定位到 vllm/v1/serial_utils.py::_decode_tensor:shm object-storage ring 取出的 multimodal kwargs 经 MsgpackSerde(share_mem=False) 反序列化时会 pin_memory(),MiniMax-M3 variable-sized pixel_values 导致 CUDA host caching allocator 缓存 1088 个 pinned buffers,5 分钟 Private_Dirty 增长约 324MB;tensor 对象已释放,但 page-locked pool 不还给 OS。PR 增加 MsgpackDecoder(pin_tensors=...) 与 VLLM_SHM_OBJECT_STORAGE_DISABLE_PIN_MEMORY=1,让 shm serde decoder 可选择 pageable clone()。
NPU 分级 S/M:接口改动小,且 host pinned-memory 池膨胀问题对多模态 variable-sized payload 有普遍意义;但 Ascend / torch_npu 对 pinned host memory、shm serde copy-out 和 allocator cache 行为不一定一致。低成本验证可以在 Ascend multimodal decode 上开关环境变量,记录 worker RSS / Private_Dirty、NPU H2D 拷贝耗时、TTFP、throughput 和 tcmalloc 回收行为;在确认无回归前,不建议默认开启。
6901 状态复核¶
verl#6901 自 2026-07-09 文档记录后没有新变化:GitHub 元数据仍为 merged,merge time 为 2026-07-02T02:06:29Z,head commit d38f4be24ed718ccb4802a149612ef912cd38dda,merge commit 561a4b03a11b34446e44267c2e84c4bbf63585f5,changed files 仍是 6 个。
结论维持不变:BSHD micro-batch padding 统一到 mini-batch global max 的思路可复用,但性能收益证据来自 H100 / cuDNN / TransformerEngine fused-attention plan build,Ascend 侧需要独立采集 graph / compile cache 证据;空 batch .max() guard、padding correctness、BSHD / SBH variable length path、VLM attention mask 和额外 padding HBM 成本仍是前置风险。因此 verl#6901 继续作为 M 级评估项,本轮不自动开适配任务。
简表¶
| 优先级 | 项目 | 状态 | 备注 |
|---|---|---|---|
| P1 | vllm#48195 hybrid Mamba + KV connector prefix-hit divergence | open | max(per_group_hits) 改为 per_group_hits[0],用 FullAttention group 的 shallow hit 作为安全边界,避免 connector 读取 FA GPU-resident range 之外的 blocks;NPU 分级 S/M。 |
| P1 | verl#7000 remove TransferQueue runtime path | open | 为 NeoProto 数据平面迁移清理默认 PPO runtime:默认回到 RayPPOTrainer,移除 TransferQueue 依赖、配置、docs 和 CI 路径;影响 RL 数据平面接口,NPU 分级 S/M。 |
| P1 | vllm#48193 Cold Start Q3 roadmap | open issue | Q3 cold-start roadmap;需要下一轮跟踪是否拆出 graph capture、compile cache、model load 或 scheduler 相关实现 PR。 |
| P1 | vllm#48194 model download at CLI entry performance protocol | open issue | 性能测量协议型 issue;偏 CLI / cold-start,不是 NPU 适配项。 |
| P1 | vllm-omni#5003 Qwen3-Omni DP adjusted local rank bug | open issue | Qwen3-Omni-30B-A3B-Instruct 启动时报 DP adjusted local rank 1 is out of bounds for 1 devices;多模态部署正确性项,等待复现与修复 PR。 |
| P1 | vllm-omni#4999 diffusion guidance_scale=0 override | open | 修 explicit guidance_scale=0 被 silent override;多模态 diffusion correctness,NPU 分级 S。 |
| P1 | vllm-omni#4989 FlashInfer backend and fullgraph incompatibility | open | flashinfer backend 与 torch.compile(fullgraph=True) 兼容性修复;偏 CUDA backend,NPU 分级 L。 |
| P2 | vllm#47366 ROCm OOM in EAGLE correctness heavy | merged, 2026-07-10 | ROCm / CI memory reservation 修复,非本轮重点。 |
| P2 | vllm#48112 bge-m3-sparse-plugin mismatch requests | merged, 2026-07-10 | bugfix,和本轮性能 / 多模态 / NPU 主题关联弱。 |
验证清单¶
- DSpark varlen full-CG:在 Ascend 侧先拆 profile,不做移植:capacity allocation、verifier batch compaction、draft replay determinism、TP rank shape 一致性、MoE padding skip、acceptance length、median ITL 和 deadlock guard。
- DCP sparse MLA merge:对 Ascend sparse MLA / DCP 场景记录 merge payload、HCCL all-gather / A2A 时间、valid-count 空 row 行为、workspace size 和 accuracy parity。
- Qwen3-TTS prefix NPU graph:复测 concurrency 1/4/8、ref audio 长度、bucket seq_lens、graph capture time、E2EL、TTFP、RTF、audio quality 与内存峰值。
- VeOmni ChunkMBS:先修/验证
kwargs原地修改与cu_seq_lensdevice-to-host sync 风险,再跑 Qwen3-VL packed training smoke,记录 HBM、step time、loss parity 和 chunk boundary correctness。 - shm multimodal pinned memory:对 MiniMax-M3 或 Qwen3-Omni variable-sized visual payload 开关
VLLM_SHM_OBJECT_STORAGE_DISABLE_PIN_MEMORY=1,记录 worker RSS / Private_Dirty、copy time、TTFP、throughput 和 allocator 回收。 - 6901 BSHD padding:继续补空 batch
.max()guard,并在 Ascend BSHD path 显式 A/Bpad_bshd_to_minibatch_max=True/False的 old_log_prob、actor_update、HBM peak、mask 构造和 graph / compile cache 日志。
参考链接¶
- vllm#47808
- vllm#48196
- vllm-omni#4925
- VeOmni#898
- vllm#48165
- vllm#48195
- verl#7000
- vllm#48193
- vllm#48194
- vllm-omni#5003
- vllm-omni#4999
- vllm-omni#4989
- verl#6901
2026-07-09¶
扫描范围¶
- 窗口:2026-07-08T02:10:49Z 至 2026-07-09T02:16Z,按上轮自动化时间回看约 24 小时;
verl#6901按种子任务额外复核。 - 仓库:
verl-project/verl、verl-project/verl-omni、vllm-project/vllm、vllm-project/vllm-omni、THUDM/slime、ByteDance-Seed/VeOmni。 - Release:本窗口内未发现新的正式 release;最近仍是
vllm-omni v0.24.0、vllm v0.24.0、verl v0.8.0、verl-omni v0.1.0、slime v0.3.0、VeOmni v0.1.11。 - 噪声处理:
vllm主仓存在大量 stale bot 更新时间,未按“最近更新”直接提权;只把最近新建、合入或明确命中性能 / 多模态 / Ascend / NPU 的项目列入本轮。 - 深入上限:本轮深入 5 个 P0/P1 项;
verl#6901按种子任务复核状态、diff、性能证据和 NPU 风险。
P0 / P1¶
| 优先级 | 项目 | 状态 | NPU 分级 | 结论 |
|---|---|---|---|---|
| P0 | VeOmni#879 Qwen3.5 GDN NPU backend | merged, 2026-07-09 | L | 已合入;为 Qwen3.5 gated delta-rule 的 causal_conv1d 和 chunk_gated_delta_rule 增加 npu backend,vendored MindSpeed-MM Ascend Triton kernels,并接入 OpSlot / KERNEL_REGISTRY。 |
| P0 | verl#6984 FSDP actor-update OOM fix | open | S | 训练路径中每个 micro-batch 的 model_output 会保留 grad-connected full-length log_probs / entropy,但 train_batch 立刻丢弃;PR 在 backward 后 meta_info.pop("model_output", None),把显存保留从整个 mini-batch 降到单 micro-batch。 |
| P0 | vllm-omni#4879 Qwen3-TTS hidden-state D2H opt-out | merged, 2026-07-08 | S/M | Qwen3-TTS stage 1 只消费 runtime audio codes,不需要每步同步 hidden states 到 CPU;H20 c=64 自报 throughput +13%、mean TTFP -55%。 |
| P1 | vllm-omni#4968 HunyuanImage3 AllGather-KV SP attention | open draft | M/L | 新增 AllGather-KV sequence-parallel attention:Q 本地切分、K/V all-gather 到每 rank,本地 FA 计算非因果 attention;适合扩散模型 SP,但依赖 collective / attention backend 重写。 |
| P1 | verl-omni#245 Qwen3-Omni Full-Modal RL on Ascend 910C | open RFC | M/L | 提议在 Ascend 910C 上打通 Thinker + Talker 全模态 RL:text/image/video/audio input、text/audio output、vLLM-Ascend rollout、torch_npu、NPU-aware FSDP/Megatron 和 Code2Wav loop。 |
重点机制¶
VeOmni#879 是本轮最明确的已合入 Ascend kernel backend。PR 把 Qwen3.5 gated delta-rule linear-attention 的两个缺口补上:causal_conv1d 通过 npu_causal_conv1d.py 适配 FLA 调用签名,chunk_gated_delta_rule 直接绑定 vendored kernel;二者都注册为 name="npu" 并声明 HardwareRequirement(device_type="npu")。新增文件主要集中在 veomni/ops/kernels/gated_delta_rule/_ascend/、veomni/ops/kernels/gated_delta_rule/npu_causal_conv1d.py、tests/ops/test_gdn_ascend_gate.py 和 docs/examples/qwen3_5.md。
PR body 给出的验证是 Ascend 910B2C 上 Qwen3.5-MoE VL SFT,loss / accuracy 匹配 reference run;CI 只覆盖 tests/ops/test_gdn_ascend_gate.py 的硬件门控 mock,不覆盖真实 varlen-GDN NPU e2e。NPU 分级仍是 L:接入层很清楚,但主体是约 4.1K 行 MindSpeed-MM Ascend Triton kernel,且文档明确 arch35 / Ascend910_95 / Ascend950 仍会 NotImplementedError。下一步不是自动适配,而是做 dtype、varlen dyn_bsz、Dense/MoE、forward/backward parity、长序列、torch_npu / triton-ascend 版本矩阵,以及 vendored kernel license / byte-identical 来源复核。
verl#6984 是一个小但值得跟踪的训练显存修复。FSDPEngine.forward_backward_batch 原来把每个 micro-batch 的 meta_info 都 append 到 output_lst,其中 model_output 带着 full-length log_probs / entropy nested tensors 和梯度连接;训练路径下 engine_workers.train_batch 之后会 output.pop("model_output"),所以这些 tensor 在 mini-batch 内纯属暂存泄漏。PR 只改 verl/workers/engine/fsdp/transformer_impl.py 一处,在 backward 后立即丢弃 model_output。
NPU 分级 S:逻辑是设备无关 Python 内存生命周期,理论上适合 Ascend FSDP 训练;但作者测试是 2-node MI300X GRPO、rollout_n=32、长 prompt / response 的 OOM 场景,仍要在 Ascend 上确认 compute_log_prob forward-only path 继续保留 model_output、training metrics 不依赖该字段、checkpoint / profiler 无行为回退。若验证小于 20 分钟,可作为后续 S 级候选;本轮没有自动适配,因为 PR 仍 open 且需要真实训练 OOM 回归。
vllm-omni#4879 命中 Qwen3-TTS serving 的 host copy 热点。Stage 1 code2wav 消费 runtime audio codes,不消费 hidden states;但 gpu_ar_model_runner.py 仍在每个 decode step 执行 hidden_states[:num_tokens_unpadded].detach().to("cpu").contiguous(),为 inter-stage pooler payload 构造 CPU hidden states。现有 opt-out flag omni_pooler_payload_include_hidden 和 payload builder gate 已存在,只是 Qwen3-TTS talker 没声明 False,且 copy site 没检查这个 flag。
PR 只改 vllm_omni/model_executor/models/qwen3_tts/qwen3_tts_talker.py 和 vllm_omni/worker/gpu_ar_model_runner.py,让 talker 声明 omni_pooler_payload_include_hidden = False,copy site 遵守 flag。H20、Qwen3-TTS-12Hz-1.7B-CustomVoice、concurrency=64、300 requests A/B 结果:audio throughput 45.7 -> 51.7 audio-s/s,mean TTFP 1056ms -> 479ms,p99 TTFP 3270ms -> 1067ms,stage-0 host CPU 59% -> 24%,py-spy 中该 copy 消失。NPU 分级 S/M:控制面和 copy gate 可复用,但 Ascend 需确认 NPU->CPU hidden copy 是否同样是瓶颈,以及 Talker payload 是否确实不依赖 hidden states。
vllm-omni#4968 为 HunyuanImage3 diffusion attention 增加 AllGather-KV sequence parallel。策略是每个 rank 保留 1/P 的 Q,由 AllGatherKVParallelAttention.pre_attention 沿 seq 维 all-gather K/V,使每个 rank 都有 full K/V,然后用本地 FA kernel 计算 Q_local x K_full;post_attention 返回 local image shard,维持多层 SP invariant,最终 full-sequence aggregation 仍交给 model-level post_processor。配置上新增 allgather_degree,与 Ulysses / Ring 互斥,并复用 ulysses_group slot 做 collectives。
当前 PR 是 draft,changed files 12 个,包含 vllm_omni/diffusion/attention/parallel/allgather_kv.py、DiffusionParallelConfig、distributed parallel state、serve CLI 和 tests/diffusion/attention/test_attention_sp.py。测试只声明 world_size=2 与 baseline world_size=1 的 bfloat16 tolerance 对齐,PR 描述还保留模板待补。NPU 分级 M/L:AllGather-KV 思想对 Ascend diffusion SP 有价值,但收益与风险取决于 HCCL all-gather、非因果 attention backend、HBM duplication、joint tokens 拼接策略和 Ulysses/Ring 互斥后的部署拓扑。
verl-omni#245 是方向性很强的 Ascend 全模态 RL RFC。它把已有 Thinker text RL / Thinker-only Megatron 线扩展到 Ascend 910C、Qwen3-Omni Thinker + Talker、video/audio input、audio output 和 Code2Wav in-loop RL。关键依赖包括 torch_npu、vllm-ascend rollout backend、Ascend-native attention、NPU-aware FSDP/Megatron、multimodal processor wiring,以及 actor 与 rollout engine 的权重同步。
NPU 分级 M/L:这不是单个适配 PR,而是端到端路线图。应拆成可验证里程碑:先 Thinker text/image smoke,再 video/audio input,再 Talker text/audio output,再 full RL loop;每一步都要给 reward path、rollout↔actor logprob 对齐、音频质量 gate、显存峰值、HCCL / vLLM-Ascend 版本和失败回滚条件。
6901 状态复核¶
verl#6901 本轮复核仍为 merged,merge time 为 2026-07-02T02:06:29Z,最终 head commit d38f4be24ed718ccb4802a149612ef912cd38dda,changed files 仍是 6 个。核心机制没有变化:在 use_remove_padding=False 的 BSHD path 中,用 mini-batch nested input_ids.offsets().diff().max() 计算 global_max_seqlen,再把 forced_max_seqlen 注入每个 micro-batch,让同一 mini-batch 的 padded s_q 共享形状,减少 cuDNN / TransformerEngine fused-attention graph / plan build。
PR body 的 Qwen3.5-35B-A3B BSHD 15-step benchmark 仍是方向性证据:Total Step 534.13s -> 397.71s,Old Log Prob 78.38s -> 35.45s,Actor Update 247.58s -> 154.50s;Gen / Rollout 基本不变,和“收益集中在 forward/backward plan build”解释一致。需要更新的风险判断是:PR 描述早期写过 default false / opt-in,但最终 commit 已把 pad_bshd_to_minibatch_max 默认改成 True;因此 BSHD 路径不是低频手动开启,而是默认会触发。
6901 仍需受控开启
空 batch .max() 风险仍在:input_ids_for_max.offsets().diff().max()、preprocess_bshd_engine、build_vlm_attn_mask_bshd 都需要 guard。padding correctness 设计基本合理,因为 input、label / loss_mask、logits processor args 和 VLM attention mask 共用 forced_max_seqlen,TP / CP / FP8 对齐也仍在 preprocess_bshd_engine 内部处理。NPU 结论维持 M 级评估项:可复用 shape 统一思路,但必须先补空 batch guard、BSHD text/VLM correctness、old_log_prob / actor_update step 分解、Ascend fused-attention 编译/缓存日志和额外 padding 成本。
简表¶
| 优先级 | 项目 | 状态 | 备注 |
|---|---|---|---|
| P1 | VeOmni#891 DCP save planner lowest-rank option | open | 为非共享文件系统增加 dcp_save_to_lowest_rank,避免 replicated shard dedup 写散到各节点本地盘;Ascend checkpoint 稳定性相关,NPU 分级 S。 |
| P1 | VeOmni#889 EP-slice streaming weight loader | merged, 2026-07-08 | 大 MoE checkpoint 更快低内存加载路径,ep_sharded_stream_load=True;NPU 分级 M,需确认 safetensors / EP shard / host memory 行为。 |
| P1 | VeOmni#888 MoE scatter-index O(N) inverse | merged, 2026-07-08 | 之前跟踪项已合入;从 argsort().argsort() 改为一次 stable sort + scatter inverse,NPU 分级 S,适合低优先级 microbenchmark。 |
| P1 | VeOmni#893 per-module local parallel state | open | 用 use_parallel_state(ps) context manager 支持不同 module / model 使用不同 SP/DP/CP/EP topology,是 multi-module omni training 基础,NPU 分级 M。 |
| P1 | vllm-omni#4970 Qwen3-TTS default seed | merged, 2026-07-08 | 删除 qwen3_tts.yaml 两个默认 seed: 42,恢复 unseeded batched multinomial fast path;针对 2026-07-04 nightly perf regression,NPU 分级 S/M。 |
| P1 | verl#6932 fully-async NPU vLLM cache config | open | 为 older vLLM fully-async NPU 脚本增加 optional cache config override,绕过旧 vLLM bug;配置级改动,NPU 分级 S。 |
| P1 | verl#6982 Qwen3.5 397B Ascend docs/scripts | open | workaround verl 0.8.0 vLLM multimodal cache issue,并新增 Qwen3.5 397B Megatron script;缺测试细节,NPU 分级 M。 |
| P1 | vllm-omni#4841 Qwen3-TTS Ascend 310P optimization | open | Qwen3-TTS on Ascend 310P 优化仍值得跟踪;需和 #4879/#4970/#4923 区分 CPU copy、sampling seed、graph capture 三类瓶颈。 |
| P1 | vllm-omni#4958 code predictor projection fusion | open | Qwen3-TTS / Qwen3-Omni code predictor 合并 QKV 与 gate/up projection,目标减少小 kernel launch;NPU 分级 M。 |
| P1 | vllm#47979 SM120 PCIe serving stack | open | 强绑定 CUDA / NVML / FlashInfer / SM120,但对非 NVLink 场景的 SP、async-TP、barrier 和通信阈值选择有参考价值。 |
| P1 | vllm#48066 Marlin MoE block_size_m heuristic | open issue | expert-parallel decode 下 Marlin MoE M tile 过大,gpt-oss TPOT 可差约 30%;CUDA kernel heuristic 项,NPU 只跟踪 MoE/EP decode 调参思想。 |
| P1 | THUDM/slime#2188 colocate weight update IPC failure | open issue | torch_memory_saver / offload 下 colocated weight update 仍走 CUDA IPC serializer,NCCL transport 配置没有完全生效;NPU 分级 M,关注权重同步 transport 边界。 |
| P1 | THUDM/slime#1709 Mooncake RDMA rollout data transport | open | rollout manager 与 trainer 间增加 Mooncake object store transport;与 PD / disaggregated rollout 方向相关,NPU 分级 M。 |
| P2 | vllm-omni#4954 Voxtral TTS feedback fix | merged, 2026-07-08 | CI / TTS correctness 修复;由 inter-stage payload refactor 后 legacy audio vs codes.audio 不一致触发。 |
| P2 | vllm-omni#4943 Qwen3-VL / JoyAI support | closed | 多模态模型支持项,暂未合入。 |
验证清单¶
- Qwen3.5 GDN NPU:对
VeOmni#879跑 Dense/MoE、varlendyn_bsz、长序列、bf16/fp16、forward/backward parity、arch35 guard、torch_npu / triton-ascend 版本矩阵。 - FSDP actor-update OOM:对
verl#6984在 Ascend 长序列 GRPO 中比较 patch 前后 HBM peak、rollout_n放大曲线、compute_log_prob行为、training metrics 和 output contract。 - Qwen3-TTS hidden copy:对
vllm-omni#4879在 Ascend 上打开 NPU profiler,确认 per-step hidden NPU->CPU copy 是否存在、关闭后 audio throughput / TTFP / p99 / host CPU / HBM 是否改善。 - AllGather-KV SP:对
vllm-omni#4968做 world_size=2/4 的 correctness、HCCL all-gather bytes、K/V HBM duplication、joint token 拼接、Ulysses/Ring 互斥配置和 diffusion latency 回归。 - Qwen3-Omni Ascend RL RFC:把
verl-omni#245拆成 Thinker text/image、video/audio input、Talker text/audio output、full RL loop 四段 smoke,逐段记录 rollout↔actor logprob、reward path、音频质量和显存。 - TTS seed regression:对
vllm-omni#4970在 seeded / unseeded、concurrency 1/8/16/64 下分别记录 batched multinomial path、RTF、TTFP、audio quality 和 reproducibility。 - 6901 BSHD padding:继续补空 batch guard,并对 Ascend BSHD path 显式 A/B
pad_bshd_to_minibatch_max=True/False的 old_log_prob、actor_update、HBM peak、mask 构造和编译/缓存日志。
参考链接¶
- VeOmni#879
- verl#6984
- vllm-omni#4879
- vllm-omni#4968
- verl-omni#245
- VeOmni#891
- VeOmni#889
- VeOmni#888
- VeOmni#893
- vllm-omni#4970
- verl#6932
- verl#6982
- vllm-omni#4841
- vllm-omni#4958
- vllm#47979
- vllm#48066
- THUDM/slime#2188
- THUDM/slime#1709
- verl#6901
2026-07-08¶
扫描范围¶
- 窗口:2026-07-07T02:10:11Z 至 2026-07-08T02:15Z,按上轮自动化时间回看约 24 小时。
- 仓库:
verl-project/verl、verl-project/verl-omni、vllm-project/vllm、vllm-project/vllm-omni、THUDM/slime、ByteDance-Seed/VeOmni。 - Release:本窗口内未发现新的正式 release;最近仍是
vllm-omni v0.24.0、vllm v0.24.0、verl v0.8.0、verl-omni v0.1.0。 - 深入上限:本轮深入 5 个 P0/P1 项;
verl#6901按种子任务再次复核状态、diff 和 NPU 边界。
P0 / P1¶
| 优先级 | 项目 | 状态 | NPU 分级 | 结论 |
|---|---|---|---|---|
| P0 | vllm-omni#4934 Qwen3-TTS PD disaggregation | open | M | 为 Qwen3-TTS 增加 prefill-decode disaggregation、Mooncake PD transfer patch、1P1D / 1P3D / 1P6D / 3P1D 部署配置和 benchmark 脚本;直接影响 TTS serving 拓扑和 transfer path。 |
| P0 | vllm#47924 decode step E2E compile RFC | open draft | L | 把 decode step 的 KV-cache management / slot-mapping 纳入 cudagraph 的 RFC + prototype;GPT-OSS-120B H100 TP1 自报 host KV-mgmt + input prep CPU 约为 captured forward 的 4.7x-5.0x。 |
| P1 | vllm#47926 DFlash / DSpark prefix-cache masking | open draft | M/L | prefix cache restored tokens 没写入 draft context KV,却被 DFlash / DSpark draft attention 读取,导致 acceptance collapse;PR 隐藏 restored prefix 并左移 draft block table。 |
| P1 | vllm-omni#4937 DiT inter-request cache reuse | open | M | Qwen-Image DiT phase 支持 exact / semantic inter-request cache,Atlas A3 NPU 上给出 7,975 prompts validation;vectorized semantic search 消除 cache size 线性增长。 |
| P1 | verl#6972 Qwen3 Next 80B FSDP rollout on NPU | merged, 2026-07-07 | S | 已合入 Ascend 示例调参:gen_tp 4 -> 8,gpu_memory_utilization 0.8 -> 0.6,以降低 update_weights 阶段 NPU 峰值内存压力。 |
重点机制¶
vllm-omni#4934 是本轮最值得跟踪的多模态 serving 项。它把 Qwen3-TTS 拆成 prefill / decode 拓扑,新增 vllm_omni/distributed/kv_transfer/mooncake_pd_patch.py、chunk transfer adapter、PD deploy configs、examples/online_serving/qwen3_tts_pd/ benchmark / probe 脚本,并补 tests/test_pd_disaggregation.py。PR body 已给出架构图和 benchmark 图,但当前仍需核验图表对应关系、topology 对比口径、Mooncake transfer 在不同并发下的 TTFP / E2EL / RTF / audio quality。
NPU 分级 M:Qwen3-TTS 此前已有 Ascend graph / code predictor 优化项,本 PR 的 PD 拓扑思想对 NPU 有价值;但具体 transfer backend、stage runtime、scheduler 和网络/共享内存行为需要在 Ascend 部署上单独验证,不能自动开适配 PR。
vllm#47924 把问题定位到 decode step 中仍在 eager / host 侧执行的 KV-cache management。作者的 GPT-OSS-120B、H100 TP1 profile 表示:batch=1 时 host KV-mgmt + input prep 约 4096us,captured _model_forward 约 819us;batch=32 时分别约 4442us 和 944us。B.1 prototype 用 VLLM_STOCK_CAPTURE_KV_PREP 把 slot-mapping Triton kernel 通过 pre-forward hook 折进 stock FULL decode cudagraph,证明 KV prep 的一部分可以进入 graph。
NPU 分级 L:收益来源依赖 CUDA Graph、Triton slot-mapping、FA3 / GPT-OSS decode path 和 stock torch.compile 迁移;Ascend 侧只能先抽象出“slot mapping / block table / attention metadata 哪些仍在 host eager”的 profile checklist,不能复用代码。
vllm#47926 修 DFlash / DSpark 与 prefix cache 的组合正确性。APC hit、KV connector restore、preemption resume 这类 restored tokens 没经过 target forward,因此不会写入 draft context KV;但 draft attention 仍按完整 sequence span 读取,结果会读到未初始化或 stale KV。PR 新增 RequestState.num_cached_tokens,让 runner 把 restored count 传给 speculator,并用 shift_draft_block_tables 左移 draft block table,让 draft 只看真实写过 draft KV 的区域。
PR 给出的 GLM-5.2 DSpark 证据显示:短 SpecBench 上 token acceptance 20.6% -> 27.6%,长共享 prefix benchmark 中 acceptance 约 0.6% -> 38.2%。NPU 分级 M/L:prefix-cache / draft-KV 可见性语义必须纳入 Ascend spec decode 验证;但当前实现包含 Triton kernel 和 CUDA graph compatible buffer shift,Ascend 需要重写或映射 block-table 操作。
vllm-omni#4937 直接命中 diffusion serving cache。它在 Qwen-Image pipeline 的 DiT phase 增加 inter-request cache:exact hit 可以直接返回 cached final latent,semantic hit 用 CLIP text similarity 恢复到 cached intermediate step,miss 则记录每步 latents;inter_request+cache_dit composite backend 还把跨请求复用和单请求 cache-DiT 组合起来。核心工程点是把 semantic_search() 从逐 entry Python loop 改成预堆叠 embedding matrix 的 batch matmul,PR 报告 7,000 个真实 CLIP embedding 上 284ms -> 13ms。
这个 PR 有 NPU 证据:作者在 Huawei Ascend Atlas A3、vllm-ascend 0.18.0、BF16、TP=2、Qwen-Image 1024x1024 50 steps、7,975 个 T2I-CompBench prompts 上验证,loop-based search median 会从 0.79s 增长到 11.84s,vectorized search 稳定在 0.74-0.78s。风险是 CLIP image quality mean 27.90 -> 26.22,约 -6.0%;因此必须把 latency、质量、cache memory、persistent cache 清理和 NPU HBM 一起看。
verl#6972 是小而明确的 Ascend 合入项。PR 只改 examples/ascend_extras/grpo_trainer/run_qwen3_next_80b_fsdp.sh,在 verl#6346 引入 NPU expandable segment 后,update_weights 阶段峰值内存变高,因此把 rollout generation TP 从 4 提到 8,并把 vLLM rollout gpu_memory_utilization 从 0.8 降到 0.6。NPU 分级 S,但已由上游合入;下一轮应把它放进 Qwen3 Next 80B FSDP Ascend smoke / memory regression,而不是重复开适配。
6901 状态复核¶
verl#6901 本轮复核仍为 merged,merge time 为 2026-07-02T02:06:29Z,merge commit 561a4b03a11b34446e44267c2e84c4bbf63585f5,changed files 仍是 6 个:verl/models/mcore/model_forward.py、verl/models/mcore/util.py、verl/workers/engine/megatron/transformer_impl.py、verl/workers/config/engine.py 和两个 Megatron YAML 配置。
机制维持不变:它只作用于 use_remove_padding=False 的 BSHD path,在 forward_backward_batch 中从 nested input_ids.offsets().diff().max() 计算 mini-batch raw global max seq_len,再通过 NonTensorData 把 forced_max_seqlen 注入每个 micro-batch;preprocess_bshd_engine、VLM build_vlm_attn_mask_bshd、MTP label / loss_mask 和 logits processor args 统一使用这个 max。这样同一 mini-batch 内 micro-batch 的 padded s_q 形状一致,cuDNN / TransformerEngine fused-attention graph / plan build 从“每个新 micro-batch shape 都构建”降为“每个 mini-batch shape 构建一次”。
性能证据仍来自 PR body 的 Qwen3.5-35B-A3B 15-step benchmark:Total Step Time 534.13s -> 397.71s,Old Log Prob 78.38s -> 35.45s,Actor Update 247.58s -> 154.50s。评论区仍记录了空 batch .max() 运行时风险:空 rank / 空 nested tensor 下 offsets().diff().max() 和 seqlens_in_batch.max() 需要 guard。
6901 仍不是自动适配项
结论维持 M 级基准评估项,不启动自动适配。实现本身主要是 Python / config / shape target 传递,边界清楚;但收益证据来自 H100 / cuDNN / TransformerEngine plan cache,不能直接外推到 Ascend。下一步必须补空 batch .max() guard、padding correctness、BSHD / SBH variable length path、VLM BSHD mask、MTP label / loss_mask、TP / CP / FP8 alignment、额外 [B,1,S,S] mask HBM 成本和 NPU graph / compile cache 证据。
简表¶
| 优先级 | 项目 | 状态 | 备注 |
|---|---|---|---|
| P1 | vllm#47936 dirty block-table row copy | open draft | commit_block_table 只复制 dirty rows 到 GPU,少于半数 dirty 时避免全表 H2D;缺 perf 数字,NPU 分级 S/M。 |
| P1 | vllm#47925 cudagraph staging pre-size | open | 把 output staging buffers 预分配到 max capture descriptor,解除“首个 descriptor 必须最大”的隐式正确性约束;NPU 分级 L。 |
| P1 | vllm#47891 DSpark offload lookup poisoning | open | DSpark draft KV-cache group 命中稀疏导致 OffloadingConnector 整体 prefix hit 永远 0;PR 在 DSpark 下排除该 draft group,NPU 分级 M。 |
| P1 | vllm#47876 video temporal padding estimate | open draft | 修 num_frames + num_frames % temporal_patch_size 对 temporal_patch_size>2 的错误估算,覆盖 Qwen2-VL / GLM4.1V / MiMo 等;NPU 分级 S。 |
| P1 | vllm#47853 interlaced video decode | open | 用 PyAV + yadif 在 decode-time 处理 interlaced video,避免 OpenCV 返回全黑帧;多模态正确性项,NPU 分级 S。 |
| P1 | vllm-omni#4933 Qwen-Image edit VAE tiled encode | open draft | 为 Qwen-Image edit pipelines 增加 distributed tiled VAE encode,适合跟踪 diffusion / image edit serving;NPU 分级 M。 |
| P1 | vllm#47942 sparse MLA topology index policy | open draft | guard-gated sparse MLA logical-token topology index prototype + benchmark;尚未接入 runtime serving,NPU 分级 L。 |
| P1 | vllm#47839 packed variable-length spec decode | open RFC | speculative decoding verifier 支持 batch 内不同 request 的 draft token 数;调度思想可迁移,但 attention backend varlen query contract 重,NPU 分级 M/L。 |
| P1 | vllm#47921 AMD NPU vision for Qwen2.5-VL | open | FlexMLRT / Ryzen AI NPU offload vision tower,Ascend 不能复用,但 vision tower 异构卸载接口边界可参考,NPU 分级 L。 |
| P1 | vllm#46963 pre-SM100 NVFP4 KV cache | open | FlashInfer/CUDA 路径让 Ampere/Hopper 用 NVFP4 KV cache;低比特 KV + dequant attention + stride 统一对 Ascend KV 压缩有参考,NPU 分级 L。 |
| P1 | vllm#47728 async scheduling KV free fix | open ready | 修 async scheduling / PP 下 SWA、chunked-local、Mamba KV block 过早释放;Ascend KV offload / PD connector 要检查 settled-basis free 语义,NPU 分级 M。 |
| P1 | vllm-omni#4645 diffusion skip attention mask | open | Flux2 / HunyuanVideo1.5 跳过 attention mask 避免 varlen path,延迟自报 -22.8% / -29.0%;NPU 分级 M。 |
| P1 | vllm-omni#4923 Qwen3-TTS graph capture | open | talker MTP 从 per-row scalar fallback 迁到外层 full cudagraph,保留 NPU internal graph 路径;适合跟踪 Omni NPU graph 边界,NPU 分级 M/L。 |
| P1 | verl#6970 Qwen3.5 Ascend release 0.8.0 containers | open | 适配 Qwen3.5 Docker / 397B scripts,并提到修 multimodal GRPO vLLM cache reuse 的 mm_hash 问题;需等 PR 补测试,NPU 分级 M。 |
| P1 | THUDM/slime#2186 CUDA 13 offload_train preload | open issue | torch_memory_saver preload .so 只枚举 cu12 / unsuffixed,CUDA 13 镜像误选 cu12 后缺 libcudart.so.12;设备无关工程修复,NPU 分级 S。 |
| P2 | vllm-omni#4939 WeChat QR | merged | 纯文档资产更新。 |
验证清单¶
- Qwen3-TTS PD:对
vllm-omni#4934复测 single / 1P1D / 1P3D / 1P6D / 3P1D,记录 AUDIO_TTFP、E2EL、RTF、tokens/s、音频一致性、Mooncake transfer bytes 和失败 fallback。 - Decode KV prep:对
vllm#47924在 Ascend 上拆分 block-table commit、slot mapping、positions / seq-len math、attention metadata build、forward capture 时间,确认 host eager 比例。 - DSpark prefix cache:按 shared-prefix length bucket 复现
vllm#47926,记录 acceptance、accepted draft tokens / step、rollback、prefix cache hit、block-aligned 与非 block-aligned restored count。 - DiT inter-request cache:对
vllm-omni#4937固定 prompt 集合,比较 baseline / exact hit / semantic hit /inter_request+cache_dit的 latency、CLIP score、人工质量、cache memory、persistent cache reload 和 NPU HBM。 - Qwen3 Next 80B NPU:对
verl#6972做 Ascend memory regression,比较gen_tp=4/8、gpu_memory_utilization=0.8/0.6下 update_weights 峰值、rollout tokens/s 和 OOM 率。 - 6901 BSHD padding:补空 batch
.max()guard 单测,并在 Ascend BSHD path 显式 A/Bpad_bshd_to_minibatch_max=True/False,采集 old_log_prob、actor_update、HBM peak、mask 构造时间和 graph / compile cache 证据。
参考链接¶
- vllm-omni#4934
- vllm#47924
- vllm#47926
- vllm-omni#4937
- verl#6972
- vllm#47936
- vllm#47925
- vllm#47891
- vllm#47876
- vllm#47853
- vllm-omni#4933
- vllm#47942
- vllm#47839
- vllm#47921
- vllm#46963
- vllm#47728
- vllm-omni#4645
- vllm-omni#4923
- verl#6970
- THUDM/slime#2186
- verl#6901
2026-07-07¶
扫描范围¶
- 窗口:2026-07-06T02:11:19Z 至 2026-07-07T02:13Z,按上轮自动化时间回看约 24 小时。
- 仓库:
verl-project/verl、verl-project/verl-omni、vllm-project/vllm、vllm-project/vllm-omni、THUDM/slime、ByteDance-Seed/VeOmni。 - Release:vLLM-Omni v0.24.0 在 2026-07-06T11:42:54Z 发布,覆盖 TTS、speech、diffusion、image/video generation、robot-policy serving、quantization、runtime architecture、request batching、cache behavior、CI 和 CUDA / ROCm / XPU / NPU backend。
- 深入上限:本轮深入 5 个 P0/P1 项;
verl#6901按种子任务复核状态与 NPU 风险,不重复展开已记录机制。
P0 / P1¶
| 优先级 | 项目 | 状态 | NPU 分级 | 结论 |
|---|---|---|---|---|
| P0 | vllm#47081 blocking CUDA events | open, ready | M | async scheduling 下 spin-wait CUDA event 会 busy-poll driver lock,放大 TP collective straggler;PR 改为 torch.get_device_module().Event(blocking=True),TP=4 MoE decode 的 eager cross_device_reduce p99 自报 11.9ms -> 0.5ms。 |
| P0 | vllm-omni#4925 Qwen3-TTS prefix NPU graph | open | M | 为 Qwen3-TTS code predictor 增加 prefix NPU graph bucket;A2 NPU 上 Mean E2EL 8.183s -> 7.276s,Mean AUDIO_TTFP 195.30ms -> 188.01ms。 |
| P0 | verl#6952 TE FP8 workspace offload leak | open | M | offload_megatron_model_to_cpu 没有清理 Transformer-Engine _fp8_workspaces,native-FP8 / FP8 param MoE 可在“full offload”后残留 tens of GiB GPU memory;PR 在 offload 末尾清理并让 TE 下次 forward lazy rebuild。 |
| P1 | vllm-omni#4923 Qwen3-TTS talker MTP graph capture | open | L | 移除 Qwen3-TTS 因默认 seed: 42 触发的 per-row generator scalar fallback,把 talker_mtp 放进外层 full CUDAGraphWrapper;talker_mtp 自报 39ms -> 9ms,RTF 0.54 -> 0.19。 |
| P1 | verl#6940 KV-cache-aware rollout router | open | S/M | 新增 opt-in rollout router,按 prefix-cache hit rate、GPU/CPU/SSD KV tiers、live load 和 sticky session 做 request routing;当前只有 import/config/smoke tests,缺真实 rollout throughput / cache-hit 曲线。 |
| P1 | VeOmni#888 MoE scatter-index O(N) inverse | open | S | Triton / Quack fused-MoE dispatch 从 argsort().argsort() 改为一次 stable sort + arange scatter 反排列;H100 microbenchmark 自报 1.77x-1.83x scatter-index speedup,CPU 单测 10 cases 通过。 |
重点机制¶
vllm#47081 是本轮最清晰的 serving 性能项。async scheduling 中,V1 gpu_model_runner.py 的 prepare_inputs_event 每 step 会在主线程同步;默认 spin-wait event 会忙等 CUDA driver lock。TP=4 MoE decode 时,如果某个 rank 的主线程在 event sync 上迟到,其他 rank 会在 eager cross_device_reduce all-reduce 等它,表现为轮转 rank 的偶发长尾。PR 把 V1 prepare_inputs_event / async_copy_ready_event 和 V2 copy events 改成 torch.get_device_module().Event(blocking=True),同时避开直接 torch.cuda.Event 的 lint 限制。
性能证据来自 PR body:TP=4 MoE decode 下 eager cross_device_reduce p99 11.9ms -> 0.5ms,max 21ms -> 2.9ms;低竞争 Qwen3.5-0.8B TP=1 8k/1k 场景 TPOT p50 2.095ms -> 2.008ms / 2.047ms,没有明显回退。NPU 分级 M:torch.get_device_module() 的设备抽象可迁移,但 Ascend event 是否有等价 blocking semantics、是否影响 HCCL collective 进场时间、以及 async scheduling 主线程等待点,需要单独用 torch_npu / HCCL profiler 复测。
vllm-omni#4925 直接命中 Qwen3-TTS NPU 图优化。改动只有 vllm_omni/model_executor/models/common/qwen3_code_predictor.py,在 _capture_npu_graphs 中支持 code predictor prefix graph,并通过 code_predictor_prefix_graph_buckets 与 code_predictor_prefix_graph_seq_lens 做 bucket 化 capture。作者在 A2 NPU、vLLM 0.23.0、vLLM-Ascend commit 4885d8e7、vLLM-Omni commit 65bc737 上测试 Qwen3-TTS-12Hz-1.7B-Base,打开 prefix graph 后 Mean E2EL 7276.39ms、Mean AUDIO_TTFP 188.01ms、Mean AUDIO_RTF 0.576;关闭后分别是 8183.28ms、195.30ms、0.627。
这个 PR 是 M 级:方向是 Ascend 专项,收益也已在 NPU 上给出,但样本只有 concurrency=1、5 requests、固定 4s ref_audio 和固定 prompt。下一步要补 concurrency 4/8、不同 ref_audio 长度、Base / CustomVoice、async_chunk on/off、prefix graph bucket miss、图 capture 失败 fallback、音频相似度和显存峰值,才能判断是否可作为默认 recipe。
verl#6952 是 post-training colocated rollout 的显存正确性修复。offload_megatron_model_to_cpu 原来会释放 DDP buffers 并遍历 .parameters(),但 Transformer-Engine 的 FP8 weight workspace 存在 module._fp8_workspaces,不是 parameter 也不是 registered buffer。native-FP8 checkpoint 或 FP8 param dtype 下,TE Linear / GroupedLinear 会缓存 Float8Tensor / Float8BlockwiseQTensor 权重副本;offload 后这些 tensor 仍留在 GPU,可能在 rollout engine reload weights 时撞上 tens of GiB per-rank 残留。
PR 只改 verl/utils/megatron_utils.py,新增 _clear_te_fp8_weight_workspaces 并在每个 model chunk offload 末尾调用;bf16/fp16 路径没有该属性时 no-op,下一次 forward 由 TE lazy rebuild。NPU 分级 M:这是 TE FP8 / Megatron offload 语义问题,不是 Ascend kernel 优化;但 Ascend hybrid training 同样需要审计“offload 是否真的释放所有非 Parameter GPU/NPU tensor cache”。如果 NPU recipe 用 MindSpeed / TE-like FP8 cache,应建立 after-offload device memory delta 和 cache attribute 清单。
vllm-omni#4923 修 Qwen3-TTS talker MTP 的 graph ownership 和 batching。根因链很具体:qwen3_tts.yaml stage 0 默认 seed: 42,serving_speech.py 每个请求都把它复制为 extra_args["tts_local_seed"];每个 request 都产生非空 per-row generator,而 graph-wrapped talker 不接受 per-row generator,于是 runner 走 scalar fallback,每 step 对每行单独 replay size-1 graph。PR 去掉默认 seed,把 GPU code predictor internal graph 关闭,改由 runner 包住整个 talker_mtp,并让 eager 模式保留 per-row generator fast path。
作者给出的 profile 和 benchmark 显示 _talker_mtp_forward 之前比 _preprocess 多 4-5x,修改后 talker_mtp 39ms -> 9ms;concurrency=8、32 requests 的 serving benchmark 中 Mean E2EL 1049.97ms、Mean AUDIO_TTFP 272.73ms、Mean AUDIO_RTF 0.19,并标注 RTF 0.54 -> 0.19。NPU 分级 L:收益依赖 CUDA Graph ownership 与 GPU code predictor graph 策略;NPU 当前保留 internal graphs,不能直接套改。对 Ascend 的价值是检查 tts_local_seed 是否也会破坏 batched graph path,以及 per-request reproducibility 和 graph capture 的取舍。
verl#6940 把 rollout server 的 routing 从简单负载均衡推进到 KV-cache-aware。新增 verl/workers/rollout/llm_router/ 43 个文件,包含 collector、transport、store、strategy、sticky session、load score 和 Hydra config;LLMServerClient._acquire_server() 增加可选 prompt_ids,router 根据 prefix-cache hit rate、GPU/CPU/SSD layer weights、KV usage、running/waiting requests 和 overload threshold 选 server。默认不配置 router 时仍走原 GlobalRequestLoadBalancer。
这是 S/M 级:纯 Python / 控制面逻辑可以跨设备复用,但依赖 vLLM Prometheus / ZMQ KV event 的指标契约,且 PR 自己还留了真实 rollout throughput / cache-hit comparison 待补。NPU 侧最适合把它作为 fully_async / colocated rollout 的评估项:同一 prompt 分布下比较 default vs KV-aware router 的 prefix hit、GPU/CPU/SSD KV pressure、tail latency、rollout tokens/s 和 server rebalance 次数。
VeOmni#888 是低风险 MoE dispatch 热点清理。旧 Triton / Quack fused-MoE 后端通过 argsort(stable=True).argsort() 构造 scatter-index,第二个 sort 只是对 [0..N) permutation 求逆,却付出 O(N log N) 和一个额外 kernel launch。新 helper compute_expert_scatter_index 保留一次 stable sort,用 inv[sorted_order] = arange(N) 生成 inverse permutation,再返回 int32 scatter-index。它改动 group_gemm.py 两个 forward 和 quack_gemm.py 一个 call site。
CPU 单测覆盖 10 个 shape、bit-exact parity、permutation、stability、dtype/device 和 mutual inverse;H100 microbenchmark 在 (T, topk, experts) 10 组形状上自报 1.77x-1.83x speedup。NPU 分级 S:helper 是设备无关 PyTorch indexing,理论上可直接复用到 NPU;但实际收益需要 torch_npu 的 argsort(stable=True) 和 scatter 性能确认,且绝对耗时约 0.1-0.3ms/调用,优先级低于 attention / graph 类项目。
6901 状态复核¶
verl#6901 本轮复核仍为 merged,merge time 为 2026-07-02,PR 显示 2 commits、6 changed files、+63/-10。关键文件仍是 verl/models/mcore/model_forward.py、verl/models/mcore/util.py、verl/workers/engine/megatron/transformer_impl.py、verl/workers/config/engine.py 和两个 Megatron YAML 配置。
机制与性能证据维持不变:它只作用于 use_remove_padding=False 的 BSHD path,把同一 mini-batch 内所有 micro-batch pad 到 mini-batch 全局最大 seq_len,减少 cuDNN / TransformerEngine fused-attention graph / plan build 的 shape 数。PR body 的 Qwen3.5-35B-A3B 15-step benchmark 仍是 Total Step Time 534.13s -> 397.71s,Old Log Prob 78.38s -> 35.45s,Actor Update 247.58s -> 154.50s。
6901 仍不是自动适配项
结论仍是 M 级。核心 shape 统一思想可用于 Ascend BSHD 路径评估,但收益证据来自 H100 / cuDNN / TransformerEngine plan cache,不能直接外推。空 batch .max()、VLM BSHD mask、MTP label / loss_mask、TP / CP / FP8 alignment、额外 padding HBM 成本,以及 NPU B1SS / BNSS attention mask 形态仍要补测。
简表¶
| 优先级 | 项目 | 状态 | 备注 |
|---|---|---|---|
| P1 | vllm#47629 TRITON_MLA_SPARSE | open | 为 SM80/SM121 sparse MLA 增加 Triton backend,A800 上 kernel tests 41 + 53 passed,并完成 GLM-5.2 NVFP4 TP=8 serve smoke;NPU 分级 L,作为 sparse MLA backend contract 参考。 |
| P1 | vllm#47783 DSV4 packed KV correctness | open issue | DeepSeek-V4 FLASHINFER_MLA_SPARSE_DSV4 在 #44577 packed KV layout 后 gsm8k 从约 95% 掉到 0%;提示 KV layout 改动必须有 accuracy gate,NPU 分级 L。 |
| P1 | vllm#47763 MiniMax-M3 verify-as-decode | open issue | spec decode verify 复用 block-sparse decode kernel,导致每个 draft token 重复从 HBM stream sparse KV;建议 query-parallel / prefill-like verify path,NPU 分级 L。 |
| P1 | vllm#47722 EP+DP MoE KV init crash | open issue | GLM-5.2-FP8、EP+DP、DeepEP、FP8 KV cache、disaggregated prefill/decode 启动失败;优先跟踪 _initialize_kv_caches、determine_available_memory 和 worker collective shape 推导。 |
| P1 | vllm#47474 DSV4 token_to_req_indices cache | merged | DeepSeek-V4 kernel path 减少 CPU->GPU copy,PR 声明 5x-6x kernel performance improvement;适合纳入 DSV4 FP8 KV cache / EP / deep_gemm_mega_moe 性能回归。 |
| P1 | vllm-omni#4911 Wan2.2-S2V NPU complex index | open issue | Ascend 910B3 上 WanS2VRotaryPosEmbed 对 torch.complex64 frequency tensor 做 indexing,触发 aclnnIndex 不支持 DT_COMPLEX64;NPU 分级 S/M,可尝试 real/imag 拆分或提前 gather。 |
| P1 | vllm-omni#4930 MOSS-TTS streaming CUDA graphs | open | 为 MOSS-TTS Local vocoder 加 stateful streaming CUDA Graph wrapper、stream slots、safe eager fallback;NPU 分级 L。 |
| P1 | vllm-omni#4927 Cosmos3 diffusion CUDA Graph runner | open | 新增通用 diffusion CUDA Graph runner 并接入 Cosmos3 cached GEN transformer forward;重点关注 Ulysses multi-GPU、cache-DiT 边界和 benchmark。 |
| P1 | vllm-omni#4772 diffusion step-mode KV prefetch | open | Hunyuan-Image disaggregated diffusion 让 KV prefetch 从 request 入队时 fire-and-forget,扩大 overlap window;NPU 分级 M。 |
| P1 | verl-omni#239 diffusion request-level batching | open draft | Qwen-Image / SD3 rollout adapter 支持 request-level batching,A100 上 step-wise batching 430-450s -> 320-330s;LoRA 路径仍约 500s。 |
| P1 | THUDM/slime#2181 engine-side /pull_weights |
open | disaggregated rollout 的权重同步从 slime Ray fan-out 改到 engine-side pull,支持 per-host flock 和 delta checksum;对远程外部 rollout engine 有价值。 |
| P1 | verl-omni#214 diffusion prompt embedding cache | open | tokenized prompt path 保持 list/hashable 到 encode_prompt(),让 Qwen-Image / Wan2.2 rollout 能命中 vLLM-Omni prompt embedding cache。 |
| P2 | verl#6948 NPU doc eager note | merged | 文档修正:vLLM 0.18 eager 在 Ascend 有性能劣化,因为 vLLM-Ascend 为易用性把融合算子替换成小算子。 |
| P2 | VeOmni#887 NPU CI image tag | open | NPU CI 镜像切到 veomni-9.0.0-910b-ubuntu22.04-py3.11-torch2.9.0-latest,工程化跟踪即可。 |
验证清单¶
- CUDA / NPU event wait:复现
vllm#47081的 async scheduling 场景,分别记录 spin / blocking event 下主线程 CPU 占用、collective p99、rank skew、TPOT 和 HCCL / NCCL trace。 - Qwen3-TTS NPU graph:对
vllm-omni#4925补 concurrency 1/4/8、ref_audio 长短、bucket hit/miss、graph capture failure fallback、AUDIO_TTFP、E2EL、RTF、显存峰值和音频相似度。 - TE / NPU offload cache:围绕
verl#6952建立 offload 前后 device memory delta;遍历 non-parameter tensor caches,确认 FP8 workspace、optimizer shard、router cache、rollout reload 不互相挤占。 - KV-aware router:对
verl#6940跑真实 rollout A/B,至少记录 prefix hit rate、GPU/CPU/SSD KV usage、running/waiting queue、tail latency、rollout tokens/s 和 sticky fallback 次数。 - MoE scatter helper:在 NPU 上跑
VeOmni#888的 parity + microbenchmark,确认argsort(stable=True)、scatter inverse、int32 index dtype 和 group-GEMM / Quack call sites 不破坏稳定性。 - Sparse MLA correctness:把
vllm#47783纳入大模型 accuracy gate,任何 KV layout / packed allocation 改动都要跑 gsm8k 或等价 smoke,而不是只看 kernel pass。 - EP+DP KV init:跟踪
vllm#47722,复查 FP8 KV cache、DeepEP、disaggregated prefill/decode 下的 KV cache init shape、collective world size 和 memory probe。 - Diffusion graph runner:对
vllm-omni#4927记录 graph key、capture-safe 判定、cache-DiT fallback、Ulysses multi-GPU replay 和 stage_0_gen / latency / throughput。 - 6901 BSHD padding:继续补空 batch
.max()guard、VLM BSHD mask、MTP label / loss_mask、TP / CP / FP8 alignment 和 NPU BSHD A/B 性能。
参考链接¶
- vllm#47081
- vllm-omni#4925
- verl#6952
- vllm-omni#4923
- verl#6940
- VeOmni#888
- vllm#47629
- vllm#47783
- vllm#47763
- vllm#47722
- vllm#47474
- vllm-omni#4911
- vllm-omni#4927
- vllm-omni v0.24.0
- verl#6901
2026-07-06¶
扫描范围¶
- 窗口:2026-07-05T02:12:11Z 至 2026-07-06T02:40Z,按上轮自动化时间回看约 24 小时。
- 仓库:
verl-project/verl、verl-project/verl-omni、vllm-project/vllm、vllm-project/vllm-omni、THUDM/slime、ByteDance-Seed/VeOmni。 - Release:本窗口内没有新的正式 release;最近仍是
verl-omni v0.1.0、vllm v0.24.0、vllm-omni v0.24.0rc1。 - 深入上限:本轮深入 5 个 P0/P1 项;另对雷达代理标出的
VeOmni#879、verl#6913、vllm#47671做增量核验;verl#6901按种子任务做状态复核和 NPU 边界确认。
P0 / P1¶
| 优先级 | 项目 | 状态 | NPU 分级 | 结论 |
|---|---|---|---|---|
| P0 | VeOmni#879 Qwen3.5 GDN NPU ops | open draft | L | 新增 Qwen3.5 gated delta-rule 的 causal_conv1d / chunk_gated_delta_rule NPU backend,vendor MindSpeed-MM Ascend Triton kernel,直接影响 Ascend varlen Qwen3.5 / MoE 训练。 |
| P0 | verl#6913 fused-kernel gradient tracking bug | open | S | use_liger / use_fused_kernel 路径里 autograd Function forward 内的 .flatten(0,1) 可能丢掉原始 requires_grad,导致 backward 返回 None、reward 静默不涨;PR 用原 hidden_states 的 flag 修正。 |
| P0 | vllm#47671 Triton decode attention int32 overflow | open | L | _fwd_kernel_stage1 / grouped stage1 以 int32 计算 kv_page_number * page_stride,大 KV page 下可能负 offset 并触发 CUDA illegal memory access;PR 改为 int64 offset。 |
| P0 | vllm-omni#4909 AR-diffusion KV copy-on-write fork | open draft | M | 在 AR-diffusion paged KV pool 上增加 block-table/refcount fork,DreamZero-like 5.36 GiB resident KV 的 4-way fan-out 从深拷贝 43.8ms / 5.36GiB per branch 变成 0.01ms / 0 tensor bytes。 |
| P0 | verl#6929 vLLM 0.18 Ascend fully_async patch | merged, 2026-07-06 | S | 已合入;只改 verl/utils/vllm/npu_vllm_patch.py 2 行,把 RotaryEmbedding flash-attn 禁用和 FusedMoE.weight_loader 兼容下探到 vLLM >=0.18.0 && <0.19.0。 |
| P1 | vllm-omni#4902 MOSS-TTS Local Stage-0 CUDA Graph | open draft | L | 为 MOSS-TTS Local Stage-0 增加 sampling 与 CUDA Graph frame graph;小 Seed-TTS-style voice clone benchmark 自报 Mean E2EL 1387.68ms -> 1208.67ms、audio throughput +14.80%。 |
| P1 | vllm#47677 DeepSeek-V4 DSpark on XPU | open | M | 新增 Intel XPU DSpark draft model,使用 HCHeadOp / MHCPostOp 替代 tilelang kernels,并补 DeepSeek-V4 XPU model 的 Eagle/aux hidden states;spec decode 控制流值得跟踪。 |
| P1 | vllm-omni#4896 faster diffusion weight loading RFC | open RFC | M | 指出 diffusion 首次加载仍走 pageable CPU mmap + default-stream H2D,30-60GB checkpoint copy 可能从 pinned/GDS 路径的 2-3s 退化到 40-70s;建议 pinned staging、GDS、load log 拆分。 |
| P1 | vllm#47581 Rust frontend multimodal tensor copy | open | S | Rust frontend 对 inline tensor payload 去掉两处大 buffer clone:mm_features.take() 移入 GenerateRequest,RawView 从 borrowed bytes 序列化,wire format 不变。 |
| P1 | vllm#47666 KV offload read/write gauges | open | S | 把 CPU KV offload cache usage 拆成 write-pending 与 read-pending 两个 Prometheus gauge,便于区分 GPU->CPU store 与 CPU->GPU load 压力。 |
重点机制¶
vllm-omni#4909 是今天最有价值的多模态 serving / world-model 项。它给 ARDiffusionKVCache 增加 fork_at_last_commit(parent, child_request_id),只复制 parent 的 block table 并对 BlockPool refcount 做 touch,不移动 K/V tensor bytes;下一次 allocate_chunk 会为分叉后的 session 追加新 blocks,从而让 divergence 自动隔离。ARDiffusionKVState.fork(pos_id, neg_id) 同时 fork CFG 的 positive / negative 两条 stream,并在部分失败时回滚。
这个改动直接服务 speculative action branches、RL imagined rollouts 和 rollback。PR 的 H200 microbenchmark 给出 DreamZero-like scale:30 layers、20-chunk window、5.36 GiB resident bf16 KV,深拷贝 branch 是 43.8ms 且每 branch 需要 5.36 GiB;copy-on-write 4-way fan-out 是 0.01ms per branch 且 0 tensor bytes。NPU 分级 M:算法和 allocator 语义可迁移,但需要确认 Ascend runtime 的 KV block 生命周期、cross-attention conditioning、CFG stream refcount、branch interleaving 和 window eviction,不宜自动开适配 PR。
verl#6929 是本轮已合入的 Ascend 小补丁。它把 vLLM 0.19+ 路径中已经存在的 NPU compatibility patch 下探到 vLLM 0.18.x:禁用 NPU 不支持的 flash-attn RoPE kernel,并保持 newer vLLM 的 FusedMoE.weight_loader wrapper 兼容。NPU 分级 S,但上游已经合入,不需要本轮开 PR;下一步是把 vLLM 0.18.x / 0.19.x / 0.24.x 的 fully_async rollout 启动、MoE weight loading、RotaryEmbedding 和 Qwen3.5 router replay 放进同一回归矩阵。
vllm-omni#4902 聚焦 TTS stage 的 graph capture。它在 modeling_moss_tts_talker.py 和 gpu_model_runner.py 中为 MOSS-TTS Local Stage-0 增加 frame graph / sampling path,并补 29 个 CPU-only tests、GPU smoke 和小型 vllm-omni bench serve --omni 结果。作者报告 Greedy eager 到 Stage-0 frame graph 后 Mean E2EL 1387.68ms -> 1208.67ms,Mean audio RTF 0.0707 -> 0.0616。NPU 分级 L:收益来自 CUDA Graph capture 与本地 transformer stage,Ascend 需要重新定义 graph/eager fallback、sampling 等价性和音频质量门槛。
vllm#47677 把 DeepSeek-V4 DSpark speculative decoding 接到 Intel XPU。关键文件是 vllm/models/deepseek_v4/xpu/dspark.py,新增 436 行 XPU draft model,用 vllm-xpu-kernels 的 HCHeadOp / MHCPostOp custom ops 替代 tilelang;xpu/model.py 给 target model 增加 Eagle mixin 和 aux hidden states。NPU 分级 M:XPU custom op 不能复用,但 DSpark 的 target-layer aux hidden、draft head dispatch 和 speculative acceptance 统计值得映射到 Ascend serving benchmark,尤其要和昨天的长上下文 MTP acceptance 退化一起看。
vllm-omni#4896 是 diffusion cold-start 的 RFC。当前 DiffusersPipelineLoader 通过 mmap 把 safetensors 读到 pageable CPU memory,再在 default stream 同步 H2D;作者测 pageable H2D 约 1.8GB/s,而 pinned transfers 可到 20-50GB/s。它建议先做 opt-in pinned staging + dedicated copy stream,再考虑 fastsafetensors / GDS、diffusers/custom pipeline 覆盖、TP 多 rank read dedup 和 read/H2D 时间拆分。NPU 分级 M:Ascend 没有 CUDA GDS 等价路径,但 pinned/host staging、rank-0 read+broadcast、加载日志拆分和内存锁限制都适合纳入 NPU diffusion serving 冷启动评估。
VeOmni#879 是本轮持续更新的 Ascend 大项。它给 Qwen3.5 gated delta-rule linear-attention ops 增加 npu backend:causal_conv1d 通过 thin adapter 桥接到 vendored MindSpeed-MM kernel,chunk_gated_delta_rule 直接绑定,并通过既有 OpSlot / KERNEL_REGISTRY 按 HardwareRequirement(device_type="npu") 分发。价值很直接:GPU 上这些 op 走 fla / flash_qla,NPU varlen / dyn_bsz 训练此前没有非 eager backend,会在 Qwen3.5(-MoE) 训练中报错。
这个 PR 的风险也很清楚:约 4.1k 行 Ascend Triton kernel 是从 MindSpeed-MM commit 39775d87 vendor 进来,依赖手动安装 triton-ascend v3.2.1,没有 PyPI 依赖声明;causal_conv1d 对 Ascend910_95 / Ascend950 这类 arch35 明确 NotImplementedError。NPU 分级 L,不是因为方向不重要,而是因为它已经是 kernel 级引入,必须先核验 license、上游同步策略、910B2C 复现、arch35 行为、数值 parity 和 profiling。
verl#6913 是训练正确性高风险小改。PR 指出 fused kernels 的 custom autograd forward 默认不跟踪梯度,内部 .flatten(0,1) 后 requires_grad 可能变成 false;backward 看到 hidden_states 不需要梯度后返回 None,表现为训练 reward 静默不涨。改动只有 verl/utils/experimental/torch_functional.py 两行,用原始 hidden_states.requires_grad 而不是依赖 flatten 后 tensor 的行为。NPU 分级 S:这是设备无关 autograd correctness,但如果 Ascend recipe 开了 use_liger 或 use_fused_kernel 等价路径,应优先加一个最小 backward 梯度非空回归。
vllm#47671 是 attention/kernel 路径的整数溢出修复。triton_decode_attention.py 的 stage1 kernel 加载 kv_page_number 后用 int32 乘 KV buffer page stride;在 MLA c_kv=576、PAGE_SIZE=480 时 page stride 约 276k,page number 超过约 7.7k 就可能溢出为负 offset,异步报错通常落在后续无关 kernel 上。PR 改成和其他 block-indexed Triton kernels 一样,在 load 后 cast 到 int64。NPU 分级 L:当前实现是 Triton/CUDA 特定,但对 Ascend paged attention / KV cache 也有硬规则,大 page id、stride、offset 计算必须用 64-bit 路径验证。
6901 状态复核¶
verl#6901 今天重新核验仍为 merged,merge time 为 2026-07-02T02:06:29Z,merge commit 561a4b03a11b34446e44267c2e84c4bbf63585f5,本窗口内没有新提交。changed files 仍是 model_forward.py、util.py、engine.py、Megatron engine/config 等 6 个文件。
结论维持 M 级评估项:性能证据仍来自 PR body 的 Qwen3.5-35B-A3B 15-step benchmark,Total Step Time 534.13s -> 397.71s,Old Log Prob 78.38s -> 35.45s,Actor Update 247.58s -> 154.50s。机制仍是把 BSHD path 的 micro-batch padded s_q 统一到 mini-batch max,减少 cuDNN / TransformerEngine fused-attention Graph Build / plan build。它的收益来源不能直接外推到 Ascend/NPU。
6901 未消除的风险
main 上仍能看到未 guard 的 .max() 风险点:transformer_impl.py 的 input_ids.offsets().diff().max(),以及 util.py 中 seqlens_in_batch.max() / VLM BSHD mask path。动态 batching、空 rank、VLM BSHD、MTP label / loss_mask、TP / CP / FP8 alignment 和额外 [B,1,S,S] mask HBM 成本都要补测。PR body 还保留 default false / opt-in 的旧描述,但最终合入代码已把 pad_bshd_to_minibatch_max 默认设为 True。
简表¶
| 优先级 | 项目 | 状态 | 备注 |
|---|---|---|---|
| P1 | vllm-omni#4894 multi-stage init AB-BA deadlock | open issue | 多 LLM stages 部分共享 GPU 时,spawn-env lock 与 per-device flock 形成 AB-BA;影响 Ming / Qwen3-Omni / HunyuanImage3 类 colocated deploy,NPU 分级 S/M。 |
| P1 | vllm#47654 sleep-mode leaks HBM for multimodal encoder | open issue | --mm-encoder-tp-mode data 下 sleep 后仍保留 157-160GB HBM / GPU,可能是 multimodal encoder allocation 未进入 CuMem allocator;多租户 sleep-swap 阻塞项。 |
| P1 | vllm#47672 ROCm paged attention decode | open draft | AITER Flash Attention / shuffle KV cache / sinks 支持,强 ROCm backend 绑定,NPU 只跟踪 attention backend contract。 |
| P1 | verl#6931 NPU megatron.bridge missing | open issue | 用户按 Qwen3.5 Megatron NPU 指南在 Ascend image + commit cdd9014f 上遇到 ModuleNotFoundError: megatron.bridge;优先作为文档/镜像依赖一致性问题跟踪。 |
| P1 | vllm-omni#4901 Q3 Roadmap | open RFC | 明确 Q3 主线:real-time full-duplex、world model / diffusion serving、FastVideo kernels、compute&comm fused kernels、diffusion KV manager、DP/EP/PP。 |
| P1 | verl-omni#235 Qwen-Image-Edit FlowGRPO | open | Qwen-Image-Edit-2511 / Plus 的 FlowGRPO 训练链路,覆盖 diffusers training、vLLM-Omni rollout、PickScore reward、LoRA 和 smoke test;NPU 分级 M。 |
| P2 | vllm#47678 Gemma4 template packaging | open draft | packaging bugfix,非性能主线。 |
| P2 | vllm-omni#4906 Qwen3-Omni CI audio mismatch | open issue | 高优先级 CI failure,但当前缺少机制和性能信息。 |
验证清单¶
- AR-diffusion KV fork:在 NPU / Ascend diffusion runtime 中复查 block-table refcount、fork 后写隔离、window eviction、CFG pos/neg stream rollback、cross-attn image conditioning invalidation 和 sibling interleaving。
- verl fully_async NPU:对
verl#6929覆盖 vLLM 0.18.x / 0.19.x / 0.24.x,验证 RoPE flash-attn disable、FusedMoE weight loader、process group 初始化、Qwen3.5 router replay 和 rollout 启动。 - MOSS-TTS graph path:如果迁到 NPU,先定义 eager fallback、graph capture 边界、sampling parity、音频非零/finite、TTFP / E2EL / RTF 和音质指标,再谈默认启用。
- DSpark / MTP:按 context length bucket 记录 acceptance、rollback、aux hidden memory、draft head latency 和 decode tok/s,避免只按短上下文结论调参。
- Diffusion weight loading:拆分 read / host staging / H2D-D2H / rank broadcast 时间,记录 pinned memory 或 Ascend host staging 限制,优先验证 cold-start 而不是 steady-state denoise。
- GDN NPU kernels:对
VeOmni#879先做 license / vendor diff / triton-ascend version pin,再跑 910B2C causal_conv1d、chunk_gated_delta_rule 数值 parity、arch35 guard 和 varlen SFT smoke。 - fused-kernel 梯度:对
verl#6913加最小 autograd 回归,确认 fused path backward 后 hidden_states 梯度非空、reward/loss 可更新。 - paged attention offset:把
vllm#47671的 64-bit page offset 约束纳入 NPU paged attention review,构造大 KV pool / 高 page id case。 - 6901 BSHD padding:补空 batch guard 单测;在 NPU 上显式 A/B
pad_bshd_to_minibatch_max=True/False,采集 old_log_prob、actor_update、HBM peak、mask 构造时间和 shape compile/cache 证据。
参考链接¶
- vllm-omni#4909
- verl#6929
- vllm-omni#4902
- vllm#47677
- vllm-omni#4896
- vllm#47581
- vllm#47666
- VeOmni#879
- verl#6913
- vllm#47671
- verl-omni#235
- vllm-omni#4894
- vllm#47654
- verl#6901
2026-07-05¶
扫描范围¶
- 窗口:2026-07-04T02:12:04Z 至 2026-07-05T02:16Z,按上轮自动化时间回看约 24 小时。
- 仓库:
verl-project/verl、verl-project/verl-omni、vllm-project/vllm、vllm-project/vllm-omni、THUDM/slime、ByteDance-Seed/VeOmni。 - Release:本窗口内没有新的正式 release;最近仍是 verl-omni v0.1.0,发布时间 2026-07-03T07:08:20Z。
- 深入上限:本轮深入 5 个 P0/P1 项;
verl#6901继续按种子任务做状态复核和 NPU 边界记录。
P0 / P1¶
| 优先级 | 项目 | 状态 | NPU 分级 | 结论 |
|---|---|---|---|---|
| P0 | verl#6928 vLLM 0.18/0.19 Ascend compatibility | merged, 2026-07-04 | S | 已合入;只改 verl/utils/vllm/npu_vllm_patch.py 2 行,把 vLLM 0.18.x NPU RoPE flash-attn 禁用和 FusedMoE.weight_loader 兼容逻辑补齐到 fully_async patch 路径。 |
| P0 | vllm-omni#4879 Qwen3-TTS hidden-state D2H opt-out | open | M | Qwen3-TTS code2wav 不消费 full hidden states,但每 decode step 仍同步 materialize CPU hidden payload;PR 用既有 omni_pooler_payload_include_hidden gate 跳过拷贝,H20 CustomVoice c=64 自报 audio throughput +13%、mean TTFP 1056ms -> 479ms。 |
| P0 | vllm#47599 FlashInfer b12x NVFP4 MoE warmup | open | L | 修 #47458 的 mixed-shape stop-the-world stall:SM120/SM121 flashinfer_b12x MoE CuteDSL kernel 把 shared workspace max_rows 纳入 compile key,大 prefill 会让小 shape kernel 失效;PR 在 startup 先 max shape 再 micro shape warmup。 |
| P1 | vllm#47602 Qwen3.6 MTP acceptance decays with context | open issue | M | 单层 MTP draft head 在 native long context 内 acceptance 随总上下文长度平滑下降,n=6 decode tok/s 从 2K ctx 的 +129% 变成 16K ctx 的 -14%、30K ctx 的 -51%;建议 per-request / length-bucketed spec decode gate。 |
| P1 | vllm-omni#4872 stage_input_processors RFC | open RFC | S/M | 提议为 27 个 stage processor 模块引入 Protocol、ConsumerContext、registry/startup validation、shared helpers 和 async/non-async parity tests;直接影响 omni 多阶段模型新增和 TTS async_chunk 正确性。 |
| P1 | vllm#47416 Kimi fused image preprocessing | open | S | Kimi K2.5/K2.6 vision chunk 的 CPU preprocessing 融合 padding、normalization、patchification,PIL resize 语义保持不变;8 张 2048x2048 synthetic RGB 自报 1316ms -> 190ms。 |
| P1 | vllm#47622 batch KV scale host conversion | open draft | S | --calculate-kv-scales 下把 q/k/v scale 的多个 .item() 合成一次 torch.stack(...).to("cpu").tolist(),减少 D2H sync 点,覆盖 regular attention 与 MLA attention。 |
| P1 | vllm#47623 avoid logprobs list materialization | open draft | S | V1 logprob processing 避免整行 .tolist() 后再 append,改成 iterable-based append,只解码每个 position 需要的 token id;属于 batched serving logprobs hot path 的 Python allocation 优化。 |
重点机制¶
vllm-omni#4879 是今天最直接的多模态 serving 性能项。Qwen3-TTS stage 1 code2wav 消费 runtime audio codes,而不是 full hidden states;但 vllm_omni/worker/gpu_ar_model_runner.py 在 hs_for_cache is None 时会每步执行:
作者用 py-spy 在 c=64 下看到这行占 stage-0 on-CPU samples 的 24.1%。PR 只改 qwen3_tts_talker.py 和 gpu_ar_model_runner.py 两处:Qwen3-TTS talker 声明 omni_pooler_payload_include_hidden = False,copy site 读取既有 flag 决定是否 materialize hidden payload。H20、Qwen3-TTS-12Hz-1.7B-CustomVoice、300 requests/arm 的 A/B 显示 audio throughput 45.7 -> 51.7 audio-s/s,mean TTFP 1056ms -> 479ms,p99 TTFP 3270ms -> 1067ms。
该 PR 评论也暴露一个独立风险:Base voice-clone 首请求的 29s 级延迟来自 Qwen3CodePredictor._setup_compile() 的 lazy torch.compile / CUDA graph capture,而不是 hidden payload opt-out 本身。NPU 分级为 M:开关和拷贝 gate 是设备无关逻辑,但是否对 Ascend 有同量级收益取决于 torch_npu D2H sync、prefix cache、Base/CustomVoice 两条路径和 code predictor warmup。自动适配不启动;应先复现 CustomVoice/Base、streaming/non-streaming、cold/warm cache 四组矩阵。
vllm#47599 和昨天的 shape/JIT 主题完全同线。#47458 报告 Qwen3.6-35B-A3B-NVFP4 在大 prefill 后切小请求 burst 时出现约 17.5s engine-wide stall;#47599 把根因收敛到 SM120/SM121 flashinfer_b12x NVFP4 MoE 的 CuteDSL JIT:small-token micro path 的 compile key 同时依赖 num_tokens 与 shared workspace max_rows。一旦大 prefill 扩大 workspace,之前编译过的小 batch kernels 失效,下一次小请求触发 CPU-bound MLIR compile,所有 in-flight requests 同步冻结。
修复思路不是改 kernel,而是改 warmup 顺序:只有检测到 b12x MoE backend 真在 SM120 上使用时,先通过真实 _dummy_run(...) 跑 max token count,让 shared workspace 到达 high-water mark,再 warmup micro token sizes,使小 shape kernel 用最终 workspace 编译并保持 cache-valid。NPU 分级为 L:这是 FlashInfer/CuteDSL/NVFP4/SM120 特定路径,但对 Ascend 的启发很明确:warmup 必须覆盖最终 workspace / cache key,而不只是覆盖 token shape。
vllm#47602 是 spec decode 策略层信号。用户在 Qwen3.6-27B dense、native 262K context、MTP n=6 下测到短上下文强加速但长上下文反而变慢:2K ctx 时 138.04 vs 60.39 tok/s,16K ctx 时 51.03 vs 59.13 tok/s,30K ctx 时 26.81 vs 54.55 tok/s。对应 per-position draft acceptance 也从平均 64.9% 降到 39.1%,且 position-1 acceptance 也从 0.935 降到 0.721。
这不一定是 bug,更可能是单层 MTP head 与 64-layer target 在长上下文一致性上的能力差距。NPU 分级 M:不涉及 kernel 适配,但会影响 Ascend serving benchmark 设计。若 NPU 上启用 MTP/spec decode,不能只给全局 num_speculative_tokens;需要按 context length、acceptance、rollback 成本、KV cache 压力做 per-request gate,至少记录无 MTP / n=3 / n=6 在 2K、8K、16K、32K 的吞吐和 acceptance。
vllm-omni#4872 是多模态框架维护性 RFC。stage_input_processors/ 当前有 27 个 Python 模块、约 8900 行,通过字符串路径和 inspect.signature 在运行时探测参数;同类 helper、async_chunk accumulation、Qwen Omni family 逻辑大量复制。RFC 建议先引入 ConsumerContext / Protocol、registry/startup validation、_common.py shared helpers 和 async/non-async parity tests。NPU 分级 S/M:改动本身设备无关,但会影响所有多阶段 TTS/Omni pipeline 的验证面;对 NPU recipe 来说,最重要的是把 sync、async_chunk、full payload、token_only 四类 processor 的契约固定下来,避免同一模型在 NPU 环境下只测一种路径。
vllm#47416 是多模态 CPU 前处理的高收益低硬件绑定项。它新增 KimiK25FusedVisionProcessor,在保持 Kimi NaViT resize/token semantics 的前提下,用 numba 融合 resize 后的 padding、normalization、patchification,并用 uint8 -> normalized float32 lookup table 减少逐像素归一化算术。作者没有启用 OpenCV resize,原因是 OpenCV bicubic 与当前 PIL bicubic 数值不等价。NPU 分级 S:主要是 CPU preprocessing,可直接进入 Ascend 多模态 serving 的端到端 TTFT / preprocessing time 观察项。
verl#6928 是本轮已合入的 Ascend 小补丁。它和昨日跟踪的 verl#6929 同主题,但 6928 已进入主线:对 vLLM >=0.18.0 && <0.19.0 复用 vLLM 0.19+ NPU patch 逻辑,避免 NPU 走 flash-attn 不支持的 RoPE kernel,并保持 newer vLLM 的 FusedMoE.weight_loader 包装兼容。NPU 分级 S,但不自动提交适配 PR,因为上游已经合入;下一步是把 vLLM 0.18.x / 0.19.x / 0.24.x 的 fully_async rollout 启动、MoE weight loading 和 RotaryEmbedding 路径纳入同一回归矩阵。
6901 状态复核¶
verl#6901 本轮复查仍为 merged,merge time 为 2026-07-02T02:06:29Z,merge commit 561a4b03a11b34446e44267c2e84c4bbf63585f5。changed files 仍是 verl/models/mcore/model_forward.py、verl/models/mcore/util.py、verl/trainer/config/_generated_ppo_megatron_trainer.yaml、verl/trainer/config/engine/megatron.yaml、verl/workers/config/engine.py、verl/workers/engine/megatron/transformer_impl.py。
机制和性能证据未变:BSHD path 旧逻辑按每个 micro-batch 的 seqlens_in_batch.max() padding,32 个 micro-batch 可产生 20+ 个不同 s_q,每个新 shape 都触发 cuDNN / TransformerEngine fused-attention Graph Build / plan build。pad_bshd_to_minibatch_max 打开后,把 mini-batch 内所有 micro-batch padding 到 global max s_q,让 execution plan 按一个 shape 复用。PR body 的 Qwen3.5-35B-A3B 15 step 均值仍是 Total Step Time 534.13s -> 397.71s,Old Log Prob 78.38s -> 35.45s,Actor Update 247.58s -> 154.50s。
最终 diff 里 pad_bshd_to_minibatch_max 的默认值是 True,但 PR 描述仍写 default false / opt-in;这属于描述与合入代码不一致。review bot 对 input_ids.offsets().diff().max()、seqlens_in_batch.max()、build_vlm_attn_mask_bshd 里的空 tensor .max() 提过 high-priority comments,合入时这些风险点仍需要后续测试覆盖。
6901 适配边界不变
这仍是 M 级,不是自动适配项。代码传参是 Python/shape 逻辑,但收益来自 CUDA/cuDNN/TransformerEngine plan cache;Ascend/NPU 上不能直接外推。空 batch .max()、VLM BSHD、MTP label/loss_mask、TP/CP/FP8 alignment、额外 padding 的 HBM/mask 成本仍要单独验证。
补充 NPU 判断:verl Ascend 路径更常见的高优先级基线仍是 use_remove_padding=True 的 THD / packed varlen;pad_bshd_to_minibatch_max 只在 Megatron BSHD fallback 下有意义。MindSpeed / torch_npu attention 栈是否存在同类 graph/plan build 瓶颈未知,且 BSHD NPU mask 可能走 B1SS / BNSS 形态,VLM BSHD 分支还要确认 forced padding 后 input / logits / label / loss_mask 完全对齐。
简表¶
| 优先级 | 项目 | 状态 | 备注 |
|---|---|---|---|
| P1 | vllm#47615 Voxtral realtime blank-run penalty | open draft | 实时 STT 在真实语音上持续输出 blank/silence token 的 rut 修复;增加 opt-in progressive penalty,验证把 179s mute trap 缩到约 18s。多模态音频质量项,NPU 分级 M。 |
| P1 | vllm-omni#4880 ref_audio cache key metadata | open | 修 local ref_audio locator 内容变化但 cache key 不变的问题;影响 TTS reference audio 正确性,设备无关。 |
| P1 | vllm-omni#4876 CosyVoice3 Stage1 flow batching | open | TTS flow batching 优化,下一轮若补性能证据再深入。 |
| P1 | vllm#47531 TurboQuant FlashAttention version | open | attention backend 配置保持项,与 quant/attention backend 兼容有关,先跟踪。 |
| P1 | ByteDance-Seed/VeOmni#882 DeepSpec draft-model training | open | speculative decoding 训练方向,和 #47602 的长上下文 acceptance 退化可联动观察。 |
| P1 | vllm#47433 HPC_ATTN MTP and dynamic scheduled attention | open | attention backend 支持 MTP/dynamic scheduled attention,硬件绑定未知,先跟踪机制。 |
| P2 | vllm#47621 collect_env pip-less uv crash | open | 开发环境稳定性修复,非性能主线。 |
| P2 | verl-omni#234 accelerate dependency conflict | open | 安装依赖冲突,暂不深入。 |
验证清单¶
- Qwen3-TTS hidden D2H:在 NPU 上按 Base/CustomVoice、streaming/non-streaming、cold/warm cache、prefix caching on/off 做 A/B;记录 D2H sync、TTFP、audio throughput、首请求 lazy compile、音频质量。
- Shape/JIT warmup:把 #47599 的 max-workspace-first 思路纳入 Ascend serving 压测,构造大 prefill -> 小 request burst、workspace high-water mark、cold shape、warm shape 四类场景。
- MTP 长上下文 gate:为 NPU serving benchmark 增加 context length buckets,记录 acceptance、rollback、decode tok/s、TTFT、KV memory,不再只测固定短上下文。
- stage_input_processors contract:关注 RFC 是否落地 registry/startup validation 和 async/non-async parity tests;NPU recipe 应覆盖同一模型所有 processor mode。
- Kimi image preprocessing:在多模态 TTFT 中拆分 image preprocessing、tokenization、prefill、decode,用 PIL-equivalent fused path 做端到端收益验证。
- verl fully_async NPU:基于已合入的
verl#6928覆盖 vLLM 0.18.x、0.19.x、0.24.x,验证 RotaryEmbedding flash attention disable、FusedMoE weight loader、process group 初始化和 rollout 启动。
参考链接¶
- vllm-omni#4879
- vllm#47599
- vllm#47602
- vllm-omni#4872
- vllm#47416
- vllm#47622
- vllm#47623
- vllm#47615
- verl#6928
- verl#6901
2026-07-04¶
扫描范围¶
- 窗口:2026-07-03T02:11:27Z 至 2026-07-04T02:14Z,按上轮自动化时间回看约 24 小时。
- 仓库:
verl-project/verl、verl-project/verl-omni、vllm-project/vllm、vllm-project/vllm-omni、THUDM/slime、ByteDance-Seed/VeOmni。 - Release:verl-omni v0.1.0 在 2026-07-03 发布,是 dedicated multimodal generative RL training 仓库的首个 final release;其余种子仓库本窗口内没有新的正式 release。
- 深入上限:本轮深入 5 个 P0/P1 项;
verl#6901按首次种子任务复核状态和 NPU 风险,不重复展开完整机制。
P0 / P1¶
| 优先级 | 项目 | 状态 | NPU 分级 | 结论 |
|---|---|---|---|---|
| P0 | vllm-omni#4865 Qwen3-Omni Talker code_predictor NPU optimization | open | M | 直接优化 Qwen3-Omni Talker NPU 推理热路径,把 code_predictor attention 改为 npu_fused_infer_attention_score,并用 masked_fill 替换 Top-P sampling 的 Tensor[mask] 写法;作者自报并发 1/4/10 下 E2EL 约降 25%-29%。 |
| P0 | vllm-omni#4868 VACE reference-hint cache | open | M | 为 Wan-VACE 加入 opt-in vace_hint diffusion cache backend,在部分 denoising step 复用 reference hint,跳过 vace_blocks recompute;Wan2.1-VACE-1.3B GPU 集成自报 17.04s -> 12.83s,代价是约 9% mean pixel diff。 |
| P1 | vllm#47576 ReplaySSM for Mamba2 + GDN | open draft | L | 大型 kernel / cache 体系改动:缓存 SSM 输入而不是每步回写 recurrent state,覆盖 Mamba2 与 Qwen3.5 GDN 标准 decode / speculative decode;B300 大 batch 下自报 native spec 对比最高约 2.45x。 |
| P1 | vllm#47583 incremental prompt encoding | open | S | API server CPU / TTFT 优化:多轮对话中复用上一轮 prompt tokenization 的严格前缀,长上下文 encode p50 自报 22x-71.5x,DeepSeek-V4-Flash 生产 TTFT 0.92s -> 0.47s。 |
| P1 | verl#6929 vLLM 0.18 Ascend fully_async patch | open | S | 仅修改 verl/utils/vllm/npu_vllm_patch.py 2 行,把 RotaryEmbedding disable flash attention 的版本门槛从 >=0.19.0 下探到 >=0.18.0;适合等待上游合入后进入 Ascend fully_async 回归。 |
| P1 | verl-omni v0.1.0 final release | released | S/M | 首个 final release,集中发布 Qwen-Image、SD3.5、Wan2.2、BAGEL、Qwen3-Omni GSPO 等 multimodal generative RL recipes,并明确扩展 Ascend NPU recipe 覆盖。 |
重点机制¶
vllm-omni#4865 是本轮最直接的 NPU 多模态性能项。改动文件只有 vllm_omni/model_executor/models/common/qwen3_code_predictor.py,核心是把 Qwen3-Omni Talker code_predictor Attention forward 中的 npu_fusion_attention 替换为 vLLM NPU 路径启发的 npu_fused_infer_attention_score,并把 Top-P sampling 中低效的 Tensor[mask] 写法换成 masked_fill。作者在 vLLM 0.22.1、vLLM-Ascend 0.22.1rc1、vLLM-Omni commit 963ba1a 上做功能和性能验证,三组并发自报:
| 并发 | E2EL 变化 | Audio throughput | AUDIO_TTFP | AUDIO_RTF |
|---|---|---|---|---|
| 1 | 约 -25.68% | 约 +27.05% | 约 -11.35% | 约 -21.58% |
| 4 | 约 -29.02% | 约 +23.49% | 约 -12.66% | 约 -20.77% |
| 10 | 约 -27.44% | 约 +30.93% | 约 -25.57% | 约 -26.69% |
NPU 分级为 M:它已经是 NPU 目标路径,但依赖 torch_npu / vLLM-Ascend attention API、stage 1/2 enforce_eager 配置和 Qwen3-Omni Talker 的音频质量验证。自动适配不启动,原因是上游 PR 已在 vLLM-Omni 内实现,当前更需要复现实验:固定请求集、比较文本与音频输出、采集 E2EL / audio RTF / NPU profiler,并确认 npu_fused_infer_attention_score 的 mask、layout、dtype 与现有路径完全等价。
vllm-omni#4868 把 video diffusion 的缓存问题推进到模型结构层。它新增 vace_hint cache backend,在 Wan-VACE 这类 reference-conditioned 模型里缓存 vace_blocks 生成的 reference hints;每个 CFG branch 独立建 key,refresh step 重新计算并写 cache,reuse step 直接返回 cached hints。相关文件包括 vllm_omni/diffusion/cache/vace_hint_cache/、cache/selector.py、diffusion/data.py 和 wan2_2_vace_transformer.py。作者验证 cache_backend="vace_hint"、vace_hint_refresh_interval=8 时,Wan2.1-VACE-1.3B 真实 Omni runtime 从 17.04s 降到 12.83s,约 25% faster;同时明确这是 lossy cache,约 9% mean pixel diff,默认关闭。
NPU 分级为 M:cache state 和 selector 是 Python 逻辑,但真实价值取决于 Ascend 上 Wan-VACE vace_blocks 的耗时占比、CFG 分支调度、cache tensor 生命周期和图像质量门槛。验证时必须同时记录 wall time、denoise step latency、显存峰值、输出质量指标和跨 CFG branch 是否串 cache;TP/SP/CFG-parallel 尚未验证,所以不适合自动提交适配 PR。
vllm#47576 是机制价值很高但迁移风险很大的 ReplaySSM draft PR。它的核心判断是 SSM decode 受 HBM state load/store 限制:baseline 每步读写完整 recurrent state,而 ReplaySSM 保存周期性 checkpoint state 和最近输入 ring buffer,多数 step 只 append 输入,不回写完整 state;speculative decode 中 rollback 退化为 ring cursor 移动。PR 新增 Mamba2 和 GDN 两套 Triton kernel、metadata builder、paged cache 扩展、config flag 和测试矩阵,涉及 30+ 文件。
性能证据很强,但硬件绑定也很强:标准 decode whole-model per-step speedup 在大 batch 更明显;spec decode 在 B300、batch 256/512 下相对 native spec 自报约 1.8x-2.45x,并把 Mamba2 / GDN max decode concurrency 提高约 3x。NPU 分级为 L,原因是它依赖 Triton/CUDA graph/paged cache/SSM kernel 深度重写;Ascend 只能先跟踪机制,把它转化为未来 GDN / Mamba2 NPU kernel 设计问题,不自动适配。
vllm#47583 是长上下文多轮 serving 的 CPU 侧优化。它新增 vllm/tokenizers/incremental_encode.py,在 BaseRenderer._tokenize_prompt 之上增加 opt-in incremental encoding cache:若新 prompt 是旧 prompt 的严格字符串前缀扩展,就从安全 token boundary 处重编码尾部,并校验 overlap token ids / offsets;无法证明正确时回退 full encode。默认关闭,HF fast tokenizer 限定,mistral / deepseek_v32 / harmony renderer 不受影响。
这个 PR 对 NPU 是 S 级可复用思路:它完全发生在 API server CPU 和 tokenizer 层,不触碰 device kernel。适用场景是 agentic coding、长聊天、多轮上下文不断追加;限制是需要严格 token-exact、特殊 token seam、normalizer 和 truncation 语义都不能出错。若本地 serving 前端使用 Python renderer,可单独做小规模 tokenizer 回归;若走 Rust frontend 或其他 gateway,则只作为机制参考。
verl#6929 是很小的 Ascend 兼容修复。它只改 verl/utils/vllm/npu_vllm_patch.py,把 vLLM NPU RotaryEmbedding flash attention disable patch 的生效范围扩到 vLLM >=0.18.0 && <0.19.0。PR 描述不完整,未给实验命令;它引用已合入的 verl#6886,更像对 vLLM 0.18 版本段的补丁。NPU 分级 S,但本轮不自动开 PR,因为上游已有 open PR,且需要等 review 判断 6928 / 6929 两个同题 PR 哪个保留。
6901 状态复核¶
verl#6901 仍为 merged,merge commit 561a4b03a11b34446e44267c2e84c4bbf63585f5;本轮重新核验 changed files 仍是 verl/models/mcore/model_forward.py、verl/models/mcore/util.py、verl/trainer/config/_generated_ppo_megatron_trainer.yaml、verl/trainer/config/engine/megatron.yaml、verl/workers/config/engine.py、verl/workers/engine/megatron/transformer_impl.py。最终合入版本把 pad_bshd_to_minibatch_max 默认设为 True,但只有 use_remove_padding=False 的 BSHD path 真正生效。
PR body 的性能证据仍是 Qwen3.5-35B-A3B 15 step 均值:Total Step Time 534.13s -> 397.71s,Old Log Prob 78.38s -> 35.45s,Actor Update 247.58s -> 154.50s。机制仍是把一个 mini-batch 内所有 micro-batch padding 到 global max s_q,减少 cuDNN / TransformerEngine fused-attention Graph Build / plan build 次数。
6901 仍不自动适配
代码迁移量接近 S,但性能收益依赖 CUDA / cuDNN / TransformerEngine 的 plan cache 行为;Ascend/NPU 上是否有同类收益未证实。.max() 空 tensor 风险仍需要覆盖:mini-batch global max、preprocess_bshd_engine、build_vlm_attn_mask_bshd 都可能在空 batch / 空 rank 下触发运行时错误。
本轮结论维持 M 级适配项:代码层面是通用 BSHD shape / padding 传递,NPU BSHD 路径会经过这段逻辑;但决定收益的 attention plan build 机制不能从 CUDA/cuDNN 直接外推到 Ascend。它可以作为 BSHD fallback 的受控开关保留,但不应在 NPU 实验中无验证默认启用;优先路线仍是 THD / remove-padding 或 NPU 原生变长路径。验证清单仍是 pad_bshd_to_minibatch_max=True/False A/B、空 batch、VLM BSHD、MTP label / loss_mask、TP / CP / FP8 alignment、HBM peak、AI Core 利用率、host CPU 和长尾极长样本 OOM 风险。
简表¶
| 优先级 | 项目 | 状态 | 备注 |
|---|---|---|---|
| P0 | vllm#47588 Quark MXFP4 EPLB silent accuracy corruption | open | AITER_MXFP4_FP8 setup path 中 converted expert weights 被 plain attribute assignment 恢复后不再出现在 named_parameters(),EPLB 可能只移动 scale 而没有移动匹配 weight,导致静默输出退化。NPU 分级 L:CUDA/ROCm Quark MXFP4 路径为主,但“expert rebalance 必须移动同一物理 tensor 集合”的约束对 NPU MoE 也有借鉴价值。 |
| P1 | vllm-omni#4863 AR-Diffusion paged self-attention | open | DreamZero AR-Diffusion 不再 gather 历史 KV,而是把 resident video KV 放进 paged KV pool,用 FlashAttention block-table 直接读;默认 window=9 单 TP1 total 120.975s -> 116.770s。NPU 分级 L:依赖 block-table attention backend。 |
| P1 | vllm#47580 dense H2D fused-MoE weight loading | open | 把 transposed expert weights 的 strided side 翻到 GPU destination,避免 non-contiguous CPU fp8 gather;A100 24-layer truncation 自报 loading 18.8s -> 12.5s。NPU 分级 M:理念可参考,但实现绑定 ATen H2D / vLLM fused-MoE loader。 |
| P1 | vllm#47268 Marlin int4-fp8 HBM coalescing | open | marlin_int4_fp8_preprocess_kernel_awq 把 thread 映射从跨行 stride 访问改为列向连续访问,冷路径 kernel 自报 1291.1us -> 581.9us。NPU 分级 L:CUDA quant kernel 访问模式参考。 |
| P1 | vllm-omni#4858 FlashAttention 4 diffusion backend | open draft | Blackwell SM100/SM103 BF16 diffusion attention backend;Cosmos3-Nano 189-frame denoise step 自报 1.04x-1.08x,FP8 后续依赖 flash-attn 上游修复。NPU 分级 L:只跟踪后端机制。 |
| P1 | VeOmni#879 Qwen3.5 GDN NPU backend | open draft | Ascend 上 Qwen3.5/MoE varlen 训练关键补洞:为 causal_conv1d、chunk_gated_delta_rule 接 NPU backend;下一轮重点看 vendored Ascend Triton kernel 来源、license、复现性。 |
| P1 | vllm#47584 DSpark rowwise-fp8 draft lm_head | open | opt-in VLLM_DSPARK_FP8_DRAFT_HEAD=1,只在 draft proposal 使用 fp8 head;GB10 自报 draft-head GEMM 2.73ms -> 1.45ms,E2E +3%-5%。NPU 分级 L/M:取决于 Ascend 是否有等价 fp8 scaled matmul。 |
| P1 | vllm#47577 FLASHINFER_B12X NVFP4 MoE backend | open | SM120 / FlashInfer / NVFP4 MoE 自动选择,明确拒绝 EP deployment;CUDA 特定,NPU 只跟踪 MoE backend 选择策略。 |
| P1 | vllm#47546 Qwen Triton warmup coverage | open | 扩展 Qwen Triton kernel warmup 覆盖,与昨日 JIT warmup / shape transition 主题同线;NPU 关注 cold shape / warmup coverage 方法。 |
| P1 | vllm#47542 DCP + split-q speculative decoding | open | DCP / speculative decoding attention 路径,强 GPU attention backend 依赖。 |
| P1 | vllm#47541 SWA hybrid + FlashInfer MLA + DCP | open | hybrid attention + DCP 方向,先跟踪机制。 |
| P1 | vllm#47540 persistent penalty statistics | open | V1 sampler 避免每 step CPU rebuild penalty statistics,CPU-side serving perf。 |
| P1 | vllm#47556 sliding-window prefix-cache miss scan | open | prefix cache / sliding window 扫描优化,值得和 incremental encoding 一起看前端/缓存瓶颈。 |
| P1 | ByteDance-Seed/VeOmni#883 Ascend causal_conv1d fla kernel error | open issue | 用户在 Ascend、verl 0.8.0、veomni 0.1.11、Qwen3.5-9B sp=4 下报 Kernel 'fla' for op='causal_conv1d' requires device_type='gpu';与 GDN NPU backend 选择直接相关,下一轮跟踪。 |
| P1 | vllm-omni#4851 Qwen3 TTS no_async_chunk CI failure | open issue | high priority CI failure;Qwen3-TTS Base 输出转写与输入几乎无关,CustomVoice 为空音频,HTTP path 仍报 success。优先定位 serving_speech.py、stream=False/no_async_chunk 和 Whisper CPU fallback。 |
| P2 | vllm#47566 normalize direct PIL image inputs | merged | 多模态输入稳定性修复,已合入但非性能主线。 |
| P2 | vllm-omni#4859 Ming-TTS WER accuracy | merged | TTS accuracy 修复,进入背景跟踪。 |
| P2 | VeOmni#885 supported NPU hardware docs | merged | 文档项,记录支持矩阵但不深入。 |
验证清单¶
- Qwen3-Omni Talker NPU:复现 vLLM-Omni#4865 的并发 1/4/10 benchmark,额外采集 NPU profiler、attention op 耗时、audio RTF、文本输出一致性和音频主观/客观质量。
- VACE reference-hint cache:在 Wan-VACE 上比较
cache_backend=none/vace_hint、不同vace_hint_refresh_interval的 latency、显存、mean pixel diff、SSIM / DINOv2 或项目质量门槛;CFG branch 不得串 cache。 - ReplaySSM 跟踪:暂不迁移;先拆出 Mamba2/GDN state traffic、ring buffer、flush、spec rollback、paged cache 五个设计点,观察是否有 Ascend Triton / torch_npu 等价实现空间。
- Incremental encoding:本地 tokenizer 层可做 S 级小验证,覆盖 Qwen / DeepSeek fast tokenizer、特殊 token、CJK、长对话、并发 LRU、truncation fallback。
- verl#6929:等上游判断 6928/6929 后,在 Ascend fully_async 回归中覆盖 vLLM 0.18.x、0.19.x、RotaryEmbedding flash attention disable、FusedMoE weight loader 和 rollout 启动。
- verl#6901:继续执行 BSHD NPU A/B,重点看空 batch
.max()、额外 padding 的 HBM / mask 成本和 old_log_prob / actor_update 是否真的改善。
参考链接¶
- vllm-omni#4865
- vllm-omni#4868
- vllm#47576
- vllm#47583
- verl#6929
- verl-omni v0.1.0
- verl#6901
- vllm-omni#4863
- vllm#47580
- vllm#47268
- vllm-omni#4858
- VeOmni#879
- vllm#47584
- vllm#47588
- vllm-omni#4851
- VeOmni#883
2026-07-03¶
扫描范围¶
- 窗口:2026-07-02T02:12:20Z 至 2026-07-03T02:13Z,约等于上轮之后的 24 小时。
- 仓库:
verl-project/verl、verl-project/verl-omni、vllm-project/vllm、vllm-project/vllm-omni、THUDM/slime、ByteDance-Seed/VeOmni。 - Release:本窗口内种子仓库没有新的正式 release;最近 release 仍是
vllm v0.24.0、vllm-omni v0.24.0rc1、verl v0.8.0。 - 深入上限:本轮深入 5 个 P0/P1 项;
verl#6901只做状态复核,因为昨日文档已经记录完整机制和 NPU 边界。
P0 / P1¶
| 优先级 | 项目 | 状态 | NPU 分级 | 结论 |
|---|---|---|---|---|
| P0 | vllm-omni#4344 HunyuanImage3 MoE EP+SP NPU mapping | merged, 2026-07-02 | M | 已合入;把 diffusion TP/SP/CFG/DP 映射到 vLLM MoE TP/PCP/DP/EP,修复 HunyuanImage3 DiT NPU fused MoE 在 EP+SP 下的 token dispatch / expert placement 不一致。 |
| P0 | vllm-omni#4841 Qwen3-TTS 310P optimization | open | M | 310P 专用 patch,覆盖 Talker / CodePredictor / Code2Wav:CPU Mimi encoder、FRACTAL layout 预打包、fused RMSNorm / RoPE / attention mask、vLLM-Ascend sampling helper。 |
| P0 | VeOmni#879 Qwen3.5 GDN NPU backend | open draft | L | 为 Qwen3.5 gated delta-rule 的 causal_conv1d 和 chunk_gated_delta_rule 增加 NPU backend,vendor MindSpeed-MM / FLA Ascend Triton kernels;直接相关但属于 kernel 级引入。 |
| P1 | VeOmni#880 Qwen3 residual-add + RMSNorm fusion | open | M | 在 Qwen3 decoder layer 内把 post-attention residual add 和 RMSNorm 合成 OpSlot("rms_norm", "residual_add"),GPU 用 Liger,NPU 用 npu_rms_norm wrapper。H100 侧自报 compute kernel time 约 3.5% 改善。 |
| P1 | verl#6923 Qwen3 MoE FSDP weight sync for vLLM rollout | merged, 2026-07-03 | S | 已合入 release/v0.8.0 backport;把 Transformers 5 packed 3D MoE expert weights 展开成 vLLM reload 需要的 per-expert gate_proj/up_proj/down_proj keys,修 live FSDP-to-vLLM rollout weight sync。 |
| P1 | vllm#47451 shared JIT warmup infra | open | L | 为 Triton / CuTeDSL / TileLang 等 JIT kernel 定义 compile-key warmup contract,目标是让 kernel owner 暴露真实 specialization key,而不是用 dummy inputs 猜测 warmup 覆盖。 |
| P1 | vllm#47458 shape transition stall | open issue | L | Qwen3.6 NVFP4 + flashinfer_b12x + GDN CuteDSL prefill 在大上下文切小请求时出现约 17.5s engine-wide stall;与 JIT / shape cache / worker 顺序重编译高度相关。 |
重点机制¶
vllm-omni#4344 是本轮最明确的已合入 NPU 多模态修复。HunyuanImage3 是 diffusion MoE,vLLM-Omni 自己有 TP/SP/CFG/DP,而 vLLM FusedMoE 期望用 TP/PCP/DP 表达 expert placement。旧路径没有稳定地把 diffusion SP/CFG 映射进 vLLM MoE 语义,导致本地 expert placement 与 token dispatch 不一致,出现 shape '[8, 16]' is invalid for input of size 64 一类 runtime failure。新逻辑只在 is_moe && enable_expert_parallel 下启用映射:
diffusion TP -> vLLM TP
diffusion SP -> vLLM PCP
diffusion CFG * DP -> vLLM DP
EP = TP * SP * CFG * DP
PR 自报在 8 NPU、HunyuanImage3 DiT-only offline serving 上验证了 TP4 + SP2:EP enabled 时 denoise_step_latency_ms=239.397,EP disabled 时 188.118。这不是单纯性能 PR;它先把 NPU diffusion MoE 的并行语义接到 vLLM FusedMoE 的 EP 公式,后续才有稳定优化空间。
vllm-omni#4841 是 310P 上 Qwen3-TTS 的平台专用优化。它没有改通用模型实现,而是在 vllm_omni/platforms/npu/_310p/patch/qwen3_tts.py 下把 Talker / CodePredictor / Code2Wav 的热点换成 310P 友好路径:Linear / Conv 权重预转 FRACTAL layout,RMSNorm、RoPE、attention mask、attention path 走 fused 或 layout-aware NPU op,CodePredictor codec embedding 预投影,并把 sampling 对齐到 vLLM-Ascend helper。风险是它依赖 CANN 9.1.0 beta、vLLM 0.24.0 和 vLLM-Ascend PR 11227;适配时应优先复现作者的 20 request 平均延迟和 seed-tts-eval zh 精度,而不是直接推广到 A2/A3 或其他 TTS 模型。
VeOmni#879 和昨日的 verl#6907/#6908 属于同一类 Qwen3.5 Gated Delta Net NPU kernel 化方向。VeOmni#879 更像框架内正式 backend:通过 OpSlot / KERNEL_REGISTRY 注册 name="npu",给 causal_conv1d 和 chunk_gated_delta_rule 补齐 NPU backend;rms_norm_gated 之前已经有 NPU backend。它声明 NPU e2e Qwen3.5-MoE VL SFT loss / accuracy 对齐 reference,并加了可在无硬件机器跑的 hardware-gate unit tests。NPU 分级仍是 L,原因不是接入点复杂,而是 vendor Triton kernel 需要覆盖 dtype、varlen、反向、长序列、torch_npu / triton-ascend 版本矩阵。
VeOmni#880 是更适合拆成 M 级小验证的 fused op。它把 Qwen3 post_attention_layernorm(residual + hidden_states) 折成 fused residual-add + RMSNorm。GPU 侧用 LigerFusedAddRMSNormFunction,NPU 侧用 lazy torch_npu wrapper;选择仍复用 model.ops_implementation.rms_norm_implementation。作者报告 H100 FSDP2 侧 fused 与 eager loss / grad_norm 约 1e-5 对齐,compute kernel time 1310.7ms vs 1357.6ms,kernel launches 少约 2760。NPU 需要补真实数值 parity 和 profiler;如果 npu_rms_norm wrapper 已稳定,工作量主要是 shape / dtype / in-place 语义验证。
verl#6923 处理的是训练与 rollout serving 的权重格式边界。Transformers 5 会把 Qwen-style MoE expert weights 存成 packed 3D mlp.experts.gate_up_proj / down_proj,但 vLLM 的 Qwen3 MoE reload path 仍期待 per-expert checkpoint keys。PR 在 FSDP parameter streaming 时展开为 mlp.experts.{expert_id}.gate_proj/up_proj/down_proj。这类改动对 Ascend/NPU 本身没有 kernel 依赖,但对 fully_async / colocated rollout / Qwen3 MoE 训练稳定性很关键,适合纳入 S 级回归。
vLLM#47451 / #47458 是同一类 shape / JIT 风险的两面。47451 新增 vllm/model_executor/warmup/jit_warmup.py、jit_warmup_triton_helper.py,并重构 sparse MLA / FA4 CuTeDSL warmup,让每个 warmable kernel 声明 frozen CompileKey、dispatch(...)、get_warmup_keys(...) 和 compile(key)。47458 则给出用户侧症状:nvidia/Qwen3.6-35B-A3B-NVFP4 在若干 20K-150K token prefill 后切到 60-120 token 小请求 burst,会让 EngineCore 全局停顿约 17.5s;perf 采样显示 EngineCore idle,而 PP worker 进程顺序 CPU churn。对 NPU serving 的直接启发是:压测不能只测 steady-state tokens/s,还要测 cold shape、warmup 覆盖、cache eviction 和跨 worker shape transition。
6901 状态复核¶
verl#6901 当前仍为 merged,merge commit 561a4b03a11b34446e44267c2e84c4bbf63585f5,changed files 仍是 model_forward.py、util.py、Megatron engine/config 等 6 个文件。最终合入版本把 pad_bshd_to_minibatch_max 默认设为 True,但只在 use_remove_padding=False 的 BSHD path 生效。PR body 中的机制和性能证据未变:Qwen3.5-35B-A3B 上 Total Step Time 534.13s -> 397.71s,Old Log Prob 78.38s -> 35.45s,Actor Update 247.58s -> 154.50s。
6901 空 batch 仍需补测
本轮复核确认合入版本仍保留 input_ids.offsets().diff().max()、seqlens_in_batch.max() 这类空 tensor 风险点。动态 batching、DP rank 空输入、VLM BSHD 和 MTP label / loss_mask 路径都需要覆盖;没有 NPU 编译缓存收益证据前,不应因为上游默认 True 就在 Ascend 实验配置中无条件继承。
简表¶
| 优先级 | 项目 | 状态 | 备注 |
|---|---|---|---|
| P0 | vllm-omni#4849 HunyuanImage3 bridge request batching | open | 修 #4079 后 request-level batching 与 HunyuanImage3 AR->diffusion bridge 的契约冲突;作者已在 vLLM / vllm-ascend 0.23.0 NPU 栈和 #4344 backport 上验证 MoE EP+SP inference,通过下一轮优先深入。 |
| P0 | vllm#47181 DCP + FlashInfer MLA follow-ups | open, needs-rebase | Decode Context Parallel 核心 attention/parallel serving 路径,覆盖 Spec Decode/MTP、SWA hybrid、TRTLLM GQA decode、routed experts replay、NaN guard 和 GPU seq_lens;强 NVIDIA/FlashInfer 依赖,NPU 先跟踪机制。 |
| P0 | verl#6907 Qwen3.5 NPU Triton GDN kernels | closed, unmerged | 有完整 NPU forward/backward 验证记录,但无 merge commit;可能被 #6908 或后续 PR 替代,继续跟踪。 |
| P0 | verl#6908 Qwen3.5 Triton GDN patch | closed, unmerged draft | 同属 GDN 方向,但 PR 明确写 Needs NPU validation;不当作已合入特性。 |
| P1 | vllm-omni#4714 HunyuanImage3 MXFP8/MXFP4 online quant on Ascend | open | 为 HunyuanImage3 AR inference 增加 Ascend NPU W8A8 MXFP8 / MXFP4 在线量化;1K input、BS=32 自报 TTFT BF16 1440ms -> MXFP8 1380ms / MXFP4 1359ms。 |
| P1 | vllm-omni#4848 NPU upgrade to v0.24.0 | open | 更新 vllm-ascend CI image、NPU quickstart 和 runner interface;Qwen3-TTS、Qwen3-Omni、Wan2.2 I2V 三组 NPU 测试通过。 |
| P1 | vllm#47463 fused_topk_bias for DSv4 | open | 小改动,去掉 hash_indices_table is None 时冗余 dtype cast;属于 DeepSeek V4 perf tracker 子项。 |
| P1 | vllm#47474 cache token_to_req_indices for DSv4 |
open | 减少 Sparse MLA / SWA / Compressor 重复构建 mapping 和 CPU->GPU copy,微基准报 5x-6x kernel performance improvement。 |
| P1 | vllm#47443 HPC Attention split-K by shape | open | Decode path 按 (max_decode_seq_len, num_decode_tokens, num_heads, num_kv_heads) 选择 split-K;强 H20 / SM90 / HPC backend 绑定。 |
| P1 | vllm#47391 padded EAGLE input prep | open | Spec Decode perf;优化 padded EAGLE input prep 和 EAGLE3 layer0 RMSNorm concat,偏 serving 热路径。 |
| P1 | VeOmni#881 FSDP2 torch compile | open | 训练框架性能/编译方向,需等机制和验证证据更完整。 |
| P1 | verl-omni#231 MMK12 Qwen3-Omni GSPO on NPU | open draft | 多模态 NPU recipe,偏训练验证入口。 |
| P1 | verl-omni#225 Ascend NPU Dockerfiles | open | 环境/安装文档,对可复现验证有价值但非算法性能项。 |
| P1 | THUDM/slime#2146 shard-level weight update | open | 与昨日 slime#2147 RFC 同线,关注 non-colocate weight sync 的 shard-level P2P 与 fallback。 |
| P2 | vllm#47450 structured output crash fix | open | 稳定性修复,低于性能/多模态主线。 |
验证清单¶
- HunyuanImage3 EP+SP:用 8 NPU 复现 TP4+SP2+EP enabled / disabled,核对 vLLM TP/PCP/DP/EP group、MC2 state、token dispatch shape、生成图像正确性和 denoise latency。
- Qwen3-TTS 310P:锁定 CANN 9.1.0 beta、vLLM 0.24.0、vLLM-Ascend PR 11227,复现 20 request 平均延迟和 seed-tts-eval zh 精度;再尝试 A2/A3 前必须先拆平台差异。
- Qwen3.5 GDN NPU kernel:覆盖 varlen dyn_bsz、Dense/MoE、forward/backward parity、长序列、异常 shape、bf16/fp16、torch_npu / triton-ascend 版本矩阵。
- Qwen3 fused RMSNorm:在 NPU 上比较 eager vs fused 的 loss、grad_norm、activation dtype、in-place residual 语义、kernel launch 数和 step time。
- Qwen3 MoE weight sync:在 FSDP-to-vLLM rollout live sync 中验证 packed 3D expert weights 展开后的 key、shape、dtype 与 vLLM reload path 一致,覆盖 dense model no-op。
- vLLM JIT / shape transition:构造大 prefill -> 小 decode burst、cold shape -> hot shape、cache eviction 三类负载,采集 TTFT、ITL、worker CPU、compile latency、engine-wide stall 和 warmup key 覆盖率。
参考链接¶
2026-07-02¶
扫描范围¶
- 窗口:由于本地状态文件为空,首次运行回看 2026-06-29 至 2026-07-02 的 72 小时窗口。
- 仓库:
verl-project/verl、verl-project/verl-omni、vllm-project/vllm、vllm-project/vllm-omni、THUDM/slime、ByteDance-Seed/VeOmni。 - Release:窗口内重点 release 是
vllm-project/vllm的v0.24.0与vllm-project/vllm-omni的v0.24.0rc1;其他种子仓库无 72 小时内新正式 release。 - 深入上限:本轮只深入
verl#6901;其余 P0/P1 项做雷达级机制摘要和后续关注记录,避免一轮扩张过多。
P0 / P1¶
| 优先级 | 项目 | 状态 | NPU 分级 | 结论 |
|---|---|---|---|---|
| P0 | verl#6907 Qwen3.5 NPU Triton GDN kernels | open | L | 新增 verl.models.transformers.ops.gdn Triton kernels、Qwen3.5 / Qwen3.5-MoE NPU patch、示例默认开关和单测;直接相关但属于 kernel 级验证,不自动适配。 |
| P0 | verl#6901 BSHD micro-batch padding | merged, 2026-07-02 | M | 已合入;用 mini-batch global max 统一 BSHD micro-batch 的 s_q,减少 cuDNN / TE fused-attention plan build。代码迁移轻,但 NPU 收益必须实测。 |
| P0 | verl#6886 vLLM 0.19+ Ascend fully_async 适配 | merged, 2026-07-01 | S | 已合入;修 vLLM 0.19+ 下 NPU 场景的 process group、FusedMoE weight loader、RotaryEmbedding flash attention 关闭和 quant auto-detect 环境变量。适合进入本地 Ascend 回归清单。 |
| P1 | vllm#47355 DCP sparse MLA indexer overlap | open draft | L | 把 sparse MLA DCP indexer 切成 custom-op 边界,尝试 side stream overlap,并让 full CUDA graph 保留 stream 结构;当前 smoke 端到端未变快。强 CUDA / graph / custom op 依赖,NPU 只跟踪机制。 |
| P1 | vllm#47352 Model Runner V2 MTP top-k index sharing | open draft | M | 把 DeepSeek-style MTP 多 draft step 复用 top-k index buffer 的优化接入 Model Runner V2;报告 output throughput 1517.50 -> 1625.59 tok/s。NPU 可能复用控制流,但依赖具体 MTP attention/indexer 实现。 |
| P1 | vllm-omni#4802 KV cache efficiency metrics | open RFC | S | 为 omni 多 stage / replica / modality 增加 KV footprint、occupancy、tail waste、fragmentation、prefix hit attribution。对 NPU 主要是监控维度适配,适合后续接入服务观测。 |
| P1 | vllm-omni#4796 OmniSerializer perf refactor | open RFC | M | 拆 OmniSerializer / SHM connector copy 与 allocation 开销,计划 encode_into、registry、msgspec.Struct wire types。NPU 无硬件绑定,但涉及 wire format 与高并发正确性。 |
重点机制¶
verl#6901 的核心是稳定 shape,不是减少 padding。旧 BSHD path 每个 micro-batch 用自己的 seqlens_in_batch.max() padding,32 个 micro-batch 可能产生 20+ 种 s_q;新 path 在 forward_backward_batch 里从 mini-batch nested input_ids.offsets().diff().max() 计算 forced_max_seqlen,再传给 preprocess_bshd_engine、MTP label / loss mask 和 VLM attention mask。作者报告 Qwen3.5-35B-A3B 上 Total Step Time 534.13s -> 397.71s,Old Log Prob 78.38s -> 35.45s,Actor Update 247.58s -> 154.50s。
6901 的 NPU 边界
forced_max_seqlen 传递本身主要是 Python / Megatron shape 逻辑,但收益来源是 CUDA / cuDNN / TransformerEngine 对新 shape 的 fused-attention graph / plan build 成本。Ascend / NPU 上不能默认推导同样收益;额外 padding 还可能增加 [B,1,S,S] attention mask、HBM 和 host 侧处理成本。
verl#6886 是更直接的 Ascend 适配项:verl/utils/distributed.py 增加 vLLM 0.19+ 的 TCPStore 创建路径,verl/utils/vllm/npu_vllm_patch.py 继续处理 NPU 上的 RotaryEmbedding flash attention、FusedMoE weight loader 和 quantization auto-detect。这个 PR 已合入,适合做 S 级回归:启动、权重加载、fully_async rollout、vLLM Ascend 版本组合。
verl#6907 是本轮最直接的 NPU kernel 项:它在 verl/models/transformers/ops/gdn/ 下新增 Qwen3.5 gated delta rule Triton kernels,并通过 qwen3_5_gdn_patch.py 在 NPU 上把 HF Qwen3_5GatedDeltaNet 注入到 verl fused path。PR 自报验证包括 Ascend910 上 Triton sanity、fused forward 与 torch reference 对齐、backward 有限梯度,以及 27B / 35B GRPO FSDP NPU 示例默认开启 use_triton_gdn=True。这类改动应按 L 级处理:先读 kernel 边界、dtype / shape 约束、反向正确性和长跑稳定性,不在本轮自动开适配 PR。
vLLM#47355 和 vLLM#47352 都属于 CUDA serving 热路径探索。前者试图把 sparse MLA DCP indexer work 放到 auxiliary CUDA stream 下 overlap;后者让 Model Runner V2 MTP draft steps 共享 top-k index buffer。两者都不适合直接自动改 NPU,但可以转化为 NPU 适配问题:NPU runtime 是否有等价 stream overlap、图捕获边界、indexer buffer 生命周期和跨 draft step 正确性。
vLLM-Omni#4802/#4796 是多模态 serving 观测与数据面效率。4802 把 KV cache 指标按 stage / replica / modality / source 拆开,解决单一 engine total 无法解释 talker / code2wav 等多 stage 压力的问题;4796 把 serializer 的 copy、allocation、wire format 和 thread-safety 拆成两阶段 RFC。两者对 Ascend/NPU 的价值不是算子迁移,而是后续定位多模态 serving 的 host-bound、KV waste 和跨进程传输瓶颈。
简表¶
| 优先级 | 项目 | 状态 | 备注 |
|---|---|---|---|
| P0 | verl#6908 Qwen3.5 Triton GDN patch | open | 与 verl#6907 同主题,需下一轮判断是否为替代/拆分 PR。 |
| P1 | verl#6913 fused-kernel gradient tracking bug | open | fused kernel 正确性,等待 review。 |
| P1 | verl#6911 GLM5 on NPU docs | open | 文档/支持矩阵,跟踪即可。 |
| P1 | vllm#47363 extensible KV cache memory | open | KV cache 结构变化,后续可能影响 offload / connector。 |
| P1 | vllm#47359 Batch Invariant FLASHINFER_MLA | open feature | attention backend 形状不变性,值得跟踪。 |
| P1 | vllm#47334 CUDA kernels to CuTeDSL | open RFC | Hopper / Blackwell kernel 重写方向,NPU 为 L 级跟踪。 |
| P1 | vllm#47303 MXFP4 MoE OOB reads | open bug | 量化 MoE kernel 正确性问题。 |
| P1 | vllm-omni#4814 Wan2.2 Ulysses + cache-dit on Ascend | open bug | 直接 Ascend 多模态 serving 问题,待更多复现信息。 |
| P1 | verl#6894 FSDP2 GRPO crash on Atlas 800T A3 | open issue | Ascend A3 训练稳定性,需跟踪最小复现。 |
| P1 | verl#6881 vLLM 0.19+ Ascend NPU | open | 与已合入的 #6886 同主题但仍 open,需确认是否是后续补丁还是重复 PR。 |
| P1 | verl#6912 wake KV cache 前 empty cache | open | colocate rollout weight sync 后,PyTorch CUDA allocator 与 vLLM VMM cuMemCreate 不共享 free-list,可能导致 KV cache resume OOM。 |
| P1 | vllm#46838 FlashInfer CUTLASS MoE tuning token bound | open | 修 fused MoE tuning 误用 CUDA graph max capture size,H200x8 上 Mixtral / DeepSeek-V2 throughput 有改善。 |
| P1 | VeOmni#872 Async Activation Offload | open draft | 大模型训练显存/吞吐相关;新增 veomni/distributed/async_offload.py,下一轮应重点跟踪验证证据。 |
| P1 | VeOmni#860 DeepSeek V4 DSA backend | open | 接 cuDNN DSA indexer 与 FlashMLA/cuDNN sparse attention backend;强 CUDA 依赖,NPU 分级 L。 |
| P1 | VeOmni#871 Decoupled-Trigger FSDP2 | open draft | 面向 MoE + EP recomputation,减少冗余 pre/post forward;值得跟踪但未深入。 |
| P1 | vllm-omni#4344 HunyuanImage3 MoE EP+SP on NPU | open | 8 NPU 离线 serving 已验证 TP4+SP2 的 diffusion MoE parallel mapping,直接关联 Ascend 多模态。 |
| P1 | verl-omni#208 Qwen3-Omni Thinker LoRA FSDP | open | Qwen3-Omni Thinker transformers 5.x 下 fused MoE expert LoRA/FSDP 支持,偏多模态训练 recipe。 |
| P1 | slime#2147 shard-level P2P weight sync | open RFC | non-colocate 训练权重同步从 full broadcast 改为 shard-level P2P,报告 Qwen3-8B weight sync 0.76s -> 0.48s。 |
| P2 | vllm#47368 redact structured-output schema | open | 安全/日志,不是性能主线。 |
| P2 | vllm-omni#4826 Qwen2.5-omni video description | open | 多模态准确性 bug,低优先级。 |
验证清单¶
- 6901 NPU 对照:固定 seed、模型、长度分布、并行策略,比较
pad_bshd_to_minibatch_max=True/False的 Total Step、Old Log Prob、Actor Update、tokens/s/NPU、HBM peak、host CPU、attention mask size。 - 6901 正确性:覆盖空 nested tensor、
batch_size == 0、VLM BSHD path、MTP label / loss mask、TP / CP / FP8 alignment 后 shape 一致性。 - 6907 kernel 审核:核对 GDN Triton kernels 的 shape / dtype / block size / backward 约束,补长序列、MoE、异常 shape、不同 torch_npu / Triton 版本的回归矩阵。
- 6886 回归:vLLM 0.19+ Ascend 组合下启动、FusedMoE 权重加载、RotaryEmbedding 路径、fully_async rollout、
VLLM_ASCEND_AUTO_DETECT_QUANTIZATION=0是否按预期生效。 - vLLM serving 跟踪:DCP sparse MLA overlap 和 MTP index sharing 先不迁移;等非 draft PR 出现或有明确 NPU runtime 对应机制后再评估。
- vLLM-Omni 观测:优先把 KV stage / modality attribution 作为多模态 serving 压测指标,而不是先改算子。