skills/ascendc-operator-project-init/SKILL.md
初始化 AscendC 算子工程并创建可编译的算子骨架。触发场景:(1) 用户要求创建新算子;(2) 关键词:ascendc算子、新建算子、算子目录、算子初始化;(3) 需要基于 ascend-kernel 模板快速落地。本 skill 不只建目录,还输出“可继续开发”的标准文件与检查清单。
npx skillsauth add Ascend/agent-skills ascendc-operator-project-initInstall 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类型:流程导向型(多阶段工作流,阶段检查点)
快速创建 Ascend-Kernel 算子工程,所有算子统一生成在 csrc/ops 目录下,并保证后续可直接进入设计/编码/编译测试阶段。
csrc/ops 目录下EXEC_KERNEL_CMD 左值要求、环境依赖digraph project_init {
rankdir=TB;
node [shape=box];
start [label="用户请求创建算子" shape=ellipse];
detect_ascend_kernel [label="检测ascend-kernel项目是否存在" shape=diamond];
detect_ops [label="检测csrc/ops/目录是否存在" shape=diamond];
copy_template [label="复制ascend-kernel项目模板到当前目录"];
create_ops_dir [label="创建csrc/ops目录"];
collect [label="收集算子信息"];
check_path [label="检查目标算子路径是否存在" shape=diamond];
show_exists [label="提示路径已存在,询问是否更换"];
show_result [label="展示目录结构和下一步指引"];
start -> detect_ascend_kernel;
detect_ascend_kernel -> detect_ops [label="存在"];
detect_ascend_kernel -> copy_template [label="不存在"];
copy_template -> collect;
detect_ops -> collect [label="存在ops/"];
detect_ops -> create_ops_dir [label="不存在ops/"];
create_ops_dir -> collect;
collect -> check_path;
check_path -> show_exists [label="存在"];
show_exists -> collect [label="更换名称"];
check_path -> show_result [label="不存在"];
}
op_host/ 和 op_kernel/ops.h、register.cpp、csrc/CMakeLists.txt(三处)EXEC_KERNEL_CMD 中直接传右值临时变量检测策略:
执行命令:
bash <skill_dir>/scripts/detect_ascend_kernel_project.sh
| 检测结果 | 处理方式 |
|----------|----------|
| PROJECT_FOUND:<path> | 使用现有项目,继续步骤2 |
| PROJECT_FOUND_NO_OPS:<path> | 在项目中创建csrc/ops/目录,继续步骤2 |
| PROJECT_NOT_FOUND | 复制ascend-kernel模板到当前目录,继续步骤2 |
| MULTIPLE_PROJECTS:<path1> <path2> ... | 列出所有项目,让用户选择 |
执行命令:
cp -r "<skill_dir>/templates/ascend-kernel" ./ascend-kernel
chmod +x ./ascend-kernel/build.sh
重要:复制后必须 chmod +x build.sh,否则编译时会报 Permission denied。
验证:确认ascend-kernel目录包含:
必须确认的信息:
| 信息 | 格式要求 | 说明 |
|------|----------|------|
| 算子名称 | snake_case | 如 rms_norm, flash_attn |
确认信息:
=== Ascend-Kernel算子信息 ===
算子名称: <op_name>
生成路径: <ascend_kernel_path>/csrc/ops/<op_name>
确认创建?[Y/n]
mkdir -p csrc/ops)csrc/ops/<op_name> 不存在创建目录:
mkdir -p csrc/ops/<op_name>/op_host csrc/ops/<op_name>/op_kernel
在 csrc/ops/<op_name>/ 下创建以下文件:
csrc/ops/<op_name>/
├── CMakeLists.txt
├── design.md # 设计文档占位(由 design skill 填充)
├── op_host/
│ └── <op_name>.cpp # Host 占位(由 code-gen skill 替换)
└── op_kernel/
└── <op_name>.cpp # Kernel 占位(由 code-gen skill 替换)
CMakeLists.txtascendc_add_operator(OP_NAME <op_name>)
op_host/<op_name>.cpptorch_kernel_helper.haclrtlaunch_<op_name>.hnamespace ascend_kernel { at::Tensor <op_name>(...) { ... } } 占位op_kernel/<op_name>.cppkernel_operator.hextern "C" __global__ __aicore__ void <op_name>(...) 占位初始化完成后,明确提示用户/后续 skill 更新以下三处:
csrc/ops.h:添加函数声明csrc/register.cpp:添加 m.def 与 m.implcsrc/CMakeLists.txt:
OP_SRCS 添加 host 文件ascendc_library(...) 添加 kernel 文件aclnn/<op>.cpp说明:这是实战最高频遗漏点,必须在初始化阶段提前提示。
提示用户:
Ascend-Kernel项目初始化成功!
项目结构:
<ascend_kernel_path>/
├── build.sh # 构建脚本
├── CMakeLists.txt # CMake配置
├── csrc/
│ ├── ops/ # 算子目录
│ ├── aclnn/ # ACLNN算子封装
│ ├── utils/ # 工具类
│ ├── ops.h # 算子声明
│ └── register.cpp # 算子注册
├── python/ # Python包
└── tests/ # 测试用例
下一步操作:
调用 ascendc-operator-design skill 完成设计文档
EXEC_KERNEL_CMD 参数必须是左值;如 double 先转 float 局部变量再传完成本 skill 后,至少应满足:
ascend-kernel 项目csrc/ops/<op_name>/ 标准骨架ops.h / register.cpp / csrc/CMakeLists.txt)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 和用户确认机制。