已关闭
[Bug-Report|缺陷反馈]: ReduceCopyMerge enforce 组被同 scope 组外端点误拒导致 scope 融合互锁失效 #3212
wangmingjun创建于  23 天前关闭于  22 天前
wangmingjun成员
23 天前 创建

Describe the current behavior / 问题描述 (Mandatory / 必填)

auto_mix_partition=0 时,ReduceCopyMerge 仅处理 enforce 合并组(scope 融合组),但 enforce 路径的 CheckNoExternalUseOfMergedInnerTensor 检查(防止合并产生内用外传畸形结构)仅按 subgraphId 判定组内/组外,未利用端点携带的 CvFuseId scope 信息,把同 scope 的组外端点也一律视为风险拒绝,导致 enforce 组互锁、scope 融合失效。

实测 PipeUB2L1 场景(PyPTO_Test case 517,DAV_3510):子图 48~53 的全部边界 tensor 端点携带同一 CvFuseId(scope 0),但出现互锁:

  • merge group [48, 49, 52, 53] 被 tensor 2020 卡住:producer 49 在组内、producer 50 在组外(同为 scope 0);
  • merge group [49, 50, 52, 53] 被 tensor 2019 卡住:producer 49 在组内、producer 48 在组外(同为 scope 0);
  • 两个 enforce 组互相等待,均无法合并,最终 26 个候选组全部 skipped,scope 0 的子图未能融合,子图间边界 tensor 仍走 DDR 搬运,损失融合性能。
[WARN ] [ReduceCopy.Operation]:Merge group [[48, 49, 52, 53]] not merged: tensor 2020 producer(ingroup[[49]] outgroup[[50]]) consumer(ingroup[[52, 53]] outgroup[[]]) has both in-group and out-group endpoints. Likely cause: producer/consumer of the same tensor carry different scope (CvFuseId).
[DEBUG] [ReduceCopy.Operation]:Merge group 3 [[48, 49, 52, 53]] skipped due to constraints, see above for reason.

Environment / 环境信息 (Mandatory / 必填)

  • 架构:DAV_3510(CV mix)
  • 配置:auto_mix_partition=0(仅 enforce 组参与合并)
  • 复现用例:PyPTO_Test test_cases/pipetransfer/Case_PipeUB2L1.xlsx case 517(PipeUB2L1)

Steps to reproduce the issue / 重现步骤 (Mandatory / 必填)

  1. 在 DAV_3510 环境、auto_mix_partition=0 下运行 PipeUB2L1 用例;
  2. 打开 plog debug 日志,观察 ReduceCopyMerge 输出;
  3. 可见 enforce 组 [48,49,52,53] 与 [49,50,52,53] 因组外同 scope 端点被 inner-external-use 检查拒绝,形成互锁,Merge group N ... skipped due to constraints 全部跳过。

Describe the expected behavior / 预期结果 (Mandatory / 必填)

enforce(scope 融合)路径的内用外传检查应按 CvFuseId 判定组外端点:

  • tensor 全部端点携带真实 CvFuseId(>=0,scope 信息完整)时,组外端点与组内端点同 scope → 豁免(scope 融合机制保证其终将与本组同处一个混合子图,不构成内用外传风险);
  • 异 scope 组外端点、或任一端点为 -1(含 scope 信息缺失)→ 不豁免,仍拒绝(守护 #3160 内用外传精度问题,含 -1 时行为与 subgraphId 判定完全一致)。

预期 [48,49,52,53] 先合并、后续组将 50/51 吸收进同一 root,scope 0 全部子图融合为一个混合子图。

修改前:enforce 组全部 skipped(26 个候选组合并 0 次);修改后:Merge group 3 succeeded: actualGroup=[48, 49, 52, 53] 等链式合并 26 次成功,用例 Triple Compare / Pipe Mix Result 均 PASS。

Special notes for this issue / 备注 (Optional / 选填)

修复 PR 将从 hwwangmingjun/pypto_wmj 提交,关联本 issue。

likedislike
Wwangmingjun成员
23 天前 issue类型由 任务 改变为 缺陷
Wwangmingjun成员
23 天前 将 hwwangmingjun 设为负责人
Wwangmingjun成员
23 天前 添加了label:Passes
Wwangmingjun成员
23 天前 修改标题为 “[Bug-Report|缺陷反馈]: ReduceCopyMerge enforce 组被同 scope 组外端点误拒导致 scope 融合互锁失效”,原标题为“[缺陷] ReduceCopyMerge enforce 组被同 scope 组外端点误拒导致 scope 融合互锁失效”
wangmingjun成员
22 天前 评论:

修改内容

  1. BoundaryTensorInfo 增加端点级 CvFuseId 数据通路:新增 producerCvFuseIds / consumerCvFuseIds 与 Subgraphs 逐项平行的向量;RecordBoundaryTensorInfo 改为按 (subgraphId, op->GetCvFuseId()) 对去重采集端点(同子图内不同 op 的 scope 信息不丢失)。

  2. 新增平行判定函数 IsInvalidMergedInnerTensorByCvFuseId(与原 IsInvalidMergedInnerTensor 平行,原函数零改动):拒绝结构与 subgraphId 判定一致(组内 producer && 组内 consumer && 组外端点),差异仅在组外端点的豁免规则——

    • tensor 全部端点携带真实 CvFuseId(>=0,scope 信息完整)时,组外端点与组内端点的 CvFuseId 集合相同 → 豁免(同 scope 伙伴,scope 融合机制保证终将同组,输出 DEBUG 日志记录被豁免端点);
    • 异 scope 组外端点 → 仍拒绝;
    • 任一端点为 -1(含 CvFuseIds 缺失)→ 豁免整体失效,所有组外端点一律按 foreign 拒绝,行为与 subgraphId 判定完全一致(守护 #3160)。
  3. 分发开关:CheckNoExternalUseOfMergedInnerTensor 新增 checkByCvFuseId 参数(默认 false),内部二选一分发到新旧两个判定函数,公共骨架(isDDR 门槛、visit-stamp 去重、WARN 日志及跨轮去重)完全共用。

  4. enforce 路径启用 CvFuseId 判定:Merge 中 enforce 组分支调用传 true;auto-mix 路径(CanMergeWithConstraints 内)保持默认 false 走原 subgraphId 判定,行为不变。

likedislike
wangmingjun成员
22 天前 评论:

问题已修复,关闭issue

likedislike
wangmingjun成员
22 天前 评论:

/close

likedislike
CANN-robotCANN-robot成员
22 天前 issue状态由 待办的 改变为 已完成
CANN-robotCANN-robot成员
22 天前 关闭了 issue
CANN-robotCANN-robot成员
22 天前 添加了label:resolved