已关闭
[Bug-Report|缺陷反馈]: 二进制配置合并未按字面处理等价目录路径 #6497
tianjun创建于  9 天前关闭于  1 天前
tianjun
9 天前 创建

Describe the current behavior / 问题描述

scripts/kernel/binary_script/merge_ops_config_json.py 未规范化输入目录,也将目录字符直接用于 glob。等价的 op、op/、op//、./op/./ 会生成不同的输出名;末尾分隔符会写出 _binary.json,重复使用不同写法还可能重新读入先前的合并产物。若构建父目录包含方括号(例如 build[1]/op),glob 会读取邻近 build1/op 下的配置,甚至合并错误的 op_type。
实际 cmake/gen_ops_info.cmake 调用此工具为生成目录合并二进制配置,后续期望目录名对应的 *_binary.json。

Environment / 环境信息

master ae873b119fb5499c41a6893f920171551fb0a197;DevEnvC_mmdv8 Linux aarch64,Python 3.11.4。验证限于真实脚本的 Host CLI,没有执行 CANN 编译或 NPU 算子测试。

Steps to reproduce the issue / 重现步骤

在 op/ 中写入两份带相同 op_type 的配置,执行:

python3 scripts/kernel/binary_script/merge_ops_config_json.py op/

应生成 op/op_binary.json,原实现却生成 op/_binary.json。
第二个复现:分别建立 build[1]/op 和 build1/op,两处写入不同 op_type 的 JSON,以 build[1]/op 为参数运行,原实现读取后者。
补丁附带回归:

python3 -m unittest discover -s scripts/kernel/binary_script/tests -p test_merge_ops_config_json.py -v

Describe the expected behavior / 预期结果

等价目录写法产生同名产物并排除已合并文件;目录名中的 glob 元字符按字面匹配。保持 op_type 冲突报错、元数据文件跳过及配置条目内容不变。

修复前 6 个测试方法中的 9 个场景断言失败,3 个控制场景通过;方括号目录得到 Other 而非 Example,末尾分隔符生成 _binary.json。
修复后 6 个方法、12 个场景均通过(执行 16 次真实 CLI);原生 pre-commit 的全部适用检查(含 Ruff、OAT)通过,git diff --check 通过。

Special notes / 备注

已检索完整 all-state 清单:6,304 个 Issue、11,727 个 PR,并审阅相关历史贡献;Issue #2704 / PR #4563 是另一包配置合并器迁移,Issue #6371 是空任务分片除零,与本项原因和修改文件不同。

likedislike
tianjun
9 天前 评论:

/assign @Ethan_Zou

likedislike
CANN-robotCANN-robot成员
9 天前 将 Ethan_Zou 设为负责人
Ttianjun
9 天前 关联了pull request:fix: normalize and escape binary configuration directory paths
CANN-robotCANN-robot成员
1 天前 关闭了 issue
CANN-robotCANN-robot成员
1 天前 添加了label:resolved