CANNBot 实操体验:基于Ascend C的矩阵乘法算子开发

引言

作为一名 CANN 开发者,我在日常算子开发中经常遇到这些痛点:

痛点

具体表现

影响

开发效率低

手写代码框架耗时,重复劳动多

一个算子开发周期长

性能优化难

Tiling策略、双缓冲等技术门槛高

难以充分利用NPU性能

代码质量参差

缺乏统一规范,代码风格不一

团队协作困难

学习成本高

Ascend C API繁多,文档分散

新人上手慢

正好CANN 社区最近发布了 CANNBot,一个面向CANN开发的用于提升开发效率的系列智能体提供了丰富的技能模块和智能代理能力,特别是自动算子生成仿真能力,让我眼前一亮。

我想验证的是:AI 真的能帮我写算子吗?效果如何?能提升多少效率?

于是,我决定在 AtomGit Notebook 上完整体验这个项目,开发一个矩阵乘法算子,看看它是否真的能解决我的痛点。


测评结论

本次借助 CANNBot 顺利完成 Ascend C 算子开发,整体实操耗时大幅压缩,算子最终性能达到预期水准;下面从核心优势、待优化方向、效率提升维度展开详细测评分析。

✅ 核心优势

优势

具体表现

效果评估

开发效率高

自动生成完整项目结构和代码框架

⭐⭐⭐⭐⭐

大大减少手动编写工作量

代码质量好

结构清晰,注释详细,包含最佳实践

⭐⭐⭐⭐⭐

代码规范统一

性能优化到位

自动实现 Tiling 策略和双缓冲技术

⭐⭐⭐⭐☆

性能表现良好

学习价值高

通过生成代码学习 Ascend C 最佳实践

⭐⭐⭐⭐⭐

新人友好

流程标准化

7阶段开发流程,规范完整

⭐⭐⭐⭐⭐

团队协作更顺畅

⚠️ 待优化点

问题

说明

建议

参数化程度

当前代码参数化覆盖范围有限,适配场景受限

扩充参数配置项,兼容更多数据类型、数据形状

错误处理

现有异常捕获逻辑单薄,各类运行异常易直接导致程序中断

补齐分支异常校验、兜底捕获逻辑,提升代码健壮性

文档完善

现有文档仅记录功能结果,缺少底层设计推导过程

补充设计思路、优化逻辑注解,方便他人理解优化策略

响应速度

构造复杂算子时计算链路长,整体生成耗时偏高

通过缓存、逻辑拆分等手段缩减算子生成耗时,优化响应时间

📊 效率提升效果

通过本次实操,我对比了使用 CANNBot前后的开发效率:

开发环节

传统方式

使用 Skills 后

效率提升

环境搭建

1-2小时

15分钟

75%↑

代码框架编写

2-4小时

10分钟

90%↑

Tiling设计

2-3小时

自动生成

95%↑

代码审查

1小时

自动审查

80%↑

性能调优

2-4小时

自动优化建议

60%↑

总体评价:CANNBot 是一款值得推荐的 Ascend C 算子开发辅助工具,特别适合快速验证算法思路、学习 Ascend C 编程和原型开发场景。


CANNBot 是什么?

CANNBot 是面向CANN开发的用于提升开发效率的系列智能体,CANNBot-Skills仓库为其提供可复用的Skills模块,目前已经从早期仅覆盖 Ascend C 算子开发的工具集,演进为横跨 9 大开发领域、60+ Skills、20+ Agents、10 个官方 Plugin 的全栈技术体系,覆盖了 Ascend C / Catlass / PyPTO / TileLang / Triton 算子开发、torch.compile 图模式优化和 NPU 模型推理端到端优化。

核心能力一览
┌─────────────────────────────────────────────────────────────────────────────┐
│                     CANNBot-Skills 核心能力                                  │
├─────────────────────────────────────────────────────────────────────────────┤
│  🤖 9 大开发路径 + 10 个官方 Plugin                                          │
│     Ascend C 直调/注册调用 · Catlass · PyPTO · TileLang · Triton             │
│     torch.compile 图模式 · 模型推理优化 · 代码检视 · 仿真调试                  │
├─────────────────────────────────────────────────────────────────────────────┤
│  📚 60+ Skills(6 大类别)                                                    │
│     知识库:NPU架构 · API最佳实践 · Tiling设计 · 精度标准                      │
│     工程模板:注册调转直调 · Kernel直调模板 · Blaze算子生成                     │
│     调试测试:精度调试 · 运行时调试 · 崩溃调试 · 环境检查                       │
│     性能优化:性能采集分析 · AISS TilingSolver · 性能最佳实践                   │
│     仿真验证:ops-simulator 精度/性能仿真 · 流水线空泡分析                      │
│     协作治理:Skill审查 · PR/Issue自动化 · 代码检视                            │
├─────────────────────────────────────────────────────────────────────────────┤
│  👥 20+ 智能Agent                                                             │
│     architect(架构师)· developer(开发者)· reviewer(审查者)                │
│     tester(测试者)· analyst(分析师)· perf-tuner(调优师)                   │
│     design-reviewer(设计串讲)· implementer(实施者)                         │
├─────────────────────────────────────────────────────────────────────────────┤
│  🔧 多阶段开发流程                                                             │
│     环境检查 → 设计 → 设计串讲 → 开发 → 审查 → 修复 → 精度验收 → 性能验收        │
│     (Step 6 新增独立精度验收环节)                                              │
├─────────────────────────────────────────────────────────────────────────────┤
│  🔌 双轨制安装                                                                │
│     完整安装:install-helper / init.sh(Plugin + Agents + Workflows)          │
│     独立安装:npx skills add(Agent Skills 标准,70+ AI 编程工具通用)           │
└─────────────────────────────────────────────────────────────────────────────┘
本次实操案例

我选择开发一个支持 float16 数据类型的矩阵乘法算子,这是深度学习中常用的操作,且具有一定的复杂度,适合测试 CANNBot的能力

算子规格

  • 算子名称:MatMulFloat16
  • 数据类型:float16
  • 输入:矩阵 A [m, k],矩阵 B [k, n]
  • 输出:矩阵 C [m, n]
  • 支持 shape:[128, 128]、[256, 256]、[512, 512]

第一部分:环境搭建

1.1 创建Notebook实例

1.访问AtomGit官网(https://ai.atomgit.com/

2.登录账号,进入 "我的Notebook" 页面

3.点击 "激活Notebook",选择如图所示配置,点击“立即启动”即可创建 "免费实例"。

  1. 等待实例创建完成,进入到下图所示界面:

1.2 安装 Node.js 18+

Node.js 18+是CANNBot-Skills 安装及运行的前置条件。

# 1.检查 node 是否存在
node -v

# 2.安装 nvm v0.39.3
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

# 1.检查 nvm 命令是否正常
nvm ls

# 2. 将 nvm 配置添加到 .bashrc 文件
echo 'export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"'>> ~/.bashrc

# 3. 应用配置
source ~/.bashrc

# 1.安装 node v20.20.2
nvm install 20

# 1.查看 node 版本
node -v

1.3 安装 OpenCode

OpenCode / Claude Code / Trae / Cursor / GitHub Copilot中任一 AI 编程工具都是 CANNBot-Skills安装及运行的前置条件,这里我选择OpenCode :

# 安装 OpenCode 
curl -fsSL https://opencode.ai/install | bash

添加路径到 PATH 环境变量,验证安装成功。

# 1. 将 OpenCode 配置添加到 .bashrc
echo 'export PATH="/opt/atomgit/.opencode/bin:$PATH"' >> ~/.bashrc

# 2. 应用配置
source ~/.bashrc

# 3. 验证安装成功
which opencode
opencode --version

1.4 安装 CANNBot-Skills

使用完整安装方式,确保配置仅对当前项目生效:

# 通过 install-helper 一键安装
curl -fsSL https://raw.gitcode.com/cann/cannbot-skills/raw/master/install.sh | bash

第二部分:实操案例 - 开发矩阵乘法算子

2.1 启动 OpenCode

在初始化完成的目录下执行:

opencode

2.2 输入开发需求

在 OpenCode 交互界面中输入:

帮我开发一个矩阵乘法算子,支持 float16 数据类型,输入为两个矩阵 A 和 B,输出为矩阵 C = A × B。要求:
1. 支持的 shape 主要是 [128, 128]、[256, 256]、[512, 512]
2. 优化 Tiling 策略,充分利用 NPU 资源
3. 实现双缓冲技术,提高内存访问效率

2.3 阶段 1:环境检查

OpenCode 会自动加载 ascendc-kernel-develop-workflow 技能,按照标准工作流程指导开发。首先进入阶段 1:环境检查。

检查项目目录结构

验证开发环境

创建项目结构并生成environment.json(环境检查结果文件)。

2.4 阶段 2:设计阶段

OpenCode 会分析需求并生成设计方案:

2.5 阶段2.5:设计串讲阶段

2.6 阶段3:开发阶段

2.7 阶段4:审查阶段

2.8 阶段5:修复循环

审查通过,无需阶段5修复循环

2.9 阶段6:性能验收

2.10 阶段7:完成汇报

参考资源

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七夜zippoe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值