RuntimeError: The size of tensor a (59940) must match the size of tensor b (1451808) at non-singleton dimension 2

该报错通常发生在运行 MiniMax H3 官方文生视频工作流时,由第三方自定义节点(如 ComfyUI_smZNodes、efficiency-nodes-comfyui)全局替换了 `comfy.sample.prepare_noise` 函数,导致 NestedTensor 噪声被降级为普通视

快速结论:该报错通常发生在运行 MiniMax H3 官方文生视频工作流时,由第三方自定义节点(如 ComfyUI_smZNodes、efficiency-nodes-comfyui)全局替换了 `comfy.sample.prepare_noise` 函数,导致 NestedTensor 噪声被降级为普通视频流张量,最终在 `SamplerCustomAdvanced` 的 `noise_scaling` 阶段因形状不匹配而崩溃。优先排查是否有安装了此类会挂钩 `prepare_noise` 的扩展节点。

适用环境:已确认在 ComfyUI 0.30.0、0.30.1、0.30.2 中复现;操作系统包括 Windows 11、MacOS 26.6 (M3 Ultra)、Linux。已确认的 Python 版本为 3.12.10,PyTorch 2.9.1+cu130,显卡 RTX 5070 Ti。

最快修复方案:暂无确认的一步修复方案。可优先尝试禁用 ComfyUI_smZNodes 和 efficiency-nodes-comfyui 这两个第三方扩展节点,或在其 `prepare_noise` 替换函数顶部添加 NestedTensor 保护判断(详见“解决步骤”)。

注意事项:核心 ComfyUI 代码本身是正确的;该问题由第三方扩展的全局 monkey-patch 引起,禁用扩展是最安全的验证方式。若修改第三方扩展代码,需注意升级扩展后修改可能会被覆盖。

问题场景

用户运行 ComfyUI 官方 MiniMax H3 文生视频工作流(Image to Video (MiniMax H3) UUID 子图节点),使用默认设置(864×480 分辨率、5 秒时长),采样阶段在 `SamplerCustomAdvanced` 中立即失败。该问题在 ComfyUI 0.30.0 至 0.30.2 中均存在,与操作系统无关。

报错原文

RuntimeError: The size of tensor a (59940) must match the size of tensor b (1451808) at non-singleton dimension 2

File "comfy\model_sampling.py", line 97, in noise_scaling
    return sigma * (s * noise) + (1.0 - sigma) * latent_image

原因分析

核心 ComfyUI 在 comfy/sample.py:22-38 中专门为 NestedTensor 提供了 prepare_noise 分支处理。但第三方节点 ComfyUI_smZNodes 在挂钩注册时无条件替换了整个 comfy.sample.prepare_noise 函数,其替换版本没有处理 is_nested 分支,而是直接调用 latent_image.size() 生成普通张量。

问题在于 NestedTensor.size() 只返回第一个子张量(视频流)的形状 [1, 24, 37, 30, 54],而忽略了音频流 [1, 32, 2, 207]。这导致生成的噪声只包含视频流且通道数被缩减,与原始 AV NestedTensor 不匹配。当 noise.unbind() 对普通张量按维度 0 解绑时,结构完全错乱,最终在 noise_scaling 中报出形状不匹配错误。

该问题与 V1 还是 V3/子图节点路径无关,只要运行了替换补丁就会触发。

环境排查

  • 检查是否安装 ComfyUI_smZNodes:若 traceback 中出现 File "custom_nodes/ComfyUI_smZNodes/smZNodes.py", line 114, in KSAMPLER_sample,则确认该扩展的 prepare_noise 补丁已生效。
  • 检查是否安装 efficiency-nodes-comfyui:当其中 RNG 源设置为 gpu/nv 时也会触发同样问题。
  • 如需最小化复现,可尝试卸载全部第三方扩展后重新运行工作流。

解决步骤

  1. 首选方案:禁用冲突扩展。在 ComfyUI 的 custom_nodes 目录中暂时移走或重命名 ComfyUI_smZNodesefficiency-nodes-comfyui 文件夹,重启 ComfyUI 后重新运行工作流。这是最安全可靠的验证方式。
  2. 临时补丁(可优先尝试):修改 ComfyUI_smZNodes 中替换的 prepare_noise 函数(位于 modules/rng.py:40:106),在其开头加入 NestedTensor 保护判断:
    if getattr(latent_image, 'is_nested', False):
        import comfy.nested_tensor, comfy.sample
        generator = torch.manual_seed(seed)
        return comfy.nested_tensor.NestedTensor(
            [comfy.sample.prepare_noise_inner(t, generator, noise_inds) for t in latent_image.unbind()]
        )

    该补丁已在 Issue 中验证有效,打包后的噪声形状变为 (1, 1, 1451808),与 latent 匹配。

  3. 若使用 efficiency-nodes-comfyui,可将其 RNG 源从 gpu/nv 改回其他选项,或直接禁用该扩展。
  4. 更新 ComfyUI 核心版本,关注后续版本是否会加入更明确的报错提示(当前仍未修复)。

验证方法

重新运行 MiniMax H3 官方文生视频工作流,观察采样阶段是否正常进行。若不再出现 599401451808 的形状不匹配错误,且能成功生成视频,则问题已解决。也可打印中间张量检查:打包后的噪声形状应为 (1, 1, 1451808),与打包后的 latent 完全一致。

参考来源

Comfy-Org/ComfyUI #15250

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 18813

发表回复

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