| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix: 修复ONNX If分支捕获cond时父节点输入去重导致GraphLint索引越界 Co-authored-by: chenqian1365<chenqian2@huawei.com> # message auto-generated for no-merge-commit merge: !4860 merge fix/onnx-if-cond-slot-dedup into develop fix: 修复ONNX If分支捕获cond时父节点输入去重导致GraphLint索引越界 Created-by: chenqian1365 Commit-by: chenqian1365 Merged-by: cann-robot Description: # Pull Request ## 描述 PR#4663 引入回归: IfSubgraphAdapter::AddInputForParentNode 为父 If 节点补齐闭包捕获输入时,按父节点已有 input 名字做去重,input[0](cond 槽位)会被误去重。当分支子图闭包捕获 cond 时,子图侧追加该输入而父 If 节点侧跳过追加,解析阶段子图 Data 的 parent_index = data_index + 1 越界,编译在 GraphLint 断言失败: text Input index 2 should not be larger than inputs size 2 [FUNC:SetInputRwType][FILE:graph_lint.cc][LINE:46] Failed to mark wrapper node the_if rw_type, input index 2 [FUNC:RefreshParentNodeIfNeed][FILE:graph_lint.cc][LINE:87] 本 PR 修复: - AddInputForParentNode 去重时跳过 input[0](cond 槽位):分支闭包捕获 cond 时父 If 节点同步追加同名输入(适配后 If.input = [cond, cond]),保持子图 input 与父 If 节点 input 的按位置对应关系(canndev if_plugin.cc 的 parent_index = data_index + 1 位置映射) - 适配前对 If 输入数不为 1 的非规范模型打 WARNING(ONNX 规范 If 仅有 1 个输入 cond,见 https://onnx.ai/onnx/operators/onnx__If.html),多余输入按"分支按名字捕获的值"继续转换,不拒绝。旧版解析器可编译 If.input = [cond, x] 等伪传参模型,为防有人使用此类非规范用法、升级后行为退化,仅告警不拦截 ## 变更类型 - [x] 🐛 Bug 修复 - [ ] ✨ 新功能 - [ ] 💄 代码风格更新(格式化,局部变量) - [ ] ♻️ 重构(既不修复错误也不增加功能的代码变动) - [ ] 📦 构建过程或辅助工具的变动 - [ ] 📝 文档内容更新 ## 关联的Issue (无) ## 如何测试 1. 最小复现模型(If(cond),分支子图闭包捕获 cond):修复前 atc 报上述 GraphLint 断言失败,修复后编译成功,结果与 onnxruntime 参照一致 2. 回归验证合法模型(嵌套 If 闭包捕获、图输出透传捕获、分支并集传播等):编译成功 3. 回归验证非规范伪传参模型(If.input=[cond, x] 捕获 x;If.input=[cond, x] 捕获 x+y,旧版均可正常编译):编译成功,并输出非规范输入 WARNING(含节点名与输入数) 4. 单元测试:ctest -R ut_parser 中 *IfSubgraphAdapter* 9 个用例全部通过(PR#4663 原有 6 个 + 新增 3 个:捕获 cond 槽位去重、多输入捕获已有输入、多输入捕获已有+新增输入),覆盖子图 Data 与父 If 节点 input 的位置对应不变式 5. pre-commit 检查全部通过 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 GraphLint 断言本身未改动;对非规范 If 多输入模型不做拒绝,仅 WARNING 记录,避免升级后行为退化;若后续需要严格对齐 ONNX 标准,可通过版本策略或开关逐步收紧。 See merge request: cann/ge!4860 | 4 天前 | |
feat: 接入ONNX Plugin Python bridge到真实ParseParamsFn Co-authored-by: gentle-knight<522025150054@smail.nju.edu.cn> # message auto-generated for no-merge-commit merge: !4455 merge feat/onnx-plugin-python-pr2-bridge into develop feat: 接入ONNX Plugin Python bridge到真实ParseParamsFn Created-by: gentle-knight Commit-by: gentle-knight Merged-by: cann-robot Description: ## 描述 在PR1(#4421 native bindings)基础上,以独立bridge SO完成Python descriptor/registry到parser真实ParseParamsFn的闭环。 PR2新增内容: - 新增 ge_python_onnx_plugin_bridge独立SO,复用现有loader/registry/OpRegistrationTbe/OpRegistry,不新增第二套注册表或扫描器 - PrepareBeforeParse在C++插件初始化成功后、ASCEND_CUSTOM_OPP_PATH非空时按需dlopen bridge - bridge以py::cast(NodeProto*, reference)借用parser已有对象构造native OnnxNode,不取得所有权 - ge::Operator地址作为ctypes借用句柄传入Python callback,callback结束后失效 - callback返回None映射SUCCESS,返回非None映射PARAM_INVALID,Python异常映射FAILED - OpRegistry使用已有完整(target, origin_type)键检查保持C++优先,Python不覆盖已有C++注册 - 删除Python bridge UT中的SimpleNamespace测试接缝,改为C++ parser UT直接构造真实ge::onnx::NodeProto - 新增成功/异常/非None返回/C++优先四类场景测试 不包含ParseParamsByOperatorFn、ParseOpToGraphFn、ParseSubgraph、ES子图构图、Tensor/TensorDesc/DataType、通用PluginContext。 ## 变更类型 - [x] ✨ 新功能 ## 关联的Issue 依赖PR1 #4421(native bindings),当前为stacked PR。 ## 如何测试 1. 编译ge_python_onnx_plugin_bridge和fmk_onnx_parser目标 2. 编译ut_parser并运行OnnxPythonPluginBridge测试用例 3. 设置ASCEND_CUSTOM_OPP_PATH指向测试Python插件,验证真实ONNX parser闭环 ## 核对清单 - [x] 我的代码遵循了项目的代码风格 - [x] 我已对代码进行了自测 - [x] 我已更新了相关的文档 - [x] 我在标题中使用了合适的类型标签(如:feat:, fix:) - [x] 我已经详细阅读了贡献指南(CONTRIBUTING.md),并遵守了其中的所有规定,包括但不限于commit message的格式、无效commit的合并等 ## 其他信息 - 工作代码约221行,测试代码约168行,未超出PR2预算 - bridge为独立SO,不进入graph_metadef,不向Python暴露protobuf指针 - 未修改生产native OnnxNode模块,未增加测试工厂 - 本地编译通过:ge_python_onnx_plugin_bridge、fmk_onnx_parser、ut_parser - pre-commit全部通过 See merge request: cann/ge!4455 | 21 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 4 天前 | ||
| 21 天前 |