![RuntimeError: shape '[32, 64, 576]' is invalid for input of size 1343488](https://www.chat-gpts.plus/wp-content/uploads/2026/07/48896-f8250d36.jpg)
RuntimeError: shape ‘[32, 64, 576]’ is invalid for input of size 1343488
快速结论:该错误发生在 vLLM v0.25.1 启动过程中,使用带有 MLA(多头潜在注意力)架构和 FLASHMLA_SPARSE 后端的模型(如 GLM-5.2)时。优先排查方法:使用 --enforce-eager 参数启动以跳过 CUDA 图内存分析阶段;升级到包含修复的 vLLM 主分支版本。
问题场景
用户在使用 vLLM v0.25.1 服务 GLM-5.2-NVFP4 模型(GlmMoeDsaForCausalLM 架构,NVFP4 量化,使用 FLASHMLA_SPARSE 解码后端)时,服务器在启动过程中的 CUDA 图内存分析阶段崩溃。该问题在 v0.25.1 版本中首次出现,v0.24.0 版本在相同模型和配置下可以正常启动。该问题也在不同量化路径(compressed-tensors)、不同TP配置(TP=4)和不同检查点下被独立复现,说明问题具有更广泛的辐射范围。
报错原文
RuntimeError: shape '[32, 64, 576]' is invalid for input of size 1343488
完整堆栈跟踪中的关键路径:
File "vllm/v1/worker/gpu_worker.py", line 483, in determine_available_memory
cudagraph_memory_estimate = self.model_runner.profile_cudagraph_memory()
File "vllm/v1/worker/gpu_model_runner.py", line 6500, in profile_cudagraph_memory
self._init_minimal_kv_cache_for_profiling()
...
File "vllm/attention/backends/attn_utils.py", line 251, in _reshape_attention_kv_cache
kv_cache = kv_raw_tensor.view(dtype).view(permuted_kv_cache_shape)
RuntimeError: shape '[32, 64, 576]' is invalid for input of size 1343488
在另一个独立复现中报错为:
RuntimeError: shape '[96, 64, 576]' is invalid for input of size 4030464
原因分析
问题出在 v0.25.1 引入的 _init_minimal_kv_cache_for_profiling 路径。该路径在初始化和重塑 KV 缓存张量时,使用了基于 get_kv_cache_shape 返回的未填充尺寸(576),但实际的原始张量在分配时使用了填充后的每 token 大小(656)。
具体来说:576 = kv_lora_rank + qk_rope_head_dim = 512 + 64(常规 MLA 潜在维度),而 656 是填充后的每 token 页大小,由 fp8_ds_mla 格式引入。
原始的张量大小 1343488(或 4030464)除以期望形状的维度后得到 656(例如 1343488 / (32 * 64) = 656),但 reshape 操作期望的是 576,从而导致形状不匹配。
环境排查
- vLLM 版本:确认使用
v0.25.1(或基于该版本的 Docker 镜像vllm/vllm-openai:v0.25.1)。 - 模型架构:确认是否为 MLA 架构模型(如 GlmMoeDsaForCausalLM)。
- 注意力后端:检查日志中是否显示
Using FLASHMLA_SPARSE attention backend。 - KV 缓存格式:确认
Using fp8_ds_mla KV cache format日志。 - CUDA 图:检查是否启用了 CUDA 图(默认启用),排查命令是否包含
--enforce-eager。 - 推理参数:检查是否使用
--kv-cache-dtype fp8。
解决步骤
- (可优先尝试)立即绕过:在启动命令中添加
--enforce-eager参数。这会禁用 CUDA 图分析,从而跳过profile_cudagraph_memory()路径。注意:这会带来 MoE/CUDA 图形性能损失。 - 升级到修复版本:等待或自行构建包含 PR #48379 的 vLLM 版本。该 PR 在
main分支上设置 MLA KV 缓存规范的kv_quant_mode,确保重塑路径不再使用错误的"auto"分支。注意:#48379在v0.25.1tag 之后合并,因此当前最新 release(v0.25.1)仍未包含此修复。 - 检查后续加固:PR #48907 进一步加固了重塑路径,通过优先使用
spec.cache_dtype_str作为布局真实来源,避免回退到kv_quant_mode == NONE → "auto"的启发式方法。建议跟踪该 PR 的合并状态。 - 确认参数:在排查期间,尝试不使用
--kv-offloading-size和--enable-prefix-caching等可能增加 KV 缓存复杂度的参数启动以确认问题是否仍然存在。
验证方法
在应用修复(升级到包含 #48379 的版本)或使用 --enforce-eager 后,重新启动 vLLM 服务。启动过程中不应再出现 RuntimeError: shape '[32, 64, 576]' is invalid for input of size 1343488 错误,并且应该能够成功完成初始化到达服务就绪状态。可以通过检查以下日志线索确认:
- 日志中不应再出现
WorkerProc hit an exception和determine_available_memory中的错误堆栈。 - 正常启动后应出现类似
Application startup complete或服务器绑定到指定端口的消息。



