快速结论:在 Ascend NPU 上运行 LTX-2(例如 LTX-2.3 LoRA FlowGRPO 训练)并使用 attn_backend=_native_npu 时,会遇到两个 NPU 兼容性报错:一是 RMSNorm 在 elementwise_affine=False 时把 weight=None 传给 npu_rms_norm 导致崩溃;二是 Ascend 融合注意力不接受 LTX 交叉注意力使用的 [B, N, 1, Skv] 形状 mask。优先排查 diffusers 版本是否已包含 NPU 兼容修复,以及 mask 是否被正确展开到 [B, N, Sq, Skv]。
适用环境:OS:Linux aarch64;硬件:Ascend NPU;Python 3.11;PyTorch 2.10.0;torch_npu 2.10.0;CANN 9.0.0;diffusers:main。
最快修复方案:升级到包含 PR #14288 修复的 diffusers 版本。该修复让 RMSNorm(elementwise_affine=False) 回退到已有的 PyTorch RMSNorm 实现,并把 LTX 的 [B, N, 1, Skv] mask 展开为 [B, N, Sq, Skv] 后再交给 Ascend 融合注意力。
注意事项:该修复属于运行时正确性与 NPU 兼容性修复,不改变输出质量;在修复前,任务会在 RMSNorm 或融合注意力 mask 处直接崩溃,无法产出推理结果。若仍使用旧版本,最小复现脚本依旧会失败。
问题场景
用户在 Ascend NPU + torch_npu 环境下,使用 diffusers 的 attn_backend=_native_npu 运行 LTX-2 相关任务时触发该问题。具体包括 LTX-2.3 text-to-audio-video FlowGRPO LoRA 训练(基于 dg845/LTX-2.3-Diffusers checkpoint),通过 verl-omni 的 examples/flowgrpo_trainer/ltx2/run_ltx2_3_t2av_lora_npu.sh 配方启动。报错出现在两个代码路径:RMSNorm 归一化层,以及 LTX 交叉注意力的融合注意力 mask 处理。
报错原文
RMSNorm(elementwise_affine=False) -> npu_rms_norm called with weight=None
gamma is None
_native_npu fused attention rejects mask shape [B, N, 1, Skv] (e.g. [1, 32, 1, 1024])
Ascend FA expects Sq on dim=-2, not a singleton 1
原因分析
两个问题都属于 Ascend NPU 融合算子与 diffusers 通用实现之间的接口差异:
RMSNorm:当 elementwise_affine=False 时,RMSNorm 层的 weight 为 None。而 torch_npu.npu_rms_norm 要求传入 gamma 张量,因此调用时触发 gamma is None 崩溃。此路径缺少对无仿射权重情况的回退处理。
融合注意力 mask:LTX 交叉注意力使用形状为 [B, N, 1, Skv] 的 mask(例如 [1, 32, 1, 1024]),其中 query 长度维为 1。SDPA 会广播这一单例维,而 Ascend 融合注意力不会按同样方式广播,因此要求 _maybe_modify_attn_mask_npu 显式把 mask 扩展为 [B, N, Sq, Skv]。当前实现只扩展了 [B, 1, 1, Skv],未覆盖 [B, N, 1, Skv],导致 Ascend FA 在 dim=-2 上拿到单例 1 而非实际的 Sq,从而拒绝该 mask。
环境排查
- 确认 Python 版本,Issue 中为 3.11。
- 确认 PyTorch 版本,Issue 中为 2.10.0。
- 确认 torch_npu 版本,Issue 中为 2.10.0。
- 确认 CANN 版本,Issue 中为 9.0.0。
- 确认 diffusers 是否为包含 PR #14288 的版本,Issue 中原始环境为
main。 - 确认运行硬件为 Ascend NPU,系统为 Linux aarch64。
- 确认注意力后端设置为
_native_npu,以及触发 mask 形状是否来自 LTX 交叉注意力。
解决步骤
- 确认当前 diffusers 版本是否已合并 PR #14288。若未包含,升级到包含该 PR 的版本。
- 若无法立即升级,可优先尝试在 RMSNorm 路径中,当
elementwise_affine=False(即weight is None)时绕过npu_rms_norm,回退到已有的 PyTorch RMSNorm 实现。 - 针对融合注意力 mask,检查
_maybe_modify_attn_mask_npu是否只处理了[B, 1, 1, Skv]。可优先尝试补充对[B, N, 1, Skv]形状的处理,将其展开为[B, N, Sq, Skv]后再传入 Ascend 融合注意力。 - 用 Issue 正文提供的两个最小复现脚本分别验证 RMSNorm 与融合注意力路径:
RMSNorm(elementwise_affine=False)应不再传入weight=None;[B, N, 1, Skv]mask 应能被正确处理。 - 在 Ascend NPU 上重新运行 LTX-2.3 text-to-audio-video FlowGRPO LoRA 训练配方,确认不再在 RMSNorm 或融合注意力 mask 处中断。
验证方法
在修复后的环境中依次运行 Issue 中的最小复现脚本,RMSNorm 调用应成功完成,融合注意力调用应不再拒绝 [B, N, 1, Skv] mask。随后运行 verl-omni 的 LTX-2.3 FlowGRPO 训练配方,rollout / 训练路径应能顺利通过原本崩溃的两个代码路径,不再出现 gamma is None 或 Ascend FA mask 形状相关报错。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


![[Bug]: Drop down menu of ´Add Lora to prompt´ does nont have a ´none´ selection and always charge the last Lora selected](https://www.chat-gpts.plus/wp-content/uploads/2026/09/9041-6fefaf96-768x403.jpg)