No module named ‘torch_npu’

该报错通常出现在 Intel Arc 显卡(XPU)上运行 ComfyUI 默认工作流 3d_pixal3d_multi_views 时,Trellis2 形状阶段输出的 latent 已含 NaN,随后 SDPA attention 在 bfloat16/float16 下数值失稳,最终在 tre

快速结论:该报错通常出现在 Intel Arc 显卡(XPU)上运行 ComfyUI 默认工作流 3d_pixal3d_multi_views 时,Trellis2 形状阶段输出的 latent 已含 NaN,随后 SDPA attention 在 bfloat16/float16 下数值失稳,最终在 trellis2 shape stage 节点触发 “Trellis2 coords can’t be empty”。优先排查的是 SDPA 在低精度下的数值稳定性,以及 PyTorch/XPU 相关组合,而不太像是 VAE 本身的显存问题。

适用环境:Issue 中已确认:ComfyUI Windows 便携版、Windows、Python 3.13.12、Intel Arc 140V(XPU)、默认 3d_pixal3d_multi_views 工作流、torch 2.15.0 之前的版本;日志中显示 torch-npu 未安装且与本问题无关,因为这里碰到的是 XPU 而不是 NPU。

最快修复方案:升级 PyTorch 到 2.15.0(Issue 评论明确验证可修复对应 torch bug,见 pytorch/pytorch#201826)。作为临时绕过,可先尝试启动参数 --force-fp32,Issue 中作者确认该参数能抑制失败;--fp32-vae、--fp32-unet 单独使用均无效。

注意事项:--force-fp32 只是规避手段,会显著增加显存占用和降低速度,并非根因修复。升级到 torch 2.15.0 时需同步确认对应的 XPU 版 torch 与 ComfyUI 兼容;Issue 中未给出完整的升级命令,操作前请以官方安装说明为准。

问题场景

用户在 Intel Arc 140V 上运行 ComfyUI 自带的 3d_pixal3d_multi_views 默认工作流,未修改任何节点。流程执行到 “trellis2 shape stage” 节点时报出 “Trellis2 coords can’t be empty”。用户已在 comfy_extras/nodes_trellis2.py 的 shape_vae.decode_structure 前加打印,确认解码前的 latent 形状为 (1, 32, 16, 16, 16)、dtype 为 torch.float32,但已含 131072 个 NaN,因此问题在 VAE 解码之前就已经产生。

报错原文

Trellis2 coords can't be empty

TRELLIS2 LATENT DEBUG:
  Shape: (1, 32, 16, 16, 16)
  Dtype: torch.float32
  NaNs: 131072
  Infs: 0

[INFO] Found comfy_kitchen backend ascend: {'available': False, 'disabled': False, 'unavailable_reason': "torch-npu is not installed: No module named 'torch_npu'", 'capabilities': []}

说明:日志中的 No module named 'torch_npu' 只是 Ascend 后端探测失败的信息,出现在 Arc(XPU)环境的启动日志里,与本工作流故障没有因果关系,不要据此去装 torch-npu。

原因分析

根据 Issue 讨论,根因是 SDPA attention 在 bfloat16/float16 下的数值不稳定。评论中附带的隔离脚本对同一 attention 在 Arc 140V 上做了对比:default 模式在 bf16 和 fp16 下均出现大量非有限值(nonfinite),而 math 模式和手动 fp32 模式在 20 次试验中均为 0 次失败。这说明低精度输入 + default SDPA 后端会产出 NaN,NaN 一路传到 trellis2 形状阶段,最终导致 coords 为空。该问题已作为 torch bug 上报(pytorch/pytorch#201826),并已在新版本修复。

另外,作者测试 --fp32-vae 和 --fp32-unet 均不能恢复,而 --force-fp32 可以,这也与“问题发生在 attention 计算阶段、而非 VAE 或 UNet 权重精度”的判断一致。

环境排查

  • 确认当前 PyTorch 版本是否低于 2.15.0;这是本问题最关键的变量。
  • 确认使用的是 Intel XPU 版 torch 以及与之匹配的 intel-extension/驱动,避免版本错配引入新的不兼容。
  • 确认运行平台为 Arc 140V(或同类 Xeon/Arc XPU),并记录 ComfyUI 日志中检测到的后端信息。
  • 忽略日志里的 No module named 'torch_npu':这只是 Ascend 后端探测,不适用于 XPU 环境。
  • 确认已按官方建议禁用自定义节点后仍复现,以排除插件干扰。

解决步骤

  1. 记录当前 torch 版本与 XPU 相关包版本,作为回滚依据。
  2. 首选:将 PyTorch 升级到 2.15.0(对应 pytorch/pytorch#201826 已修复的 SDPA 低精度问题)。升级命令请按 PyTorch 官方 XPU 安装说明执行,Issue 中未给出具体命令,不要照搬 CUDA 版命令。
  3. 若暂时无法升级,可优先尝试以 --force-fp32 启动 ComfyUI 作为临时规避:python main.py --force-fp32。该参数在 Issue 中已被作者验证可抑制失败。
  4. 重新运行未修改的 3d_pixal3d_multi_views 工作流,观察是否仍报 “Trellis2 coords can’t be empty”。
  5. 若仍失败,可在 shape_vae.decode_structure 前临时加打印,检查 latent 中 NaN 数量是否归零,用于区分“问题仍在 attention 阶段”还是“下游另有问题”。

验证方法

升级 torch 后重新运行同一工作流,3d_pixal3d_multi_views 应能正常走完 trellis2 shape stage 并输出结果,不再出现 “Trellis2 coords can’t be empty”。如需更直接地确认修复,可运行评论中的隔离脚本 trellis2_xpu_sdpa_backend_compare.py,观察 bf16/fp16 下 default 模式的 bad_trials 是否从 2/20、3/20 降为 0/20。

参考来源

Comfy-Org/ComfyUI #17302(含作者对 --force-fp32 的验证与隔离脚本输出)
pytorch/pytorch #201826(SDPA 低精度 bug,已在 torch 2.15.0 修复)

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 31332

发表回复

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