| 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 | 18 days ago | |
feat: spec.describe 参数化用例组装 + batch 一致性声明样本比对增强 Co-authored-by: wangrui<wangrui124@huawei.com> # message auto-generated for no-merge-commit merge: !517 merge br_issue into master feat: spec.describe 参数化用例组装 + batch 一致性声明样本比对增强 Created-by: wangrui_ Commit-by: wangrui Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [ ] 否 [x] 是 __1. AI Agent 平台: OpenCode CLI __2. AI 模型: cannbot/deepseek-v4-pro __3. Prompt上下文 : TTK AGENTS.md + ttk-how-* skills ### PR功能描述 / 为什么需要这个合入**: 本 PR 合入三块改动: 1. spec.describe 参数化用例组装(d6d527e) 多输入算子(如 sparse_flash_mla 18 输入)可用 B/S1/N1/D 等抽象参数列替代逐张量形状声明: - CSV 形状/类型字段任一缺省时,框架收集未识别列为 params 调 spec.describe(params) - 契约:describe 只返回 {"shapes": ..., "dtypes": ...} 两 key,四通路各自映射: kernel/geir → input_shapes/input_dtypes;aclnn/e2e → tensor_view_shapes/tensor_dtypes (aclnn 的 shapes 按 API 参数列表含输出槽位) - 缺啥补啥:CSV 显式声明的字段优先不覆盖;两者都声明过则不触发 describe - 失败语义:DESCRIBE_FAILED / DESCRIBE_RESULT_NOT_DICT / DESCRIBE_MISSING_SHAPES - 配套:SpecResolver.resolve_describe;E2E tensor_view_shapes/tensor_dtypes 缺省 (); factory 未识别列提示更新;参数收集走受限 eval(数字/容器类型化,裸词退回字符串) 2. batch 一致性内置声明样本比对(127cec9) - worker 按声明 relation 切片直切 output 0,逐样本 MD5,以 (api_name, seed, 切片长度) 为 key 回传 - 主进程 cleanup 按 key 跨用例分组、同 key hash 集合基数判定;支持样本跨用例换序(reorder)对齐与多 API 隔离 - Spec.tolerance 支持 isclose/close(rtol/atol/ptol,优先级保持 CSV legacy > Spec > dtype 分档);清理无调用者的 backward CPU golden 死代码 3. batch 一致性结果 CSV 重写后重开句柄(f2003df) - os.replace 后旧句柄指向已 unlink 的 inode,重开结果 CSV 避免后续写入静默丢失 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes # ### 希望检视人员了解: - describe 契约刻意收敛为 shapes/dtypes 两 key:attributes、output_tensor_indexes、输出形状等仍由 CSV 列提供,框架不替算子猜输出语义 - E2E 缺失 tensor_view_shapes/tensor_dtypes 列的行为从"整批解析报错"变为"逐行判无效或 describe 回填" ## 测试 - 新增 21 个 describe 单测(参数收集类型化、四通路映射、门控与缺啥补啥、CSV 优先不覆盖、失败语义、factory 通路)+ batch 比对相关测试更新 - 相关套件 450+ 用例通过;ruff 与 pre-commit 门禁全绿 - 真机 --validate:sparse_flash_mla 的 e2e / aclnn 参数化 CSV 均 1 valid ## 文档更新 - docs/Test_Case_Generation.md 新增「参数化用例(describe)」章节 - ttk/core_modules/common/plugin/README.md describe 契约说明 - .claude/skills/ttk-how-write-plugin/SKILL.md 属性表更新 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!517 | 19 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 | 1 month ago | |
feat: golden-mode NPU 四通路支持(e2e/kernel/aclnn/geir)与 golden 性能采集 Co-authored-by: wangrui<wangrui124@huawei.com> # message auto-generated for no-merge-commit merge: !504 merge br_bugfix into master feat: golden-mode NPU 四通路支持(e2e/kernel/aclnn/geir)与 golden 性能采集 Created-by: wangrui_ Commit-by: wangrui Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: --golden-mode 新增 NPU:golden 在 NPU 上执行并采集设备性能,四通路(kernel/geir/aclnn/e2e)支持;执行或采集失败自动回落 CPU golden,精度不受影响,性能列如实标注来源。 - **golden device 契约**:声明 device 形参(或 **kwargs)的 golden 收设备字符串("npu:0")自行上板——kernel/geir 函数形与 class 形保持 numpy 入参契约,aclnn/e2e 输入本为 torch 张量由框架 .to(device) 上板;字符串载体(golden="torch.add")由框架转张量上板 - **e2e**:golden 生成迁至 golden.py,设备由 exec_backend 决定(golden_api/插件/同 API 统一跟随);_run_api_on_cpu/_run_api_on_npu 合并为 _run_api - **aclnn**:ACLNN_GOLDEN 字符串载体先解析再进 NPU 闭包;修复 _call_torch_api device 路径 UnboundLocalError;回落结果统一 flatten(裸 Tensor 会切错输出槽位) - **结果新增四列**:golden_device_perf_us/golden_kernel_count/golden_kernel_details/golden_source(XPU 模式同列回填三方 device_us);采集目录随通路 DUT 的 msprof 子目录(msprof/{op,op_api,geir,e2e}/<case>_golden) - **互斥与防护**:no-prof×NPU 互斥(bridge);启动期无卡 fail-fast(has_npu_device);manual 真值优先于 NPU 重算 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes #313, fixes #170, fixes #150 ### 希望检视人员了解: - golden 性能列是**参照实现的设备耗时**,不与被测比快慢:golden 走通用算子(如 torch.add 落 aclnnAdd,带 alpha 标量时后端分派 Axpy),被测为特化实现,被测快于 golden 属预期 - kernel 通路 class 形 golden 为 torch 单语义;tf 载体在 kernel worker 受 torch_npu×TF 同进程段错误限制(环境约束,e2e TF 不受影响) - golden 输出 shape 会被采纳为 kernel 被测输出 buffer 形状,shape 算错表现为被测段 OOB 而非比对失败 - 顺带包含四通路 worker 私有函数统一单下划线(__x→_x)等机械重命名 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - 单元测试:2505 passed(npu_golden_runner 回落语义、四通路路由/上板/flatten 契约) - 真机验证(Ascend950PR): - 四通路 NPU/Enable 双模式全 PASS,各形态 golden_source="npu" 且 msprof 采到 kernel 明细 - golden 形态矩阵:torch 原生字符串 / class 形 / 自定义函数 / 输入 TensorList(concat_d)/ 输出 TensorList(split) - -b=release 二进制模式、--warmup=false 对照、e2e TF(GE 分派)、结果 CSV --rerun 兼容 - 回落链路:模拟 NPU 失败 → CPU 回落 PASS(屏显 ERROR + 根因) ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - docs/Task_Execution.md:--golden-mode 选项补 NPU - docs/Dump_Debug.md:manual-data 约束补 NPU - .claude/skills/ttk-how-run-test/SKILL.md、.claude/skills/ttk-how-write-plugin/SKILL.md:补 NPU 模式与 golden device 契约 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!504 | 22 days ago | |
feat: golden-mode NPU 四通路支持(e2e/kernel/aclnn/geir)与 golden 性能采集 Co-authored-by: wangrui<wangrui124@huawei.com> # message auto-generated for no-merge-commit merge: !504 merge br_bugfix into master feat: golden-mode NPU 四通路支持(e2e/kernel/aclnn/geir)与 golden 性能采集 Created-by: wangrui_ Commit-by: wangrui Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: --golden-mode 新增 NPU:golden 在 NPU 上执行并采集设备性能,四通路(kernel/geir/aclnn/e2e)支持;执行或采集失败自动回落 CPU golden,精度不受影响,性能列如实标注来源。 - **golden device 契约**:声明 device 形参(或 **kwargs)的 golden 收设备字符串("npu:0")自行上板——kernel/geir 函数形与 class 形保持 numpy 入参契约,aclnn/e2e 输入本为 torch 张量由框架 .to(device) 上板;字符串载体(golden="torch.add")由框架转张量上板 - **e2e**:golden 生成迁至 golden.py,设备由 exec_backend 决定(golden_api/插件/同 API 统一跟随);_run_api_on_cpu/_run_api_on_npu 合并为 _run_api - **aclnn**:ACLNN_GOLDEN 字符串载体先解析再进 NPU 闭包;修复 _call_torch_api device 路径 UnboundLocalError;回落结果统一 flatten(裸 Tensor 会切错输出槽位) - **结果新增四列**:golden_device_perf_us/golden_kernel_count/golden_kernel_details/golden_source(XPU 模式同列回填三方 device_us);采集目录随通路 DUT 的 msprof 子目录(msprof/{op,op_api,geir,e2e}/<case>_golden) - **互斥与防护**:no-prof×NPU 互斥(bridge);启动期无卡 fail-fast(has_npu_device);manual 真值优先于 NPU 重算 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes #313, fixes #170, fixes #150 ### 希望检视人员了解: - golden 性能列是**参照实现的设备耗时**,不与被测比快慢:golden 走通用算子(如 torch.add 落 aclnnAdd,带 alpha 标量时后端分派 Axpy),被测为特化实现,被测快于 golden 属预期 - kernel 通路 class 形 golden 为 torch 单语义;tf 载体在 kernel worker 受 torch_npu×TF 同进程段错误限制(环境约束,e2e TF 不受影响) - golden 输出 shape 会被采纳为 kernel 被测输出 buffer 形状,shape 算错表现为被测段 OOB 而非比对失败 - 顺带包含四通路 worker 私有函数统一单下划线(__x→_x)等机械重命名 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - 单元测试:2505 passed(npu_golden_runner 回落语义、四通路路由/上板/flatten 契约) - 真机验证(Ascend950PR): - 四通路 NPU/Enable 双模式全 PASS,各形态 golden_source="npu" 且 msprof 采到 kernel 明细 - golden 形态矩阵:torch 原生字符串 / class 形 / 自定义函数 / 输入 TensorList(concat_d)/ 输出 TensorList(split) - -b=release 二进制模式、--warmup=false 对照、e2e TF(GE 分派)、结果 CSV --rerun 兼容 - 回落链路:模拟 NPU 失败 → CPU 回落 PASS(屏显 ERROR + 根因) ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - docs/Task_Execution.md:--golden-mode 选项补 NPU - docs/Dump_Debug.md:manual-data 约束补 NPU - .claude/skills/ttk-how-run-test/SKILL.md、.claude/skills/ttk-how-write-plugin/SKILL.md:补 NPU 模式与 golden device 契约 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!504 | 22 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 | 18 days ago | |
feat: golden-mode NPU 四通路支持(e2e/kernel/aclnn/geir)与 golden 性能采集 Co-authored-by: wangrui<wangrui124@huawei.com> # message auto-generated for no-merge-commit merge: !504 merge br_bugfix into master feat: golden-mode NPU 四通路支持(e2e/kernel/aclnn/geir)与 golden 性能采集 Created-by: wangrui_ Commit-by: wangrui Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: --golden-mode 新增 NPU:golden 在 NPU 上执行并采集设备性能,四通路(kernel/geir/aclnn/e2e)支持;执行或采集失败自动回落 CPU golden,精度不受影响,性能列如实标注来源。 - **golden device 契约**:声明 device 形参(或 **kwargs)的 golden 收设备字符串("npu:0")自行上板——kernel/geir 函数形与 class 形保持 numpy 入参契约,aclnn/e2e 输入本为 torch 张量由框架 .to(device) 上板;字符串载体(golden="torch.add")由框架转张量上板 - **e2e**:golden 生成迁至 golden.py,设备由 exec_backend 决定(golden_api/插件/同 API 统一跟随);_run_api_on_cpu/_run_api_on_npu 合并为 _run_api - **aclnn**:ACLNN_GOLDEN 字符串载体先解析再进 NPU 闭包;修复 _call_torch_api device 路径 UnboundLocalError;回落结果统一 flatten(裸 Tensor 会切错输出槽位) - **结果新增四列**:golden_device_perf_us/golden_kernel_count/golden_kernel_details/golden_source(XPU 模式同列回填三方 device_us);采集目录随通路 DUT 的 msprof 子目录(msprof/{op,op_api,geir,e2e}/<case>_golden) - **互斥与防护**:no-prof×NPU 互斥(bridge);启动期无卡 fail-fast(has_npu_device);manual 真值优先于 NPU 重算 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes #313, fixes #170, fixes #150 ### 希望检视人员了解: - golden 性能列是**参照实现的设备耗时**,不与被测比快慢:golden 走通用算子(如 torch.add 落 aclnnAdd,带 alpha 标量时后端分派 Axpy),被测为特化实现,被测快于 golden 属预期 - kernel 通路 class 形 golden 为 torch 单语义;tf 载体在 kernel worker 受 torch_npu×TF 同进程段错误限制(环境约束,e2e TF 不受影响) - golden 输出 shape 会被采纳为 kernel 被测输出 buffer 形状,shape 算错表现为被测段 OOB 而非比对失败 - 顺带包含四通路 worker 私有函数统一单下划线(__x→_x)等机械重命名 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - 单元测试:2505 passed(npu_golden_runner 回落语义、四通路路由/上板/flatten 契约) - 真机验证(Ascend950PR): - 四通路 NPU/Enable 双模式全 PASS,各形态 golden_source="npu" 且 msprof 采到 kernel 明细 - golden 形态矩阵:torch 原生字符串 / class 形 / 自定义函数 / 输入 TensorList(concat_d)/ 输出 TensorList(split) - -b=release 二进制模式、--warmup=false 对照、e2e TF(GE 分派)、结果 CSV --rerun 兼容 - 回落链路:模拟 NPU 失败 → CPU 回落 PASS(屏显 ERROR + 根因) ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - docs/Task_Execution.md:--golden-mode 选项补 NPU - docs/Dump_Debug.md:manual-data 约束补 NPU - .claude/skills/ttk-how-run-test/SKILL.md、.claude/skills/ttk-how-write-plugin/SKILL.md:补 NPU 模式与 golden device 契约 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!504 | 22 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 | 18 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 | 1 month ago | |
docs+fix: NPUSim/priority 契约文档收敛;wheel 补齐默认 YAML;仿真超时整组回收;tiling dump uint8 序列化 Co-authored-by: wangrui<wangrui124@huawei.com> # message auto-generated for no-merge-commit merge: !470 merge br_issue into master docs+fix: NPUSim/priority 契约文档收敛;wheel 补齐默认 YAML;仿真超时整组回收;tiling dump uint8 序列化 Created-by: wangrui_ Commit-by: wangrui Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [ ] 否 [x] 是 __1. AI Agent 平台: OpenCode __2. AI 模型: deepseek-v4-pro __3. Prompt上下文 : TTK 运维工作流(issue 分析→修复→回归→提交) ### PR功能描述 / 为什么需要这个合入: 五笔小修复与文档收敛: 1. **NPUSim 文档判据矛盾(#366)**:设计文档第 2 节表格原写「退出码 0 = PASS」,与第 7/13 节「以 wrapper 结果文件为准」的契约矛盾,且原文暴露代码实现细节;改为功能化描述并指向 §7。 2. **priority 非负契约(#296)**:文档与 --priority help 明确仅支持非负整数(单值/闭区间/开放上界),消除「负数被当范围符解析」的契约歧义。 3. **wheel 默认 YAML 缺失(#316)**:pyproject package-data 补齐 config/*.yaml 与 remote/server/*.yaml;wheel 构建+隔离安装验证 load_config/load_server_config 恢复默认值(cascade.port_base=30000、providers=['torch'])。 4. **仿真超时后代进程残留(#326)**:npusim_runner 改为独立会话启动(start_new_session),超时/中断时对整组 SIGTERM→宽限→SIGKILL 后回收并排空管道;补 2 个假进程回归(超时/KeyboardInterrupt 后 wrapper 后代必死)。 5. **tiling bytes dump 格式无效(#341)**:无 dtype 的 bytes 走 npy/pt 时按一维 uint8 数组序列化,numpy.load/torch.load 可读且逐字节保真;bin 保持原始字节;读侧无影响(manual_data 忽略 tiling 调试文件)。 ### 该PR关联的issue fixes #366, fixes #296, fixes #316, fixes #326, fixes #341 ### 希望检视人员了解: - #316 验证在本机完成(Python 3.12.9/setuptools 82),仓库 CI 无 wheel 构建任务; - #326 回归为纯假进程,无 CANN/NPU 依赖; - 本地 commit 因 .gitignore 的 dump/ 误伤需 -f 暂存 dump 目录文件(既有仓库问题,未在本次修)。 ## 测试 - pytest tests/core_modules/common/simulator/test_simulator_backend.py:42 passed - pytest tests/core_modules/common/dump/test_dumper.py:32 passed - ruff check / ruff format / pre-commit 全部通过 - #316:pip wheel --no-build-isolation 构建成功;隔离安装后 default.yaml 存在、配置解析与源码一致 ## 文档更新 - docs/NPUSim/npusim_design.md - docs/Task_Execution.md、docs/Test_Case_Generation.md - ttk/cli/common.py(--priority help 文案) ## 类型标签 - [x] Bug修复 - [x] 文档更新 See merge request: cann/ops-test-kit!470 | 26 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 | 18 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 | 30 days ago | |
feat: spec.describe 参数化用例组装 + batch 一致性声明样本比对增强 Co-authored-by: wangrui<wangrui124@huawei.com> # message auto-generated for no-merge-commit merge: !517 merge br_issue into master feat: spec.describe 参数化用例组装 + batch 一致性声明样本比对增强 Created-by: wangrui_ Commit-by: wangrui Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [ ] 否 [x] 是 __1. AI Agent 平台: OpenCode CLI __2. AI 模型: cannbot/deepseek-v4-pro __3. Prompt上下文 : TTK AGENTS.md + ttk-how-* skills ### PR功能描述 / 为什么需要这个合入**: 本 PR 合入三块改动: 1. spec.describe 参数化用例组装(d6d527e) 多输入算子(如 sparse_flash_mla 18 输入)可用 B/S1/N1/D 等抽象参数列替代逐张量形状声明: - CSV 形状/类型字段任一缺省时,框架收集未识别列为 params 调 spec.describe(params) - 契约:describe 只返回 {"shapes": ..., "dtypes": ...} 两 key,四通路各自映射: kernel/geir → input_shapes/input_dtypes;aclnn/e2e → tensor_view_shapes/tensor_dtypes (aclnn 的 shapes 按 API 参数列表含输出槽位) - 缺啥补啥:CSV 显式声明的字段优先不覆盖;两者都声明过则不触发 describe - 失败语义:DESCRIBE_FAILED / DESCRIBE_RESULT_NOT_DICT / DESCRIBE_MISSING_SHAPES - 配套:SpecResolver.resolve_describe;E2E tensor_view_shapes/tensor_dtypes 缺省 (); factory 未识别列提示更新;参数收集走受限 eval(数字/容器类型化,裸词退回字符串) 2. batch 一致性内置声明样本比对(127cec9) - worker 按声明 relation 切片直切 output 0,逐样本 MD5,以 (api_name, seed, 切片长度) 为 key 回传 - 主进程 cleanup 按 key 跨用例分组、同 key hash 集合基数判定;支持样本跨用例换序(reorder)对齐与多 API 隔离 - Spec.tolerance 支持 isclose/close(rtol/atol/ptol,优先级保持 CSV legacy > Spec > dtype 分档);清理无调用者的 backward CPU golden 死代码 3. batch 一致性结果 CSV 重写后重开句柄(f2003df) - os.replace 后旧句柄指向已 unlink 的 inode,重开结果 CSV 避免后续写入静默丢失 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes # ### 希望检视人员了解: - describe 契约刻意收敛为 shapes/dtypes 两 key:attributes、output_tensor_indexes、输出形状等仍由 CSV 列提供,框架不替算子猜输出语义 - E2E 缺失 tensor_view_shapes/tensor_dtypes 列的行为从"整批解析报错"变为"逐行判无效或 describe 回填" ## 测试 - 新增 21 个 describe 单测(参数收集类型化、四通路映射、门控与缺啥补啥、CSV 优先不覆盖、失败语义、factory 通路)+ batch 比对相关测试更新 - 相关套件 450+ 用例通过;ruff 与 pre-commit 门禁全绿 - 真机 --validate:sparse_flash_mla 的 e2e / aclnn 参数化 CSV 均 1 valid ## 文档更新 - docs/Test_Case_Generation.md 新增「参数化用例(describe)」章节 - ttk/core_modules/common/plugin/README.md describe 契约说明 - .claude/skills/ttk-how-write-plugin/SKILL.md 属性表更新 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!517 | 19 days ago | |
feat: golden-mode NPU 四通路支持(e2e/kernel/aclnn/geir)与 golden 性能采集 Co-authored-by: wangrui<wangrui124@huawei.com> # message auto-generated for no-merge-commit merge: !504 merge br_bugfix into master feat: golden-mode NPU 四通路支持(e2e/kernel/aclnn/geir)与 golden 性能采集 Created-by: wangrui_ Commit-by: wangrui Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: --golden-mode 新增 NPU:golden 在 NPU 上执行并采集设备性能,四通路(kernel/geir/aclnn/e2e)支持;执行或采集失败自动回落 CPU golden,精度不受影响,性能列如实标注来源。 - **golden device 契约**:声明 device 形参(或 **kwargs)的 golden 收设备字符串("npu:0")自行上板——kernel/geir 函数形与 class 形保持 numpy 入参契约,aclnn/e2e 输入本为 torch 张量由框架 .to(device) 上板;字符串载体(golden="torch.add")由框架转张量上板 - **e2e**:golden 生成迁至 golden.py,设备由 exec_backend 决定(golden_api/插件/同 API 统一跟随);_run_api_on_cpu/_run_api_on_npu 合并为 _run_api - **aclnn**:ACLNN_GOLDEN 字符串载体先解析再进 NPU 闭包;修复 _call_torch_api device 路径 UnboundLocalError;回落结果统一 flatten(裸 Tensor 会切错输出槽位) - **结果新增四列**:golden_device_perf_us/golden_kernel_count/golden_kernel_details/golden_source(XPU 模式同列回填三方 device_us);采集目录随通路 DUT 的 msprof 子目录(msprof/{op,op_api,geir,e2e}/<case>_golden) - **互斥与防护**:no-prof×NPU 互斥(bridge);启动期无卡 fail-fast(has_npu_device);manual 真值优先于 NPU 重算 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes #313, fixes #170, fixes #150 ### 希望检视人员了解: - golden 性能列是**参照实现的设备耗时**,不与被测比快慢:golden 走通用算子(如 torch.add 落 aclnnAdd,带 alpha 标量时后端分派 Axpy),被测为特化实现,被测快于 golden 属预期 - kernel 通路 class 形 golden 为 torch 单语义;tf 载体在 kernel worker 受 torch_npu×TF 同进程段错误限制(环境约束,e2e TF 不受影响) - golden 输出 shape 会被采纳为 kernel 被测输出 buffer 形状,shape 算错表现为被测段 OOB 而非比对失败 - 顺带包含四通路 worker 私有函数统一单下划线(__x→_x)等机械重命名 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - 单元测试:2505 passed(npu_golden_runner 回落语义、四通路路由/上板/flatten 契约) - 真机验证(Ascend950PR): - 四通路 NPU/Enable 双模式全 PASS,各形态 golden_source="npu" 且 msprof 采到 kernel 明细 - golden 形态矩阵:torch 原生字符串 / class 形 / 自定义函数 / 输入 TensorList(concat_d)/ 输出 TensorList(split) - -b=release 二进制模式、--warmup=false 对照、e2e TF(GE 分派)、结果 CSV --rerun 兼容 - 回落链路:模拟 NPU 失败 → CPU 回落 PASS(屏显 ERROR + 根因) ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> - docs/Task_Execution.md:--golden-mode 选项补 NPU - docs/Dump_Debug.md:manual-data 约束补 NPU - .claude/skills/ttk-how-run-test/SKILL.md、.claude/skills/ttk-how-write-plugin/SKILL.md:补 NPU 模式与 golden device 契约 ## 类型标签 <!-- [x] 表示选中 --> - [ ] Bug修复 - [x] 新特性 - [ ] 性能优化 - [x] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!504 | 22 days ago | |
fix: FZC04 排布、worker 生命周期、deep_merge 隔离与 CLI 错误着色统一 Co-authored-by: wangrui<wangrui124@huawei.com> # message auto-generated for no-merge-commit merge: !421 merge br_bugfix into master fix: FZC04 排布、worker 生命周期、deep_merge 隔离与 CLI 错误着色统一 Created-by: wangrui_ Commit-by: wangrui Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [ ] 否 [x] 是 __1. AI Agent 平台: opencode __2. AI 模型: GLM (CANNBot) __3. Prompt上下文 : issue #142/#156/#198 缺陷分析与修复(GE/canndev 源码对拍基准 → 实现 → 回归测试) ### PR功能描述 / 为什么需要这个合入**: 修复三个开源 issue 并统一 CLI 错误输出口径,共三批改动: **1. FZC04 权重转换重写 + profiler 降级(fixes #142)** - to_fractal_z_c04 按 GE format_transfer_fz_c04.cc 官方语义重写:C 补 4、N 补 16 倍数,z = h·w·4 + c 展平,输出 (ceil(4·h·w/c0), ceil(N/16), 16, c0);与 GE 参考直译对拍 10 组逐元素一致 - 修复 cin_outer 公式越界(h·w>1 必现 IndexError)与 groups>1 静默产出错数据;新增 C≤4 / groups=1 域校验(GE 同语义显式拒绝) - libmsprofiler.so/libprofapi.so 加载失败 warning 降级(构造→不采集、dfx→跳过上报,False 哨兵防重试),不再被 launch try 吞成 LAUNCH_FAILED 误报;ASCEND_OPP_PATH 未设置时明确提示 **2. worker 生命周期串行化(fixes #156)** - crash/fail 结果分支裸 resurrect() → recycle():错误 worker 与 PASS 路径同口径先 close 再重建 - close() join 守卫由上报状态改为实际存活(exitcode is None):worker 异常自退出会先报 DEAD 再走 atexit 清理链(rtDeviceReset ~5s),只认状态会跳过 join——修正后 join 到真实退出,闭合新 worker aclrtSetDevice 与旧 worker 清理重叠导致的 507033 竞态;重复 close 幂等 - 两处改动缺一不可:recycle 让错误路径走进 close,守卫修正让 close 真的等 **3. deep_merge 结果隔离 + CLI 错误着色统一(fixes #198)** - deep_merge 对 base 与非递归 override 值 deepcopy:合并结果嵌套结构与输入双侧隔离,原地扩展不再回写默认/用户配置;dict 递归/list 整体替换语义不变 - 新增 print_error(tty 整行红、非 tty 纯文本,与 _ErrorRedFormatter 同口径);argparse(_ErrorAwareArgumentParser,子命令经 parser_class 链式继承)、CLI 顶层兜底、help 族 4 处统一接入——消息文本与退出码不变,消除 "ttk: error 不红" 的口径分裂 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes #142, fixes #156, fixes #198 ### 希望检视人员了解: - FZC04 排布基准为 GE base/formats/format_transfers/format_transfer_fz_c04.cc(C≤4、groups=1 域限制均来自该实现);仓库内原 xfail 用例已按新语义原位整改 - #142 中 PAD_C0_MAPPING 32-bit=16 经 GE/canndev GetCubeSizeByDataType(≥2 字节一律 16)复核为正确默认,本 PR 未改动该表——在途 PR !356 若改为 8 会引入回归 - #156 残余(低概率,暂不处理):--pc>1 共卡时 close join 窗口内其他 worker 可获锁;崩溃进程驱动侧异步清理未等待 - 着色改动无行为变化;scripts/ 下开发辅助脚本未纳入 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - 全量单测 2739 passed / 3 skipped(tests/ 除 remote 与存量损坏的 tbe_multiprocessing 收集错误——干净树同样失败,与本 PR 无关) - FZC04:GE 参考直译对拍 10 组逐元素全匹配(c=1..4、int8 c0=32、NHWC/HWCN 源格式、z1>1) - worker 生命周期:forkserver 真进程端到端用例覆盖崩溃 resurrect 与"自退出+慢清理链"close 等待,对旧实现实测 FAIL(判别力确认) - print_error:tty/非 tty 双态断言 + ttk bogus argparse 端到端断言 - ruff check/format 与 pre-commit 全钩子(含 OAT 合规)通过 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无需更新:合并语义、报错文本、退出码等对外行为不变(FZC04 域校验的报错信息自解释)。 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!421 | 1 month ago | |
fix: XPU 三方执行丢弃 self 名输入(aten 单目算子惯例)——bind_params 经 *args 送达 + executor 三相位去 self 过滤 Co-authored-by: FishPotatoChen<chenqianyu1@h-partners.com> # message auto-generated for no-merge-commit merge: !512 merge fixbug15 into master fix: XPU 三方执行丢弃 self 名输入(aten 单目算子惯例)——bind_params 经 *args 送达 + executor 三相位去 self 过滤 Created-by: FishPotatoChen Commit-by: FishPotatoChen Merged-by: cann-robot Description: <!-- 感谢您的合入申请! --> ### 当前PR是否有AI参与: [x] 否 [ ] 是 __1. AI Agent 平台: __2. AI 模型: __3. Prompt上下文 : ### PR功能描述 / 为什么需要这个合入**: aten 命名惯例下,ACLNN 算子 C 接口的首个输入参数名多为 self(如 aclnnReal(aclTensor *self, aclTensor *out))。TTK 做 XPU 三方校验时输入按参数名发给 xpu-server 按名绑定,但服务端把 self 当特殊名过滤掉了:类形式插件通路(bind_params)中,绑定 __call__ 的签名已无 self,池中 self 名输入本应经 *args 位置送达,却在 leftover 分发处被整体丢弃——既不进 **kwargs(防与实例位冲突,合理),也进不了 *args(与 docstring "use *args to receive it positionally" 的承诺矛盾);无插件的 api 自动解析通路(_invoke_function 三相位)同样全部过滤 self。结果凡输入参数名含 self 的算子(绝大多数 aclnn 算子),XPU 三方执行收不到输入、报 500,cross_check 一律 third_party unavailable,而 NPU 侧执行正常。 修复后 self 名输入按普通输入对待:经 *args 按 C 头文件序位置送达,仅在与实例位冲突(绑定方法 / 未绑定 __init__ 的 **kwargs)时绕行;普通函数签名中的 self 形参视为真实参数名按名绑定;invoke_third_party 补 object.__init__ 守卫防无自定义 __init__ 的插件类被误灌位置参数;_invoke_function 三相位去除 k != "self" 过滤,api 自动解析(如 aclnnAbs→torch.abs)不再丢弃输入。 ### 该PR关联的issue *(格式为fixes #<issue号>, 或者resolves #<issue号>)*: fixes [#419](https://gitcode.com/cann/ops-test-kit/issues/419) [#418](https://gitcode.com/cann/ops-test-kit/issues/418) ### 希望检视人员了解: - self → *args 位置送达本是 !107(8ec73dd)实现的原始语义,后续仓库重构(6fd9eb3)改写 leftover 分发时丢失,并给三相位加上了 k != "self" 过滤——本 PR 恢复并完善该契约,回归来源可查 git 历史。 - executor.py 的改动是**净删 7 处过滤的简化**,不是新增逻辑;torch 内建拒收 self= 关键字但位置收参正常(已实测),三相位 try/except 回退结构不变。 - xpu.py 的 object.__init__ 守卫是 bind_params 改动的必要配套:无自定义 __init__ 的插件类(常见形态)在 object.__init__ 的 *args 收到 self 名输入后 cls(t) 会直接 TypeError,executor 侧本有同款守卫,本次对齐。 - 兼容性:无 self 名输入的既有 spec 插件行为不变(非 self 的 leftover 路由仍为 **kwargs 优先);server 与 client 同源(server import ttk.core_modules.common),已部署的 GPU xpu-server 需整仓重新部署后生效。 ## 测试 <!--描述进行了哪些测试来验证你的改动。--> - 单测:新增 16 个回归测试(tests/core_modules/common/test_xpu_third_party.py::TestBindParamsSelfNamedInput ×10、tests/remote/test_executor_self_named_input.py ×6),覆盖 *args 位置送达、**kwargs 实例位冲突绕行、__init__ 实例占位不误灌、函数形式真实 self 形参按名绑定等契约;tests/remote + tests/core_modules/common 全量 1110 passed, 4 skipped,无回归。 - 端到端:构造 aclnnReal(spec 模式,类形式 third_party 插件)与 aclnnAbs(api 模式,无插件自动解析)两条 cross_check 用例,修复前均 500(no input received / cannot be parameter-bound from inputs ['self']),修复后 2/2 PASS,xpu_metrics 分别回传 AclnnRealTestSpec / torch.abs;全链路在本机纯 CPU xpu-server(硬件探测 fallback cpu)上验证,无需 GPU 硬件。 ## 文档更新 <!--如果这个PR包含文档的更新,请在这里指出。例如:更新了README.md文件。--> 无 ## 类型标签 <!-- [x] 表示选中 --> - [x] Bug修复 - [ ] 新特性 - [ ] 性能优化 - [ ] 文档更新 - [ ] 其他,请描述: See merge request: cann/ops-test-kit!512 | 19 days ago |
| Files | Last commit | Last update |
|---|---|---|
| 18 days ago | ||
| 19 days ago | ||
| 1 month ago | ||
| 22 days ago | ||
| 22 days ago | ||
| 18 days ago | ||
| 22 days ago | ||
| 18 days ago | ||
| 1 month ago | ||
| 26 days ago | ||
| 18 days ago | ||
| 30 days ago | ||
| 19 days ago | ||
| 22 days ago | ||
| 1 month ago | ||
| 19 days ago |