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 源码产物
这个仓库主要围绕三件事展开:
- 用
@kernel、Tensor、GMTensor、Var以及可选的@vf微函数辅助,在 Python 里编写 kernel。 - 由框架负责构建指令 IR、补上各执行侧需要的同步,并把程序拆成 cube 和 vec 两条路径。
- 再通过模拟器或生成出来的运行时产物验证结果。
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这个示例展示了最小的端到端流程:
- 用
@kernel定义一个 kernel - 通过
OpExec(..., simulator=True)启动它 - 把模拟输出和 PyTorch 参考结果做对比
OpExec真机构建 + CANNSIM 所需环境变量
使用默认的simulator=False跑OpExec(kernel)时,框架会在当前工作目录生成并执行b.sh、r.sh。脚本里已写入通用基线;若本机布局不同,请在启动 Python 前自行导出下表变量。
| 变量 | 何时需要设置 | 示例值 |
|---|---|---|
ASCEND_HOME_PATH | 必须;指向你的 CANN 安装根 | <你的 CANN 安装路径>(其下应有bin/setenv.bash) |
ASCEND_CUSTOM_OPP_PATH | 需要拼接额外自定义 OPP 根 | 可为空;导出后避免set -u与set_env.bash冲突 |
EASYASC_PYTHON_BIN | CANNopbuild调用的python3需要NumPy | 含有该解释器的目录(如某 conda 环境的bin),会加入PATH |
PYTHONPATH | 需从仓库根 importeasyasc | 仓库根目录 |
b.sh/r.sh用EASYASC_ROOT(脚本所在目录)拼接相对路径;请在仓库根目录跑代码生成,使脚本落在根目录。脚本会尝试source "${ASCEND_HOME_PATH}/bin/setenv.bash",配置厂商库LD_LIBRARY_PATH,并用cannsim跑 aclnn 测试二进制。
若op_build缺.so,检查ASCEND_HOME_PATH与setenv.bash;若报缺少numpy,设置EASYASC_PYTHON_BIN指向带 NumPy 的 Python 所在目录。
核心概念
easyasc.a5:面向 A5 风格架构与指令序列的一套公开 DSL 接口。当前仓库里大多数 kernel 和测试都在使用它,包含 cube、vec、micro、寄存器、cast 和调试辅助功能。easyasc.a2:面向 A2 风格架构与指令序列的另一套公开 DSL 接口。它不是a5的兼容层,而是针对另一类指令族的并列架构接口。GMTensor:全局内存张量,对应 kernel 的输入和输出。Tensor:位于L1、L0A、L0B、L0C或UB中的片上张量。DBuff/TBuff:用来描述基于 slot 复用的缓冲张量辅助类型。Var:用于表示循环边界、维度和符号形状的标量值。OpExec:运行时入口,可用于模拟器执行或代码生成。
典型开发流程
- 先把精确的 PyTorch 公式写清楚。
- 选择流水线拓扑:
- 仅 cube
- cube -> vec
- vec -> cube
- vec -> cube -> vec
- cube -> vec -> cube
- 用 Python 把 kernel 实现出来。
- 使用
OpExec(..., simulator=True)验证。 - 如果重复出现的标量维度让形状推导变得不明确,就显式加上
shape_bindings。 - 只有在模拟器结果和参考实现对齐之后,再继续看生成产物和硬件相关执行。
仓库结构
skill/— skill 入口(skill/SKILL.md)agent/— 可复用的 easyasc DSL → AscendC 工作流agent/ROUTER.md— 渐进披露的 routeragent/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 运行时与 codegendoc/— 英文文档doc_cn/— 中文文档镜像agent/example/kernels/— 精选示例 kernelagent/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),仅供参考