Duplicate node executions when two independent iterators feed a node whose collection output is iterated again

该报错发生在 InvokeAI 图执行引擎中,当两个相互独立的迭代器同时向同一个节点提供输入,且该节点的集合输出再次被迭代时,内部迭代体(body 节点)会在非对角线迭代路径上被重复执行。优先检查你使用的 InvokeAI 版本是否已包含相关修复。

快速结论:该报错发生在 InvokeAI 图执行引擎中,当两个相互独立的迭代器同时向同一个节点提供输入,且该节点的集合输出再次被迭代时,内部迭代体(body 节点)会在非对角线迭代路径上被重复执行。优先检查你使用的 InvokeAI 版本是否已包含相关修复。

适用环境:InvokeAI 图形执行引擎(Graph Execution Engine),复现基线提交为 a21d74b8bd。Issue 未确认操作系统、Python、CUDA、显卡等具体版本信息。

最快修复方案:更新到已包含修复的 InvokeAI 版本(Issue 标记为已修复,但未提供具体修复版本号)。如果无法升级,暂无确认的一步修复方案。

注意事项:该问题与 PR #9483 无关,在 PR 基线提交和 PR 头部均可稳定复现,说明是引擎层面的独立缺陷。修复版本号未在 Issue 中注明,升级前建议查看 InvokeAI 的 Release Notes 或相关提交记录。

问题场景

在使用 InvokeAI 构建或运行包含多级嵌套迭代的工作流(Workflow)时触发。典型结构为:两个独立数据源分别进入两个迭代器(iter_aiter_b),它们的输出同时送入一个汇聚节点(pairer),而该汇聚节点的集合输出再次被一个内部迭代器(inner_iter)迭代,迭代体(body)的结果最终进入收集器(collect)。在该场景下,内部迭代体被重复准备和执行,导致收集结果中出现重复数据。

报错原文

Duplicate node executions when two independent iterators feed a node whose collection output is iterated again

inner_iter instances: 8 (expected 8)
body instances:       12 (expected 8)
body iteration paths: [(0,0,0), (0,0,1), (0,1,0), (0,1,0), (0,1,1), (0,1,1),
                       (1,0,0), (1,0,0), (1,0,1), (1,0,1), (1,1,0), (1,1,1)]
 collect (0, 0) ['ax.0', 'ax.1']
 collect (0, 1) ['ay.0', 'ay.0', 'ay.1', 'ay.1']
 collect (1, 0) ['bx.0', 'bx.0', 'bx.1', 'bx.1']
 collect (1, 1) ['by.0', 'by.1']

原因分析

可能原因是 InvokeAI 图执行引擎在准备节点实例时,对“多个独立迭代器共同驱动一个中间节点,且该节点输出再次被迭代”的复合迭代路径处理存在缺陷。从 Issue 数据看,外层 inner_iter 的实例数是正确的(8 个),但 body 节点被准备了 12 次而非 8 次——重复不是发生在迭代器展开阶段,而是在后续节点(body)基于这些迭代路径进行实例化时被错误倍增。具体表现为:对角线路径 (0,0,*)(1,1,*) 正常,只有非对角线路径 (0,1,*)(1,0,*) 的 body 实例被重复创建,且重复实例携带完全相同的迭代路径,最终都写入了下游收集器。

环境排查

  • 确认 InvokeAI 版本是否高于或等于修复该 Issue 的版本(Issue 未给出具体修复版本号,需查看 Release Notes)。
  • 如果使用源码运行,确认当前所在提交是否晚于基线 a21d74b8bd
  • 确认工作流中是否存在“两个独立迭代器 → 汇总节点 → 再次迭代”的三层嵌套结构。
  • 检查收集器输出中是否存在成对重复的数据条目(如 'ay.0', 'ay.0'),这是该问题的典型信号。

解决步骤

  1. 首先将 InvokeAI 更新到最新稳定版本或包含该修复的版本,检查收集结果中的重复是否消失。
  2. 如果无法升级,可尝试在外部逻辑层面规避:将“汇总节点输出再迭代”的结构改为先收集一次再作为整体传入下游,或使用单一迭代器合并两个数据源的输入。
  3. 若问题与业务逻辑强相关,建议在收集器前增加去重节点,但这只是临时补救措施,不能解决执行次数冗余带来的性能开销。
  4. 在 InvokeAI 官方仓库中搜索该 Issue(#9485)的修复提交,确认修复合并到了哪个版本分支,再决定升级路径。可优先尝试升级到最新版。

验证方法

使用 Issue 中提供的复现脚本(或等价的最小工作流),在修复后的版本中运行并观察输出。确认满足:body 实例数为 8(而非 12),且收集结果满足预期——collect (0,1)collect (1,0) 中各只包含 2 个元素而非 4 个,即所有收集组的元素不重复。

参考来源

invoke-ai/InvokeAI #9485

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 20439

发表回复

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