news 2026/5/10 7:49:07

CANN/cannbot-skills: easyasc DSL转AscendC工作流

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/cannbot-skills: easyasc DSL转AscendC工作流

ops-easyasc-dsl

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

English README

有天我一拍脑袋想看看 AI 究竟能做成啥样,所以就有了这个仓。代码基本是纯添加零天然。我只是个傻读代码和指手画脚的人类罢了。

ops-easyasc-dsl把 easyasc DSL → AscendC 的工作流封装成一个 skill。其内部仍然提供用 Python 描述 Ascend 风格混合 kernel 的 DSL 框架,它可以:

  • 从 Python 代码生成指令 IR
  • 把 IR 下沉成拆分后的 cube/vec 代码路径
  • 在内置模拟器中运行 kernel
  • 为非模拟器场景生成 custom-op 源码产物

这个仓库主要围绕三件事展开:

  1. @kernelTensorGMTensorVar以及可选的@vf微函数辅助,在 Python 里编写 kernel。
  2. 由框架负责构建指令 IR、补上各执行侧需要的同步,并把程序拆成 cube 和 vec 两条路径。
  3. 再通过模拟器或生成出来的运行时产物验证结果。

Skill 入口

面向用户的 skill 入口是skill/SKILL.md。可复用的工作流位于agent/下。

在阅读已归档的运行时/文档内容或运行示例之前,需要先按需还原:

bash agent/scripts/init.sh

脚本是幂等的,只会还原缺失的目录。

为什么会有这个仓库

这个代码库主要服务于 kernel 的开发、实验和调试,尤其适合下面这些场景:

  • 快速验证新的纯 cube 或混合 cube/vec 流水线原型
  • 在模拟环境里验证尾块处理、tiling 和精度边界
  • 查已有 kernel,看看哪些 DSL 写法和实现套路是可行的

安装

不用安装。执行bash agent/scripts/init.sh还原easyasc/后,想办法把easyasc.a5或者easyasc.a2给 import 进来即可。

快速开始

示例环境(仅作参考,并非必须):

# 仅作参考——请根据本地情况调整 conda activate torch210npu

然后运行一个最小可执行的 kernel 示例(需先执行bash agent/scripts/init.sh):

python agent/example/kernels/a5/matmul_float_mmad.py

这个示例展示了最小的端到端流程:

  1. @kernel定义一个 kernel
  2. 通过OpExec(..., simulator=True)启动它
  3. 把模拟输出和 PyTorch 参考结果做对比

OpExec真机构建 + CANNSIM 所需环境变量

使用默认的simulator=FalseOpExec(kernel)时,框架会在当前工作目录生成并执行b.shr.sh。脚本里已写入通用基线;若本机布局不同,请在启动 Python 前自行导出下表变量。

变量何时需要设置示例值
ASCEND_HOME_PATH必须;指向你的 CANN 安装根<你的 CANN 安装路径>(其下应有bin/setenv.bash
ASCEND_CUSTOM_OPP_PATH需要拼接额外自定义 OPP 根可为空;导出后避免set -uset_env.bash冲突
EASYASC_PYTHON_BINCANNopbuild调用的python3需要NumPy含有该解释器的目录(如某 conda 环境的bin),会加入PATH
PYTHONPATH需从仓库根 importeasyasc仓库根目录

b.sh/r.shEASYASC_ROOT(脚本所在目录)拼接相对路径;请在仓库根目录跑代码生成,使脚本落在根目录。脚本会尝试source "${ASCEND_HOME_PATH}/bin/setenv.bash",配置厂商库LD_LIBRARY_PATH,并用cannsim跑 aclnn 测试二进制。

op_build.so,检查ASCEND_HOME_PATHsetenv.bash;若报缺少numpy,设置EASYASC_PYTHON_BIN指向带 NumPy 的 Python 所在目录。

核心概念

  • easyasc.a5:面向 A5 风格架构与指令序列的一套公开 DSL 接口。当前仓库里大多数 kernel 和测试都在使用它,包含 cube、vec、micro、寄存器、cast 和调试辅助功能。
  • easyasc.a2:面向 A2 风格架构与指令序列的另一套公开 DSL 接口。它不是a5的兼容层,而是针对另一类指令族的并列架构接口。
  • GMTensor:全局内存张量,对应 kernel 的输入和输出。
  • Tensor:位于L1L0AL0BL0CUB中的片上张量。
  • DBuff/TBuff:用来描述基于 slot 复用的缓冲张量辅助类型。
  • Var:用于表示循环边界、维度和符号形状的标量值。
  • OpExec:运行时入口,可用于模拟器执行或代码生成。

典型开发流程

  1. 先把精确的 PyTorch 公式写清楚。
  2. 选择流水线拓扑:
    • 仅 cube
    • cube -> vec
    • vec -> cube
    • vec -> cube -> vec
    • cube -> vec -> cube
  3. 用 Python 把 kernel 实现出来。
  4. 使用OpExec(..., simulator=True)验证。
  5. 如果重复出现的标量维度让形状推导变得不明确,就显式加上shape_bindings
  6. 只有在模拟器结果和参考实现对齐之后,再继续看生成产物和硬件相关执行。

仓库结构

  • skill/— skill 入口(skill/SKILL.md
  • agent/— 可复用的 easyasc DSL → AscendC 工作流
    • agent/ROUTER.md— 渐进披露的 router
    • agent/scripts/— 维护脚本(包含init.sh
    • agent/assets/— 归档的 runtime/docs(ops-easyasc-dsl-runtime.tar.gz)与 example(ops-easyasc-dsl-example.tar.gz
    • agent/example/— 精选 kernel 示例与手动 demo(按需还原)
    • agent/references//agent/playbooks//agent/index/— 参考、playbook 与 JSON 索引
  • agent/scripts/init.sh按需还原:
    • easyasc/— DSL 运行时与 codegen
    • doc/— 英文文档
    • doc_cn/— 中文文档镜像
    • agent/example/kernels/— 精选示例 kernel
    • agent/example/demo/— 按设备家族整理的手动运行示例

注意:testcases/已从交付的 skill 包中移除。

文档索引

doc_cn/目录由agent/scripts/init.sh还原:

  • 快速开始
  • 编程模型
  • 编写第一个 Kernel
  • 混合流水线与同步
  • 模拟器与 Trace
  • 代码生成与运行时
  • Kernel 模式与范式
  • 测试与验证
  • API 参考
  • 故障排查
  • 面向贡献者的架构说明
  • Stub 与 Codegen 名字对照表

【免费下载链接】cannbot-skillsCANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。项目地址: https://gitcode.com/cann/cannbot-skills

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 7:46:51

Codex宠物模式上线后,程序员们开始了疯狂整活...(附使用教程)

Codex宠物模式上线后&#xff0c;程序员们开始了疯狂整活… 关键词&#xff1a;Codex宠物模式、petdex宠物网站、Codex自定义宠物、ikun-hoops、Codex pets安装教程 前几天我在更新 Codex 的时候&#xff0c;发现它悄悄上线了一个「宠物模式」。 一开始我以为只是那种简单的桌…

作者头像 李华
网站建设 2026/5/10 7:45:48

从10队到50队:知识竞赛软件的高并发场景如何设计?

&#x1f680; 从10队到50队&#xff1a;知识竞赛软件的高并发场景如何设计&#xff1f;规模增长带来的技术挑战与应对之道&#x1f4cc; 引言一场知识竞赛的参赛队伍从10支扩展到50支&#xff0c;看似只是数量的线性增加&#xff0c;但对支撑竞赛的软件系统而言&#xff0c;却…

作者头像 李华
网站建设 2026/5/10 7:45:47

百人同场知识竞赛软件稳定性测试:顶伯如何应对高并发挑战

&#x1f465; 百人同场竞答&#xff0c;知识竞赛软件扛得住吗&#xff1f;高并发挑战与应对之道&#x1f4cc; 引言在组织大型知识竞赛时&#xff0c;主办方面临的核心挑战之一便是技术平台的稳定性。当上百名参赛者同时登录、抢答、提交答案&#xff0c;系统瞬间将承受巨大的…

作者头像 李华
网站建设 2026/5/10 7:44:55

Swagger查询工具:命令行精准检索与AI集成实战

1. 项目概述&#xff1a;一个为开发者“开眼”的Swagger查询工具如果你和我一样&#xff0c;经常需要对接或理解一个陌生的后端API&#xff0c;那么Swagger/OpenAPI文档页面绝对是你的第一站。但说实话&#xff0c;有时候在浏览器里翻来翻去&#xff0c;尤其是面对一个包含几十…

作者头像 李华
网站建设 2026/5/10 7:42:41

Flutter for OpenHarmony 技术博客阅读器APP

Flutter for OpenHarmony 技术博客阅读器APP 欢迎加入开源鸿蒙跨平台社区&#xff1a;https://openharmonycrossplatform.csdn.net &#x1f680; Flutter for OpenHarmony 实战&#xff1a;打造程序员专属技术博客阅读器 APP 大家好&#xff01;今天带大家从零开始&#xf…

作者头像 李华
网站建设 2026/5/10 7:41:49

AI智能体技能Prime Weaver:自动化写作与文档生成实战解析

1. 项目概述&#xff1a;Prime Weaver&#xff0c;一个专为写作任务而生的AI智能体技能 如果你和我一样&#xff0c;经常需要处理大量的技术文档、产品说明、代码注释&#xff0c;甚至是日常的邮件和报告&#xff0c;那你一定理解那种“词穷”或者“表达不达意”的抓狂感。尤其…

作者头像 李华