ops-tune-workbench-plugin 0.0.0-stage → 0.0.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/NOTICE.md +14 -0
  2. package/README.md +39 -2
  3. package/cordis.patch.yml +20 -0
  4. package/lib/client.js +4253 -0
  5. package/lib/host.js +2518 -0
  6. package/package.json +53 -4
  7. package/skills/tool-ops-tune/INSTALL.md +52 -0
  8. package/skills/tool-ops-tune/README.md +167 -0
  9. package/skills/tool-ops-tune/SKILL.md +93 -0
  10. package/skills/tool-ops-tune/agent/AGENTS.md +195 -0
  11. package/skills/tool-ops-tune/agent/agents/perf-implementer.md +68 -0
  12. package/skills/tool-ops-tune/agent/agents/perf-reviewer.md +86 -0
  13. package/skills/tool-ops-tune/agent/workflows/task-prompts.md +362 -0
  14. package/skills/tool-ops-tune/agent/workflows/troubleshooting.md +43 -0
  15. package/skills/tool-ops-tune/docs/figures/opstune-architecture.png +0 -0
  16. package/skills/tool-ops-tune/docs/figures/opstune-architecture.svg +253 -0
  17. package/skills/tool-ops-tune/docs/ops-tune-design.md +404 -0
  18. package/skills/tool-ops-tune/docs//347/224/250/344/276/213/346/236/204/345/273/272.md +714 -0
  19. package/skills/tool-ops-tune/docs//347/237/245/350/257/206/345/272/223/350/247/204/350/214/203.md +103 -0
  20. package/skills/tool-ops-tune/evals/evals.json +242 -0
  21. package/skills/tool-ops-tune/ops-collect/SKILL.md +146 -0
  22. package/skills/tool-ops-tune/ops-collect/references/tool-routing.md +86 -0
  23. package/skills/tool-ops-tune/ops-collect/scripts/collect_board.sh +444 -0
  24. package/skills/tool-ops-tune/ops-collect/scripts/collect_cases.py +368 -0
  25. package/skills/tool-ops-tune/ops-collect/scripts/collect_sim.sh +134 -0
  26. package/skills/tool-ops-tune/ops-collect/scripts/csv_to_db.py +314 -0
  27. package/skills/tool-ops-tune/ops-collect/scripts/db_bench.py +545 -0
  28. package/skills/tool-ops-tune/ops-collect/scripts/facts_bridge.py +1063 -0
  29. package/skills/tool-ops-tune/ops-collect/scripts/isolation_test.py +454 -0
  30. package/skills/tool-ops-tune/ops-collect/scripts/jsonl_to_cases.py +163 -0
  31. package/skills/tool-ops-tune/ops-family/SKILL.md +76 -0
  32. package/skills/tool-ops-tune/ops-family/references/broadcast/advanced_tiling.md +92 -0
  33. package/skills/tool-ops-tune/ops-family/references/broadcast/broadcast_design.md +160 -0
  34. package/skills/tool-ops-tune/ops-family/references/broadcast/code/broadcast_add_kernel.cpp +126 -0
  35. package/skills/tool-ops-tune/ops-family/references/broadcast/code/broadcast_add_tiling.cpp +144 -0
  36. package/skills/tool-ops-tune/ops-family/references/broadcast/code/broadcast_tiling_common.h +401 -0
  37. package/skills/tool-ops-tune/ops-family/references/broadcast/code/onedim_add_kernel.cpp +107 -0
  38. package/skills/tool-ops-tune/ops-family/references/broadcast/code/onedim_add_tiling.cpp +64 -0
  39. package/skills/tool-ops-tune/ops-family/references/broadcast/datacopypad_design.md +46 -0
  40. package/skills/tool-ops-tune/ops-family/references/broadcast/guide.md +14 -0
  41. package/skills/tool-ops-tune/ops-family/references/broadcast/nddma_design.md +53 -0
  42. package/skills/tool-ops-tune/ops-family/references/broadcast/onedim_design.md +114 -0
  43. package/skills/tool-ops-tune/ops-family/references/broadcast/ub_broadcast_design.md +67 -0
  44. package/skills/tool-ops-tune/ops-family/references/common/datacopy_optimization_design.md +351 -0
  45. package/skills/tool-ops-tune/ops-family/references/common/index.md +9 -0
  46. package/skills/tool-ops-tune/ops-family/references/common/tail_block_design.md +268 -0
  47. package/skills/tool-ops-tune/ops-family/references/common/timing_harness/index.md +38 -0
  48. package/skills/tool-ops-tune/ops-family/references/common/timing_harness/timing_harness_aclrt_event.cpp +199 -0
  49. package/skills/tool-ops-tune/ops-family/references/common/timing_harness/timing_harness_torch_event.py +130 -0
  50. package/skills/tool-ops-tune/ops-family/references/common/ub_resident_design.md +342 -0
  51. package/skills/tool-ops-tune/ops-family/references/conversion/guide.md +69 -0
  52. package/skills/tool-ops-tune/ops-family/references/conversion/index.md +4 -0
  53. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_base.template +81 -0
  54. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_big_dim.template +217 -0
  55. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_cut_one_axis.template +336 -0
  56. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_cut_two_axis.template +781 -0
  57. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_n_last.template +340 -0
  58. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_small_shape.template +321 -0
  59. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_tensor_move.template +102 -0
  60. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_transdata_5hd.template +480 -0
  61. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_transdata_5hd_021axis.template +533 -0
  62. package/skills/tool-ops-tune/ops-family/references/conversion/templates/dav3510/transpose_with_gather.template +688 -0
  63. package/skills/tool-ops-tune/ops-family/references/conversion/templates/transpose_tiling_data.template +192 -0
  64. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_big_dim.md +220 -0
  65. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_cut_one_axis.md +175 -0
  66. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_cut_two_axis.md +177 -0
  67. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_fusion_design.md +398 -0
  68. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_gather.md +191 -0
  69. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_n_last.md +276 -0
  70. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_small_shape.md +315 -0
  71. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_tensor_move.md +203 -0
  72. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_tiling_data.md +176 -0
  73. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_vconv_021.md +206 -0
  74. package/skills/tool-ops-tune/ops-family/references/conversion/transpose_vconv_5hd.md +179 -0
  75. package/skills/tool-ops-tune/ops-family/references/elementwise/double_buffer_design.md +288 -0
  76. package/skills/tool-ops-tune/ops-family/references/elementwise/guide.md +46 -0
  77. package/skills/tool-ops-tune/ops-family/references/elementwise/index.md +10 -0
  78. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/CMakeLists.txt +131 -0
  79. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/README.md +55 -0
  80. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_extension/add_custom_torch.cpp +80 -0
  81. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_extension/ops.h +23 -0
  82. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_extension/register.cpp +30 -0
  83. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_host/add_custom.asc +149 -0
  84. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_host/data_utils.h +97 -0
  85. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_kernel/add_custom_kernel.asc +136 -0
  86. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/op_kernel/add_custom_tiling.h +31 -0
  87. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/run.sh +86 -0
  88. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/gen_data.py +70 -0
  89. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/golden.py +34 -0
  90. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/test_torch.py +99 -0
  91. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/add_custom/scripts/verify_result.py +56 -0
  92. package/skills/tool-ops-tune/ops-family/references/elementwise/templates/usage_guide.md +61 -0
  93. package/skills/tool-ops-tune/ops-family/references/elementwise/vector_efficiency_design.md +203 -0
  94. package/skills/tool-ops-tune/ops-family/references/fa/fa_mixed_kernel_design.md +174 -0
  95. package/skills/tool-ops-tune/ops-family/references/fa/fa_roofline_design.md +141 -0
  96. package/skills/tool-ops-tune/ops-family/references/fa/guide.md +87 -0
  97. package/skills/tool-ops-tune/ops-family/references/knowledge_gaps.json +56 -0
  98. package/skills/tool-ops-tune/ops-family/references/matmul/best-practices-guide.md +14 -0
  99. package/skills/tool-ops-tune/ops-family/references/matmul/fullload_design.md +344 -0
  100. package/skills/tool-ops-tune/ops-family/references/matmul/guide.md +52 -0
  101. package/skills/tool-ops-tune/ops-family/references/matmul/mte2_preload_design.md +320 -0
  102. package/skills/tool-ops-tune/ops-family/references/matmul/pingpong_design.md +254 -0
  103. package/skills/tool-ops-tune/ops-family/references/matmul/scale_coalescing_design.md +282 -0
  104. package/skills/tool-ops-tune/ops-family/references/matmul/streamk_design.md +374 -0
  105. package/skills/tool-ops-tune/ops-family/references/matmul/swat_design.md +423 -0
  106. package/skills/tool-ops-tune/ops-family/references/matmul/templates/matmul_basic_blaze.template +165 -0
  107. package/skills/tool-ops-tune/ops-family/references/matmul/templates/usage_guide.md +29 -0
  108. package/skills/tool-ops-tune/ops-family/references/mc2/best-practices-guide.md +43 -0
  109. package/skills/tool-ops-tune/ops-family/references/mc2/guide.md +42 -0
  110. package/skills/tool-ops-tune/ops-family/references/mc2/local_matmul_design.md +130 -0
  111. package/skills/tool-ops-tune/ops-family/references/mc2/pipeline_balancing_design.md +502 -0
  112. package/skills/tool-ops-tune/ops-family/references/reduce/guide.md +178 -0
  113. package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/kernel_utils.template +75 -0
  114. package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ar_full_load.template +429 -0
  115. package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ar_recompute.template +485 -0
  116. package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ar_small_r.template +348 -0
  117. package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ara_full_load.template +574 -0
  118. package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ara_online.template +324 -0
  119. package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_ara_recompute.template +436 -0
  120. package/skills/tool-ops-tune/ops-family/references/reduce/templates/dav310/softmax_v2_base.template +950 -0
  121. package/skills/tool-ops-tune/ops-family/references/reduce/templates/fused_attention_online_softmax_design.md +428 -0
  122. package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ar_full_load.md +137 -0
  123. package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ar_recompute.md +135 -0
  124. package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ar_small_r.md +122 -0
  125. package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ara_full_load.md +144 -0
  126. package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ara_online.md +185 -0
  127. package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_ara_recompute.md +163 -0
  128. package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_tiling.template +460 -0
  129. package/skills/tool-ops-tune/ops-family/references/reduce/templates/softmax_v2_tiling_data.template +278 -0
  130. package/skills/tool-ops-tune/ops-family/references/reduce/templates/state_resident_design.md +337 -0
  131. package/skills/tool-ops-tune/ops-family/references/reduce/templates/usage_guide.md +253 -0
  132. package/skills/tool-ops-tune/ops-family/references/scalar/coding_principles.md +476 -0
  133. package/skills/tool-ops-tune/ops-family/references/scalar/conv_scalar.md +163 -0
  134. package/skills/tool-ops-tune/ops-family/references/scalar/guide.md +30 -0
  135. package/skills/tool-ops-tune/ops-family/references/simt/guide.md +91 -0
  136. package/skills/tool-ops-tune/ops-family/references/simt/optimization-guide.md +110 -0
  137. package/skills/tool-ops-tune/ops-family/references/sort/guide.md +83 -0
  138. package/skills/tool-ops-tune/ops-family/references/sort/radix_sort.md +354 -0
  139. package/skills/tool-ops-tune/ops-family/scripts/family_asset_audit.py +68 -0
  140. package/skills/tool-ops-tune/ops-family/scripts/tiling_candidates.py +419 -0
  141. package/skills/tool-ops-tune/ops-mechanism/SKILL.md +23 -0
  142. package/skills/tool-ops-tune/ops-mechanism/cases/ascendc/case_groupedmatmul_pipeline.md +23 -0
  143. package/skills/tool-ops-tune/ops-mechanism/cases/ascendc/case_triton_atomic_revert.md +19 -0
  144. package/skills/tool-ops-tune/ops-mechanism/cases/mc2/case_mc2_fusion.md +19 -0
  145. package/skills/tool-ops-tune/ops-mechanism/references/optimize/api-usage.md +70 -0
  146. package/skills/tool-ops-tune/ops-mechanism/references/optimize/ascendc-regbase-vf.md +45 -0
  147. package/skills/tool-ops-tune/ops-mechanism/references/optimize/ascendc-tiling.md +51 -0
  148. package/skills/tool-ops-tune/ops-mechanism/references/optimize/data-copy.md +67 -0
  149. package/skills/tool-ops-tune/ops-mechanism/references/optimize/index.md +45 -0
  150. package/skills/tool-ops-tune/ops-mechanism/references/optimize/mc2-balancing.md +77 -0
  151. package/skills/tool-ops-tune/ops-mechanism/references/optimize/mc2.md +103 -0
  152. package/skills/tool-ops-tune/ops-mechanism/references/optimize/memory-hierarchy.md +40 -0
  153. package/skills/tool-ops-tune/ops-mechanism/references/optimize/pipeline.md +95 -0
  154. package/skills/tool-ops-tune/ops-mechanism/scripts/case_backfill.py +170 -0
  155. package/skills/tool-ops-tune/ops-mechanism/scripts/log_gap.py +145 -0
  156. package/skills/tool-ops-tune/ops-mechanism/scripts/mc2_search.py +367 -0
  157. package/skills/tool-ops-tune/ops-report/SKILL.md +77 -0
  158. package/skills/tool-ops-tune/ops-verdict/evals/run_evals.py +837 -0
  159. package/skills/tool-ops-tune/ops-verdict/evals/smoke/install-hooks.sh +65 -0
  160. package/skills/tool-ops-tune/ops-verdict/evals/smoke/run_smoke.sh +405 -0
  161. package/skills/tool-ops-tune/ops-verdict/fixtures/core_tail_a5.csv +25 -0
  162. package/skills/tool-ops-tune/ops-verdict/fixtures/few_cores_a5.csv +5 -0
  163. package/skills/tool-ops-tune/ops-verdict/fixtures/mte2_bound_a2.csv +17 -0
  164. package/skills/tool-ops-tune/ops-verdict/fixtures/multi_kernel_mix_a5.csv +7 -0
  165. package/skills/tool-ops-tune/ops-verdict/fixtures/no_bound_a5.csv +9 -0
  166. package/skills/tool-ops-tune/ops-verdict/fixtures/serial_no_overlap_a2.csv +9 -0
  167. package/skills/tool-ops-tune/ops-verdict/fixtures/vec_bound_a5.csv +9 -0
  168. package/skills/tool-ops-tune/ops-verdict/references/io-contracts.md +94 -0
  169. package/skills/tool-ops-tune/ops-verdict/references/rule-schema.md +130 -0
  170. package/skills/tool-ops-tune/ops-verdict/references/scope-schema.md +61 -0
  171. package/skills/tool-ops-tune/ops-verdict/references/soc-spec.yaml +140 -0
  172. package/skills/tool-ops-tune/ops-verdict/rules/L0-instruction.yaml +67 -0
  173. package/skills/tool-ops-tune/ops-verdict/rules/L1-single-core.yaml +316 -0
  174. package/skills/tool-ops-tune/ops-verdict/rules/L2-inter-core.yaml +173 -0
  175. package/skills/tool-ops-tune/ops-verdict/rules/L3-inter-card.yaml +156 -0
  176. package/skills/tool-ops-tune/ops-verdict/scripts/batch_pipeline.py +444 -0
  177. package/skills/tool-ops-tune/ops-verdict/scripts/calibrate.py +249 -0
  178. package/skills/tool-ops-tune/ops-verdict/scripts/delta_compare.py +244 -0
  179. package/skills/tool-ops-tune/ops-verdict/scripts/render_html.py +274 -0
  180. package/skills/tool-ops-tune/ops-verdict/scripts/snapshot.py +200 -0
  181. package/skills/tool-ops-tune/ops-verdict/scripts/trace_bubble.py +331 -0
  182. package/skills/tool-ops-tune/ops-verdict/scripts/verdict.py +1072 -0
  183. package/skills/tool-ops-tune/scripts/diff_audit.py +281 -0
@@ -0,0 +1,103 @@
1
+ # 知识库规范(tool-ops-tune 知识分类与标准化说明)
2
+
3
+ > 本文档是套件内全部知识资产的分类标准与入库契约:知识分几类、每类怎么组织、
4
+ > 入库门槛是什么、如何被路由到。配套 schema 细则见 `ops-verdict/references/`
5
+ > 下三份契约文档(rule-schema / io-contracts / scope-schema)。
6
+ > **公共纪律**:新增知识必须先声明路由入口(机制卡索引 / 族分类表 /
7
+ > mechanism_refs)——无入口的知识不可被路由到,等于不存在;「暂未收录」
8
+ > 显式返回并计数(缺口感知回路输入),禁止静默空结果。
9
+
10
+ ## 1. 知识分类(按消费时机与形态)
11
+
12
+ | 类别 | 形态 | 落点 | 消费时机 | 交付状态 |
13
+ |------|------|------|---------|---------|
14
+ | K1 判定规则 | YAML 规则包(脚本求值) | ops-verdict/rules/ | Phase 2 判定 | ✅ L0-L3 四包 24 条 |
15
+ | K2 优化机制卡 | 机制卡(固定八要素) | ops-mechanism/references/optimize/ | Phase 3 判定后路由 | 🟡 随优化卡片 PR |
16
+ | K3 算子族与模板 | A/B 双型文档 + 代码模板 | ops-family/references/<族>/ | Phase 3-4 实施时 | 🟡 随算子族 PR |
17
+ | K4 案例证据 | 案例卡(A-E 证据分级) | ops-mechanism/cases/ | Phase 3 同型检索 | 🟡 随优化卡片 PR |
18
+ | K5 外部知识引用 | 引用清单 + 版本锁定(不落副本) | 规划中 adapters/ | 需要事实时运行时探测 | 🟡 框架期落地 |
19
+
20
+ **K1-K4 与 K5 的分界**:经验性知识(指标→瓶颈→机制因果,不随 API 演进失效)自建沉淀;
21
+ 事实性知识(芯片参数 / API 签名 / 官方示例 / 理论标尺,随芯片代际演进)一律引用
22
+ CANN 生态真源(devkit 文档 / cann-bench metadata / 官方算子仓),本仓只存引用清单
23
+ 与版本锁定——运行时探测优先(`GetCurNpuArch()` / `GetCoreNumA*` / 本机 `--help`)。
24
+
25
+ ## 2. K1 判定规则:书写规范
26
+
27
+ 规则 = 数据不是代码。新规则 = 一个 YAML 条目 + fixture + 断言用例,零引擎代码改动。
28
+
29
+ **必填要素**(完整 schema 见 `ops-verdict/references/rule-schema.md`):
30
+
31
+ | 要素 | 要求 |
32
+ |------|------|
33
+ | `id` / `layer` / `priority` | 全局唯一(跨包路由引用);layer ∈ L0-L3;priority 升序求值 |
34
+ | `soc: [a2, a3, a5]` | 芯片域硬过滤;跨芯片阈值差异禁止静默复用 |
35
+ | `metrics_required` / `metrics_optional` | 绑定契约:REQUIRED 缺失 → SKIPPED(未采集不判定);OPTIONAL 缺失 → 降级(反证标 unevaluated) |
36
+ | `condition` | any/all 递归三值逻辑(None=证据不足 → INSUFFICIENT_DATA,不冒充「无 bound」) |
37
+ | `threshold_source` | 每条阈值可溯源:`[msprof-doc]`(官方文档口径)/ `[tuning-practice]`(实践实测)/ `[mc2-practice]`(多卡实测)/ 🟡(首期标定值);**无来源合入评审降级 watch 档** |
38
+ | `counter_evidence` | **BOUND 类规则必须带反证条目**(防误判第二道闸),否则不允许合入 |
39
+ | `severity` bands / `confidence` / `speedup_range` | 分档 + 置信度 + 预估收益区间(校准闭环回写) |
40
+ | `mechanism_refs` | 机制路由入口(判定→机制契约);指向 ops-mechanism 卡片路径 |
41
+ | `routing.on_hit` | (可选)路由副作用:命中后禁用其它规则/改道机制路由,跨规则包传播 |
42
+
43
+ **合入门槛**:`threshold_source` 必填(无实测来源标 🟡)+ fixture 已知答案输入 +
44
+ 断言用例(正例 + 至少一个反例/边界)+ 回归全绿。
45
+
46
+ ## 3. K2 优化机制卡:固定八要素
47
+
48
+ | 要素 | 说明 |
49
+ |------|------|
50
+ | 原理 | 为什么这个机制能消除该瓶颈(硬件层因果链) |
51
+ | 适用前提 | 判定证据特征(对应 rule_id + 指标窗口);架构/容量约束(L1/L0/UB 预算) |
52
+ | 预期收益 | speedup_range + 可行性系数(校准闭环回写) |
53
+ | 架构限制 | soc 适用域、代际差异(A2/A3/A5 分支) |
54
+ | 精度风险 | 语义保持类 / 语义变更类分级;语义变更必须写额外验证用例 |
55
+ | 验证命令 | 精度全量 + 同口径性能的具体命令形态 |
56
+ | 回滚条件 | 劣化/噪声带/精度失败的处置路径 |
57
+ | 模板资产 | 可拷贝代码模板路径(对接 ops-family)或「无货架参考」标注 |
58
+
59
+ **合入门槛**:八要素写全 + 挂到对应规则的 `mechanism_refs`(rule_id 索引表同步)+
60
+ 收益区间无实测来源时标 🟡 + 评审通过。
61
+
62
+ ## 4. K4 案例卡:字段与 A-E 证据分级
63
+
64
+ 固定字段:`算子类别 / DSL / 类型(PR|非PR)/ 来源可信度 / 来源链接 + 验证日期 /
65
+ 瓶颈证据(rule_id 对应)/ 优化机制 / 原文性能数字 / 适用范围与警示`。
66
+
67
+ | 等级 | 来源 | 可写入 | 禁止 |
68
+ |------|------|--------|------|
69
+ | A | 官方已合并 PR/MR,含测试表 | 机制、适用平台、原文数字、精度结果 | 把某 shape 收益泛化到全场景 |
70
+ | B | 官方 PR/MR,无数字 | 代码机制、文件路径、平台分支 | 推算或补写加速比 |
71
+ | C | 官方 Wiki/指南/sample | 推荐流程、可运行案例、原文数字 | 把教程数字当目标设备峰值 |
72
+ | D | 社区/二手材料 | 仅作线索与背景,明确警示 | 作为唯一验收证据 |
73
+ | E | 本工作流实测回灌 | 机制可信度等同 A;speedup 绑定口径指纹 | 外推到其他口径 |
74
+
75
+ **检索纪律**:最多取 3 个同型案例;PR 未公开数字统一写「原文未附量化数字」;
76
+ **反例与收益案例同等收录**(警示列必填);无同型案例走降级策略(证据链 + 机制卡
77
+ 驱动、实施细节自行推导并提高验证强度、报告标注「无同型案例」、沉淀 E 级候选)。
78
+
79
+ ## 5. K3 算子族与模板:入库要求
80
+
81
+ - 建族目录 `ops-family/references/<family>/` → 判 A 型(单实现调参)或 B 型
82
+ (多实现选型,必须含选型决策树)→ guide + 模板链路 → 族分类表更新;
83
+ - 模板(.h/.cpp/.template)抄自官方示例的标来源与许可证头;**查到模板必须直接
84
+ 拷贝 + 最小适配,禁止参考重写**(模板优先纪律 T1-T5,编排层同款);
85
+ - 更新策略:追上游引用重拷(上游变了 → 重新评估拷贝版本),不在本仓独立分叉;
86
+ - 资产计数防漂移:族表模板数与实际文件数的一致性由静态断言守护(随测试框架 PR
87
+ 挂 CI)。
88
+
89
+ ## 6. 知识缺口计数(缺口感知回路输入)
90
+
91
+ 任何子域遇到「暂未收录」必须显式返回并落盘计数(`ops-family/references/
92
+ knowledge_gaps.json` 形态,随算子族 PR 交付),禁止静默空结果——缺口数据是
93
+ 后续知识排产的唯一依据。
94
+
95
+ ## 7. 阈值变更流程(全类别公共)
96
+
97
+ ```
98
+ 改 YAML/机制卡 → 回归全绿 → 阈值带来源标注 → 人审 → 合入
99
+ ```
100
+
101
+ - 无来源合入评审降级 watch 档;缺反证的 BOUND 类规则不允许合入;
102
+ - 自进化回路(案例回流 / 校准闭环 / 阈值进化 / 缺口感知)只产生建议不直接生效;
103
+ 证据分级不可逆(E 级不覆盖官方 A 级);数据脱敏;基线库版本化。
@@ -0,0 +1,242 @@
1
+ {
2
+ "skill_name": "tool-ops-tune",
3
+ "eval_mode": "text",
4
+ "evals": [
5
+ {
6
+ "id": 1,
7
+ "title": "verdict-entry-routing",
8
+ "prompt": "我有一份 msprof 导出的 PipeUtilization.csv,想知道这个算子的瓶颈是什么,帮我判定。",
9
+ "expected_output": "应加载 tool-ops-tune 套件并路由到 ops-verdict 判定引擎:说明判定只出自脚本(LLM 只解释不判定),引导使用 ops-verdict/scripts/verdict.py 以规则包 + CSV 输入产出 verdict.json 判定书;判定书每条命中带证据数值、阈值溯源、反证评估与机制路由。不凭经验直接给出瓶颈结论。",
10
+ "expectations": [
11
+ {
12
+ "type": "contains",
13
+ "pattern": "verdict",
14
+ "description": "路由到判定引擎入口"
15
+ },
16
+ {
17
+ "type": "contains",
18
+ "pattern": "规则",
19
+ "description": "说明按规则包判定"
20
+ },
21
+ {
22
+ "type": "contains",
23
+ "pattern": "证据",
24
+ "description": "强调判定带证据可审计"
25
+ },
26
+ {
27
+ "type": "not_contains",
28
+ "pattern": "我猜测",
29
+ "description": "不凭空猜测瓶颈"
30
+ },
31
+ {
32
+ "type": "skill_activated",
33
+ "pattern": "tool-ops-tune",
34
+ "description": "确认激活算子调优套件"
35
+ }
36
+ ]
37
+ },
38
+ {
39
+ "id": 2,
40
+ "title": "collect-mode-routing",
41
+ "prompt": "我要给一个 fork 多进程绑卡的 MC² 融合算子做性能采集,应该用什么命令?",
42
+ "expected_output": "路由到 ops-collect 采集编排:MC²/fork 多 rank 场景必须走 collect_board.sh --mode mc2(msprof --aic-mode=task-based),禁止 msprof op(对 fork 行为未定义、数据不可靠);已有 collection_manifest.json 的目录禁止重复采集;MC² 禁 host 侧计时,性能数据出自 op_summary 的 Task Duration。",
43
+ "expectations": [
44
+ {
45
+ "type": "contains",
46
+ "pattern": "mc2",
47
+ "description": "给出 MC² 专用采集模式"
48
+ },
49
+ {
50
+ "type": "contains",
51
+ "pattern": "task-based",
52
+ "description": "说明 msprof task-based 强制"
53
+ },
54
+ {
55
+ "type": "contains",
56
+ "pattern": "manifest",
57
+ "description": "提及采集契约与防重采"
58
+ },
59
+ {
60
+ "type": "not_contains",
61
+ "pattern": "msprof op 采集",
62
+ "description": "不推荐对 fork 程序用 msprof op"
63
+ },
64
+ {
65
+ "type": "skill_activated",
66
+ "pattern": "tool-ops-tune",
67
+ "description": "确认激活算子调优套件"
68
+ }
69
+ ]
70
+ },
71
+ {
72
+ "id": 3,
73
+ "title": "verdict-before-mechanism-discipline",
74
+ "prompt": "还没做性能采集,你先看看优化机制文档,猜一下我的算子可能是什么瓶颈?",
75
+ "expected_output": "拒绝在无证据时猜测瓶颈:证据先行是套件纪律——判定之前禁止加载机制卡/案例猜瓶颈。正确路径是先采集(ops-collect 模式路由)再判定(verdict.py 规则求值),判定书 findings 的 mechanism_refs 才是机制路由入口。条件三值逻辑下数据不足只会得到 INSUFFICIENT_DATA,不会冒充结论。",
76
+ "expectations": [
77
+ {
78
+ "type": "contains",
79
+ "pattern": "证据",
80
+ "description": "强调证据先行"
81
+ },
82
+ {
83
+ "type": "contains",
84
+ "pattern": "先采集",
85
+ "description": "给出正确路径:先采集再判定"
86
+ },
87
+ {
88
+ "type": "contains",
89
+ "pattern": "机制",
90
+ "description": "说明机制卡判定后才加载"
91
+ },
92
+ {
93
+ "type": "not_contains",
94
+ "pattern": "可能是 MTE2",
95
+ "description": "不给出猜测性瓶颈结论"
96
+ },
97
+ {
98
+ "type": "skill_activated",
99
+ "pattern": "tool-ops-tune",
100
+ "description": "确认激活算子调优套件"
101
+ }
102
+ ]
103
+ },
104
+ {
105
+ "id": 4,
106
+ "title": "comparison-gate-semantics",
107
+ "prompt": "优化后性能从 100us 提升到 97us,快 3%,这轮优化应该 KEEP 吧?",
108
+ "expected_output": "3% 在 ±5% 噪声带内:不判收益也不判劣化,处置是 repeat 翻倍复测(同步重采基线与优化侧、重建两侧快照后再比);仍带内则按无稳定收益处置。不得把噪声带内的变化当收益宣称——这是口径铁律。且任何比较前 delta_compare 会做口径与精度双门禁(不一致 exit 2)。",
109
+ "expectations": [
110
+ {
111
+ "type": "contains",
112
+ "pattern": "噪声带",
113
+ "description": "识别 3% 在 ±5% 带内"
114
+ },
115
+ {
116
+ "type": "contains",
117
+ "pattern": "复测",
118
+ "description": "给出 repeat 翻倍复测处置"
119
+ },
120
+ {
121
+ "type": "contains",
122
+ "pattern": "不",
123
+ "description": "明确不判收益"
124
+ },
125
+ {
126
+ "type": "not_contains",
127
+ "pattern": "建议保留",
128
+ "description": "不直接建议 KEEP"
129
+ },
130
+ {
131
+ "type": "skill_activated",
132
+ "pattern": "tool-ops-tune",
133
+ "description": "确认激活算子调优套件"
134
+ }
135
+ ]
136
+ },
137
+ {
138
+ "id": 5,
139
+ "title": "insufficient-data-honesty",
140
+ "prompt": "verdict.json 显示 verdict 是 INSUFFICIENT_DATA,全部规则 SKIPPED,这说明我的算子没有瓶颈吗?",
141
+ "expected_output": "不是。INSUFFICIENT_DATA 表示指标未采齐(绑定契约:REQUIRED 缺失 → SKIPPED,未采集不判定),不是「无瓶颈」。应按 skipped[].missing 列表补采(≤2 轮),仍缺则如实上报禁止猜测式判定。NO_BOUND_FOUND 才是数据完整但无命中的语义。",
142
+ "expectations": [
143
+ {
144
+ "type": "contains",
145
+ "pattern": "不是",
146
+ "description": "纠正「无瓶颈」误读"
147
+ },
148
+ {
149
+ "type": "contains",
150
+ "pattern": "补采",
151
+ "description": "给出按 missing 补采的路径"
152
+ },
153
+ {
154
+ "type": "contains",
155
+ "pattern": "SKIPPED",
156
+ "description": "解释绑定契约语义"
157
+ },
158
+ {
159
+ "type": "not_contains",
160
+ "pattern": "没有瓶颈",
161
+ "description": "不确认错误结论"
162
+ },
163
+ {
164
+ "type": "skill_activated",
165
+ "pattern": "tool-ops-tune",
166
+ "description": "确认激活算子调优套件"
167
+ }
168
+ ]
169
+ },
170
+ {
171
+ "id": 6,
172
+ "title": "single-mechanism-iron-law",
173
+ "prompt": "为了节省时间,这一轮能不能同时改双缓冲和 tiling 切分两个优化?",
174
+ "expected_output": "不能:单变量铁律——每轮只改一个可归因机制,多机制混入导致收益无法归因(KEEP 了无法归因的收益)。diff_audit 机器闸门会比对实际改动与方案卡声明范围,超范围判 UNATTRIBUTABLE 禁止进 KEEP 仲裁。两机制应分两轮,各自对照同口径基线。",
175
+ "expectations": [
176
+ {
177
+ "type": "contains",
178
+ "pattern": "单变量",
179
+ "description": "引用单变量铁律"
180
+ },
181
+ {
182
+ "type": "contains",
183
+ "pattern": "归因",
184
+ "description": "说明归因失效原因"
185
+ },
186
+ {
187
+ "type": "contains",
188
+ "pattern": "diff_audit",
189
+ "description": "提及机器闸门"
190
+ },
191
+ {
192
+ "type": "not_contains",
193
+ "pattern": "可以同时",
194
+ "description": "不允许多机制并行"
195
+ },
196
+ {
197
+ "type": "skill_activated",
198
+ "pattern": "tool-ops-tune",
199
+ "description": "确认激活算子调优套件"
200
+ }
201
+ ]
202
+ },
203
+ {
204
+ "id": 7,
205
+ "title": "npucompute-rep-db-channel-routing",
206
+ "prompt": "我有一份 npu-compute 采集的 .npu-rep 报告(950 平台),想直接接入调优判定,应该怎么消费?",
207
+ "expected_output": "路由到 ops-collect 的 npu-compute DB 格式通道(Roadmap #4):.npu-rep 是单文件结构化报告,解包后含 7 个 Section CSV、Summary.jsonl 与 summary.db(SQLite:Section 表 + PcSampling + FieldUnitMap)。消费链为 facts_bridge.py --source auto(DB SQL 优先 AVG+NULL-skip 下推、Summary.jsonl OpInfoSummary 产出 task_duration/block_dim、PcSampling 产出 top_stall_pct——L0_STALL_DOMINANT 的首个生产者)→ verdict.py --db summary.db(FieldUnitMap 自动还原列名)。旧版无 summary.db 的报告可用 csv_to_db.py 升级;性能收益与双通道等价性用 db_bench.py 验证(等价性是门禁,提速比按负载如实呈现)。",
208
+ "expectations": [
209
+ {
210
+ "type": "contains",
211
+ "pattern": "npu-compute",
212
+ "description": "识别 npu-compute 报告形态"
213
+ },
214
+ {
215
+ "type": "contains",
216
+ "pattern": "summary.db",
217
+ "description": "路由到 DB 格式通道"
218
+ },
219
+ {
220
+ "type": "contains",
221
+ "pattern": "facts_bridge",
222
+ "description": "标量生产走 facts_bridge DB 通道"
223
+ },
224
+ {
225
+ "type": "contains",
226
+ "pattern": "top_stall",
227
+ "description": "PcSampling → top_stall_pct 生产者"
228
+ },
229
+ {
230
+ "type": "not_contains",
231
+ "pattern": "逐个手算",
232
+ "description": "不让 LLM 手工解析 CSV/SQL"
233
+ },
234
+ {
235
+ "type": "skill_activated",
236
+ "pattern": "tool-ops-tune",
237
+ "description": "确认激活算子调优套件"
238
+ }
239
+ ]
240
+ }
241
+ ]
242
+ }
@@ -0,0 +1,146 @@
1
+ ---
2
+ name: ops-collect
3
+ description: NPU 性能采集编排。统一采集入口:上板(msprof 7 组指标 / npu-compute DB 格式 / quick / MC² task-based 多 rank)、MC² 隔离测试编排(T_comm/T_compute → R 值)、采集块 manifest 契约(已有 manifest 禁止重复采集)。负责把「能采但采不到」变成「按路由采对」,并保证采集产物可直接喂 ops-verdict 判定引擎。触发:性能采集、profiling、基线数据采集、MC² 采集、隔离测试、补采指标时使用。
4
+ ---
5
+
6
+ # 性能采集编排(collect)
7
+
8
+ > 采集的职责边界:只负责「采对、采全、口径留痕」,不做判定(ops-verdict)、不做解释
9
+ >(ops-mechanism)。底层工具全部复用本仓/官方(msprof / msprof op / msopprof /
10
+ > npu-compute / cannsim),本 SKILL 不重做采集器,只做模式路由与契约落盘。
11
+
12
+ ## 采集模式路由(先探测本机帮助,再选命令)
13
+
14
+ ```
15
+ 用户输入(可执行文件 + 用例)
16
+ │
17
+ ├─ MC² / fork 多 rank 算子?(fork 多子进程绑卡 + SHMEM UDMA / BarrierAll / CrossCoreFlag)
18
+ │ ├─ 是 → collect_board.sh --mode mc2
19
+ │ │ msprof --aic-mode=task-based(msprof op 对 fork 行为未定义,数据不可靠,禁用)
20
+ │ │ MC² 调优另需隔离测试 → isolation_test.py(T_comm/T_compute → R)
21
+ └─ 否 → 单卡路径
22
+ ├─ 950/A5 且本机 npu-compute --list-sets 可用
23
+ │ → collect_board.sh --mode npu-compute(DB 格式采集,Roadmap #4:
24
+ │ .npu-rep 单文件报告含 7 Section CSV + summary.db;PmSampling 等
25
+ │ Section 以 --sections 追加,本机 --list-sections 为门禁)
26
+ ├─ 本机 msprof op --help 可用 → msprof op 采集(含 Roofline/KernelScale 等能力按本机帮助)
27
+ └─ 仅 msprof 可用 → collect_board.sh --mode standard(7 组 aic-metrics 顺序采集)
28
+ │
29
+ └─ 无 NPU / 需指令级 → cannsim 仿真路径(A5 单卡 AI Core;MC²/HCCL 不支持)
30
+ ```
31
+
32
+ 三条硬规则:
33
+
34
+ 1. **先探测再选命令**:所有可选参数以本机 `--help` / `--list-sets` 为门禁,禁止把一台
35
+ A5 beta 环境的参数复制到 A2/A3(跨版本绝对规则禁令)。
36
+ 2. **已有 `collection_manifest.json` 的目录禁止重复采集**:只允许重解析(verdict.py)
37
+ 或换新目录重采。重复 replay 破坏稳态且浪费设备时间。
38
+ 3. **MC² 禁 host 侧计时**:std::chrono/gettimeofday 含 launch 开销且精度不足,一切
39
+ 性能数据必须出自 msprof `op_summary` 的 `Task Duration(us)`(npu-compute 通道为
40
+ `Summary.jsonl` OpInfoSummary 的同名字段)。
41
+
42
+ ## 脚本清单
43
+
44
+ | 脚本 | 职责 |
45
+ |------|------|
46
+ | `scripts/collect_board.sh` | 上板采集统一入口(standard / quick / timing / mc2 / npu-compute 五模式)+ manifest 落盘;timing 模式跑 event 计时 harness 并归档 result.json(P0-2);npu-compute 模式采集 .npu-rep 并解包(探测门禁 + 伪 Green 断言,Roadmap #4) |
47
+ | `scripts/collect_cases.py` | **逐 case 采集编排 + 标杆双路径**(P0-1,A1 铁律工具化):cases.csv + exe [--ref-exe] → 逐 case×variant 调 collect_board → `perf_data.csv`(batch_pipeline `--from-collect` 直接输入)+ 逐 case manifest 归档;case 间串行同卡同口径;防重采闸门(已有 manifest 跳过);`--cases-subset` 定向补采;failed/partial 如实进 collect_summary(伪 Green 防护) |
48
+ | `scripts/isolation_test.py` | MC² 隔离测试编排:T_comm/T_compute(逐 rank 稳态均值,跨 rank max)+ mte2_ratio_full/pure / rank_imbalance / mask_ratio → R 值与 --scalar 串 → 喂 verdict |
49
+ | `scripts/facts_bridge.py` | 采集产物 → verdict `--scalar` 串(G2 桥接):L2Cache/Arithmetic/ResourceConflict/OpBasicInfo 提取 + soc-spec 峰值换算,产出 `mte2_active_bw_pct_of_peak` / `l2_hit_rate` / `vec_fp32_ratio` 等——L0 规则与 L1 反证的标量生产者;missing 列表即补采闭环真源;**DB 双源**(P1-6):CSV OpBasicInfo 缺失时 sqlite(`ai_core_op_summary.db` task_time)备位 task 级时长(等价查询固化在脚本,ns→us 换算 + DB 口径注记防混比;`--no-db` 关闭);**npu-compute DB 通道**(Roadmap #4):`--source auto` 按目录特征判源,npu-compute 解包目录逐指标 DB SQL 优先(AVG+NULL-skip 下推)→ CSV 补位,`Summary.jsonl` OpInfoSummary 产出 task_duration/block_dim,PcSampling 产出 `top_stall_pct`(L0_STALL_DOMINANT 的首个生产者) |
50
+ | `scripts/csv_to_db.py` | **CSV→summary.db 转换器**(Roadmap #4):npu-compute 列名规范化规则移植(单位后缀拆 FieldUnitMap / 词法规范化 / NA→NULL / 类型推断),旧版 .npu-rep(无 DB)与任意 CSV 产物目录升级为 DB 格式消费;写入后回读行数校验 fail loud |
51
+ | `scripts/db_bench.py` | **CSV vs DB 消费性能基准**(Roadmap #4「查询更快」的验证载体):W1 facts 标量提取 / W2 verdict 全表加载 / W3 分析查询批 / W4 PcSampling(DB 独有)四负载逐项测中位耗时 + 提速比;**等价性门禁**(W1-W3 双通道数值必须一致,不等 exit 1);提速数字如实逐负载呈现(全表 dict 化 DB 更慢就写慢,不粉饰) |
52
+ | `scripts/jsonl_to_cases.py` | **JSONL 用例适配**(P1-5,G11):生态内 JSONL 用例(torch-ops-profiler 规范)→ cases.csv(A1 铁律输入契约);转换规则全落脚本(dtype 归一 / attrs 拼接 / CSV 转义),歧义行 skipped 列明原因不猜测 |
53
+ | `scripts/collect_sim.sh` | **仿真路径采集编排**(P1-1,G7):cannsim record(精度+性能仿真)→ report(trace_core*.json)→ mode=sim 的 collection_manifest 归档;cannsim 探测门禁(不可用明确报错);sim 数字与上板禁混比(snapshot timing_method=sim 专用) |
54
+
55
+ **自动化分级**(如实宣称):
56
+ - 宿主程序自带模式开关(环境变量)→ **全自动**(env 模式:脚本注入开关、三轮采集、
57
+ 产出完整 verdict --scalar 串);
58
+ - 宿主无开关(真实 MC² 工程常态)→ **半自动 from-prof**:Agent 在源码副本上注释
59
+ 通信/计算 process 并手工 msprof 后,把两份产物目录交给 `--switch-mode from-prof`
60
+ 收敛(开关参数支持 K=V 形式注入自定义开关)。
61
+ - 源码副本定向注释自动化(识别通信/计算 process 注释点)为 26-1 前置工作项。
62
+
63
+ ## npu-compute DB 格式通道(Roadmap #4)
64
+
65
+ npu-compute(950/A5 采集器,本仓 `npu_tools/npu_compute`)原生产出 `.npu-rep`
66
+ 单文件报告,解包后含 7 个 Section CSV + `Summary.jsonl` + **`summary.db`**
67
+ (SQLite:7 个 Section 表 + `PcSampling` + `FieldUnitMap` 单位表)。
68
+ 本套件从本 PR 起打通 DB 格式消费链:
69
+
70
+ | 环节 | 路径 | 说明 |
71
+ |------|------|------|
72
+ | 采集 | `collect_board.sh --mode npu-compute` | `--set full` 底座 + `--sections` 追加(`--list-sections` 门禁);产物断言 + manifest 落账 |
73
+ | 标量生产 | `facts_bridge.py --source auto` | npu-compute 目录逐指标 **DB SQL 优先**(AVG+NULL-skip 下推)→ CSV 补位;`Summary.jsonl` OpInfoSummary → task_duration/block_dim;**PcSampling → top_stall_pct**(L0_STALL_DOMINANT 首个生产者) |
74
+ | 判定输入 | `verdict.py --db <summary.db>` | 列名规范化由 FieldUnitMap 自动还原(`aiv_time` → `aiv_time(us)`),下游规则求值零改动 |
75
+ | 旧报告升级 | `csv_to_db.py` | 旧版 .npu-rep(无 summary.db)CSV 目录一键升级为 DB 格式 |
76
+ | 性能验证 | `db_bench.py` | 四负载 CSV vs DB 实测(等价性门禁 + 提速比) |
77
+
78
+ **口径纪律**:
79
+ - summary.db 是同一次采集 CSV 的入库副本(单次采集双格式)——**数值口径等价,
80
+ 可安全互通**(与 msprof DB 双源的「task 级 vs op 级口径差异」不同,后者
81
+ sources 注记禁止混比)。
82
+ - 列名规范化差异:DB 侧 `aic_time(us)` → `aic_time`(单位入 FieldUnitMap),
83
+ `GM_to_L1_datas(KB)` → `gm_to_l1_datas`;大写通路名(GM/L0C/UB)在 DB 中小写。
84
+ - `NA` → SQL `NULL`(不适用≠零);`AVG/COUNT(列)` 自动排除 NULL。
85
+ - PcSampling 是 **DB 独有数据源**(无 CSV 对应物)——只对 SIMT 指令采样,
86
+ 纯 SIMD 算子无此表(如实 missing,不静默造 0)。
87
+ - 提速数字分口径如实看待(db_bench 实测,本仓开发机):facts 标量聚合与
88
+ 多查询分析 DB 显著更快(聚合下推省去全表 dict 化);**verdict 全表 dict 化
89
+ DB 更慢**(行对象化开销 > csv.DictReader)——选通道按消费形态,不迷信单一
90
+ 结论;等价性门禁保证换通道不改判定数值。
91
+
92
+ ## 采集块 manifest 契约(opstune.collection/1.0)
93
+
94
+ 每次采集输出 `collection_manifest.json` —— 采集块的唯一真源:
95
+
96
+ ```json
97
+ {
98
+ "mode": "standard",
99
+ "exe": "./build/demo", "args": "8448 4096 4096",
100
+ "device_id": "1", "ranks": 1, "kernel_name": null,
101
+ "blocks": [
102
+ {"name": "PipeUtilization", "status": "ok", "path": "PROF_PipeUtilization_20261014_..."},
103
+ {"name": "L2Cache", "status": "failed", "path": "...", "note": "msprof 退出非 0"}
104
+ ]
105
+ }
106
+ ```
107
+
108
+ - `status`:`ok / partial / failed / skipped`(采集块状态机)。
109
+ - 判定引擎按 manifest 定位 CSV;failed 块在 verdict 侧表现为 REQUIRED 缺失 → SKIPPED
110
+ (绑定契约兜底:采不到就不判,不静默编造)。
111
+ - **禁止伪 Green**:任何块失败必须在报告中如实呈现,不得从产物清单里悄悄抹掉。
112
+
113
+ ## MC² 隔离测试纪律(isolation_test.py 编排,纪律由本节承载)
114
+
115
+ 1. 隔离测试在**源码副本**进行(`{code_dir}_diag/`),注释通信或计算 process,测完丢弃
116
+ 代码副本、保留 profiling 产物。
117
+ 2. tileCnt=1(无流水线)条件下分别测纯通信 / 纯计算。
118
+ 3. 稳态:循环 ≥10 次,前 5 warm-up,取后 5 均值;**跨 rank 取 max**(木桶效应——所有
119
+ rank 经 BarrierAll/CrossCoreFlag 同步,整体性能由最慢 rank 决定)。
120
+ 4. R = T_compute / T_comm → 五档 bound(verdict.py L3 规则包消费)。
121
+ 5. 掩盖率 =(融合前耗时 − 融合后耗时)/ min(T_comm, T_compute),上限 1.0。
122
+
123
+ ## 计时口径(供 snapshot.py --timing-method 选择)
124
+
125
+ | 情形 | 规则 |
126
+ |------|------|
127
+ | 工程自带 benchmark | 视为正式 benchmark,按优先级采信 |
128
+ | 无计时设施 | **拷计时 harness 货架**(ops-family 子域 `references/common/timing_harness/`,C++ aclrtEvent 与 torch event 两模板,随算子族 PR 交付;`collect_board.sh --mode timing` 直跑归档)——属测量设施而非优化变量,原基线源码先备份 |
129
+ | 长 kernel(ms 级)无 event | 允许 Task Duration 作基线,报告注明口径 |
130
+ | 短 kernel(µs 级) | launch 开销掩盖收益:harness 模板内置 stream 内多 launch 单 event 对计时;仍不可归因用 profiler device duration 辅助并注明 |
131
+ | 冷跑/稳态 | 首跑含初始化与缓存预热(实测可差 25%):固定 warmup 剔除,稳态 ≥3 次取中位(harness 模板已固化此结构) |
132
+ | profiling 构建 | 保持 Release;源码映射只加调试信息,禁 -O0(优化级别变化使前后数据不可比) |
133
+ | 频率漂移(DVFS) | **可选锁频**(P2-2):`npu-smi set -t freq-lock`(需 root;采集期固定频率消除 DVFS 爬升噪声)。**副作用如实标注**:锁频数字与出厂默认频率下的性能不可直接外推,报告须注明「锁频口径」;无 root 权限时按 warmup 爬升 + 多轮稳态中位数缓解(本仓默认路径,不强制锁频) |
134
+
135
+ ## 设备选择(P2-2/G20 ①)
136
+
137
+ `collect_board.sh` 选卡逻辑:**结构化解析优先**——`npu-smi info -t usages -i <id>`
138
+ 的 `Aicore Usage Rate(%)` 字段判定(< 50% 视为可用),对 npu-smi 输出格式变化
139
+ 免疫;结构化解析失败(版本差异)才退化到 `npu-smi info` 表字面匹配并 stderr
140
+ 提示。选卡后注入 `ASCEND_RT_VISIBLE_DEVICES`(口径指纹 device_id 源头保真)。
141
+
142
+ ## 参考文档
143
+
144
+ | 文件 | 内容 |
145
+ |------|------|
146
+ | [`references/tool-routing.md`](references/tool-routing.md) | msprof / msprof op / msopprof / cannsim / torch_npu.profiler 选择决策树与跨版本能力矩阵 |
@@ -0,0 +1,86 @@
1
+ # 采集工具路由决策树(跨版本能力矩阵)
2
+
3
+ > 硬规则:**先探测本机帮助,再选命令**。本矩阵是选型起点而非命令来源——所有参数、
4
+ > 指标名、能力开关以本机 `msprof op --help` / `msopprof --help` / `npu-compute
5
+ > --list-sets` 实际输出为门禁。禁止使用「MC² 永远不能用 msprof op」这类跨版本
6
+ > 绝对规则(新版已支持时可用,旧版或不稳定时回退完整 msprof)。
7
+
8
+ ## 决策树
9
+
10
+ ```
11
+ ① 判算子形态
12
+ MC²/fork 多 rank ──────────────→ msprof --aic-mode=task-based(本机 msOpProf 明确支持
13
+ 多设备/通算流水时也可用 msprof op,否则回退)
14
+ 单卡算子 ──→ ②
15
+ ② 判芯片与采集格式
16
+ 950/A5 且本机 npu-compute 可用 → npu-compute(DB 格式采集,Roadmap #4:
17
+ --set full + --sections 追加按 --list-sections 门禁;
18
+ 编排:ops-collect/scripts/collect_board.sh --mode npu-compute
19
+ → .npu-rep → --import 解包 → summary.db(含 PcSampling)
20
+ → facts_bridge DB 通道 / verdict --db)
21
+ 其他 / npu-compute 不可用 ──→ ③
22
+ ③ 判分析深度
23
+ 只要 kernel 时间/加速比 ────────→ quick 路径(1 轮 Task Duration)
24
+ 要瓶颈判定 ──→ ④
25
+ ④ 判芯片与本机能力(--help 探测)
26
+ A2/A3:MemoryDetail / TimelineDetail 可用 → 按疑点选配
27
+ A5:PipeTimeline / PcSampling 可用 → 优先评估(pipe 重叠 / 指令热点)
28
+ 通用底座:7 组 aic-metrics 顺序采集(PipeUtilization 为判定引擎主输入)
29
+ ⑤ 无卡 / 指令级下钻 ──────────────→ cannsim(仅 A5 单卡 AI Core;MC²/HCCL 不支持)
30
+ 编排:ops-collect/scripts/collect_sim.sh(P1-1)
31
+ record → report(trace_core*.json) → mode=sim manifest
32
+ → trace_bubble.py(overlap/top_stall/bubble 标量)
33
+ ⑥ torch 生态 ────────────────────→ torch_npu.profiler(JSONL 用例,warmup/active 固定 5)
34
+ JSONL → cases.csv 入口:ops-collect/scripts/jsonl_to_cases.py
35
+ (P1-5;schedule 5/5 由 torch 侧基准脚本持有,
36
+ 产物兼容性评估后接入 verdict 链路——当前标注
37
+ 🟡 评估中,未接入主判定链)
38
+ ⑦ 集群视角(scene=cluster,P2-4 规划态)→ msprof advisor(集群/通信分析路径;
39
+ 本机 --help 为门禁同款纪律)。范围边界:本仓
40
+ 只消费「判定引擎可读的集群级证据」(快慢 rank /
41
+ host 下发阻塞),深度集群分析是 Hermes 主场;
42
+ 算子域聚焦不变
43
+ ```
44
+
45
+ ## 工具能力矩阵(以本机帮助为最终门禁)
46
+
47
+ | 能力 | msprof | msprof op / msopprof | npu-compute | cannsim | torch_npu.profiler |
48
+ |------|--------|---------------------|---------|---------|--------------------|
49
+ | MC² 多 rank | ✅ task-based | 🟡 依版本(探测后用) | ❌(单进程直调形态) | ❌ | ❌ |
50
+ | 7 组 aic-metrics | ✅ | ✅(多轮 replay 内置) | ✅(--set full 一次采集,无需多轮 replay) | 部分(PipeUtilization+ResourceConflictRatio 默认) | 汇总级 |
51
+ | Roofline | ✅(组合 Default) | 🟡 依版本 | —(OpInfoSummary 带理论算力/带宽与实测利用率读数) | — | — |
52
+ | KernelScale / Occupancy | ✅ | ✅ | ✅(逐核) | ✅(逐核) | — |
53
+ | 指令级 / 源码行 | — | Source(-g) | —(PmSampling 指令地址采样 + objdump/symbolizer 定位) | ✅(code_exe/instr_exe) | — |
54
+ | A5 PipeTimeline / PcSampling | — | ✅(A5) | ✅(PipeTrace.json + summary.db PcSampling 表) | — | — |
55
+ | **DB 格式产物** | msprof_*.db(task_time,P1-6 双源) | — | ✅ **summary.db**(7 Section 表 + PcSampling + FieldUnitMap) | — | — |
56
+ | 通算流水图(MC² timeline) | 🟡 | 🟡(MC2/LCCL parser,依版本) | — | — | — |
57
+
58
+ ## 产物 → 消费映射
59
+
60
+ | 产物 | 消费方 |
61
+ |------|--------|
62
+ | `PROF_*/mindstudio_profiler_output/op_summary_*.csv`(PipeUtilization) | verdict.py `--csv` |
63
+ | `OpBasicInfo.csv`(Task Duration / Block Dim / 频率) | facts_bridge.py(→ `task_duration_us` / `block_dim` 标量)+ L2 头开销判定 |
64
+ | `ArithmeticUtilization / L2Cache / ResourceConflictRatio` | facts_bridge.py(→ L0 规则 + L1 反证标量:`l2_hit_rate` / `vec_fp32_ratio` / `vec_total_cflt_ratio`) |
65
+ | 7 组产物根目录 | facts_bridge.py `--manifest`(一条命令产出 verdict.py `--scalar` 串;含峰值换算,读 soc-spec.yaml) |
66
+ | `PROF_*/device_*/sqlite/ai_core_op_summary.db`(task_time 表) | facts_bridge.py **DB 双源**(P1-6):CSV OpBasicInfo 缺失时备位 task 级时长;等价查询固化在脚本(不让 LLM 拼 SQL);DB 口径 ≠ op 级 Task Duration,禁混比 |
67
+ | npu-compute `.npu-rep` → 解包目录(7 Section CSV + Summary.jsonl) | facts_bridge.py `--source auto`(npu-compute 通道:Summary.jsonl OpInfoSummary → task_duration/block_dim;CSV 补位) |
68
+ | npu-compute 解包目录 **`summary.db`**(Roadmap #4) | facts_bridge.py DB 通道(逐指标 AVG+NULL-skip 下推,DB 是 CSV 同数据入库副本可互通)+ verdict.py `--db`(FieldUnitMap 还原列名,规则求值零改动)+ db_bench.py(性能验证) |
69
+ | `summary.db` **`PcSampling` 表**(DB 独有,无 CSV 对应物) | facts_bridge.py → `top_stall_pct` 标量(**L0_STALL_DOMINANT 的首个生产者**;仅 SIMT 指令采样,纯 SIMD 算子无此表如实 missing) |
70
+ | 旧版 .npu-rep(无 summary.db)| csv_to_db.py 升级为 DB 格式消费(列名规范化规则与 npu-compute 入库一致) |
71
+ | isolation_test.py 的 `iso_result.json` | verdict.py `--scalar t_comm_us,t_compute_us` |
72
+ | `collection_manifest.json` | 报告/复盘定位产物;防重复采集闸门 |
73
+
74
+ ## 高频踩坑(一线实测)
75
+
76
+ - `--kernel-name` 仅 application 形态有效;不指定时部分版本只采第一个算子——多 kernel
77
+ 程序必须显式过滤并核对 `OpBasicInfo.csv` 全 kernel 清单(部分结果禁止调优)。
78
+ - C++ mangled 匿名命名空间符号(`_ZN12_GLOBAL__N_1...`)导致 `--kernel-name` 采集为空:
79
+ 去掉过滤全量采集,从 OpBasicInfo 抄真实 kernel 名。
80
+ - 采集日志有 libprofapi ERROR 但 CSV 正常 → 工具链噪声,**以产出检查为准**不凭 ERROR 行判失败。
81
+ - fork 多进程只采到每进程第一个 kernel → msopprof 对 fork 不完整:标 partial,改
82
+ SHMEMI_PROF 或完整 msprof。
83
+ - 输出目录权限与软链检查会直接报错:先确认目录可写、无跨设备软链。
84
+ - 短 kernel 同时保存 host event 计时:绝对性能以 event 为主,msOpProf 用于结构诊断。
85
+ - 采集失败分流表(GLIBCXX / aic-ascend950-ops-info.ini / tiling 改动 fault 等)见
86
+ ops-tuning-agent workflows/troubleshooting.md。