快速结论:该报错出现在 vLLM 0.23.1rc1 及更早版本,使用 NVIDIA B200(Blackwell)GPU,在 MLA prefilling context-chunk 路径下调用 FA4 CuTe 内核时,因输出张量 mO 的 strides[0] 被静态编译导致形状不匹配。优先升级 vLLM 到包含 caaa4eb commit 的版本(v0.23.1rc1.dev1327 或更高)。
适用环境:vLLM 0.23.1rc1.dev1133(及相近版本),NVIDIA B200(SM100)GPU 8卡,tensor-parallel-size=8,模型 moonshotai/Kimi-K2.5(compressed-tensors/int4)及 Mistral-4-Small。CUDA 环境为容器内 vllm/vllm-openai:nightly。不支持 Hopper(SM90,FA3)平台。
最快修复方案:升级 vLLM 至 v0.23.1rc1.dev1327+gf25953cc5 或更新版本(即包含 vllm-project/flash-attention@caaa4eb 的版本)。无需额外修改配置。
注意事项:该 commit 修复了 CuTeDSL 中 _FakeTensor 未正确覆盖 mark_layout_dynamic 导致返回 None 的问题,使动态形状能正确被标记。若无法升级,可尝试强制选用 FA3 预填充后端(Blackwell 默认封锁 FA3,故不可行)。暂无其他已验证的临时方案。
问题场景
使用 vllm serve 加载 moonshotai/Kimi-K2.5(compressed-tensors int4)或 Mistral-4-Small 模型,配置 tensor-parallel-size=8,max-model-len=10240,在 8×NVIDIA B200 上以长上下文请求(约 8k tokens,chunked prefill 启用)驱动推理。短请求正常,首个足够长的请求触发 EngineCore 崩溃,后续请求返回 HTTP 500。
报错原文
File ".../vllm/model_executor/layers/attention/mla_attention.py", line 2158, in _compute_prefill_context
prefill_metadata.prefill_backend.run_prefill_context_chunk(...)
File ".../vllm/v1/attention/backends/mla/prefill/flash_attn.py", line 256, in run_prefill_context_chunk
return self._flash_attn_varlen_diff_headdims(...)
File ".../vllm/v1/attention/backends/mla/prefill/flash_attn.py", line 205, in _flash_attn_varlen_diff_headdims
out, softmax_lse = _flash_attn_fwd(...)
File ".../vllm/vllm_flash_attn/cute/interface.py", line 1217, in _flash_attn_fwd
_flash_attn_fwd.compile_cache[compile_key](*call_args)
ValueError: Mismatched mO.strides[0] on argument #3 when calling: `__call__(mQ: Tensor([n0, n1, n2], bfloat16), mK: Tensor([n3, n4, n5], bfloat16), mV: Tensor([n6, n7, n8], bfloat16), mO: Tensor([n9, n10, n11, n12], float32), mLSE: Tensor([n13, n14, n15], float32), softmax_scale: float32, mCuSeqlensQ: Tensor([n16], int32), mCuSeqlensK: Tensor([n17], int32), mSeqUsedQ: None, mSeqUsedK: None, mDynamicCausal: None, mPageTable: None, window_size_left: None, window_size_right: None, learnable_sink: None, descale_tensors: None, blocksparse_tensors: None, aux_tensors: None, output_scale: None)`, expected to be N
原因分析
在 MLA 预填充 context-chunk 路径中,FA4 CuTe 内核接收的输出张量 mO 是 4 维的([n9,n10,n11,n12],float32),其 strides[0] 取决于 batch 组合(拼接后的 context-chunk 长度),是动态值。但旧版本 vLLM 使用的 FlashAttention CuTeDSL 中,_FakeTensor 类未正确覆盖 mark_layout_dynamic 方法,导致该张量被当作静态形状编译,首次调用时实际传入的 stride 与编译期缓存不匹配,从而引发 ValueError: Mismatched mO.strides[0]。该问题仅在 Blackwell(SM100)上复现,因为 Hopper 使用 FA3 后端不涉及此内核。
环境排查
- vLLM 版本:确认是否为 v0.23.1rc1.dev1133 或更早版本。
- GPU:8×NVIDIA B200(SM100),Blackwell 架构。
- Tensor Parallel:设置为 8。
- 模型:moonshotai/Kimi-K2.5(compressed-tensors/int4)或 Mistral-4-Small。
- FlashAttention 版本:FA4(Blackwell 默认)。
解决步骤
- 升级 vLLM 至包含修复 commit
caaa4eb的版本。例如 v0.23.1rc1.dev1327+gf25953cc5 或更新的 nightly 版本。 - 重新构建容器或安装更新后的 vLLM wheel。
- 无需修改启动参数,原有配置(
--tensor-parallel-size 8、--max-model-len 10240等)可直接复用。
验证方法
使用与原始复现相同的命令,驱动长上下文请求(例如 vllm bench serve --dataset-name random --random-input-len 8192 --random-output-len 1024 --num-prompts 160 --max-concurrency 16),检查是否出现 ValueError: Mismatched mO.strides[0] 错误以及 HTTP 500 响应。若所有请求成功完成(160/160 或更高并发通过),则修复生效。
参考来源
<a href="https://github.com/vllm-project/vllm/issues
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


