CANNBot 算子直调开发快速入门指南

概述

CANNBot 算子直调开发模式适用于快速验证自定义算子场景,通过 Ascend C API 直接开发和验证算子 Kernel,无需构建完整的 aclnn 接口层,适合原型开发、算子验证、学习研究等场景。

与算子仓开发的区别

对比维度 算子直调(本模式) 算子仓开发
适用场景 快速验证、原型开发、学习研究 生产级算子、算子仓贡献
开发内容 Kernel + Tiling + Host 验证代码 完整 aclnn 接口 + Kernel + 测试用例
目录结构 独立工程目录 算子仓标准目录结构
验证方式 Host 端直接调用 Kernel aclnn API 调用
开发周期 短(小时级) 长(天级)

一、环境搭建

前置条件

  • 已安装 CANN Toolkit(建议 ≥ 9.0.0),具体版本配套关系请查阅 CANN Release Notes
  • 已配置 NPU 设备(支持 Atlas A2/A3 系列、Ascend 910B/950PR 等芯片)
  • 已安装 opencode、Claude Code 等受支持的 AI 编码工具

Claude Code

首选:Plugin Marketplace(一键安装)

# 注册 marketplace(首次,GitCode 仓库需完整 URL)
/plugin marketplace add https://gitcode.com/cann/cannbot-skills.git

# 安装插件
/plugin install ops-direct-invoke@cannbot

备选:init.sh 脚本

git clone https://gitcode.com/cann/cannbot-skills.git
cd cannbot-skills/plugins-official/ops-direct-invoke
bash init.sh project claude     # 项目级
bash init.sh global claude      # 全局级

OpenCode

首选:init.sh 脚本

git clone https://gitcode.com/cann/cannbot-skills.git
cd cannbot-skills/plugins-official/ops-direct-invoke
bash init.sh project opencode   # 项目级(默认)
bash init.sh global opencode    # 全局级

Trae

git clone https://gitcode.com/cann/cannbot-skills.git
cd cannbot-skills/plugins-official/ops-direct-invoke
bash init.sh project trae       # 项目级
bash init.sh global trae        # 全局级

安装后自动检测 TRAE 环境,生成 .trae/(TRAE IDE)、.marscode/(TRAE Plugin)或 .traecli/(TRAE CLI)目录,结构与 Claude/OpenCode 基本一致。

Cursor

git clone https://gitcode.com/cann/cannbot-skills.git
cd cannbot-skills/plugins-official/ops-direct-invoke
bash init.sh project cursor     # 项目级
bash init.sh global cursor      # 全局级

安装后在项目根目录生成 .cursor/ 目录,结构与 Claude/OpenCode 基本一致。

在其他目录执行

init.sh 支持通过完整路径调用,无需先 cd 到插件目录。第三个参数指定目标项目路径,省略则安装到当前目录:

# 安装到当前目录
bash /path/to/cannbot-skills/plugins-official/ops-direct-invoke/init.sh project claude

# 安装到指定项目
bash /path/to/cannbot-skills/plugins-official/ops-direct-invoke/init.sh project claude /path/to/your_project_path

验证安装

# Claude Code
claude plugin list
# 应看到 ops-direct-invoke@cannbot ✔ enabled
ls .
# 应看到 CLAUDE.md 位于项目根目录

# OpenCode
opencode agent list
# 应看到 ascendc-kernel-architect / ascendc-kernel-developer / ascendc-kernel-reviewer

# Trae
ls .trae/      # TRAE IDE
ls .marscode/  # TRAE Plugin(init.sh 自动检测)
ls .traecli/   # TRAE CLI(init.sh 自动检测)
# 应看到 skills/ agents/ cannbot-manifest.json
# AGENTS.md 位于项目根目录

# Cursor
ls .cursor/
# 应看到 skills/ agents/ cannbot-manifest.json
# AGENTS.md 位于项目根目录

二、快速上手

启动

# Claude Code
claude

# OpenCode
opencode

Trae 用户:Trae 通过 IDE、VS Code 插件或 CLI 启动。init.sh 会自动检测 TRAE IDE(~/.trae-cn)、Plugin(~/.marscode)或 CLI(~/.traecli)并安装到对应目录。安装完成后在 IDE 中直接打开项目即可。

Cursor 用户:Cursor 通过 IDE 启动,.cursor/ 目录中的配置会自动加载。安装完成后在 IDE 中直接打开项目即可。

开发算子示例

在交互界面中输入算子开发需求,会自动加载工作流技能并指导开发:

帮我开发一个 abs 算子,支持 float16 数据类型,shape 主要是 [1,128]、[4,2048]、[32,4096]

核心工作流

采用标准工作流,确保算子开发质量:

阶段0:环境检查 → 阶段1:需求与设计 → 阶段2:Kernel开发 → 阶段3:验证与优化

每个阶段完成后才能进入下一阶段,详见 AGENTS.md。

产出物示例

算子直调模式下,CANNBot 会在 operators/{operator}/ 目录下生成以下文件:

operators/add_custom/
├── CMakeLists.txt           # 编译配置
├── run.sh                   # 运行脚本
├── op_kernel/
│   ├── add_custom_tiling.h  # Tiling 数据结构
│   └── add_custom_kernel.asc # Kernel 实现
├── op_host/
│   ├── add_custom.asc       # Host 端代码
│   └── data_utils.h
├── op_extension/            # PyTorch 直调层(TORCH_LIBRARY 注册)
├── scripts/
│   └── test_torch.py        # PyTorch 通路验证
└── docs/                    # 设计/计划/审查文档(工作流生成)

开发完成后如何调用算子

op_extension/ 目录即为直调能力的载体——Step 3 开发阶段自动完成 TORCH_LIBRARY 注册,编译后生成 lib{operator}_ops.so,无需 aclnn 接口层即可在 Python 中以 torch.ops.npu.{operator}() 直接调用:

torch.ops.load_library("build/lib{operator}_ops.so")
output = torch.ops.npu.{operator}(input1, input2)

运行 bash run.shpython3 scripts/test_torch.py 完成 PyTorch 通路验证。

三、可用技能

Skill 用途 触发时机
ascendc-kernel-develop-workflow 完整开发工作流程 强制:所有算子开发任务
ascendc-docs-search 文档资源索引 查找 API 文档和示例
ascendc-api-best-practices API 使用最佳实践 调用任何 AscendC API 前
ascendc-tiling-design Tiling 设计 多核切分、UB切分、Buffer规划
npu-arch NPU 架构知识 查询芯片特性
ascendc-precision-debug 精度调试 算子精度问题
ascendc-runtime-debug 运行时错误调试 错误码
ascendc-crash-debug 卡死/崩溃调试 挂起、超时、崩溃
ascendc-env-check 环境检查 NPU 设备查询

四、开发资源

资源类型 路径 说明
API 文档 asc-devkit/docs/api/context/ 约 1022 个 API 文档
高性能模板 asc-devkit/examples/00_introduction/01_add/basic_api_memory_allocator_add/ 双缓冲+流水线
各类示例 asc-devkit/examples/00_introduction/ 加法、减法、多输入等
调试示例 asc-devkit/examples/01_utilities/00_printf/printf.asc printf 调试方法

五、常见问题

Q: 如何查看帮助信息?

bash init.sh --help

Q: 项目级和全局安装如何选择?

  • 项目级:适合多项目开发,每个项目可以有不同配置
  • 全局:适合单一项目,全局生效

Q: 如何更新?

# Claude Code
/plugin update ops-direct-invoke@cannbot

# OpenCode (init.sh 方式)
cd cannbot-skills/plugins-official/ops-direct-invoke && bash init.sh

# Trae
cd cannbot-skills/plugins-official/ops-direct-invoke && bash init.sh project trae

# Cursor
cd cannbot-skills/plugins-official/ops-direct-invoke && bash init.sh project cursor

Q: 算子直调模式和算子仓模式如何选择?

场景 推荐模式
快速验证算法思路 算子直调
学习 Ascend C 编程 算子直调
原型开发和概念验证 算子直调
生产级算子开发 算子仓开发
向算子仓贡献代码 算子仓开发
需要完整测试用例 算子仓开发

总结

  1. 算子直调模式适合快速验证和学习,开发周期短
  2. Claude Code 用户用 /plugin install 一键安装,OpenCode/Trae/Cursor 用户用 init.sh 脚本安装
  3. 所有算子开发任务会自动加载工作流技能,按阶段执行
  4. 产出物可直接编译运行,快速验证算子功能