0. 软硬件准备
本次学习实践是基于香橙派开发板进行的,板卡本身已经预设好了驱动与开发套件。若使用华为云进行实践的话,须首先手动配置环境
硬件
- 香橙派开发板(昇腾310B)
软件
- PC端:MobaXterm终端工具
- 代码:Ascend C算子开发样例仓库
- *驱动和工具包(华为云需)
- A300-3010-npu-driver_23.0.0_linux-x86_64.run
- Ascend-cann-nnrt_8.0.RC2.alpha002_linux-x86_64.run
- Ascend-cann-toolkit_8.0.RC2.alpha002_linux-x86_64.run
1. 香橙派连接与设置
板卡连接步骤
- 通过网线连接PC与香橙派板卡
- 接入香橙派电源(右侧TypeC接口)
- 适配以太网
- PC端IPv4配192.168.137.101)
- Moba或SSH按192.168.137.100连接
2. AddCustom为例的算子开发说明
- 算子功能描述:实现
half
类型的z=x+y
向量加法操作 - 算子开发调用方式
- KernelLaunch,适合快速开发、验证场景
- FrameworkLaunch,适合正式、完整算子工程场景
3. KernelLaunch调用
算子文件夹路径:~/samples/operator/AddCustomSample/KernelLaunch/AddCustom
KernelLaunch调用的核心代码为add_custom.cpp,该文件内定义了算子的描述与实现内容。
3.1 KernelAdd核心
KernelAdd算子核心是要实现初始化(Init)和处理(Process)两个函数。
初始化(Init)
主要任务包括:
- Global Memory的Buffer设置
- 流水线pipe的Buffer初始化
处理(Process)
主要任务包括:
- 计算所需循环迭代步数
- 执行迭代步按Stage流水步骤(CopyIn,Compute和CopyOut)处理数据
3.2 Stage流水核心代码
Ascend C将算子开发过程进行了封装抽象,即将算子处理数据的流程划分为了CopyIn、Compute和CopyOut三个阶段。
三个阶段的指令发送异步进行,之间通过VECIN和VECOUT的进出队的方式实现同步。
Compute Stage
- 流程
- 从inQueueX和inQueueY获取x和y数据存xLocal和yLocal
- 使用Add算子执行xLocal与yLocal的向量加法操作,结果存zLocal
- 将zLocal数据写入outQueueZ
- inQueueX和inQueueY释放Tensor(xLocal和yLocal)
CopyIn Stage
- 流程
- inQueueX和inQueueY分配LocalTensor<half>(xLocal和yLocal)
- 数据拷贝,将GlobalMemory中数据拷贝到片上Local Memory
- 将Local Memory数据入队到inQueueX和inQueueY
CopyOut Stage
- 流程
- outQueueZ出队zLocal数据
- 将z数据从Local Memory拷贝到Global Memory
- outQueueZ释放Tensor资源(zLocal)
3.3 算子调用验证
运行脚本:bash run.sh
若编译运行完,验证显示test pass则表示通过算子验证!
4. FrameworkLaunch调用
算子文件夹路径:~/samples/operator/AddCustomSample/FrameworkLaunch/AddCustom
FrameworkLaunch调用是完整算子工程的开发调用方式,其中算子开发与编译在AddCustom
进行,经编译安装后的算子在AclNNInvocation
中调用验证。
4.1 算子开发(AddCustom)
AddCustom算子开发需要分别编写实现host侧(op_host)和device侧(op_kernel)的代码。
Host侧(op_host)
- add_cutsom_tiling.h
- 设置总长度(totalLength)
- 设置分片长度(tileNum)
- add_custom.cpp
- 填充tiling信息
- 输入输出参数信息(数据类型,存储排布方式等)
Device侧(op_device)
同KernelLaunch调用的算子实现(add_custom.cpp)
编译安装
- 运行脚本:
bash run.sh
- 安装算子:进入build_out文件夹,运行.run文件
4.2 算子调用(AclNNInvocation)
经过上节算子开发与编译安装后,可在算子工程中通过Acl调用算子以验证。
- 运行脚本:
bash run.sh
- 若test pass则表示算子验证通过!
5. 注意事项
- 香橙派连接部分,注意PC端配IPv4是192.168.137.101,而ssh连接香橙派时则以192.168.137.100。
- 若使用华为云实践,务必注意NPU版本(310不带字母版仅支持cpu和sim编译执行!AddKernelInvocationTilingNeo样例运行报错 aclError:507015