Closed
[Bug-Report|缺陷反馈]:ConcatToConcatDFusionPass 未校验dtype且不兼容旧版GE运行时,导致编译失败/算子包加载失败 #3868
zhanglei842Add on  17 days agoClosed at  17 days ago
zhanglei842Collaborators
17 days ago Create

一、问题描述 (必填)

迁移自 canndev 的 ConcatToConcatDFusionPass(Concat/ConcatV2/ConcatV2D → ConcatD)存在三个缺陷:

  1. dtype 未校验:迁移时丢失了 canndev 侧 CheckOpSupported 的等价校验,DT_STRING 等 ConcatD 不支持的数据类型输入被改写为 ConcatD。引擎选择阶段 ConcatD 的 DT_STRING 输出不被 AIcoreEngine 支持(tbe-custom store 无 ConcatD 实现、动态 shape 校验不支持 DT_STRING),导致整图编译失败。canndev 原生版本会拒绝此类改写,两者行为不一致。

  2. 旧版本 GE 运行时加载失败:pass 引用了 SubgraphRewriter::Replace 带 CustomPassContext 的重载(GE 9.1.0 新增)及 CustomPassContext::GetPassName/SetPassName(GE 9.0.0 新增成员函数)。算子包 .so 以 -z now 链接,强符号引用在 8.5.0/9.0.x GE 运行时上 dlopen 时解析失败,导致整个算子包加载失败(不仅限本 pass)。

  3. UT 直调失败:pass 侧移除 pass name 设置后,UT 直调 Run 时 CustomPassContext 无 pass name,9.1+ 运行时 Replace(ctx) 内部 ReportFuse 断言失败,Run 返回 FAILED 且图已被改写(26 个用例中 17 个失败)。真实编译不受影响(框架调度器会在调 Run 前设置 pass name)。

二、环境信息 (可选)

  • 昇腾硬件型号:A5(regbase,NpuArch DAV_3510/DAV_5102)
  • CANN版本:问题 1 在 GE ≥9.0 生效路径触发;问题 2 在 9.x 编译的算子包部署到 8.5.0/9.0.x 运行时时触发

三、重现步骤 (可选)

  1. regbase 平台 + GE ≥9.0 运行时,构建含 DT_STRING 输入 ConcatV2 节点的图(如 string 张量拼接场景)
  2. 编译 → 引擎选择阶段报 ConcatD 不支持 DT_STRING,编译失败
  3. (问题 2)将 9.x toolkit 编译的算子包部署到 8.5.0 GE 运行时环境 → dlopen 加载 .so 报 undefined symbol

四、预期结果 (可选)

  • DT_STRING 等白名单外 dtype 的 Concat/ConcatV2/ConcatV2D 不被融合,保留原算子走 AICPU(与 canndev 行为一致)
  • 同一算子包在 8.5.0/9.0.x/9.1+ 运行时均可安全加载;9.1+ 走带可融合检查与融合结果上报的 Replace,9.0.x 降级普通重载

💡 备注(选填)

likedislike
Zzhanglei842Collaborators
17 days ago Added label: bug-report
Zzhanglei842Collaborators
17 days ago Change title to "[Bug-Report|缺陷反馈]:ConcatToConcatDFusionPass 未校验dtype且不兼容旧版GE运行时,导致编译失败/算子包加载失败", originally titled "[Bug-Report|缺陷反馈]:".
Zzhanglei842Collaborators
17 days ago Associated pull request
CANN-robotCANN-robotCollaborators
17 days ago Close issue
CANN-robotCANN-robotCollaborators
17 days ago Added label: resolved