From external-gitcode-ascend-skills
Orchestrates end-to-end AscendC operator development: project init, design, test gen, code gen, compile, API doc, precision eval (≥30 cases), performance eval (msprof). For building new custom operators from scratch.
How this skill is triggered — by the user, by Claude, or both
Slash command
/external-gitcode-ascend-skills:ascendc-operator-devThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
**Skill类型**:流程导向型(七阶段工作流,子技能串行编排)
Skill类型:流程导向型(七阶段工作流,子技能串行编排)
本 skill 编排七个子 skill,驱动 ascend-kernel 算子从零到生产可用。
| Skill | 路径 | 职责 |
|---|---|---|
ascendc-operator-project-init | ascendc-operator-project-init/SKILL.md | 检测/创建 ascend-kernel 项目,生成算子骨架目录 |
ascendc-operator-design | ascendc-operator-design/SKILL.md | 分析算子需求,生成设计文档(含 Tiling 策略、UB 分配表) |
ascendc-operator-testcase-gen | ascendc-operator-testcase-gen/SKILL.md | 根据设计文档生成统一测试用例文档,供精度评估和性能评测复用 |
ascendc-operator-code-gen | ascendc-operator-code-gen/SKILL.md | 根据设计文档生成 op_host/op_kernel 代码、框架适配、编译测试 |
ascendc-operator-compile-debug | ascendc-operator-compile-debug/SKILL.md | 编译、安装 whl、生成测试文件、运行精度测试(由 code-gen 内部调用) |
ascendc-operator-doc-gen | ascendc-operator-doc-gen/SKILL.md | 从源码提取接口信息,生成 PyTorch 风格中文 API 文档(必选阶段) |
ascendc-operator-precision-eval | ascendc-operator-precision-eval/SKILL.md | 生成 ≥30 例精度测试、运行并输出精度验证报告(必选阶段) |
ascendc-operator-performance-eval | ascendc-operator-performance-eval/SKILL.md | 使用 msprof 对比工程算子与原生算子性能,输出性能评测报告(必选阶段) |
Phase 1 Phase 2 Phase 3 Phase 4 Phase 5 Phase 6 Phase 7
工程初始化 ──▶ 设计文档 ──▶ 用例生成 ──▶ 代码生成+框架适配+编译测试 ──▶ 接口文档 ──▶ 精度评估报告 ──▶ 性能评测报告
project-init design testcase-gen code-gen → compile-debug doc-gen precision-eval performance-eval
输入: 算子名称 + 功能描述 输出: 生产可用算子 + 用例文档 + 接口文档 + 精度报告 + 性能报告
目标:确认算子开发所需的最小信息集,包括开发环境和算子需求
开发环境是所有后续阶段的前置依赖,必须首先确认。
自动检测流程:
ASCEND_HOME_PATH 是否已设置(echo $ASCEND_HOME_PATH)CANN_PATH/usr/local/Ascend/ascend-toolkit)激活方式:
source ${CANN_PATH}/*/set_env.sh
在每个需要编译或运行算子的 Shell 会话中,都必须先执行此激活命令。
自动检测流程:
echo $CONDA_DEFAULT_ENV)base 且非空):直接使用当前环境,无需询问用户base:MUST 向用户询问要使用的 conda 环境名称激活方式:
conda activate <env_name>
在每个需要编译或运行算子的 Shell 会话中,都必须先激活 conda 环境。
source ${CANN_PATH}/*/set_env.sh 可正常执行conda activate <env_name> 可正常执行| 信息 | 格式要求 | 必填 | 说明 |
|---|---|---|---|
| CANN 环境路径 | 绝对路径 | 是 | 自动检测 $ASCEND_HOME_PATH,未设置则询问用户 |
| Conda 环境名称 | 字符串 | 是 | 自动检测 $CONDA_DEFAULT_ENV,未激活则询问用户 |
| 算子名称 | snake_case | 是 | 如 acosh, rms_norm, flash_attn |
| 功能描述 | 文本/数学公式 | 是 | 如 "反双曲余弦 acosh(x) = ln(x + sqrt(x²-1))" |
可选信息(有默认值):
| 信息 | 默认值 | 说明 |
|---|---|---|
| 支持的数据类型 | float16, float32 | 可扩展 bfloat16 |
| SoC平台 | ascend910b | 通过平台 API 自动获取 |
| 用户请求 | 处理方式 |
|---|---|
| "生成 X 算子" / "开发 X 算子" | 先完成环境确认(Step 0.1),再从算子名推断功能,确认后直接执行全流程 |
| "帮我开发新算子"(无具体名称) | 先完成环境确认(Step 0.1),再询问算子名称和功能描述 |
| "继续算子开发" | 先完成环境确认(Step 0.1),再检查已有文件判断阶段,从中断处继续 |
调用 Skill:ascendc-operator-project-init
MANDATORY: 按 ascendc-operator-project-init skill 流程执行:
1. 检测 ascend-kernel 项目是否存在
2. 不存在则从模板复制
3. 在 csrc/ops/<op_name>/ 下创建算子骨架
4. 提示三处注册更新点
csrc/ops/<op_name>/ 目录已创建op_host/<op_name>.cpp、op_kernel/<op_name>.cpp、CMakeLists.txt、design.md全部通过 → 进入 Phase 2
调用 Skill:ascendc-operator-design
MANDATORY: 按 ascendc-operator-design skill 流程执行:
1. 分析算子需求(名称、功能、数据类型)
2. 确定实现路径(AscendC Kernel / CATLASS / ACLNN)
3. 设计 Tiling 策略(Block级 + UB级)
4. 填写 UB 分配表,推导 bufferCoefficient
5. 生成完整设计文档到 csrc/ops/<op_name>/design.md
csrc/ops/<op_name>/design.md 内容完整全部通过 → 进入 Phase 3
调用 Skill:ascendc-operator-testcase-gen
MANDATORY: 按 ascendc-operator-testcase-gen skill 流程执行:
1. 读取 csrc/ops/<op_name>/design.md,提取参数约束、支持的 dtype、典型 shape
2. 生成 TEST_SHAPES(常规 shape)、GENERAL_SHAPES(泛化 shape)、BOUNDARY_VALUES(边界值)
3. 生成算子标杆(CPU 参考实现、NPU 调用方式)
4. 输出用例文档到 csrc/ops/<op_name>/test/<op_name>-test-cases.md
csrc/ops/<op_name>/test/<op_name>-test-cases.md 已生成全部通过 → 进入 Phase 4
调用 Skill:ascendc-operator-code-gen(内部自动调用 ascendc-operator-compile-debug)
MANDATORY: 按 ascendc-operator-code-gen skill 流程执行:
阶段 1: 加载参考文档
- 读取 references/GUIDE.md
- 按算子类型加载对应 reference
阶段 2: 读取设计文档
- 提取函数签名、UB 分配表、计算伪代码
阶段 3: 选择模板并生成代码
- 选择 elementwise / row 模板
- 生成 op_host/<op_name>.cpp(含 Tiling 计算逻辑)
- 生成 op_kernel/<op_name>.cpp(含 Compute 计算逻辑)
阶段 4: 框架适配
- 更新 csrc/ops.h(函数声明)
- 更新 csrc/register.cpp(m.def + m.impl)
- 更新 csrc/CMakeLists.txt(OP_SRCS + ascendc_library)
阶段 5: 编译安装与测试(调用 compile-debug skill)
- ./build.sh 编译
- pip install whl 安装
- 生成 tests/test_<op_name>.py
- 运行功能测试和精度测试
- 编译/测试失败最多排错 3 次
op_host/<op_name>.cpp 使用平台 API 获取硬件参数op_kernel/<op_name>.cpp 包含完整 CopyIn → Compute → CopyOut 流水线ops.h 已添加函数声明register.cpp 已添加 m.def 和 m.implcsrc/CMakeLists.txt 已添加 host 和 kernel 源文件全部通过 → 进入 Phase 5
调用 Skill:ascendc-operator-doc-gen
MANDATORY: 按 ascendc-operator-doc-gen skill 流程执行:
阶段 1: 信息提取
- 从 register.cpp 提取 Python 调用签名(m.def schema)
- 从 ops.h 提取 C++ 函数声明和返回类型
- 从 design.md 提取算法描述、参数说明、dtype 支持、约束条件
- 从 op_host 提取 TORCH_CHECK 约束
- 从 tests/test_<op_name>.py 提取使用示例
阶段 2: 文档结构组装
- 按 PyTorch 官方文档风格组装中文接口文档
- 包含:标题签名 + 功能描述 + 参数说明 + 支持的数据类型 + Shape + 约束条件 + 使用示例 + 返回值
阶段 3: 文件生成
- 生成 csrc/ops/<op_name>/README.md
阶段 4: 在交互界面展示完整文档内容
register.cpp 的 m.def 一致csrc/ops/<op_name>/README.md全部通过 → 进入 Phase 6
调用 Skill:ascendc-operator-precision-eval
MANDATORY: 按 ascendc-operator-precision-eval skill 流程执行:
阶段 1: 加载用例文档 + 信息收集
- 读取 csrc/ops/<op_name>/test/<op_name>-test-cases.md(testcase-gen 产出)
- 提取 SUPPORTED_DTYPES、TEST_SHAPES、GENERAL_SHAPES、BOUNDARY_VALUES、算子标杆
- 从已有代码补充提取精度阈值等信息
阶段 2: 用例适配((shapes + boundary) × dtypes ≥ 30 例)
- 直接复用 testcase-gen 的 TEST_SHAPES 和 BOUNDARY_VALUES
- 每个 shape / 边界值遍历算子支持的全部 dtype
阶段 3: 测试脚本生成(输出到算子目录 csrc/ops/<op_name>/test/)
- 基于模板生成 test_<op_name>_precision.py(pytest 格式)
- 基于模板生成 run_<op_name>_precision_report.py(报告生成器)
阶段 4: 执行
- 运行 pytest 全部通过
- 运行报告生成器输出 JSON
阶段 5: 报告生成
- 生成 <op_name>_precision_report.md(含常规 shape + 边界值表格 + 汇总 + 关键发现)
- 向用户提示报告路径
csrc/ops/<op_name>/test/<op_name>_precision_report.md全部通过 → 进入 Phase 7
调用 Skill:ascendc-operator-performance-eval
MANDATORY: 按 ascendc-operator-performance-eval skill 流程执行:
阶段 1: 加载用例文档 + 信息收集
- 读取 csrc/ops/<op_name>/test/<op_name>-test-cases.md(testcase-gen 产出)
- 提取 SUPPORTED_DTYPES、TEST_SHAPES、GENERAL_SHAPES、算子标杆
- 从已有代码补充提取 OP Type 关键字等信息
阶段 2: 用例适配(JSONL 格式,≥8 case)
- 从 testcase-gen 的 TEST_SHAPES + GENERAL_SHAPES 中选取代表性 shape
- 覆盖算子支持的全部 dtype
- 转换为 JSONL 格式
阶段 3: 脚本生成(输出到算子目录 csrc/ops/<op_name>/test/)
- 基于模板生成 run_<op_name>_case.py(单 case msprof 执行器)
- 基于模板生成 benchmark_<op_name>_msprof.py(总控脚本)
- 生成 <op_name>_cases.jsonl
阶段 4: 执行采集
- 运行总控脚本,每 case 20 次迭代(前 10 次预热)
- 按 OP Type 从 op_summary_*.csv 提取 Task Duration(us) 和硬件指标
- 输出 JSON 结果
阶段 5: 报告生成
- 生成 <op_name>_perf_report.md(含结果表格 + 汇总 + 简短分析)
- 向用户提示报告路径
msprof 采集,非其他计时方式OP Type 筛选目标算子(非 Op Name)csrc/ops/<op_name>/test/<op_name>_perf_report.md全部通过 → 算子开发完成
Phase 1 输出 Phase 2 输入
csrc/ops/<op_name>/ ────▶ 算子名称、目录结构
design.md (占位)
Phase 2 输出 Phase 3 输入
design.md (完整) ────▶ 参数约束、支持的 dtype、典型 shape
→ 生成统一测试用例文档
Phase 3 输出 Phase 4 输入
<op_name>-test-cases.md ────▶ design.md (完整)
(用例文档,供后续复用) 函数签名、UB 分配表 → bufferCoefficient
计算伪代码 → Compute 逻辑
Tiling 策略 → Block/UB 切分参数
Phase 4 输出 Phase 5 输入
已安装的算子 whl ────▶ register.cpp / ops.h / design.md /
tests/test_<op_name>.py op_host / test 文件
→ 提取接口信息生成文档
Phase 5 输出 Phase 6 输入
csrc/ops/<op>/README.md ────▶ <op_name>-test-cases.md(来自 Phase 3)
接口文档完成 算子名、调用方式、输入域约束
支持的全部 dtype、精度阈值
→ 输出到 csrc/ops/<op_name>/test/
Phase 6 输出 Phase 7 输入
精度报告通过 ────▶ <op_name>-test-cases.md(来自 Phase 3)
csrc/ops/<op>/test/ 算子名、工程/原生调用方式
支持的全部 dtype、OP Type 关键字
→ 输出到 csrc/ops/<op_name>/test/
| Phase | 前置条件 | 调用 Skill | 关键产出物 |
|---|---|---|---|
| 0. 需求收集 | 无 | — | CANN 路径 + Conda 环境 + 算子名称 + 功能描述 |
| 1. 工程初始化 | Phase 0 | ascendc-operator-project-init | 算子骨架目录 |
| 2. 设计文档 | Phase 1 | ascendc-operator-design | design.md(含 Tiling + UB 分配表) |
| 3. 用例生成 | Phase 2 | ascendc-operator-testcase-gen | <op_name>-test-cases.md(统一用例文档) |
| 4. 代码&测试 | Phase 3 | ascendc-operator-code-gen → compile-debug | 可运行算子 + 基本测试通过 |
| 5. 接口文档 | Phase 4 | ascendc-operator-doc-gen | PyTorch 风格中文 API 文档 (README.md) |
| 6. 精度评估 | Phase 5 | ascendc-operator-precision-eval | ≥30 例精度测试 + 精度报告 |
| 7. 性能评测 | Phase 6 | ascendc-operator-performance-eval | msprof 性能对比 + 性能报告 |
当用户说"继续算子开发"时:
| 检测条件 | 判定阶段 | 恢复动作 |
|---|---|---|
csrc/ops/<op_name>/ 不存在 | Phase 1 未完成 | 从 Phase 1 开始 |
design.md 为占位或空 | Phase 2 未完成 | 从 Phase 2 开始 |
csrc/ops/<op_name>/test/<op_name>-test-cases.md 不存在 | Phase 3 未完成 | 从 Phase 3 开始 |
op_host/ 仍为骨架代码 | Phase 4 未完成 | 从 Phase 4 开始 |
| whl 未生成 | Phase 4 编译未完成 | 从编译步骤恢复 |
| 基本测试未通过 | Phase 4 测试未完成 | 从测试步骤恢复 |
csrc/ops/<op_name>/README.md 不存在 | Phase 5 未完成 | 从 Phase 5 开始 |
csrc/ops/<op_name>/test/ 无精度报告 | Phase 6 未开始 | 从 Phase 6 开始 |
| 精度报告不存在或精度测试未全部通过 | Phase 6 未完成 | 从 Phase 6 恢复 |
| 精度报告存在但性能报告不存在 | Phase 7 未开始 | 从 Phase 7 开始 |
<op_name>_perf_report.md 不存在或不完整 | Phase 7 未完成 | 从 Phase 7 恢复 |
由 ascendc-operator-compile-debug skill 内部处理,最多排错 3 次。3 次仍失败则停止并向用户报告详细错误。
npx claudepluginhub ascend-ai-coding/awesome-ascend-skills --plugin migration-ascend-torchnpu-skillsDesigns, implements, builds, tests, documents, and tunes AscendC custom operators for Ascend NPU within an ascend-kernel PyTorch custom-op project. Covers tiling design, code generation, compilation, precision/performance evaluation, and security review.
Automates FlagGems operator PR submission: code review, compliance checks, pre-commit tests, and direct PR creation with speedup data.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.