TTK(Ops Test Tool Kit)是CANN算子库提供的全链路、自动化、批量化算子测试框架,帮助开发者快速完成算子批量功能验证、性能评估以及Golden值比对,提升算子开发质量和效率。
| Files | Last commit | Last update |
|---|---|---|
feat(onnx): 实现onnx通路 Co-authored-by: FishPotatoChen<chenqianyu1@h-partners.com> # message auto-generated for no-merge-commit merge: !526 merge onnx_dev into master feat(onnx): 实现onnx通路 Created-by: FishPotatoChen Commit-by: FishPotatoChen Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: E2E 模式新增 **onnx 域(ONNX 通路)**:CSV 用例以 api_name = onnx.<OpType> 声明单算子,TTK 自动组装单算子 ONNX 模型,经 atc 离线编译为 .om 后在 NPU 上经 aclmdl 执行,补齐「ONNX 模型解析 → atc ONNX 插件转换 → 离线模型装载执行」引擎层链路的测试覆盖。至此 TTK 四种测试模式对应的昇腾技术栈层级中,引擎层在 GEIR / ACLNN 之外补上 ONNX(atc→om)一列。 核心设计与能力: - **执行链路**:CSV (onnx.<OpType>) → 框架检测路由 OnnxAdapter → 参数解析(onnx.defs schema 单源,环境注册表即权威)→ 输入生成(numpy 直通,无框架 tensor)→ model_builder 组装单算子 ModelProto → atc 离线编译 .om → NPU aclmdl 执行 → 复用既有比对 / dump / 结果列体系 - **同构参照 Golden**:Golden 腿与被测腿共用同一份组模产物(同一模型字节),由 CPU 侧 onnx ReferenceEvaluator 参照计算 - **无框架依赖**:onnx worker 进程仅预载 numpy + onnx,无需安装 torch / tensorflow / torch_npu(子树零 torch/tf import,由 test_structure 钉住) - **om 会话缓存**:结构键(算子+输入形态+属性+soc+dev_id)→ OmSession 进程级 LRU;「数组身份 → 内容指纹」双层判定防脏命中;缓存键含 atc ONNX 插件指纹,CANN 升级/重装后自动失效 - **用例面**:复用 E2E 全量 23 列 CSV 字段;支持 Variadic 输入/输出、Optional 输入尾部省略、6 种属性类型(INT/FLOAT/STRING/INTS/FLOATS/STRINGS);不支持项(动态 shape、动态输出元数、布局列、控制流算子等)均在解析/建模期显式报错,不静默降级 - **配套重构/新增**:ttk/utilities/dtypes.py 重构并新增 ONNX_DTYPE_MAP 全量 dtype 映射;新增 ttk/utilities/mx_quant.py(BFP16/FP16/FP32 → MX dtype 量化,纯算法模块) - om 恒为静态图(eager ≡ 静态图),不支持动态 shape 与 aclgraph 模式 主要新增模块:ttk/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime)、ttk/core_modules/common/backend/onnx_backend.py、ttk/utilities/mx_quant.py;示例用例 examples/case_store/e2e/onnx_cases.csv。 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes [#433](https://gitcode.com/cann/ops-test-kit/issues/433) ### 希望检视人员了解: - onnx 域与 torch/tf 域互斥:同一 CSV 不得混域(框架检测拒绝),按域分文件存放 - 环境约束:onnx ≥ 1.13(Golden 依赖 ReferenceEvaluator)且 onnx.defs.onnx_opset_version() ≤ 18(对齐 CANN atc ONNX 插件注册上限,CANN 9.2.x 配套 onnx 1.13.x);onnx 域额外依赖 CANN 的 atc 与 libascendcl - --backend cpu 不适用于 onnx 域被测腿(om 执行必须经 NPU),CPU 侧仅用于 Golden 与输入生成 - om 编译缓存放于仓库根 onnx_cache/<op_type>/,已加入 .gitignore - NonZero / TopK 等输出 shape 数据依赖的算子属通路边界(ONNX_DYNAMIC_OUTPUT_UNSUPPORTED),建议改用 kernel/aclnn 模式覆盖 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - **单元测试**(本仓库全量新增/回归,均通过): - tests/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime / routing / golden / e2e 冒烟)+ dtypes + mx_quant + structure:189 passed, 2 skipped(skip 为环境缺 tensorflow / en-dtypes,与本改动无关) - tests/core_modules/framework_api/ 全量回归 + tests/core_modules/common/test_instance_base.py:523 passed, 32 skipped(skip 为非基线 torch 版本钉死项与缺包项,与本改动无关) - **真机执行**:Ascend910_9362 双卡环境,python3 -m ttk e2e -i examples/case_store/e2e/onnx_cases.csv,6/6 用例全部 PASS(100%),覆盖 Add/Concat/Split/Gemm/Transpose/MatMul(bf16) 等 f32/f16/bf16/f64 dtype ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - 新增 docs/Operator_Test_Guides/ONNX_Test_Guide.md(ONNX 算子测试指南:环境准备、用例编写、关键约定、属性类型速查、FAQ) - 更新 README.md / README-EN.md(通路架构图、依赖说明、onnx 域快速上手命令、测试通路表) - 更新 AGENTS.md / CLAUDE.md(架构层级与技能索引补充 onnx 域) - 更新 docs/FAQ/faq_guide.md(新增「ONNX 通路问题」章节 5 条 FAQ) - 更新 docs/Operator_Test_Guides/E2E_Case_Writing.md、E2E_Test_Guide.md 及 docs/ 下相关文档(Task_Execution / Test_Case_Generation / Dump_Debug / Performance_Testing / XPU_Cross_Check / NPUSim / Offline_Data_Prepare / Deterministic_Compute) - 更新 .claude/skills/ 四个技能文档(run-test / write-case / write-plugin / diagnose) - 更新 examples/case_store/e2e/README.md 并新增 examples/case_store/e2e/onnx_cases.csv ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!526 | 13 days ago | |
代码框架重构 Co-authored-by: wangrui<wangrui124@huawei.com> # message auto-generated for no-merge-commit merge: !393 merge master into master 代码框架重构 Created-by: wangrui_ Commit-by: wangrui Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [ ] 否 [x] 是 __1. AI Agent 平台: opencode(CLI 编程助手) __2. AI 模型: GLM(CANNBot/glm-5.3) __3. Prompt上下文 : 本仓 AGENTS.md + TTK 重构任务卡。AI 辅助范围:upstream 同步冲突解决、主线修复移植(bind_params)、测试治理 review、文档链接核查、本 PR 描述整理 ### PR功能描述 / 为什么需要这个合入**: TTK 代码框架重构(15 笔提交、583 文件,按主题组织,可分批 reviewing),核心目标:**分层归位、公开面收口、测试体系治理、主线同步**。 **一、目录与分层重组** - common 层域建设(W4-W15):utilities/switches/process/dump/comparison/result/plugin/testcase/backend/xpu/profiler/instance 归位为 ttk/core_modules/common/* 单份契约代码 - 四通路目录重组与清场(W16-W20):kernel/aclnn/framework_api/geir 换基,tests/ 目录树与 ttk/ 同构 **二、公开面收口** - scripts/common_public_surface.json 公开面名单 + pre-commit「ttk refactor guard」守护 - kernel/aclnn 公开面收口;mc2→hccl 改名;CLI 参数面治理(args_to_switches 四通路必经收口、--core-limit 统一解析) **三、模型与共性件上提** - Tensor 槽模型落地(声明/运行时槽位统一)、输入/golden 共性件上提 - 动态槽(-1)物化、参数级可变性上提、batch 一致性框架化、E2E 框架子目录化/编排步骤化 - W21-W24 扩展:设备状态泛化、E2E backward 一期、XPU 三方 golden、ttk-prof2case 技能(profiling 报告转用例) **四、GEIR/E2E 专项深化** - GEIR:manual-data 落盘口径统一与时序对齐、轮间一致性 MD5、模板 Data/Const 防重定义宏守卫 - E2E:-b/golden/mutability/xpu/open 后置系列改造、forkserver 预载框架感知修复(torch/TF libstdc++ 弱符号冲突)、eager 逐轮可变槽载体下沉 Backend.stage_mutable_rounds **五、主线同步(upstream/master e3fb50a + 9e74ae6)** - rebase 解决 6 处冲突(含 3 处文件迁移形态的 modify/delete 冲突、1 处双方同构修复) - **语义缺口补齐**:主线 e3fb50a bind_params 前序可选参数缺省占位修复(防后续参数左移错位——alpha 落 gamma 槽)移植至重构后 ttk/core_modules/common/xpu.py 单份契约 + TestBindParams 回归测试 - geir 模板 Data/Const OPS_PROTO_DEF_* 防重定义宏守卫(9e74ae6 同构合入) **六、测试体系治理(tests/common + utilities/remote/cli/config)** - 错位用例归位:framework_api/kernel 域(test_simple_param_extractor、test_super_kernel 拆分、test_xpu_perf_collect 拆分、test_e2e_simulator_backend) - 私有接口直调转公开入口 30+ 用例:compare_with_hooks / args_to_switches / TestcaseBase.validate / get_comparison().compare() - 重复与不可达用例清理、命名修复(testgenerate/testformat 两处缺下划线) - 白盒保留项均有归类(调度状态机/规则单元/parity 对拍/pins 守卫,公开路径需进程编排或活服务端) ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes #305 ### 希望检视人员了解: - 大 PR(583 文件),建议按提交主题分批 reviewing(15 笔提交各自独立成篇) - review 收尾阶段 3 笔已 squash 为单笔(含主线同步与测试治理),历史已 force-push 整理 - 重构设计文档(TTK_Refactoring_Design 等 20 篇)按计划本地化,未随 PR 入库;行为基线见 scripts/refactor_baseline.json ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - 全量单测:**2731 passed / 3 skipped(环境相关)/ 1 xfailed** - pre-commit 全绿:ruff check + ruff format + ttk refactor guard + codespell + OAT 合规检查 - 专项验证:主线 bind_params 错位场景实测(省略前序可选参数 gamma 时槽位对齐、无左移) ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - README/README-EN、docs/ 40+ 篇随代码同步(Operator_Test_Guides/NPUSim/Task_Execution/Test_Case_Generation/FAQ 等) - 文档命名英文化(msdebug适配方法指南.md → msdebug_guide.md);全仓 markdown 链接有效性核查(79 文件、含外部 URL 逐个验证,0 失效) - .claude/skills 五技能文档(含新增 ttk-prof2case:profiling 报告转用例) ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码框架重构(分层归位/公开面收口/测试治理 + 主线同步) See merge request: cann/ops-test-kit!393 | 29 days ago | |
feat: registry_accessor + error_manager_cleaner + cext_loader 公共能力 Co-authored-by: dengguojie<dengguojie@huawei.com> # message auto-generated for no-merge-commit merge: !6 merge master into master feat: registry_accessor + error_manager_cleaner + cext_loader 公共能力 Created-by: dengguojie Commit-by: dengguojie Merged-by: cann-robot Description: ## 描述 1. cext_loader: 提取 C 扩展在线编译+加载公共逻辑(per-target flock + atomic marker) 2. error_manager_cleaner: 清理 ErrorManager 残留错误,防止跨用例污染 tiling 判定 3. op_registry_accessor: split API(Find + Invoke gen_simplifiedkey),支持 simplifiedKeyMode=2 算子 4. platform: 兼容新旧 CANN 目录结构(vendors/ built-in/op_impl vs op_impl/built-in),fallback 无 config.ini 时走 custom 路径 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!6 | 5 months ago | |
feat(onnx): 实现onnx通路 Co-authored-by: FishPotatoChen<chenqianyu1@h-partners.com> # message auto-generated for no-merge-commit merge: !526 merge onnx_dev into master feat(onnx): 实现onnx通路 Created-by: FishPotatoChen Commit-by: FishPotatoChen Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: E2E 模式新增 **onnx 域(ONNX 通路)**:CSV 用例以 api_name = onnx.<OpType> 声明单算子,TTK 自动组装单算子 ONNX 模型,经 atc 离线编译为 .om 后在 NPU 上经 aclmdl 执行,补齐「ONNX 模型解析 → atc ONNX 插件转换 → 离线模型装载执行」引擎层链路的测试覆盖。至此 TTK 四种测试模式对应的昇腾技术栈层级中,引擎层在 GEIR / ACLNN 之外补上 ONNX(atc→om)一列。 核心设计与能力: - **执行链路**:CSV (onnx.<OpType>) → 框架检测路由 OnnxAdapter → 参数解析(onnx.defs schema 单源,环境注册表即权威)→ 输入生成(numpy 直通,无框架 tensor)→ model_builder 组装单算子 ModelProto → atc 离线编译 .om → NPU aclmdl 执行 → 复用既有比对 / dump / 结果列体系 - **同构参照 Golden**:Golden 腿与被测腿共用同一份组模产物(同一模型字节),由 CPU 侧 onnx ReferenceEvaluator 参照计算 - **无框架依赖**:onnx worker 进程仅预载 numpy + onnx,无需安装 torch / tensorflow / torch_npu(子树零 torch/tf import,由 test_structure 钉住) - **om 会话缓存**:结构键(算子+输入形态+属性+soc+dev_id)→ OmSession 进程级 LRU;「数组身份 → 内容指纹」双层判定防脏命中;缓存键含 atc ONNX 插件指纹,CANN 升级/重装后自动失效 - **用例面**:复用 E2E 全量 23 列 CSV 字段;支持 Variadic 输入/输出、Optional 输入尾部省略、6 种属性类型(INT/FLOAT/STRING/INTS/FLOATS/STRINGS);不支持项(动态 shape、动态输出元数、布局列、控制流算子等)均在解析/建模期显式报错,不静默降级 - **配套重构/新增**:ttk/utilities/dtypes.py 重构并新增 ONNX_DTYPE_MAP 全量 dtype 映射;新增 ttk/utilities/mx_quant.py(BFP16/FP16/FP32 → MX dtype 量化,纯算法模块) - om 恒为静态图(eager ≡ 静态图),不支持动态 shape 与 aclgraph 模式 主要新增模块:ttk/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime)、ttk/core_modules/common/backend/onnx_backend.py、ttk/utilities/mx_quant.py;示例用例 examples/case_store/e2e/onnx_cases.csv。 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes [#433](https://gitcode.com/cann/ops-test-kit/issues/433) ### 希望检视人员了解: - onnx 域与 torch/tf 域互斥:同一 CSV 不得混域(框架检测拒绝),按域分文件存放 - 环境约束:onnx ≥ 1.13(Golden 依赖 ReferenceEvaluator)且 onnx.defs.onnx_opset_version() ≤ 18(对齐 CANN atc ONNX 插件注册上限,CANN 9.2.x 配套 onnx 1.13.x);onnx 域额外依赖 CANN 的 atc 与 libascendcl - --backend cpu 不适用于 onnx 域被测腿(om 执行必须经 NPU),CPU 侧仅用于 Golden 与输入生成 - om 编译缓存放于仓库根 onnx_cache/<op_type>/,已加入 .gitignore - NonZero / TopK 等输出 shape 数据依赖的算子属通路边界(ONNX_DYNAMIC_OUTPUT_UNSUPPORTED),建议改用 kernel/aclnn 模式覆盖 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - **单元测试**(本仓库全量新增/回归,均通过): - tests/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime / routing / golden / e2e 冒烟)+ dtypes + mx_quant + structure:189 passed, 2 skipped(skip 为环境缺 tensorflow / en-dtypes,与本改动无关) - tests/core_modules/framework_api/ 全量回归 + tests/core_modules/common/test_instance_base.py:523 passed, 32 skipped(skip 为非基线 torch 版本钉死项与缺包项,与本改动无关) - **真机执行**:Ascend910_9362 双卡环境,python3 -m ttk e2e -i examples/case_store/e2e/onnx_cases.csv,6/6 用例全部 PASS(100%),覆盖 Add/Concat/Split/Gemm/Transpose/MatMul(bf16) 等 f32/f16/bf16/f64 dtype ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - 新增 docs/Operator_Test_Guides/ONNX_Test_Guide.md(ONNX 算子测试指南:环境准备、用例编写、关键约定、属性类型速查、FAQ) - 更新 README.md / README-EN.md(通路架构图、依赖说明、onnx 域快速上手命令、测试通路表) - 更新 AGENTS.md / CLAUDE.md(架构层级与技能索引补充 onnx 域) - 更新 docs/FAQ/faq_guide.md(新增「ONNX 通路问题」章节 5 条 FAQ) - 更新 docs/Operator_Test_Guides/E2E_Case_Writing.md、E2E_Test_Guide.md 及 docs/ 下相关文档(Task_Execution / Test_Case_Generation / Dump_Debug / Performance_Testing / XPU_Cross_Check / NPUSim / Offline_Data_Prepare / Deterministic_Compute) - 更新 .claude/skills/ 四个技能文档(run-test / write-case / write-plugin / diagnose) - 更新 examples/case_store/e2e/README.md 并新增 examples/case_store/e2e/onnx_cases.csv ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!526 | 13 days ago | |
feat(onnx): 实现onnx通路 Co-authored-by: FishPotatoChen<chenqianyu1@h-partners.com> # message auto-generated for no-merge-commit merge: !526 merge onnx_dev into master feat(onnx): 实现onnx通路 Created-by: FishPotatoChen Commit-by: FishPotatoChen Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: E2E 模式新增 **onnx 域(ONNX 通路)**:CSV 用例以 api_name = onnx.<OpType> 声明单算子,TTK 自动组装单算子 ONNX 模型,经 atc 离线编译为 .om 后在 NPU 上经 aclmdl 执行,补齐「ONNX 模型解析 → atc ONNX 插件转换 → 离线模型装载执行」引擎层链路的测试覆盖。至此 TTK 四种测试模式对应的昇腾技术栈层级中,引擎层在 GEIR / ACLNN 之外补上 ONNX(atc→om)一列。 核心设计与能力: - **执行链路**:CSV (onnx.<OpType>) → 框架检测路由 OnnxAdapter → 参数解析(onnx.defs schema 单源,环境注册表即权威)→ 输入生成(numpy 直通,无框架 tensor)→ model_builder 组装单算子 ModelProto → atc 离线编译 .om → NPU aclmdl 执行 → 复用既有比对 / dump / 结果列体系 - **同构参照 Golden**:Golden 腿与被测腿共用同一份组模产物(同一模型字节),由 CPU 侧 onnx ReferenceEvaluator 参照计算 - **无框架依赖**:onnx worker 进程仅预载 numpy + onnx,无需安装 torch / tensorflow / torch_npu(子树零 torch/tf import,由 test_structure 钉住) - **om 会话缓存**:结构键(算子+输入形态+属性+soc+dev_id)→ OmSession 进程级 LRU;「数组身份 → 内容指纹」双层判定防脏命中;缓存键含 atc ONNX 插件指纹,CANN 升级/重装后自动失效 - **用例面**:复用 E2E 全量 23 列 CSV 字段;支持 Variadic 输入/输出、Optional 输入尾部省略、6 种属性类型(INT/FLOAT/STRING/INTS/FLOATS/STRINGS);不支持项(动态 shape、动态输出元数、布局列、控制流算子等)均在解析/建模期显式报错,不静默降级 - **配套重构/新增**:ttk/utilities/dtypes.py 重构并新增 ONNX_DTYPE_MAP 全量 dtype 映射;新增 ttk/utilities/mx_quant.py(BFP16/FP16/FP32 → MX dtype 量化,纯算法模块) - om 恒为静态图(eager ≡ 静态图),不支持动态 shape 与 aclgraph 模式 主要新增模块:ttk/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime)、ttk/core_modules/common/backend/onnx_backend.py、ttk/utilities/mx_quant.py;示例用例 examples/case_store/e2e/onnx_cases.csv。 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes [#433](https://gitcode.com/cann/ops-test-kit/issues/433) ### 希望检视人员了解: - onnx 域与 torch/tf 域互斥:同一 CSV 不得混域(框架检测拒绝),按域分文件存放 - 环境约束:onnx ≥ 1.13(Golden 依赖 ReferenceEvaluator)且 onnx.defs.onnx_opset_version() ≤ 18(对齐 CANN atc ONNX 插件注册上限,CANN 9.2.x 配套 onnx 1.13.x);onnx 域额外依赖 CANN 的 atc 与 libascendcl - --backend cpu 不适用于 onnx 域被测腿(om 执行必须经 NPU),CPU 侧仅用于 Golden 与输入生成 - om 编译缓存放于仓库根 onnx_cache/<op_type>/,已加入 .gitignore - NonZero / TopK 等输出 shape 数据依赖的算子属通路边界(ONNX_DYNAMIC_OUTPUT_UNSUPPORTED),建议改用 kernel/aclnn 模式覆盖 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - **单元测试**(本仓库全量新增/回归,均通过): - tests/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime / routing / golden / e2e 冒烟)+ dtypes + mx_quant + structure:189 passed, 2 skipped(skip 为环境缺 tensorflow / en-dtypes,与本改动无关) - tests/core_modules/framework_api/ 全量回归 + tests/core_modules/common/test_instance_base.py:523 passed, 32 skipped(skip 为非基线 torch 版本钉死项与缺包项,与本改动无关) - **真机执行**:Ascend910_9362 双卡环境,python3 -m ttk e2e -i examples/case_store/e2e/onnx_cases.csv,6/6 用例全部 PASS(100%),覆盖 Add/Concat/Split/Gemm/Transpose/MatMul(bf16) 等 f32/f16/bf16/f64 dtype ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - 新增 docs/Operator_Test_Guides/ONNX_Test_Guide.md(ONNX 算子测试指南:环境准备、用例编写、关键约定、属性类型速查、FAQ) - 更新 README.md / README-EN.md(通路架构图、依赖说明、onnx 域快速上手命令、测试通路表) - 更新 AGENTS.md / CLAUDE.md(架构层级与技能索引补充 onnx 域) - 更新 docs/FAQ/faq_guide.md(新增「ONNX 通路问题」章节 5 条 FAQ) - 更新 docs/Operator_Test_Guides/E2E_Case_Writing.md、E2E_Test_Guide.md 及 docs/ 下相关文档(Task_Execution / Test_Case_Generation / Dump_Debug / Performance_Testing / XPU_Cross_Check / NPUSim / Offline_Data_Prepare / Deterministic_Compute) - 更新 .claude/skills/ 四个技能文档(run-test / write-case / write-plugin / diagnose) - 更新 examples/case_store/e2e/README.md 并新增 examples/case_store/e2e/onnx_cases.csv ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!526 | 13 days ago | |
feat(onnx): 实现onnx通路 Co-authored-by: FishPotatoChen<chenqianyu1@h-partners.com> # message auto-generated for no-merge-commit merge: !526 merge onnx_dev into master feat(onnx): 实现onnx通路 Created-by: FishPotatoChen Commit-by: FishPotatoChen Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: E2E 模式新增 **onnx 域(ONNX 通路)**:CSV 用例以 api_name = onnx.<OpType> 声明单算子,TTK 自动组装单算子 ONNX 模型,经 atc 离线编译为 .om 后在 NPU 上经 aclmdl 执行,补齐「ONNX 模型解析 → atc ONNX 插件转换 → 离线模型装载执行」引擎层链路的测试覆盖。至此 TTK 四种测试模式对应的昇腾技术栈层级中,引擎层在 GEIR / ACLNN 之外补上 ONNX(atc→om)一列。 核心设计与能力: - **执行链路**:CSV (onnx.<OpType>) → 框架检测路由 OnnxAdapter → 参数解析(onnx.defs schema 单源,环境注册表即权威)→ 输入生成(numpy 直通,无框架 tensor)→ model_builder 组装单算子 ModelProto → atc 离线编译 .om → NPU aclmdl 执行 → 复用既有比对 / dump / 结果列体系 - **同构参照 Golden**:Golden 腿与被测腿共用同一份组模产物(同一模型字节),由 CPU 侧 onnx ReferenceEvaluator 参照计算 - **无框架依赖**:onnx worker 进程仅预载 numpy + onnx,无需安装 torch / tensorflow / torch_npu(子树零 torch/tf import,由 test_structure 钉住) - **om 会话缓存**:结构键(算子+输入形态+属性+soc+dev_id)→ OmSession 进程级 LRU;「数组身份 → 内容指纹」双层判定防脏命中;缓存键含 atc ONNX 插件指纹,CANN 升级/重装后自动失效 - **用例面**:复用 E2E 全量 23 列 CSV 字段;支持 Variadic 输入/输出、Optional 输入尾部省略、6 种属性类型(INT/FLOAT/STRING/INTS/FLOATS/STRINGS);不支持项(动态 shape、动态输出元数、布局列、控制流算子等)均在解析/建模期显式报错,不静默降级 - **配套重构/新增**:ttk/utilities/dtypes.py 重构并新增 ONNX_DTYPE_MAP 全量 dtype 映射;新增 ttk/utilities/mx_quant.py(BFP16/FP16/FP32 → MX dtype 量化,纯算法模块) - om 恒为静态图(eager ≡ 静态图),不支持动态 shape 与 aclgraph 模式 主要新增模块:ttk/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime)、ttk/core_modules/common/backend/onnx_backend.py、ttk/utilities/mx_quant.py;示例用例 examples/case_store/e2e/onnx_cases.csv。 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes [#433](https://gitcode.com/cann/ops-test-kit/issues/433) ### 希望检视人员了解: - onnx 域与 torch/tf 域互斥:同一 CSV 不得混域(框架检测拒绝),按域分文件存放 - 环境约束:onnx ≥ 1.13(Golden 依赖 ReferenceEvaluator)且 onnx.defs.onnx_opset_version() ≤ 18(对齐 CANN atc ONNX 插件注册上限,CANN 9.2.x 配套 onnx 1.13.x);onnx 域额外依赖 CANN 的 atc 与 libascendcl - --backend cpu 不适用于 onnx 域被测腿(om 执行必须经 NPU),CPU 侧仅用于 Golden 与输入生成 - om 编译缓存放于仓库根 onnx_cache/<op_type>/,已加入 .gitignore - NonZero / TopK 等输出 shape 数据依赖的算子属通路边界(ONNX_DYNAMIC_OUTPUT_UNSUPPORTED),建议改用 kernel/aclnn 模式覆盖 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - **单元测试**(本仓库全量新增/回归,均通过): - tests/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime / routing / golden / e2e 冒烟)+ dtypes + mx_quant + structure:189 passed, 2 skipped(skip 为环境缺 tensorflow / en-dtypes,与本改动无关) - tests/core_modules/framework_api/ 全量回归 + tests/core_modules/common/test_instance_base.py:523 passed, 32 skipped(skip 为非基线 torch 版本钉死项与缺包项,与本改动无关) - **真机执行**:Ascend910_9362 双卡环境,python3 -m ttk e2e -i examples/case_store/e2e/onnx_cases.csv,6/6 用例全部 PASS(100%),覆盖 Add/Concat/Split/Gemm/Transpose/MatMul(bf16) 等 f32/f16/bf16/f64 dtype ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - 新增 docs/Operator_Test_Guides/ONNX_Test_Guide.md(ONNX 算子测试指南:环境准备、用例编写、关键约定、属性类型速查、FAQ) - 更新 README.md / README-EN.md(通路架构图、依赖说明、onnx 域快速上手命令、测试通路表) - 更新 AGENTS.md / CLAUDE.md(架构层级与技能索引补充 onnx 域) - 更新 docs/FAQ/faq_guide.md(新增「ONNX 通路问题」章节 5 条 FAQ) - 更新 docs/Operator_Test_Guides/E2E_Case_Writing.md、E2E_Test_Guide.md 及 docs/ 下相关文档(Task_Execution / Test_Case_Generation / Dump_Debug / Performance_Testing / XPU_Cross_Check / NPUSim / Offline_Data_Prepare / Deterministic_Compute) - 更新 .claude/skills/ 四个技能文档(run-test / write-case / write-plugin / diagnose) - 更新 examples/case_store/e2e/README.md 并新增 examples/case_store/e2e/onnx_cases.csv ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!526 | 13 days ago | |
feat(onnx): 实现onnx通路 Co-authored-by: FishPotatoChen<chenqianyu1@h-partners.com> # message auto-generated for no-merge-commit merge: !526 merge onnx_dev into master feat(onnx): 实现onnx通路 Created-by: FishPotatoChen Commit-by: FishPotatoChen Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: E2E 模式新增 **onnx 域(ONNX 通路)**:CSV 用例以 api_name = onnx.<OpType> 声明单算子,TTK 自动组装单算子 ONNX 模型,经 atc 离线编译为 .om 后在 NPU 上经 aclmdl 执行,补齐「ONNX 模型解析 → atc ONNX 插件转换 → 离线模型装载执行」引擎层链路的测试覆盖。至此 TTK 四种测试模式对应的昇腾技术栈层级中,引擎层在 GEIR / ACLNN 之外补上 ONNX(atc→om)一列。 核心设计与能力: - **执行链路**:CSV (onnx.<OpType>) → 框架检测路由 OnnxAdapter → 参数解析(onnx.defs schema 单源,环境注册表即权威)→ 输入生成(numpy 直通,无框架 tensor)→ model_builder 组装单算子 ModelProto → atc 离线编译 .om → NPU aclmdl 执行 → 复用既有比对 / dump / 结果列体系 - **同构参照 Golden**:Golden 腿与被测腿共用同一份组模产物(同一模型字节),由 CPU 侧 onnx ReferenceEvaluator 参照计算 - **无框架依赖**:onnx worker 进程仅预载 numpy + onnx,无需安装 torch / tensorflow / torch_npu(子树零 torch/tf import,由 test_structure 钉住) - **om 会话缓存**:结构键(算子+输入形态+属性+soc+dev_id)→ OmSession 进程级 LRU;「数组身份 → 内容指纹」双层判定防脏命中;缓存键含 atc ONNX 插件指纹,CANN 升级/重装后自动失效 - **用例面**:复用 E2E 全量 23 列 CSV 字段;支持 Variadic 输入/输出、Optional 输入尾部省略、6 种属性类型(INT/FLOAT/STRING/INTS/FLOATS/STRINGS);不支持项(动态 shape、动态输出元数、布局列、控制流算子等)均在解析/建模期显式报错,不静默降级 - **配套重构/新增**:ttk/utilities/dtypes.py 重构并新增 ONNX_DTYPE_MAP 全量 dtype 映射;新增 ttk/utilities/mx_quant.py(BFP16/FP16/FP32 → MX dtype 量化,纯算法模块) - om 恒为静态图(eager ≡ 静态图),不支持动态 shape 与 aclgraph 模式 主要新增模块:ttk/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime)、ttk/core_modules/common/backend/onnx_backend.py、ttk/utilities/mx_quant.py;示例用例 examples/case_store/e2e/onnx_cases.csv。 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes [#433](https://gitcode.com/cann/ops-test-kit/issues/433) ### 希望检视人员了解: - onnx 域与 torch/tf 域互斥:同一 CSV 不得混域(框架检测拒绝),按域分文件存放 - 环境约束:onnx ≥ 1.13(Golden 依赖 ReferenceEvaluator)且 onnx.defs.onnx_opset_version() ≤ 18(对齐 CANN atc ONNX 插件注册上限,CANN 9.2.x 配套 onnx 1.13.x);onnx 域额外依赖 CANN 的 atc 与 libascendcl - --backend cpu 不适用于 onnx 域被测腿(om 执行必须经 NPU),CPU 侧仅用于 Golden 与输入生成 - om 编译缓存放于仓库根 onnx_cache/<op_type>/,已加入 .gitignore - NonZero / TopK 等输出 shape 数据依赖的算子属通路边界(ONNX_DYNAMIC_OUTPUT_UNSUPPORTED),建议改用 kernel/aclnn 模式覆盖 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - **单元测试**(本仓库全量新增/回归,均通过): - tests/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime / routing / golden / e2e 冒烟)+ dtypes + mx_quant + structure:189 passed, 2 skipped(skip 为环境缺 tensorflow / en-dtypes,与本改动无关) - tests/core_modules/framework_api/ 全量回归 + tests/core_modules/common/test_instance_base.py:523 passed, 32 skipped(skip 为非基线 torch 版本钉死项与缺包项,与本改动无关) - **真机执行**:Ascend910_9362 双卡环境,python3 -m ttk e2e -i examples/case_store/e2e/onnx_cases.csv,6/6 用例全部 PASS(100%),覆盖 Add/Concat/Split/Gemm/Transpose/MatMul(bf16) 等 f32/f16/bf16/f64 dtype ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - 新增 docs/Operator_Test_Guides/ONNX_Test_Guide.md(ONNX 算子测试指南:环境准备、用例编写、关键约定、属性类型速查、FAQ) - 更新 README.md / README-EN.md(通路架构图、依赖说明、onnx 域快速上手命令、测试通路表) - 更新 AGENTS.md / CLAUDE.md(架构层级与技能索引补充 onnx 域) - 更新 docs/FAQ/faq_guide.md(新增「ONNX 通路问题」章节 5 条 FAQ) - 更新 docs/Operator_Test_Guides/E2E_Case_Writing.md、E2E_Test_Guide.md 及 docs/ 下相关文档(Task_Execution / Test_Case_Generation / Dump_Debug / Performance_Testing / XPU_Cross_Check / NPUSim / Offline_Data_Prepare / Deterministic_Compute) - 更新 .claude/skills/ 四个技能文档(run-test / write-case / write-plugin / diagnose) - 更新 examples/case_store/e2e/README.md 并新增 examples/case_store/e2e/onnx_cases.csv ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!526 | 13 days ago | |
fix(framework_api): record actual output shapes for eager/graph comparisons Co-authored-by: wangqi_ai<wangqi195@hisilicon.com> # message auto-generated for no-merge-commit merge: !536 merge fix/framework-api-output-shapes into master fix(framework_api): record actual output shapes for eager/graph comparisons Created-by: wangqi_ai Commit-by: wangqi_ai Merged-by: cann-robot Description: Closes #464 ## 问题 函数式框架 API(torch eager/graph、TF)的用例不声明 output_tensor_indexes,比较通过后结果行 precision_metrics 只有 {standard:'binary_equal', pass:True},与空数组恒等捷径(precheck 都空→PASS)完全同形;下游验证平台无法区分真实比较与空捷径,只能把整条通路保守归为"未度量"(实测 BitwiseAnd torch/tf 通路 38+76+33 例全部 PASS 但比较完成统计为 0)。 ## 修复 - FrameworkApiReturnStructure 新增 output_shapes 列:记录实际产出/被比较张量形状(按输出序,None 表示输出缺失,不构成非空证据) - evaluate_eager_precision / evaluate_graph_precision 在比较入口记录 result_nps / graph_nps 真实形状(首次记录,graph 仅在无记录时补充) ## 验证 - 形状元组经 CSV 序列化后可被 ast.literal_eval 还原并满足下游非空输出判定(round-trip 实测) - tests/core_modules/framework_api 全量 460 passed, 32 skipped(环境相关) ## 关联 对应下游工作流侧消费缺陷:cannbot-test/CannbotHarness 大用例/统计口径问题(见该仓 #146 同期验证记录)。 See merge request: cann/ops-test-kit!536 | 12 days ago | |
feat(onnx): 实现onnx通路 Co-authored-by: FishPotatoChen<chenqianyu1@h-partners.com> # message auto-generated for no-merge-commit merge: !526 merge onnx_dev into master feat(onnx): 实现onnx通路 Created-by: FishPotatoChen Commit-by: FishPotatoChen Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: E2E 模式新增 **onnx 域(ONNX 通路)**:CSV 用例以 api_name = onnx.<OpType> 声明单算子,TTK 自动组装单算子 ONNX 模型,经 atc 离线编译为 .om 后在 NPU 上经 aclmdl 执行,补齐「ONNX 模型解析 → atc ONNX 插件转换 → 离线模型装载执行」引擎层链路的测试覆盖。至此 TTK 四种测试模式对应的昇腾技术栈层级中,引擎层在 GEIR / ACLNN 之外补上 ONNX(atc→om)一列。 核心设计与能力: - **执行链路**:CSV (onnx.<OpType>) → 框架检测路由 OnnxAdapter → 参数解析(onnx.defs schema 单源,环境注册表即权威)→ 输入生成(numpy 直通,无框架 tensor)→ model_builder 组装单算子 ModelProto → atc 离线编译 .om → NPU aclmdl 执行 → 复用既有比对 / dump / 结果列体系 - **同构参照 Golden**:Golden 腿与被测腿共用同一份组模产物(同一模型字节),由 CPU 侧 onnx ReferenceEvaluator 参照计算 - **无框架依赖**:onnx worker 进程仅预载 numpy + onnx,无需安装 torch / tensorflow / torch_npu(子树零 torch/tf import,由 test_structure 钉住) - **om 会话缓存**:结构键(算子+输入形态+属性+soc+dev_id)→ OmSession 进程级 LRU;「数组身份 → 内容指纹」双层判定防脏命中;缓存键含 atc ONNX 插件指纹,CANN 升级/重装后自动失效 - **用例面**:复用 E2E 全量 23 列 CSV 字段;支持 Variadic 输入/输出、Optional 输入尾部省略、6 种属性类型(INT/FLOAT/STRING/INTS/FLOATS/STRINGS);不支持项(动态 shape、动态输出元数、布局列、控制流算子等)均在解析/建模期显式报错,不静默降级 - **配套重构/新增**:ttk/utilities/dtypes.py 重构并新增 ONNX_DTYPE_MAP 全量 dtype 映射;新增 ttk/utilities/mx_quant.py(BFP16/FP16/FP32 → MX dtype 量化,纯算法模块) - om 恒为静态图(eager ≡ 静态图),不支持动态 shape 与 aclgraph 模式 主要新增模块:ttk/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime)、ttk/core_modules/common/backend/onnx_backend.py、ttk/utilities/mx_quant.py;示例用例 examples/case_store/e2e/onnx_cases.csv。 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes [#433](https://gitcode.com/cann/ops-test-kit/issues/433) ### 希望检视人员了解: - onnx 域与 torch/tf 域互斥:同一 CSV 不得混域(框架检测拒绝),按域分文件存放 - 环境约束:onnx ≥ 1.13(Golden 依赖 ReferenceEvaluator)且 onnx.defs.onnx_opset_version() ≤ 18(对齐 CANN atc ONNX 插件注册上限,CANN 9.2.x 配套 onnx 1.13.x);onnx 域额外依赖 CANN 的 atc 与 libascendcl - --backend cpu 不适用于 onnx 域被测腿(om 执行必须经 NPU),CPU 侧仅用于 Golden 与输入生成 - om 编译缓存放于仓库根 onnx_cache/<op_type>/,已加入 .gitignore - NonZero / TopK 等输出 shape 数据依赖的算子属通路边界(ONNX_DYNAMIC_OUTPUT_UNSUPPORTED),建议改用 kernel/aclnn 模式覆盖 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - **单元测试**(本仓库全量新增/回归,均通过): - tests/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime / routing / golden / e2e 冒烟)+ dtypes + mx_quant + structure:189 passed, 2 skipped(skip 为环境缺 tensorflow / en-dtypes,与本改动无关) - tests/core_modules/framework_api/ 全量回归 + tests/core_modules/common/test_instance_base.py:523 passed, 32 skipped(skip 为非基线 torch 版本钉死项与缺包项,与本改动无关) - **真机执行**:Ascend910_9362 双卡环境,python3 -m ttk e2e -i examples/case_store/e2e/onnx_cases.csv,6/6 用例全部 PASS(100%),覆盖 Add/Concat/Split/Gemm/Transpose/MatMul(bf16) 等 f32/f16/bf16/f64 dtype ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - 新增 docs/Operator_Test_Guides/ONNX_Test_Guide.md(ONNX 算子测试指南:环境准备、用例编写、关键约定、属性类型速查、FAQ) - 更新 README.md / README-EN.md(通路架构图、依赖说明、onnx 域快速上手命令、测试通路表) - 更新 AGENTS.md / CLAUDE.md(架构层级与技能索引补充 onnx 域) - 更新 docs/FAQ/faq_guide.md(新增「ONNX 通路问题」章节 5 条 FAQ) - 更新 docs/Operator_Test_Guides/E2E_Case_Writing.md、E2E_Test_Guide.md 及 docs/ 下相关文档(Task_Execution / Test_Case_Generation / Dump_Debug / Performance_Testing / XPU_Cross_Check / NPUSim / Offline_Data_Prepare / Deterministic_Compute) - 更新 .claude/skills/ 四个技能文档(run-test / write-case / write-plugin / diagnose) - 更新 examples/case_store/e2e/README.md 并新增 examples/case_store/e2e/onnx_cases.csv ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!526 | 13 days ago | |
feat: 支持4通路xpu golden读入功能 Co-authored-by: wangrui<wangrui124@huawei.com> # message auto-generated for no-merge-commit merge: !399 merge master into master feat: 支持4通路xpu golden读入功能 Created-by: wangrui_ Commit-by: wangrui Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [ ] 否 [x] 是 __1. AI Agent 平台: opencode __2. AI 模型: CANNBot (GLM) __3. Prompt上下文 : 交互式编程会话(xpu golden 回放功能开发、调试与评审修复) ### PR功能描述 / 为什么需要这个合入**: **主需求(#306)**:manual_xpu 四通路统一装载——绿区 XPU 与黄区 NPU 无法直连,通过固定输入/输出( --dump xpu 落盘 → 回放)测试新精度: - **manual_xpu 装载(kernel/aclnn/e2e/geir 四通路)**:CSV manual_xpu_binaries 显式路径 + manual-data case 目录 xpu_{provider}_{idx}_{dtype} 槽位双来源,共享装载器 load_manual_third_parties;e2e 输出为执行派生(无声明槽),经 references(设备输出)取槽位元数据,口径同 golden 装载 - **XPU/NPU 执行重叠**(XpuDispatch dispatch/collect 两段式):cross_check / --xpu-perf / --dump xpu 场景下三方采集与 NPU 执行并行,总耗时 max(NPU, XPU);含输入快照(防 in-place 竞争)、deadline 补偿、租户心跳子进程 - **golden-XPU 回放**:--golden-mode XPU + --manual-data-dirs 时 xpu 槽文件装载并升格 golden(四通路口径统一,无 xpu 槽回退远端) **顺带修复**: - **e2e CPU 回落**:无 torch_npu 探测回落 CPU 后不再被 DSMI 设备健康检查拦截("No available device") - **e2e 三方采集与 golden 状态解耦**:golden 占位串(fp8 UNSUPPORTED / disable SUPPRESSED / 生成失败)不再连坐 cross_check 判据解析与 --xpu-perf / --dump xpu 采集 - **manual-data 目录支持读回调试 dump 产物**:output_* / tiling_data_* 忽略(读回时重新执行产出)、input_{dyn,const,dynamic}_* 去段映射(同槽字节一致性校验)、input_{eager,graph_*}_* 拒绝(执行后 dump-on-fail 产物) - **装载可观测性**:input/golden/xpu 逐文件 Reading manual ... file 日志 + 槽位计数汇总行 - **HTTP 协议批**:#58(xpu_server 容器超时语义/tenant_id 路径穿越/CPU 探测/mkdtemp 信号量)、#279(恢复探活 TLS 化)、#280(data_perf 模式位补全)、#281(复用连接 timeout 对齐) - 开发规范守护器更名 check_refactor → check_conventions(git mv 保历史) ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes #306, fixes #58, fixes #279, fixes #280, fixes #281 ### 希望检视人员了解: - #279/#280 与社区 PR !364、#281 与 !366 存在重叠(本仓修复先落,重叠部分请原作者核对) - aclnn xpu_attrs 的 ScalarList 摊派问题(#333)为存量缺陷,本 PR 未涉及 - --xpu-perf 与 manual 回放组合时性能指标随远端整体短路(回放零远端契约),单独 --xpu-perf 不装载 manual 文件(性能只能在线采) ## 测试 - 单测 2322+ passed(四通路 manual_xpu/golden-XPU/cross_check 参数化用例、调试 dump 读回、HTTP 协议回归) - 端到端验证:e2e fp32 + --compare cross_check + --manual-data-dirs(xpu 槽文件)回放 PASS;kernel 调试 dump 目录直接读回 PASS - pre-commit 全过(ruff / ttk conventions guard / OAT) ## 文档更新 - docs/Offline_Data_Prepare_and_Import.md:新增 §3.4 从调试 dump 目录读回(放行规则表 + 已知边界) - --dump xpu 回放契约(xpu 槽位文件名协议)随代码注释 ## 类型标签 - 新特性 - Bug修复 See merge request: cann/ops-test-kit!399 | 25 days ago | |
feat(onnx): 实现onnx通路 Co-authored-by: FishPotatoChen<chenqianyu1@h-partners.com> # message auto-generated for no-merge-commit merge: !526 merge onnx_dev into master feat(onnx): 实现onnx通路 Created-by: FishPotatoChen Commit-by: FishPotatoChen Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: E2E 模式新增 **onnx 域(ONNX 通路)**:CSV 用例以 api_name = onnx.<OpType> 声明单算子,TTK 自动组装单算子 ONNX 模型,经 atc 离线编译为 .om 后在 NPU 上经 aclmdl 执行,补齐「ONNX 模型解析 → atc ONNX 插件转换 → 离线模型装载执行」引擎层链路的测试覆盖。至此 TTK 四种测试模式对应的昇腾技术栈层级中,引擎层在 GEIR / ACLNN 之外补上 ONNX(atc→om)一列。 核心设计与能力: - **执行链路**:CSV (onnx.<OpType>) → 框架检测路由 OnnxAdapter → 参数解析(onnx.defs schema 单源,环境注册表即权威)→ 输入生成(numpy 直通,无框架 tensor)→ model_builder 组装单算子 ModelProto → atc 离线编译 .om → NPU aclmdl 执行 → 复用既有比对 / dump / 结果列体系 - **同构参照 Golden**:Golden 腿与被测腿共用同一份组模产物(同一模型字节),由 CPU 侧 onnx ReferenceEvaluator 参照计算 - **无框架依赖**:onnx worker 进程仅预载 numpy + onnx,无需安装 torch / tensorflow / torch_npu(子树零 torch/tf import,由 test_structure 钉住) - **om 会话缓存**:结构键(算子+输入形态+属性+soc+dev_id)→ OmSession 进程级 LRU;「数组身份 → 内容指纹」双层判定防脏命中;缓存键含 atc ONNX 插件指纹,CANN 升级/重装后自动失效 - **用例面**:复用 E2E 全量 23 列 CSV 字段;支持 Variadic 输入/输出、Optional 输入尾部省略、6 种属性类型(INT/FLOAT/STRING/INTS/FLOATS/STRINGS);不支持项(动态 shape、动态输出元数、布局列、控制流算子等)均在解析/建模期显式报错,不静默降级 - **配套重构/新增**:ttk/utilities/dtypes.py 重构并新增 ONNX_DTYPE_MAP 全量 dtype 映射;新增 ttk/utilities/mx_quant.py(BFP16/FP16/FP32 → MX dtype 量化,纯算法模块) - om 恒为静态图(eager ≡ 静态图),不支持动态 shape 与 aclgraph 模式 主要新增模块:ttk/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime)、ttk/core_modules/common/backend/onnx_backend.py、ttk/utilities/mx_quant.py;示例用例 examples/case_store/e2e/onnx_cases.csv。 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes [#433](https://gitcode.com/cann/ops-test-kit/issues/433) ### 希望检视人员了解: - onnx 域与 torch/tf 域互斥:同一 CSV 不得混域(框架检测拒绝),按域分文件存放 - 环境约束:onnx ≥ 1.13(Golden 依赖 ReferenceEvaluator)且 onnx.defs.onnx_opset_version() ≤ 18(对齐 CANN atc ONNX 插件注册上限,CANN 9.2.x 配套 onnx 1.13.x);onnx 域额外依赖 CANN 的 atc 与 libascendcl - --backend cpu 不适用于 onnx 域被测腿(om 执行必须经 NPU),CPU 侧仅用于 Golden 与输入生成 - om 编译缓存放于仓库根 onnx_cache/<op_type>/,已加入 .gitignore - NonZero / TopK 等输出 shape 数据依赖的算子属通路边界(ONNX_DYNAMIC_OUTPUT_UNSUPPORTED),建议改用 kernel/aclnn 模式覆盖 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - **单元测试**(本仓库全量新增/回归,均通过): - tests/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime / routing / golden / e2e 冒烟)+ dtypes + mx_quant + structure:189 passed, 2 skipped(skip 为环境缺 tensorflow / en-dtypes,与本改动无关) - tests/core_modules/framework_api/ 全量回归 + tests/core_modules/common/test_instance_base.py:523 passed, 32 skipped(skip 为非基线 torch 版本钉死项与缺包项,与本改动无关) - **真机执行**:Ascend910_9362 双卡环境,python3 -m ttk e2e -i examples/case_store/e2e/onnx_cases.csv,6/6 用例全部 PASS(100%),覆盖 Add/Concat/Split/Gemm/Transpose/MatMul(bf16) 等 f32/f16/bf16/f64 dtype ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - 新增 docs/Operator_Test_Guides/ONNX_Test_Guide.md(ONNX 算子测试指南:环境准备、用例编写、关键约定、属性类型速查、FAQ) - 更新 README.md / README-EN.md(通路架构图、依赖说明、onnx 域快速上手命令、测试通路表) - 更新 AGENTS.md / CLAUDE.md(架构层级与技能索引补充 onnx 域) - 更新 docs/FAQ/faq_guide.md(新增「ONNX 通路问题」章节 5 条 FAQ) - 更新 docs/Operator_Test_Guides/E2E_Case_Writing.md、E2E_Test_Guide.md 及 docs/ 下相关文档(Task_Execution / Test_Case_Generation / Dump_Debug / Performance_Testing / XPU_Cross_Check / NPUSim / Offline_Data_Prepare / Deterministic_Compute) - 更新 .claude/skills/ 四个技能文档(run-test / write-case / write-plugin / diagnose) - 更新 examples/case_store/e2e/README.md 并新增 examples/case_store/e2e/onnx_cases.csv ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!526 | 13 days ago | |
feat(onnx): 实现onnx通路 Co-authored-by: FishPotatoChen<chenqianyu1@h-partners.com> # message auto-generated for no-merge-commit merge: !526 merge onnx_dev into master feat(onnx): 实现onnx通路 Created-by: FishPotatoChen Commit-by: FishPotatoChen Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: E2E 模式新增 **onnx 域(ONNX 通路)**:CSV 用例以 api_name = onnx.<OpType> 声明单算子,TTK 自动组装单算子 ONNX 模型,经 atc 离线编译为 .om 后在 NPU 上经 aclmdl 执行,补齐「ONNX 模型解析 → atc ONNX 插件转换 → 离线模型装载执行」引擎层链路的测试覆盖。至此 TTK 四种测试模式对应的昇腾技术栈层级中,引擎层在 GEIR / ACLNN 之外补上 ONNX(atc→om)一列。 核心设计与能力: - **执行链路**:CSV (onnx.<OpType>) → 框架检测路由 OnnxAdapter → 参数解析(onnx.defs schema 单源,环境注册表即权威)→ 输入生成(numpy 直通,无框架 tensor)→ model_builder 组装单算子 ModelProto → atc 离线编译 .om → NPU aclmdl 执行 → 复用既有比对 / dump / 结果列体系 - **同构参照 Golden**:Golden 腿与被测腿共用同一份组模产物(同一模型字节),由 CPU 侧 onnx ReferenceEvaluator 参照计算 - **无框架依赖**:onnx worker 进程仅预载 numpy + onnx,无需安装 torch / tensorflow / torch_npu(子树零 torch/tf import,由 test_structure 钉住) - **om 会话缓存**:结构键(算子+输入形态+属性+soc+dev_id)→ OmSession 进程级 LRU;「数组身份 → 内容指纹」双层判定防脏命中;缓存键含 atc ONNX 插件指纹,CANN 升级/重装后自动失效 - **用例面**:复用 E2E 全量 23 列 CSV 字段;支持 Variadic 输入/输出、Optional 输入尾部省略、6 种属性类型(INT/FLOAT/STRING/INTS/FLOATS/STRINGS);不支持项(动态 shape、动态输出元数、布局列、控制流算子等)均在解析/建模期显式报错,不静默降级 - **配套重构/新增**:ttk/utilities/dtypes.py 重构并新增 ONNX_DTYPE_MAP 全量 dtype 映射;新增 ttk/utilities/mx_quant.py(BFP16/FP16/FP32 → MX dtype 量化,纯算法模块) - om 恒为静态图(eager ≡ 静态图),不支持动态 shape 与 aclgraph 模式 主要新增模块:ttk/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime)、ttk/core_modules/common/backend/onnx_backend.py、ttk/utilities/mx_quant.py;示例用例 examples/case_store/e2e/onnx_cases.csv。 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes [#433](https://gitcode.com/cann/ops-test-kit/issues/433) ### 希望检视人员了解: - onnx 域与 torch/tf 域互斥:同一 CSV 不得混域(框架检测拒绝),按域分文件存放 - 环境约束:onnx ≥ 1.13(Golden 依赖 ReferenceEvaluator)且 onnx.defs.onnx_opset_version() ≤ 18(对齐 CANN atc ONNX 插件注册上限,CANN 9.2.x 配套 onnx 1.13.x);onnx 域额外依赖 CANN 的 atc 与 libascendcl - --backend cpu 不适用于 onnx 域被测腿(om 执行必须经 NPU),CPU 侧仅用于 Golden 与输入生成 - om 编译缓存放于仓库根 onnx_cache/<op_type>/,已加入 .gitignore - NonZero / TopK 等输出 shape 数据依赖的算子属通路边界(ONNX_DYNAMIC_OUTPUT_UNSUPPORTED),建议改用 kernel/aclnn 模式覆盖 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - **单元测试**(本仓库全量新增/回归,均通过): - tests/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime / routing / golden / e2e 冒烟)+ dtypes + mx_quant + structure:189 passed, 2 skipped(skip 为环境缺 tensorflow / en-dtypes,与本改动无关) - tests/core_modules/framework_api/ 全量回归 + tests/core_modules/common/test_instance_base.py:523 passed, 32 skipped(skip 为非基线 torch 版本钉死项与缺包项,与本改动无关) - **真机执行**:Ascend910_9362 双卡环境,python3 -m ttk e2e -i examples/case_store/e2e/onnx_cases.csv,6/6 用例全部 PASS(100%),覆盖 Add/Concat/Split/Gemm/Transpose/MatMul(bf16) 等 f32/f16/bf16/f64 dtype ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - 新增 docs/Operator_Test_Guides/ONNX_Test_Guide.md(ONNX 算子测试指南:环境准备、用例编写、关键约定、属性类型速查、FAQ) - 更新 README.md / README-EN.md(通路架构图、依赖说明、onnx 域快速上手命令、测试通路表) - 更新 AGENTS.md / CLAUDE.md(架构层级与技能索引补充 onnx 域) - 更新 docs/FAQ/faq_guide.md(新增「ONNX 通路问题」章节 5 条 FAQ) - 更新 docs/Operator_Test_Guides/E2E_Case_Writing.md、E2E_Test_Guide.md 及 docs/ 下相关文档(Task_Execution / Test_Case_Generation / Dump_Debug / Performance_Testing / XPU_Cross_Check / NPUSim / Offline_Data_Prepare / Deterministic_Compute) - 更新 .claude/skills/ 四个技能文档(run-test / write-case / write-plugin / diagnose) - 更新 examples/case_store/e2e/README.md 并新增 examples/case_store/e2e/onnx_cases.csv ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!526 | 13 days ago | |
代码框架重构 Co-authored-by: wangrui<wangrui124@huawei.com> # message auto-generated for no-merge-commit merge: !393 merge master into master 代码框架重构 Created-by: wangrui_ Commit-by: wangrui Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [ ] 否 [x] 是 __1. AI Agent 平台: opencode(CLI 编程助手) __2. AI 模型: GLM(CANNBot/glm-5.3) __3. Prompt上下文 : 本仓 AGENTS.md + TTK 重构任务卡。AI 辅助范围:upstream 同步冲突解决、主线修复移植(bind_params)、测试治理 review、文档链接核查、本 PR 描述整理 ### PR功能描述 / 为什么需要这个合入**: TTK 代码框架重构(15 笔提交、583 文件,按主题组织,可分批 reviewing),核心目标:**分层归位、公开面收口、测试体系治理、主线同步**。 **一、目录与分层重组** - common 层域建设(W4-W15):utilities/switches/process/dump/comparison/result/plugin/testcase/backend/xpu/profiler/instance 归位为 ttk/core_modules/common/* 单份契约代码 - 四通路目录重组与清场(W16-W20):kernel/aclnn/framework_api/geir 换基,tests/ 目录树与 ttk/ 同构 **二、公开面收口** - scripts/common_public_surface.json 公开面名单 + pre-commit「ttk refactor guard」守护 - kernel/aclnn 公开面收口;mc2→hccl 改名;CLI 参数面治理(args_to_switches 四通路必经收口、--core-limit 统一解析) **三、模型与共性件上提** - Tensor 槽模型落地(声明/运行时槽位统一)、输入/golden 共性件上提 - 动态槽(-1)物化、参数级可变性上提、batch 一致性框架化、E2E 框架子目录化/编排步骤化 - W21-W24 扩展:设备状态泛化、E2E backward 一期、XPU 三方 golden、ttk-prof2case 技能(profiling 报告转用例) **四、GEIR/E2E 专项深化** - GEIR:manual-data 落盘口径统一与时序对齐、轮间一致性 MD5、模板 Data/Const 防重定义宏守卫 - E2E:-b/golden/mutability/xpu/open 后置系列改造、forkserver 预载框架感知修复(torch/TF libstdc++ 弱符号冲突)、eager 逐轮可变槽载体下沉 Backend.stage_mutable_rounds **五、主线同步(upstream/master e3fb50a + 9e74ae6)** - rebase 解决 6 处冲突(含 3 处文件迁移形态的 modify/delete 冲突、1 处双方同构修复) - **语义缺口补齐**:主线 e3fb50a bind_params 前序可选参数缺省占位修复(防后续参数左移错位——alpha 落 gamma 槽)移植至重构后 ttk/core_modules/common/xpu.py 单份契约 + TestBindParams 回归测试 - geir 模板 Data/Const OPS_PROTO_DEF_* 防重定义宏守卫(9e74ae6 同构合入) **六、测试体系治理(tests/common + utilities/remote/cli/config)** - 错位用例归位:framework_api/kernel 域(test_simple_param_extractor、test_super_kernel 拆分、test_xpu_perf_collect 拆分、test_e2e_simulator_backend) - 私有接口直调转公开入口 30+ 用例:compare_with_hooks / args_to_switches / TestcaseBase.validate / get_comparison().compare() - 重复与不可达用例清理、命名修复(testgenerate/testformat 两处缺下划线) - 白盒保留项均有归类(调度状态机/规则单元/parity 对拍/pins 守卫,公开路径需进程编排或活服务端) ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes #305 ### 希望检视人员了解: - 大 PR(583 文件),建议按提交主题分批 reviewing(15 笔提交各自独立成篇) - review 收尾阶段 3 笔已 squash 为单笔(含主线同步与测试治理),历史已 force-push 整理 - 重构设计文档(TTK_Refactoring_Design 等 20 篇)按计划本地化,未随 PR 入库;行为基线见 scripts/refactor_baseline.json ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - 全量单测:**2731 passed / 3 skipped(环境相关)/ 1 xfailed** - pre-commit 全绿:ruff check + ruff format + ttk refactor guard + codespell + OAT 合规检查 - 专项验证:主线 bind_params 错位场景实测(省略前序可选参数 gamma 时槽位对齐、无左移) ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - README/README-EN、docs/ 40+ 篇随代码同步(Operator_Test_Guides/NPUSim/Task_Execution/Test_Case_Generation/FAQ 等) - 文档命名英文化(msdebug适配方法指南.md → msdebug_guide.md);全仓 markdown 链接有效性核查(79 文件、含外部 URL 逐个验证,0 失效) - .claude/skills 五技能文档(含新增 ttk-prof2case:profiling 报告转用例) ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码框架重构(分层归位/公开面收口/测试治理 + 主线同步) See merge request: cann/ops-test-kit!393 | 29 days ago | |
fix: XPU 三方 4bit/float8 wire、--dev 上限压缩、tf raw_ops 列表输入,恢复 --print Co-authored-by: wangrui<wangrui124@huawei.com> # message auto-generated for no-merge-commit merge: !436 merge br_bugfix into master fix: XPU 三方 4bit/float8 wire、--dev 上限压缩、tf raw_ops 列表输入,恢复 --print Created-by: wangrui_ Commit-by: wangrui Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [ ] 否 [x] 是 __1. AI Agent 平台: opencode(CLI 编程助手) __2. AI 模型: CANNBot(cannbot/deepseek-v4-pro) __3. Prompt上下文 : 本仓 AGENTS.md + TTK 技能指南(run-test/diagnose/write-plugin) ### PR功能描述 / 为什么需要这个合入**: 本 PR 含两个提交: 1. XPU 三方比对自定义窄幅 dtype wire 支持、--dev 上限压缩、tf raw_ops 列表输入识别与 --print 恢复(9203c60): - **自定义 dtype 的 wire 传输与还原**:npz 存不回 int4/float4/float8 自定义 dtype 元数据——int4 在 wire 上退化为 |V1、服务端 torch.from_numpy 直接崩溃;float8_e5m2 落成 '<f1' descr、np.load 崩溃。此前带这类 dtype 输入的算子三方比对必然失败。现 float8 家族客户端按原始字节(uint8 位)传输、dtype 由 X-Input-Schema 声明,服务端按声明重铸——e4m3fn/e5m2 转 torch 张量、e8m0/hifloat8 与 4bit 以 numpy 直通由三方 compose 自行消费; _to_vendor_tensor 拆分出 _restore_wire_dtype/_to_torch_float8,单一职责; - **DynamicQuantUpdateScatterV2 golden/input 插件与三方 compose**:int4 输出走 quant 判据、float32 输出走 cross_check;非浮点输出以 None 占位保持输出槽对齐(quant 判据不读三方); - **--dev 与 --devices 语义分离**(device_count_is_limit):--dev 是数量上限,物理卡不足时压缩到实际卡数并告警(恢复 10.12 重构前不报错的行为);--devices 点名越界仍启动报错; - **tf.raw_ops 列表输入识别**:extract_tf_params 经 OpDef 走查补 number_attr/type_list_attr 输入位(AccumulateNV2 的 inputs: N*T 此前 PARAM_PLAN_FAILURE),落位收敛进 _fill_opdef_flags; - **恢复 --print(summary_print)**:重构期删除、摘要表被改为无条件打印;现四通路共享该开关,仅控制跑批周期摘要表,进度文件与最终汇总不受影响。 2. 签名解析/随机数据生成/插件扫描/DeviceLock 测试/remote 健康文件与 TLS 修复(60a8ab5,自 MR !431 主线同步)。 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes # ### 希望检视人员了解: - DynamicQuantUpdateScatterV2 的三方 compose 直接复用本地 golden 实现(非独立竞品实现):cross_check 的竞品误差分母为 0,判据按 small_value 夹底放大 NPU 误差。当前为最小可用方案,若后续实测出现压线 FAIL,需将 compose 改为独立精度轨迹实现(如 fp16 折算 scale/offset)。 - tf.raw_ops 的 shape 等 attr 参数维持 raw_ops 惯例归类为 Tensor(attr 值 raw 透传),本 PR 未做 attr demotion,避免 coerce 类型链回归。 - wire 修复只覆盖输入方向;三方 compose 若返回 numpy float8 输出,客户端 np.load 仍有同类风险(现有 torch 输出路径已按 uint8 位回传,不受影响)。 ## 测试 - tests/remote(executor/dispatcher/roundtrip/input_formats 等)通过;float8/int4 wire 逐位断言与 4bit 直通已覆盖; - tests/cli 全量 181 例通过(含 --print 恢复翻转 pin); - tests/core_modules/common/device 57 例通过(--dev 压缩/点名报错双分支); - tests/core_modules/framework_api 全量 464 例通过(1 例环境性 skip);AccumulateNV2 参数计划与分布判定单测已扩展; - 实跑验证:python3 -m ttk e2e -i AccumulateNV2_l0_functional.csv --golden-mode Disable -t AccumulateNV2_L0_007 由 PARAM_PLAN_FAILURE 修复为 EAGER 执行成功(precision SKIP,符合 Disable 预期)。 ## 文档更新 无(无对外文档面变更)。 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!436 | 24 days ago | |
feat: registry_accessor + error_manager_cleaner + cext_loader 公共能力 Co-authored-by: dengguojie<dengguojie@huawei.com> # message auto-generated for no-merge-commit merge: !6 merge master into master feat: registry_accessor + error_manager_cleaner + cext_loader 公共能力 Created-by: dengguojie Commit-by: dengguojie Merged-by: cann-robot Description: ## 描述 1. cext_loader: 提取 C 扩展在线编译+加载公共逻辑(per-target flock + atomic marker) 2. error_manager_cleaner: 清理 ErrorManager 残留错误,防止跨用例污染 tiling 判定 3. op_registry_accessor: split API(Find + Invoke gen_simplifiedkey),支持 simplifiedKeyMode=2 算子 4. platform: 兼容新旧 CANN 目录结构(vendors/ built-in/op_impl vs op_impl/built-in),fallback 无 config.ini 时走 custom 路径 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!6 | 5 months ago | |
代码框架重构 Co-authored-by: wangrui<wangrui124@huawei.com> # message auto-generated for no-merge-commit merge: !393 merge master into master 代码框架重构 Created-by: wangrui_ Commit-by: wangrui Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [ ] 否 [x] 是 __1. AI Agent 平台: opencode(CLI 编程助手) __2. AI 模型: GLM(CANNBot/glm-5.3) __3. Prompt上下文 : 本仓 AGENTS.md + TTK 重构任务卡。AI 辅助范围:upstream 同步冲突解决、主线修复移植(bind_params)、测试治理 review、文档链接核查、本 PR 描述整理 ### PR功能描述 / 为什么需要这个合入**: TTK 代码框架重构(15 笔提交、583 文件,按主题组织,可分批 reviewing),核心目标:**分层归位、公开面收口、测试体系治理、主线同步**。 **一、目录与分层重组** - common 层域建设(W4-W15):utilities/switches/process/dump/comparison/result/plugin/testcase/backend/xpu/profiler/instance 归位为 ttk/core_modules/common/* 单份契约代码 - 四通路目录重组与清场(W16-W20):kernel/aclnn/framework_api/geir 换基,tests/ 目录树与 ttk/ 同构 **二、公开面收口** - scripts/common_public_surface.json 公开面名单 + pre-commit「ttk refactor guard」守护 - kernel/aclnn 公开面收口;mc2→hccl 改名;CLI 参数面治理(args_to_switches 四通路必经收口、--core-limit 统一解析) **三、模型与共性件上提** - Tensor 槽模型落地(声明/运行时槽位统一)、输入/golden 共性件上提 - 动态槽(-1)物化、参数级可变性上提、batch 一致性框架化、E2E 框架子目录化/编排步骤化 - W21-W24 扩展:设备状态泛化、E2E backward 一期、XPU 三方 golden、ttk-prof2case 技能(profiling 报告转用例) **四、GEIR/E2E 专项深化** - GEIR:manual-data 落盘口径统一与时序对齐、轮间一致性 MD5、模板 Data/Const 防重定义宏守卫 - E2E:-b/golden/mutability/xpu/open 后置系列改造、forkserver 预载框架感知修复(torch/TF libstdc++ 弱符号冲突)、eager 逐轮可变槽载体下沉 Backend.stage_mutable_rounds **五、主线同步(upstream/master e3fb50a + 9e74ae6)** - rebase 解决 6 处冲突(含 3 处文件迁移形态的 modify/delete 冲突、1 处双方同构修复) - **语义缺口补齐**:主线 e3fb50a bind_params 前序可选参数缺省占位修复(防后续参数左移错位——alpha 落 gamma 槽)移植至重构后 ttk/core_modules/common/xpu.py 单份契约 + TestBindParams 回归测试 - geir 模板 Data/Const OPS_PROTO_DEF_* 防重定义宏守卫(9e74ae6 同构合入) **六、测试体系治理(tests/common + utilities/remote/cli/config)** - 错位用例归位:framework_api/kernel 域(test_simple_param_extractor、test_super_kernel 拆分、test_xpu_perf_collect 拆分、test_e2e_simulator_backend) - 私有接口直调转公开入口 30+ 用例:compare_with_hooks / args_to_switches / TestcaseBase.validate / get_comparison().compare() - 重复与不可达用例清理、命名修复(testgenerate/testformat 两处缺下划线) - 白盒保留项均有归类(调度状态机/规则单元/parity 对拍/pins 守卫,公开路径需进程编排或活服务端) ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes #305 ### 希望检视人员了解: - 大 PR(583 文件),建议按提交主题分批 reviewing(15 笔提交各自独立成篇) - review 收尾阶段 3 笔已 squash 为单笔(含主线同步与测试治理),历史已 force-push 整理 - 重构设计文档(TTK_Refactoring_Design 等 20 篇)按计划本地化,未随 PR 入库;行为基线见 scripts/refactor_baseline.json ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - 全量单测:**2731 passed / 3 skipped(环境相关)/ 1 xfailed** - pre-commit 全绿:ruff check + ruff format + ttk refactor guard + codespell + OAT 合规检查 - 专项验证:主线 bind_params 错位场景实测(省略前序可选参数 gamma 时槽位对齐、无左移) ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - README/README-EN、docs/ 40+ 篇随代码同步(Operator_Test_Guides/NPUSim/Task_Execution/Test_Case_Generation/FAQ 等) - 文档命名英文化(msdebug适配方法指南.md → msdebug_guide.md);全仓 markdown 链接有效性核查(79 文件、含外部 URL 逐个验证,0 失效) - .claude/skills 五技能文档(含新增 ttk-prof2case:profiling 报告转用例) ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [x] 其他,请描述:代码框架重构(分层归位/公开面收口/测试治理 + 主线同步) See merge request: cann/ops-test-kit!393 | 29 days ago | |
feat(onnx): 实现onnx通路 Co-authored-by: FishPotatoChen<chenqianyu1@h-partners.com> # message auto-generated for no-merge-commit merge: !526 merge onnx_dev into master feat(onnx): 实现onnx通路 Created-by: FishPotatoChen Commit-by: FishPotatoChen Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: E2E 模式新增 **onnx 域(ONNX 通路)**:CSV 用例以 api_name = onnx.<OpType> 声明单算子,TTK 自动组装单算子 ONNX 模型,经 atc 离线编译为 .om 后在 NPU 上经 aclmdl 执行,补齐「ONNX 模型解析 → atc ONNX 插件转换 → 离线模型装载执行」引擎层链路的测试覆盖。至此 TTK 四种测试模式对应的昇腾技术栈层级中,引擎层在 GEIR / ACLNN 之外补上 ONNX(atc→om)一列。 核心设计与能力: - **执行链路**:CSV (onnx.<OpType>) → 框架检测路由 OnnxAdapter → 参数解析(onnx.defs schema 单源,环境注册表即权威)→ 输入生成(numpy 直通,无框架 tensor)→ model_builder 组装单算子 ModelProto → atc 离线编译 .om → NPU aclmdl 执行 → 复用既有比对 / dump / 结果列体系 - **同构参照 Golden**:Golden 腿与被测腿共用同一份组模产物(同一模型字节),由 CPU 侧 onnx ReferenceEvaluator 参照计算 - **无框架依赖**:onnx worker 进程仅预载 numpy + onnx,无需安装 torch / tensorflow / torch_npu(子树零 torch/tf import,由 test_structure 钉住) - **om 会话缓存**:结构键(算子+输入形态+属性+soc+dev_id)→ OmSession 进程级 LRU;「数组身份 → 内容指纹」双层判定防脏命中;缓存键含 atc ONNX 插件指纹,CANN 升级/重装后自动失效 - **用例面**:复用 E2E 全量 23 列 CSV 字段;支持 Variadic 输入/输出、Optional 输入尾部省略、6 种属性类型(INT/FLOAT/STRING/INTS/FLOATS/STRINGS);不支持项(动态 shape、动态输出元数、布局列、控制流算子等)均在解析/建模期显式报错,不静默降级 - **配套重构/新增**:ttk/utilities/dtypes.py 重构并新增 ONNX_DTYPE_MAP 全量 dtype 映射;新增 ttk/utilities/mx_quant.py(BFP16/FP16/FP32 → MX dtype 量化,纯算法模块) - om 恒为静态图(eager ≡ 静态图),不支持动态 shape 与 aclgraph 模式 主要新增模块:ttk/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime)、ttk/core_modules/common/backend/onnx_backend.py、ttk/utilities/mx_quant.py;示例用例 examples/case_store/e2e/onnx_cases.csv。 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes [#433](https://gitcode.com/cann/ops-test-kit/issues/433) ### 希望检视人员了解: - onnx 域与 torch/tf 域互斥:同一 CSV 不得混域(框架检测拒绝),按域分文件存放 - 环境约束:onnx ≥ 1.13(Golden 依赖 ReferenceEvaluator)且 onnx.defs.onnx_opset_version() ≤ 18(对齐 CANN atc ONNX 插件注册上限,CANN 9.2.x 配套 onnx 1.13.x);onnx 域额外依赖 CANN 的 atc 与 libascendcl - --backend cpu 不适用于 onnx 域被测腿(om 执行必须经 NPU),CPU 侧仅用于 Golden 与输入生成 - om 编译缓存放于仓库根 onnx_cache/<op_type>/,已加入 .gitignore - NonZero / TopK 等输出 shape 数据依赖的算子属通路边界(ONNX_DYNAMIC_OUTPUT_UNSUPPORTED),建议改用 kernel/aclnn 模式覆盖 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - **单元测试**(本仓库全量新增/回归,均通过): - tests/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime / routing / golden / e2e 冒烟)+ dtypes + mx_quant + structure:189 passed, 2 skipped(skip 为环境缺 tensorflow / en-dtypes,与本改动无关) - tests/core_modules/framework_api/ 全量回归 + tests/core_modules/common/test_instance_base.py:523 passed, 32 skipped(skip 为非基线 torch 版本钉死项与缺包项,与本改动无关) - **真机执行**:Ascend910_9362 双卡环境,python3 -m ttk e2e -i examples/case_store/e2e/onnx_cases.csv,6/6 用例全部 PASS(100%),覆盖 Add/Concat/Split/Gemm/Transpose/MatMul(bf16) 等 f32/f16/bf16/f64 dtype ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - 新增 docs/Operator_Test_Guides/ONNX_Test_Guide.md(ONNX 算子测试指南:环境准备、用例编写、关键约定、属性类型速查、FAQ) - 更新 README.md / README-EN.md(通路架构图、依赖说明、onnx 域快速上手命令、测试通路表) - 更新 AGENTS.md / CLAUDE.md(架构层级与技能索引补充 onnx 域) - 更新 docs/FAQ/faq_guide.md(新增「ONNX 通路问题」章节 5 条 FAQ) - 更新 docs/Operator_Test_Guides/E2E_Case_Writing.md、E2E_Test_Guide.md 及 docs/ 下相关文档(Task_Execution / Test_Case_Generation / Dump_Debug / Performance_Testing / XPU_Cross_Check / NPUSim / Offline_Data_Prepare / Deterministic_Compute) - 更新 .claude/skills/ 四个技能文档(run-test / write-case / write-plugin / diagnose) - 更新 examples/case_store/e2e/README.md 并新增 examples/case_store/e2e/onnx_cases.csv ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!526 | 13 days ago | |
feat(onnx): 实现onnx通路 Co-authored-by: FishPotatoChen<chenqianyu1@h-partners.com> # message auto-generated for no-merge-commit merge: !526 merge onnx_dev into master feat(onnx): 实现onnx通路 Created-by: FishPotatoChen Commit-by: FishPotatoChen Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: E2E 模式新增 **onnx 域(ONNX 通路)**:CSV 用例以 api_name = onnx.<OpType> 声明单算子,TTK 自动组装单算子 ONNX 模型,经 atc 离线编译为 .om 后在 NPU 上经 aclmdl 执行,补齐「ONNX 模型解析 → atc ONNX 插件转换 → 离线模型装载执行」引擎层链路的测试覆盖。至此 TTK 四种测试模式对应的昇腾技术栈层级中,引擎层在 GEIR / ACLNN 之外补上 ONNX(atc→om)一列。 核心设计与能力: - **执行链路**:CSV (onnx.<OpType>) → 框架检测路由 OnnxAdapter → 参数解析(onnx.defs schema 单源,环境注册表即权威)→ 输入生成(numpy 直通,无框架 tensor)→ model_builder 组装单算子 ModelProto → atc 离线编译 .om → NPU aclmdl 执行 → 复用既有比对 / dump / 结果列体系 - **同构参照 Golden**:Golden 腿与被测腿共用同一份组模产物(同一模型字节),由 CPU 侧 onnx ReferenceEvaluator 参照计算 - **无框架依赖**:onnx worker 进程仅预载 numpy + onnx,无需安装 torch / tensorflow / torch_npu(子树零 torch/tf import,由 test_structure 钉住) - **om 会话缓存**:结构键(算子+输入形态+属性+soc+dev_id)→ OmSession 进程级 LRU;「数组身份 → 内容指纹」双层判定防脏命中;缓存键含 atc ONNX 插件指纹,CANN 升级/重装后自动失效 - **用例面**:复用 E2E 全量 23 列 CSV 字段;支持 Variadic 输入/输出、Optional 输入尾部省略、6 种属性类型(INT/FLOAT/STRING/INTS/FLOATS/STRINGS);不支持项(动态 shape、动态输出元数、布局列、控制流算子等)均在解析/建模期显式报错,不静默降级 - **配套重构/新增**:ttk/utilities/dtypes.py 重构并新增 ONNX_DTYPE_MAP 全量 dtype 映射;新增 ttk/utilities/mx_quant.py(BFP16/FP16/FP32 → MX dtype 量化,纯算法模块) - om 恒为静态图(eager ≡ 静态图),不支持动态 shape 与 aclgraph 模式 主要新增模块:ttk/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime)、ttk/core_modules/common/backend/onnx_backend.py、ttk/utilities/mx_quant.py;示例用例 examples/case_store/e2e/onnx_cases.csv。 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes [#433](https://gitcode.com/cann/ops-test-kit/issues/433) ### 希望检视人员了解: - onnx 域与 torch/tf 域互斥:同一 CSV 不得混域(框架检测拒绝),按域分文件存放 - 环境约束:onnx ≥ 1.13(Golden 依赖 ReferenceEvaluator)且 onnx.defs.onnx_opset_version() ≤ 18(对齐 CANN atc ONNX 插件注册上限,CANN 9.2.x 配套 onnx 1.13.x);onnx 域额外依赖 CANN 的 atc 与 libascendcl - --backend cpu 不适用于 onnx 域被测腿(om 执行必须经 NPU),CPU 侧仅用于 Golden 与输入生成 - om 编译缓存放于仓库根 onnx_cache/<op_type>/,已加入 .gitignore - NonZero / TopK 等输出 shape 数据依赖的算子属通路边界(ONNX_DYNAMIC_OUTPUT_UNSUPPORTED),建议改用 kernel/aclnn 模式覆盖 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - **单元测试**(本仓库全量新增/回归,均通过): - tests/core_modules/framework_api/onnx/(model_builder / om_compiler / param_extractor / runner / runtime / routing / golden / e2e 冒烟)+ dtypes + mx_quant + structure:189 passed, 2 skipped(skip 为环境缺 tensorflow / en-dtypes,与本改动无关) - tests/core_modules/framework_api/ 全量回归 + tests/core_modules/common/test_instance_base.py:523 passed, 32 skipped(skip 为非基线 torch 版本钉死项与缺包项,与本改动无关) - **真机执行**:Ascend910_9362 双卡环境,python3 -m ttk e2e -i examples/case_store/e2e/onnx_cases.csv,6/6 用例全部 PASS(100%),覆盖 Add/Concat/Split/Gemm/Transpose/MatMul(bf16) 等 f32/f16/bf16/f64 dtype ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - 新增 docs/Operator_Test_Guides/ONNX_Test_Guide.md(ONNX 算子测试指南:环境准备、用例编写、关键约定、属性类型速查、FAQ) - 更新 README.md / README-EN.md(通路架构图、依赖说明、onnx 域快速上手命令、测试通路表) - 更新 AGENTS.md / CLAUDE.md(架构层级与技能索引补充 onnx 域) - 更新 docs/FAQ/faq_guide.md(新增「ONNX 通路问题」章节 5 条 FAQ) - 更新 docs/Operator_Test_Guides/E2E_Case_Writing.md、E2E_Test_Guide.md 及 docs/ 下相关文档(Task_Execution / Test_Case_Generation / Dump_Debug / Performance_Testing / XPU_Cross_Check / NPUSim / Offline_Data_Prepare / Deterministic_Compute) - 更新 .claude/skills/ 四个技能文档(run-test / write-case / write-plugin / diagnose) - 更新 examples/case_store/e2e/README.md 并新增 examples/case_store/e2e/onnx_cases.csv ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!526 | 13 days ago | |
fix: 对齐 requirements.txt 与 pyproject.toml 依赖声明 Co-authored-by: FishPotatoChen<chenqianyu1@h-partners.com> # message auto-generated for no-merge-commit merge: !282 merge fixbug6 into master fix: 对齐 requirements.txt 与 pyproject.toml 依赖声明 Created-by: FishPotatoChen Commit-by: FishPotatoChen Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [ ] 否 [x] 是 __1. AI Agent 平台: cannbot __2. AI 模型: GLM-5.3 (CANNBot) __3. Prompt上下文 : 修复 requirements.txt 与 pyproject.toml 依赖声明双向不一致问题,AI 参与依赖使用情况排查、修复方案决策与代码修改 ### PR功能描述 / 为什么需要这个合入**: 修复 requirements.txt 与 pyproject.toml 两个标准依赖声明文件之间的双向遗漏: - requirements.txt 包含 clang、jinja2 但 pyproject.toml 核心依赖未声明; - pyproject.toml 核心依赖包含 pandas 但 requirements.txt 未列出。 仅按 README 执行 pip install -r requirements.txt 或仅按 pyproject.toml 安装,得到的运行环境不一致,可能引发缺依赖或装错版本的问题。 本 PR 基于代码实际使用情况逐项对齐: | 包 | 处理 | 依据 | |---|---|---| | jinja2 | 补入 pyproject.toml 核心依赖 | GEIR 模式真实依赖(ttk/core_modules/geir/graph_builder.py:22 直接 import) | | clang | 从 requirements.txt 删除 | 全仓库(含测试/示例)无任何引用,建仓时残留至今 | | pandas | 从 pyproject.toml 删除,并同步更新 SECURITY.md | 全仓库无任何 import;commit 1771b48 曾以"没有被使用到"为由将其从 requirements.txt 删除,但当时漏改了 pyproject.toml | 同时将 requirements.txt 的版本约束与 pyproject.toml 完全对齐(补上 numpy>=1.19,<2.0 上界及 attrs/decorator/six 下界),避免经 requirements.txt 途径安装到 numpy 2.x;并为 requirements.txt 补充仓库标准 CANN OSL-2.0 许可证头以满足 OAT 合规检查。 修复后两个文件声明的依赖集合(包名+版本约束)逐项完全一致。 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes [#200](https://gitcode.com/cann/ops-test-kit/issues/200) ### 希望检视人员了解: - 三个包的使用情况均经全仓库 grep 验证:仅 jinja2 在 ttk/core_modules/geir/graph_builder.py:22 被直接 import,clang 与 pandas(含 import pandas、importlib 间接加载、__import__ 动态导入)均无任何引用。 - pandas 的删除与历史 commit 1771b48("删除依赖项中的pandas,因为其没有被使用到")的决策保持一致,本次属于补齐该提交遗漏的 pyproject.toml 侧修改。 - SECURITY.md 依赖声明表原本即未覆盖 sympy、attrs、openpyxl 等其余运行时依赖,属既有缺口,本 PR 仅移除已失效的 pandas 行,未扩大范围。 - requirements.txt 变更幅度较大(git 显示 rewrite 66%)主要因新增 8 行许可证头及版本约束对齐,实际包集合仅减少 clang 一项。 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - TOML 解析验证:tomllib.load(pyproject.toml) 解析正常; - 一致性脚本验证:提取两文件依赖(包名+版本约束)归一化后逐项比对,结果 IDENTICAL; - 残留引用验证:全仓库 grep clang/pandas(含 import pandas、"pandas" 声明等模式),依赖文件与代码中均无残留; - 本地 pre-commit 全量检查通过(trailing-whitespace、end-of-file-fixer、codespell、OAT 合规检查等),其中 OAT 对 requirements.txt 的许可证头匹配结果为 CANN-2.0。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - 更新 SECURITY.md:公网地址声明表中移除已失效的 pandas 依赖行(pandas 不再由 pyproject.toml 声明)。 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!282 | 1 month ago | |
feat: registry_accessor + error_manager_cleaner + cext_loader 公共能力 Co-authored-by: dengguojie<dengguojie@huawei.com> # message auto-generated for no-merge-commit merge: !6 merge master into master feat: registry_accessor + error_manager_cleaner + cext_loader 公共能力 Created-by: dengguojie Commit-by: dengguojie Merged-by: cann-robot Description: ## 描述 1. cext_loader: 提取 C 扩展在线编译+加载公共逻辑(per-target flock + atomic marker) 2. error_manager_cleaner: 清理 ErrorManager 残留错误,防止跨用例污染 tiling 判定 3. op_registry_accessor: split API(Find + Invoke gen_simplifiedkey),支持 simplifiedKeyMode=2 算子 4. platform: 兼容新旧 CANN 目录结构(vendors/ built-in/op_impl vs op_impl/built-in),fallback 无 config.ini 时走 custom 路径 ## 关联的Issue <!-- 如果这个PR是为了解决特定的Issue,请在这里提供Issue链接。例如:关联Issue #000--> ## 测试 <!--描述进行了哪些测试来验证你的改动。--> ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!6 | 5 months ago | |
fix: tf eager no need import torch_npu Co-authored-by: wangrui<wangrui124@huawei.com> # message auto-generated for no-merge-commit merge: !218 merge br_bugfix into master fix: tf eager no need import torch_npu Created-by: wangrui_ Commit-by: wangrui Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: 修复 E2E TF NPU 通路下的 4 个缺陷(以 tf.image.combined_non_max_suppression 用例验证暴露): **1. TF eager 路径误 import torch_npu** _execute_eager 被 torch/TF 两框架共用,原先 if backend.is_npu(): import torch_npu; torch_npu.npu.set_device(dev_id)——NpuTfBackend.is_npu() 同样为 True,导致纯 TF 环境(装 npu_device 未装 torch_npu)eager 必挂。修复:设备设定下沉为 Backend.set_device(dev_id) 钩子,NpuTorchBackend 内做 torch_npu.npu.set_device,NpuTfBackend 内做 npu_device.open + as_default,torch/TF 统一语义、统一时机(_do_profile 输入生成前)。 **2. 父进程 open npu_device 导致 fork worker 段错误(-11)** FrameworkApiInstance.__init__ 创建 backend 时即 npu_device.open(),此后 worker 经 fork 拉起:C++ GE 线程不随 fork 存活,子进程继承坏句柄,MsProfiler 的 aclprofStart 段错误(faulthandler 定位 msprof/profiler.py:240)。修复:open 延迟到 set_device(fork 之后、首个 tf.Tensor 创建之前),父进程只做元数据查询。 **3. 0-D 标量被提升为 shape [1]** np.ascontiguousarray() 会把 0-D 数组提升为 (1,)(numpy 规定返回 ndim≥1)。TfBackend.from_numpy / CpuTfBackend.from_numpy / np_to_tf_inputs 三处中招,TF 0-D 参数校验报 max_size_per_class must be 0-D, got shape [1]。修复:0-D 跳过连续化(0-D 本就 C-contiguous)。 **4. TF 图模式丢失必填标量参数** TfGraphWrapper._build_kw_function 只透传 input_signature 覆盖的前 N 个参数,走 attributes 的必填标量(如 max_output_size_per_class)被截断,报 Missing required positional argument。修复:构造时将标量值烘焙进闭包,tf.function 追踪为 Const 节点(同时满足 GE infershape 对 const 输入的要求)。 **附**:TF 图编译(GE)要求此类算子的标量输入必须是 const 数据,对应用例需将标量参数放 attributes 而非 tensor_view_shapes(见 PR 内 combine.csv 调整)。 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes #152 ### 希望检视人员了解: - set_device 是唯一 open/set 点(带 dev_id);to_device/inputs_from_numpy/device_scope/from_numpy/wrap_eager_callable 均不再持有设备初始化职责 - npu_device 的 as_default() 为进程级一次性副作用,必须先于进程内首个 tf.convert_to_tensor,否则 TF context 冻结在 CPU、算子静默跑 CPU(假绿) ## 测试 <!--描述进行了哪些测试来验证你的改动。--> 用例:tf.image.combined_non_max_suppression(56,73,108,4 / fp32,标量走 attributes) | 模式 | 结果 | |------|------| | e2e eager NPU | PASS(4 输出 mere/mare=0,device_perf ~14ms) | | e2e eager CPU | PASS | | e2e 静态图 -c | PASS | | e2e 动态图 -d | 不适用(GE 算子约束 boxes 尾维必须为常量 4,非本 PR 范围) | 单测:tests/core_modules/framework_api/ 47 passed;ruff 无新增告警。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!218 | 2 months ago | |
fix: GEIR shape-unknown 比对链与依赖文档四项修复(standards 槽位重解析/输出 dtype 元数据重释/e2e-npu 坏点排除/en-dtypes 与测试基线文档) Co-authored-by: FishPotatoChen<chenqianyu1@h-partners.com> # message auto-generated for no-merge-commit merge: !510 merge fixbug14 into master fix: GEIR shape-unknown 比对链与依赖文档四项修复(standards 槽位重解析/输出 dtype 元数据重释/e2e-npu 坏点排除/en-dtypes 与测试基线文档) Created-by: FishPotatoChen Commit-by: FishPotatoChen Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: 修复评审发现的 GEIR 通路 shape-unknown 用例比对链缺陷,并补齐依赖/文档配套(评审问题 #1/#2/#3/#4): 1. **GEIR 比对段 standards 槽数失配(#2 核心)**:判据解析先于 golden 构建,shape-unknown 元数据槽经 append_output_metadata 并入输出 dtype 列表后,standards 与 outputs/goldens 槽数不一致,比对段 comparison.py standards[idx] 越界,用例状态仅显示 ERROR: LIST INDEX OUT OF RANGE、无任何指路信息。修复:golden 生成后按扩展后 flat_output_dtypes 重解析 standards(对齐 kernel/worker.py _generate_golden 既有模式),并在比对入口对槽位失配给出可定位报错。该缺陷影响**所有** GEIR shape-unknown 用例,非单用例问题。 2. **GEIR 输出 dtype 与 CSV 声明错配(上板复验 #2 时暴露的掩埋缺陷)**:GEIR 输出 desc dtype 一律置 DT_UNDEFINED 由算子 InferDataType 推导,实际 dtype 与 CSV 声明不一致时(如 NonZero 声明 int32、推导 int64)按声明解析元素数翻倍(6864 vs 3432)。修复:解析段按设备元数据(元数据槽实际 shape + byte_count/numel 推出的实际 itemsize,与声明 dtype 同 kind 重释)修正 dtype 并按实际 shape 还原。 3. **e2e-npu extras 装出不配套组合(#1)**:pip 在区间约束内解析到 torch_npu 2.12.0.post3,配 torch 2.12.0 首次 import 即崩(退出码 134,Duplicated key 'pinned_reserve_segment_size_mb')。修复:extras 排除该已实测坏点(!=2.12.0.post3),保留区间约束——2.9.0 测试基线环境及其他矩阵内组合不受影响。 4. **文档配套(#3/#4)**:README 环境准备节补 en-dtypes(float4_e2m1)依赖声明;CLAUDE.md 补 extractor 链路矩阵测试基线(torch 2.9.0 系)与非基线降级语义说明;examples/case_store/README.md 的 float4 行补 en-dtypes 前置说明。 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes [#415](https://gitcode.com/cann/ops-test-kit/issues/415) ### 希望检视人员了解: - **standards 重解析**镜像的是 kernel 通路既有做法(kernel/worker.py:395-405 golden 后对 shape-unknown 重解析),GEIR 补齐对齐行为,非新机制 - **dtype 重释**仅在 shape-unknown 输出且声明 dtype 按字节解析无法匹配元数据 numel 时触发,且发生时输出 WARNING 日志(declared vs actual itemsize + 实际 shape),常规用例解析路径不变;complex32/4bit 专属解析路径不重释 - **extras 约束**采用"区间 + 排除已实测坏点"而非 == 钉死:区间保留多组合经测试矩阵的灵活性(含 2.9.0 测试基线),坏点后续出现时同法追加排除 - 遗留说明:kernel 通路对 non_zero_shape_unknown 一直 PASS,本 PR 使 GEIR 通路对齐;geir/cases.csv 中 avgpool_update_int4(EZ3002 Cast 不支持)与 scatter_list_perf_only(E19999)为存量环境失败,已在未改动代码上复验确认与本 PR 无关 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - **单元测试**:全量 3080 passed / 55 skipped(en-dtypes/tensorflow/NPU 环境相关跳过);新增 9 条回归测试——standards 重解析 2 条(geir worker)、比对槽位失配守卫 1 条(comparison)、shape-unknown dtype/shape 重释 6 条(output_parse) - **上板验证**(2× Ascend910_9362 / CANN 9.2.0): - non_zero_shape_unknown GEIR 通路:修复前比对段内部崩溃 → 修复后 PASS(100%,100%,dtype 重释 WARNING 日志正常落盘);kernel 通路 PASS 不受影响 - geir/cases.csv 全量:10/12 PASS,2 失败经 stash 对照确认为存量环境问题(图执行阶段错误,先于解析/比对) - kernel/cases.csv 走 GEIR(快速开始原始命令):14/18 PASS,4 失败均为 case_store/README.md 记录的预期失败(EZ3002 dtype 支持面 ×3、en-dtypes 未装 ×1) - **依赖解析**:pip install --dry-run 验证排除后区间内解析到 torch_npu-2.12.0.post2(README 经测试组合) - ruff check / ruff format / 仓库 conventions 基线(复杂度无新增)/ OAT 合规全部通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - README.md:环境准备节——e2e-npu extras 措辞同步(区间 + 排除坏点)、新增 en-dtypes 依赖条目(含缺失时报错签名) - CLAUDE.md:开发/测试节——补 extractor 链路矩阵测试基线(torch 2.9.0 + torch_npu 2.9.0.post7)、非基线降级语义与重冻结指引 - examples/case_store/README.md:GEIR float4 用例行补 en-dtypes 前置说明 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!510 | 15 days ago | |
fix: 可选依赖缺失时优雅降级并完善依赖说明 Co-authored-by: FishPotatoChen<chenqianyu1@h-partners.com> # message auto-generated for no-merge-commit merge: !420 merge fixbug10 into master fix: 可选依赖缺失时优雅降级并完善依赖说明 Created-by: FishPotatoChen Commit-by: FishPotatoChen Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: 可选依赖缺失时优雅降级,并完善依赖声明与说明(对应 commit: fix: 可选依赖缺失时优雅降级并完善依赖说明): - **tbe 编译器**: import tbe 失败时区分 tbe 自身缺失与其传递依赖缺失两种情况,缺依赖时给出 pip3 install <pkg> 安装提示;未初始化时访问 tbe 编译栈给出明确的 RuntimeError(含 CANN 环境检查建议),而不是晦涩的 AttributeError - **GEIR 编译**:ASCEND_OPP_PATH 未配置时 get_ascend_scene_info 会 raise,现降级为默认 x86_64-linux arch 目录,探测流程不再整体崩溃(detect_cann_features 与 GeirCompiler 两处) - **info_keeper**:可选框架(torch_npu/tensorflow 等)未安装属预期环境形态,ModuleNotFoundError 降级为单行 warning,不再打印 ERROR 级整栈回溯污染日志 - **依赖声明**:pyproject.toml/requirements.txt 补充 pyyaml/scipy/ml-dtypes 基础依赖 - **测试适配**:缺 torch_npu/tensorflow 的环境下相关用例 skip 或 mock 处理,保证最小环境下测试套件可运行 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes [#332](https://gitcode.com/cann/ops-test-kit/issues/332) ### 希望检视人员了解: - tests/remote/test_executor_resolve.py 中顺带修正了 test_aclnn_resolve_strips_prefix_and_finds_torch 的参数顺序(snake_name 与 camel_name 传反了),并补充 name == "add" 断言 - tests/test_accessor.py 在 pytest 环境下改用 module-level skip 替代 sys.exit(0),避免被收集时报错 - tests/cli/test_core_limit.py 改为整体替换 torch.npu(raising=False),未装 torch_npu 时也能运行 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - 在缺少 torch_npu/tensorflow 的最小环境下运行测试套件,相关用例正确 skip,不再出现收集错误或 ERROR 级堆栈 - 验证 tbe 依赖缺失场景:日志输出明确的安装提示;未初始化访问编译栈时抛出带修复建议的 RuntimeError - 验证 ASCEND_OPP_PATH 未配置时 GEIR 特性探测降级到默认 arch 目录,流程不中断 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - README.md / README-EN.md:补充 GEIR 通路对系统工具链 g++ 的依赖说明,明确 ACLNN 通路额外依赖 torch - docs/Operator_Test_Guides/ACLNN_Test_Guide.md:补充 torch/torch_npu 依赖安装说明 - docs/Operator_Test_Guides/GEIR_Test_Guide.md:补充 g++ 工具链依赖及安装方式说明 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!420 | 25 days ago |
TTK —— Operator Test Framework
TTK (ops Test Tool Kit) is a full-pipeline, automated, batch operator testing framework provided by the CANN operator library. It helps developers quickly perform batch operator functional verification, performance evaluation, and Golden value comparison, improving operator development quality and efficiency.
Hardware vendor names appearing in this document are for illustration only; TTK is configuration-driven and supports any hardware accelerator that conforms to the interface.
- Full-stack test paths: Kernel (AscendC) / GEIR (GE graph) / ACLNN (aclnn* C API) / E2E (torch/torch_npu, tensorflow, and onnx domains) — covering operator to framework layers
- Multi-device + simulation: Real devices support NPU / MLU / CPU; simulation mode mimics NPU behavior on CPU, enabling development and debugging without real hardware
- Multi-card parallel: Multi-NPU parallel testing
- Multiple comparison methods: Mixed tolerance (ecosystem open-source standard, default), statistical relative error, cosine similarity, binary exact, requantization, cross-check
- Extensible plugins: Custom Golden / input generation, separate namespaces for Kernel and ACLNN/E2E
Architecture Layers & Test Coverage
┌──────────────────────────────────────────────────┐
│ Framework Layer ✅ Torch · TensorFlow · ... │ ← E2E (end-to-end, full pipeline)
├──────────────────────────────────────────────────┤
│ Engine Layer ✅ GEIR · ✅ ACLNN · ✅ ONNX │ ← GEIR (GE graph compile + execute) / ACLNN (engine API) / ONNX (atc→om, via the e2e onnx domain)
├──────────────────────────────────────────────────┤
│ Operator Layer ✅ AiCore · AiCpu │ ← Kernel (operator kernel, compile + execute)
└──────────────────────────────────────────────────┘
Installation
- Install CANN from the Ascend community: Official Link
- Python 3.8+ recommended
- The GEIR path requires the system toolchain
g++(for GE graph compilation; verify withg++ --version) - The ACLNN path additionally requires
torch(input generation/golden computation); the E2E path additionally requirestorch/torch_npu(neither inrequirements.txt; install the pair matching your local CANN version, see the torch_npu installation guide) - The E2E onnx domain (
api_name=onnx.<OpType>) needs no torch/tensorflow: it requires theonnxpackage (≥1.13 withonnx.defs.onnx_opset_version() ≤ 18; onnx 1.13.x pairs with CANN 9.2.x) plus the CANNatccompiler andlibascendclruntime — see the ONNX Operator Test Guide (Chinese)
git clone https://gitcode.com/cann/ops-test-kit.git
cd ops-test-kit
pip install -r requirements.txt
Quick Start
Define test cases via CSV files (see Test Case Generation) and run them in batch:
# Show device info
python3 -m ttk info
# Kernel: compile + execute + precision comparison (--plugin provides golden for some cases)
python3 -m ttk kernel -i examples/case_store/kernel/cases.csv --plugin examples/case_store/kernel/golden.py
# GEIR: GE graph compile + execute
python3 -m ttk geir -i examples/case_store/kernel/cases.csv --plugin examples/case_store/kernel/golden.py
# ACLNN: aclnn* C API
python3 -m ttk aclnn -i examples/case_store/aclnn/cases.csv --plugin examples/case_store/aclnn/golden.py
# E2E: framework end-to-end (--backend cpu forces CPU backend)
python3 -m ttk e2e -i examples/case_store/e2e/torch_cases.csv
# E2E onnx domain: single ONNX op (atc-compiled .om + aclmdl execution, no torch/tensorflow needed)
python3 -m ttk e2e -i examples/case_store/e2e/onnx_cases.csv
Per-case precision status and overall pass rate are printed to the terminal. Add -o to output a result CSV. Run python3 -m ttk kernel --help for parameters.
Documentation
Common
- Test Case Generation (CSV Format) — CSV format, field reference, data types
- Task Execution — CLI parameters, case filtering, device parallelism, advanced scenarios
- Precision Comparison (Chinese) — comparison formulas, tolerance config, method selection
Test Paths
Four test paths map to different layers of the Ascend stack (E2E hosts three domains — torch/tensorflow/onnx; the onnx domain runs at the engine layer via atc→om and has its own row).
| Path | Layer | Guide |
|---|---|---|
| Kernel | Operator (AiCore/AiCpu), compile + execute | Kernel Operator Test Guide |
| GEIR | Engine, GE graph compile + execute | GEIR Operator Test Guide (Chinese) |
| ACLNN | Engine, aclnn* C API | ACLNN Operator Test Guide |
| E2E | Framework (torch/torch_npu, tensorflow), end-to-end | E2E Operator Test Guide |
| E2E-onnx | Engine, single ONNX op via atc-compiled .om + aclmdl execution | ONNX Operator Test Guide (Chinese) |
Advanced Scenarios
Offline data prepare, XPU cross-check, deterministic compute, dump debug, NPUSim simulation — see Task Execution - Advanced Scenarios.
Tool Adaptation
- mssanitizer Adaptation (Chinese) — memory/race/sync detection
- msopprof Adaptation (Chinese) — operator performance profiling
- msdebug Adaptation (Chinese) — operator source-level debugging
FAQ
- FAQ — common issues and self-diagnosis
AI Assistant
TTK ships with Agent Skills that provide TTK usage guidance for CLI-based AI coding assistants (Claude Code, OpenCode, etc.). See AGENTS.md for details.
Note:
python3 -m ttkcommands must be run from the ops-test-kit directory.
Related Information
Contact Us
- Issue Tracking: GitCode Issues
- Community Discussion: GitCode Discussions
- Technical Articles: GitCode Wiki
Introduction
TTK(Ops Test Tool Kit)是CANN算子库提供的全链路、自动化、批量化算子测试框架,帮助开发者快速完成算子批量功能验证、性能评估以及Golden值比对,提升算子开发质量和效率。
Customize your domain