AttributeError: Layer mlp.experts has no parameter ‘w13_weight.weight’ for checkpoint weight ‘mlp.experts.gate_up_proj.weight’

这个问题通常出现在用 vLLM 加载 Aria 的 MoE 专家权重时——checkpoint 里的专家名是 experts.fc1.weight / experts.fc2.weight ,但 vLLM 的融合专家加载器却去查询 w13_weight.weight / w2_weight.weig

快速结论:这个问题通常出现在用 vLLM 加载 Aria 的 MoE 专家权重时——checkpoint 里的专家名是 experts.fc1.weight / experts.fc2.weight,但 vLLM 的融合专家加载器却去查询 w13_weight.weight / w2_weight.weight,参数名对不上导致加载在拷贝张量之前就抛 AttributeError。优先排查权重名映射与是否有修复补丁可用。

适用环境:Issue 已确认:Ubuntu 24.04.2 LTS(x86_64,kernel 6.17.0-1022-azure),AMD EPYC 7763,Python 3.12.3,PyTorch 2.13.0+cpu(CUDA 不可用),Transformers 5.17.0,vLLM 源码 commit 2c88fb131c7ae0be01907cd8c276911db5e7aad4,CPU float32、无量化、单 Gloo rank、TP=1。端到端验证使用 H100、BF16、TP=1、PyTorch 2.13.0+cu130。

最快修复方案:暂无确认的一步修复方案。Issue 中指向的修复 PR #57487(commit 761c55b)已通过 CPU 单测和 H100 端到端验证,可优先尝试升级到包含该修复的 vLLM 版本或应用该 PR;但该 PR 的合并/发布状态需以官方仓库为准。

注意事项:复现环境使用的是官方 CPU wheel 的原生扩展(commit cd10ed6f,为源码版本的已验证祖先),当前源码的原生二进制一致性和完整推理行为在该 CPU 复现中未测试;端到端成功结论来自 H100 GPU 环境,不能直接外推到 CPU 路径。修复涉及权重名和转置,若自行改动需同时处理这两点。

问题场景

用户在 vLLM 中加载 rhymes-ai/Aria 模型(Aria 的 MoE 层)时触发该问题。Issue 中的最小复现脚本在已安装的 CPU vLLM 环境中构造真实的 vLLM Aria MoE 层,使用原生的 AriaTextModel mapper、AutoWeightsLoaderMoERunnerRoutedExperts,权重键与张量直接取自 Transformers 的 AriaTextMoELayer.state_dict(),未做重命名或转置。加载 experts.fc1.weight 时映射为 experts.gate_up_proj.weight,触发 w13_weight.weight 报错;单独加载 experts.fc2.weight 时触发对应的 w2_weight.weight 报错。

报错原文

AttributeError: Layer mlp.experts has no parameter 'w13_weight.weight' for checkpoint weight 'mlp.experts.gate_up_proj.weight'

加载 experts.fc2.weight 时产生对应报错:

AttributeError: Layer mlp.experts has no parameter 'w2_weight.weight' for checkpoint weight 'mlp.experts.gate_up_proj.weight'

原因分析

可能原因是 Aria MoE 的专家权重名映射不匹配。checkpoint 中的真实专家名为 experts.fc1.weight / experts.fc2.weightrhymes-ai/Ariamodel.safetensors.index.json 中确实存在 language_model.model.layers.0.mlp.experts.fc1.weight...fc2.weight),但 vLLM 的融合专家加载器在映射后,去查询名为 w13_weight.weight / w2_weight.weight 的参数,而实际参数名为 w13_weight / w2_weight,多出的 .weight 后缀导致参数查找失败,在拷贝张量之前就抛出 AttributeError。Issue 作者指出修复需要同时改正权重名并补上所需的转置。

环境排查

  • 确认 vLLM 版本/commit:本 Issue 复现于 2c88fb131c7ae0be01907cd8c276911db5e7aad4,受影响 loader 源码在后续 main commit 64563d0ec4b761745d5babbc5750b263f0783926 中仍未变。
  • 确认 Python 版本:3.12.3。
  • 确认 PyTorch 版本与 CUDA 可用性:复现为 2.13.0+cpu(CUDA 不可用),端到端为 2.13.0+cu130。
  • 确认 Transformers 版本:5.17.0。
  • 确认硬件与执行模式:CPU float32、无量化、TP=1、单 Gloo rank;端到端为 H100、BF16、TP=1。
  • 确认 CPU 原生 wheel 与源码版本的一致性:复现时源码对应 wheel 不可用,改用 commit cd10ed6f 的官方 CPU wheel。
  • 确认 checkpoint 中的专家权重名是否为 experts.fc1.weight / experts.fc2.weight
  • 确认是否已包含 PR #57487 的修复(commit 761c55b)。

解决步骤

  1. 先确认报错是否与本文一致:在加载 Aria 时是否出现 AttributeError: Layer mlp.experts has no parameter 'w13_weight.weight' ...w2_weight.weight 变体。
  2. 核查你所用 vLLM 的源码/版本,确认是否仍使用旧的专家参数名映射(即会查询 w13_weight.weight / w2_weight.weight)。
  3. 可优先尝试更新到包含 PR #57487 修复的 vLLM 版本;如无法更新,可参考该 PR 修改专家权重名映射并补上所需转置(Issue 作者明确说明修复包含“修正权重名并添加所需转置”两部分)。
  4. 若不需要 MoE 专家权重的完整加载,可参照 Issue 复现脚本以 controlshared_experts.down_proj.weight)作为对照路径,确认非专家权重的加载流程是否正常,以缩小问题范围。
  5. 如自行应用补丁,请确保同一次改动同时处理 fc1/gate_up_projfc2 两条专家路径,以及共享专家权重路径。

验证方法

按 Issue 的端到端验证方式:使用完整的 rhymes-ai/Aria checkpoint(53a09c7)在 H100、BF16、TP=1 下启动,确认全部 12 个 shard 能加载完成,并能成功响应文本和图像请求(HTTP 200)。Issue 中报告的验证结果为文本请求返回 Paris、图像请求识别出两只猫。若只做 CPU 层面对照,可检查专家权重路径不再抛出 AttributeError,并能进入张量拷贝阶段。

参考来源

vllm-project/vllm #57473

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 24441

发表回复

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