已合并
docs:add skill for reg ascir #1281
wangmingming创建于 7月14日
docs:add skill for reg ascir #1281
已合并
共 3 个文件变更+709-0
| @@ -6,6 +6,7 @@ | |||
| 6 | "Skill(af-build-runner)", | 6 | "Skill(af-build-runner)", |
| 7 | "Skill(af-test-developer)", | 7 | "Skill(af-test-developer)", |
| 8 | "Skill(af-code-reviewer)", | 8 | "Skill(af-code-reviewer)", |
| 9 | + "Skill(af-reg-ascir)", | ||
| 9 | "Skill(planning-with-files)", | 10 | "Skill(planning-with-files)", |
| 10 | "Skill(skill-creator)", | 11 | "Skill(skill-creator)", |
| 11 | "Skill(gitcode-pr)", | 12 | "Skill(gitcode-pr)", |
| @@ -0,0 +1,32 @@ | |||
| 1 | +# af-reg-ascir | ||
| 2 | + | ||
| 3 | +graph-autofusion 项目 ASCIR 注册、新增/修改、dtype、tmp buffer、UT/ST 辅助 Skill。 | ||
| 4 | + | ||
| 5 | +## 功能 | ||
| 6 | + | ||
| 7 | +- 指导新增或修改 ASCIR 算子注册流程 | ||
| 8 | +- 辅助维护 V35/V2 ASCIR 注册、ATT、Codegen 和性能模型 | ||
| 9 | +- 指导 dtype 扩展、类型转换和 tmp buffer 注册 | ||
| 10 | +- 每个新增 ASCIR 默认考虑并补充 backend E2E;更新 ASCIR 时强制审计现有 E2E 是否需要同步修改 | ||
| 11 | +- 参考 BesselJ0 生成 share graph、backend generator、ICPU 运行与精度验证、CMake 和统一测试入口 | ||
| 12 | +- 分析 ASCIR API 名、OpType、Python API 和测试用例的影响范围 | ||
| 13 | +- 按完整矩阵检查 regbase 构建/注册、ATT、Codegen、Python ops/IR Attr、perf、UT、share graph、backend E2E、脚本与打包 | ||
| 14 | +- 识别 regbase 内部 include、官方 AscendC API 头缺失、Device 编译选项、旧包加载等上板故障 | ||
| 15 | +- 根据输入输出、模板属性、多输出和 dtype 变化给出最小修改方案 | ||
| 16 | + | ||
| 17 | +## 触发场景 | ||
| 18 | + | ||
| 19 | +用户提到以下关键词时自动触发: | ||
| 20 | +- ASCIR 注册、ascir op、REG_ASC_IR | ||
| 21 | +- 新增算子、修改算子、算子注册 | ||
| 22 | +- dtype 注册、类型转换、cast-map | ||
| 23 | +- tmp buffer、CalcTmpBufSize、CalcXxxTmpSizeV2 | ||
| 24 | +- ASCIR UT、ASCIR ST、E2E 测试、端到端测试生成 | ||
| 25 | + | ||
| 26 | +## 验证方法 | ||
| 27 | + | ||
| 28 | +在 opencode 中输入以下指令验证 Skill 是否生效: | ||
| 29 | +- "帮我新增一个 ASCIR 算子注册" | ||
| 30 | +- "给 ASCIR 算子增加一个 dtype 支持" | ||
| 31 | +- "这个 ASCIR 算子需要注册 tmp buffer 吗?" | ||
| 32 | +- "修改 ASCIR API 名称需要同步改哪些地方?" | ||
| @@ -0,0 +1,676 @@ | |||
| 1 | +--- | ||
| 2 | +name: af-reg-ascir | ||
| 3 | +description: | | ||
| 4 | + 识别 graph-autofusion 新增或更新 ASCIR 的完整修改面,并给出注册、regbase、Codegen、Python、UT/ST/E2E、上板故障的最小修改方案。 | ||
| 5 | + **必须触发的场景**:用户提到 ASCIR 注册/更新、ascir op、AscendC regbase、dtype、tmp buffer、pyascir、ASCIR UT/ST/E2E、上板编译或运行错误。 | ||
| 6 | +--- | ||
| 7 | + | ||
| 8 | +# graph-autofusion ASCIR 注册辅助 | ||
| 9 | + | ||
| 10 | +辅助用户在 graph-autofusion 中完成 ASCIR 算子的新增、修改、数据类型扩展、tmp buffer 注册,以及配套 UT/ST 生成与验证。 | ||
| 11 | + | ||
| 12 | +--- | ||
| 13 | + | ||
| 14 | +## 触发场景 | ||
| 15 | + | ||
| 16 | +用户请求包含以下任一意图时,必须使用本 skill: | ||
| 17 | + | ||
| 18 | +- 新增 ASCIR 算子、注册 ASCIR 算子、添加 `REG_ASC_IR`。 | ||
| 19 | +- 修改已有 ASCIR 算子的注册、实现类、API 名称、输入输出、ComputeType 或 dtype。 | ||
| 20 | +- 为 ASCIR 算子增加 dtype 支持、类型转换逻辑或 cast-map。 | ||
| 21 | +- 为 ASCIR 算子添加或修改 tmp buffer 注册、`CalcTmpBufSize`、`CalcXxxTmpSizeV2`。 | ||
| 22 | +- 为 ASCIR 注册变更补充 UT、ST、E2E 测试或测试图函数。 | ||
| 23 | +- 排查 ASCIR 注册、codegen、ATT、pyascir、性能模型、测试编译失败。 | ||
| 24 | + | ||
| 25 | +--- | ||
| 26 | + | ||
| 27 | +## 执行原则 | ||
| 28 | + | ||
| 29 | +- 先明确用户目标是“新增算子”还是“修改已有算子”,再决定最小修改范围。 | ||
| 30 | +- 不做无关重构,不批量格式化无关文件,不新增与需求无关的抽象。 | ||
| 31 | +- 修改前必须检索现有同类算子,优先复用项目已有模式。 | ||
| 32 | +- 修改后必须验证,至少完成静态检索;涉及编译或测试时按 af-build-runner 和 af-test-developer 执行。 | ||
| 33 | +- 所有编译命令必须限制并行度,优先使用 `-j 8`。 | ||
| 34 | +- 不自动提交代码,除非用户明确要求 commit。 | ||
| 35 | + | ||
| 36 | +--- | ||
| 37 | + | ||
| 38 | +## 信息收集 | ||
| 39 | + | ||
| 40 | +### 新增 ASCIR 算子 | ||
| 41 | + | ||
| 42 | +若用户未提供完整信息,一次性收集必需参数: | ||
| 43 | + | ||
| 44 | +```text | ||
| 45 | +OpName(PascalCase) InputNum(0/1/2/3) OutputNum(1) ComputeType(elewise/reduction/...) DataType(float32,float16,...) TmpBuf(true/false) | ||
| 46 | +``` | ||
| 47 | + | ||
| 48 | +可选参数: | ||
| 49 | + | ||
| 50 | +```text | ||
| 51 | +version(v1/v2,默认 v2) test(true/false,默认 false) cast-map(如 float16:float32,int8:int32) | ||
| 52 | +``` | ||
| 53 | + | ||
| 54 | +### 修改已有 ASCIR 算子 | ||
| 55 | + | ||
| 56 | +先确认以下信息: | ||
| 57 | + | ||
| 58 | +- 目标算子名与版本:`OpName`、`v1` 或 `v2`。 | ||
| 59 | +- 修改类型:注册项、dtype、tmp buffer、API 名、ATT、Codegen、Python API、性能模型、UT/ST。 | ||
| 60 | +- 是否需要保持外部 API/OpType/节点名兼容。 | ||
| 61 | +- 是否需要补充或更新 UT/ST。 | ||
| 62 | + | ||
| 63 | +### 批量 dtype 注册 | ||
| 64 | + | ||
| 65 | +优先让用户提供 JSON 配置;如果用户没有 JSON,则先整理为等价结构再执行。 | ||
| 66 | + | ||
| 67 | +```json | ||
| 68 | +[ | ||
| 69 | + { | ||
| 70 | + "ascir_name": "Abs", | ||
| 71 | + "ascir_dtype": "DT_FLOAT16", | ||
| 72 | + "version": "v2", | ||
| 73 | + "enabled": true, | ||
| 74 | + "dtype_config": { | ||
| 75 | + "requires_cast": false, | ||
| 76 | + "cast_to_dtype": null | ||
| 77 | + }, | ||
| 78 | + "st_config": { | ||
| 79 | + "generate": true, | ||
| 80 | + "dims": 3, | ||
| 81 | + "version": "v2" | ||
| 82 | + } | ||
| 83 | + } | ||
| 84 | +] | ||
| 85 | +``` | ||
| 86 | + | ||
| 87 | +--- | ||
| 88 | + | ||
| 89 | +## 关键路径 | ||
| 90 | + | ||
| 91 | +根据仓库实际文件为准,当前工程常见修改点包括: | ||
| 92 | + | ||
| 93 | +- V2 ASCIR 注册表:`autofuse/v35/ascir/generator/ascir_builtin_ops_v2.cpp`。 | ||
| 94 | +- V1 ASCIR 注册表:`autofuse/ascir/generator/ascir_builtin_ops_v1.cpp`。 | ||
| 95 | +- 注册宏与注册表实现:`autofuse/inc/graph_metadef/graph/ascendc_ir/ascir_register.h`、`autofuse/graph_metadef/graph/ascendc_ir/generator/ascir_register.cc`、`autofuse/inc/graph_metadef/graph/ascendc_ir/ascir_registry.h`。 | ||
| 96 | +- V2 ATT 实现:`autofuse/v35/ascir/generator/v2_ascir_att_impl.h`。 | ||
| 97 | +- V2 Codegen 实现:`autofuse/v35/ascir/generator/v2_ascir_codegen_impl.h`。 | ||
| 98 | +- V2 tmp buffer 声明与实现:`default_reg_func_v2.h`、`autofuse/v35/ascir/reg_func/`。 | ||
| 99 | +- V2 性能模型:`autofuse/v35/att/api_perf_register/ascir_api_perf_v2.cpp`,Reduce 类性能模型在 `ascir_reduce_api_perf_v2.cpp`。 | ||
| 100 | +- Python C 扩展:`autofuse/compiler/py_module/pyascir.h` 维护 `REGISTERED_OPS`;`pyascir.cpp` 创建 `ascir.ops.OpName` 并暴露 IR 属性。 | ||