skills/ascendc-operator-dev/SKILL.md
AscendC算子端到端开发编排器。当用户需要开发新算子、实现自定义算子、或完成从需求到测试的完整流程时使用。关键词:算子开发、operator development、端到端、完整流程、工作流编排、新建算子。
npx skillsauth add Ascend/agent-skills ascendc-operator-devInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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 次仍失败则停止并向用户报告详细错误。
testing
Kubernetes 集群健康检查与安全修复 — 诊断问题,用户确认后执行修复
tools
昇腾NPU CANN Toolkit+Kernels+NNAL安装部署技能。支持从官网下载run包安装和从Docker镜像提取两种方式,覆盖驱动检查、包下载、安装、环境变量配置与验证全流程。当用户需要安装CANN全套组件或指定版本CANN到自定义路径时调用。
development
编译 ATB (Ascend Transformer Boost) 测试框架。当用户需要编译 ATB 测试框架、 运行 CSV 测试、或构建 atb_test_framework 时调用。支持全量编译(含第三方依赖克隆与源替换) 和增量编译两种模式。需在 Docker 容器内配合 CANN 环境执行。
databases
ATB OPS→ACLNN 迁移标准化工作流主模板。整合前置学习、设计文档生成、CSV用例设计、 实际迁移、编译验证、测试验证全流程,提供明确的阶段 Gates 和用户确认机制。