使用Notebook开发Ascend算子
概述
训练、推理场景下,使用第三方框架时遇到不支持的算子,需要自己开发;网络调优时,发现一些算子组合性能较低,需重新开发高性能算子替换低性能的算子,此时可以通过VS Code一键连接云上Notebook,使用云上资源,在VS Code端进行算子开发、调试等。Notebook中已经配置好环境,您无需进行CANN软件安装和环境变量配置就可以进行工程化开发。
本文档提供了一套算子工程样例代码,您可以直接使用。如果需要了解Ascend算子的编程模型等,请参见昇腾文档。Notebook中已经配置好环境,无需进行CANN软件安装和环境变量配置,直接在VS Code远端环境中直接进行算子分析及后续操作。
准备工作
- 单击链接下载算子样例并上传到OBS桶。
- 创建基于mindspore_2.2.0-cann_7.0.1-py_3.9-euler_2.10.7-aarch64-snt9b引擎的Notebook实例,并打开SSH远程开发开关。且该Notebook实例状态必须为“运行中”。具体操作参考创建Notebook实例。
本文档只针对选用“mindspore_2.2.0-cann_7.0.1-py_3.9-euler_2.10.7-aarch64-snt9b”的引擎进行算子调测,如果使用其它AI引擎可能会报错。
图1 创建基于mindspore_2.2.0-cann_7.0.1-py_3.9-euler_2.10.7-aarch64-snt9b引擎的Notebook实例
- 打开JupyterLab,单击文件上传按钮,将OBS桶的样例文件传至Notebook。详细操作请参考上传OBS文件到JupyterLab。
通过VS Code连接云端Notebook
- Notebook创建完成后处于运行状态,单击操作列的“更多 > VS Code接入”,参考VS Code一键连接Notebook连接云上开发环境。
- 成功连接云上开发环境后,VS Code界面上会显示云上已下载的工程如图2所示。
在VS Code中调试Add算子
- 在Terminal中执行如下命令进入Add算子所在目录。
cd samples/cplusplus/level1_single_api/4_op_dev/6_ascendc_custom_op/kernel_invocation/Add
- 执行如下命令编译和运行脚本。
- CPU模式下执行如下命令。
bash run.sh add_custom ascend910B1 VectorCore cpu
其中,add_custom表示需要运行的算子,ascend910B1表示算子运行的AI处理器型号,VectorCore表示在VectorCore上运行,cpu表示算子以cpu模式运行。
运行结果如下,当前使用md5sum对比了所有输出bin文件,md5值一致表示实际的输出数据和真值数据相符合。
图3 CPU模式运行结果
- NPU模式下执行如下命令
bash run.sh add_custom ascend910B1 VectorCore npu
运行结果如下,当前使用md5sum对比了所有输出bin文件,md5值一致表示实际的输出数据和真值数据相符合。
图4 NPU模式运行结果
- CPU模式下执行如下命令。
在VS Code中调试matmul算子
- matmul算子所在目录为“samples/cplusplus/level1_single_api/4_op_dev/6_ascendc_custom_op/kernel_invocation/Matmul”。
- 在work目录下执行如下命令。
cd samples/cplusplus/level1_single_api/4_op_dev/6_ascendc_custom_op/kernel_invocation/Matmul
- 执行如下命令修改main.cpp文件,此文件为调用算子的应用程序文件。
vim main.cpp
将param4FileSize的值改为192
图5 修改param4FileSize为192
- 执行如下命令修改vim matmul_custom.cpp文件。
vim matmul_custom.cpp
将 matmul_custom.cpp中的tiling.K更改成tiling.Ka
图6 tiling.K更改成tiling.Ka
- 手动在Matmul目录下创建名为“output”的文件夹。
图7 创建output文件夹
- 执行如下命令编译和运行脚本。
- CPU模式下执行如下命令
bash run.sh matmul_custom ascend910B1 AiCore cpu ONBOARD CUSTOM_TILING
运行结果如下,当前使用md5sum对比了所有输出bin文件,md5值一致表示实际的输出数据和真值数据相符合。
图8 CPU模式运行结果
- NPU模式下执行如下命令
bash run.sh matmul_custom ascend910B1 AiCore npu ONBOARD CUSTOM_TILING
运行结果如下,当前使用md5sum对比了所有输出bin文件,md5值一致表示实际的输出数据和真值数据相符合。
图9 NPU模式运行结果
- CPU模式下执行如下命令
生成profile
NPU调试后,会在工程目录下生成matmul_custom_npu可执行文件,执行如下命令生成profiling。
msprof --application="matmul_custom_npu" --output="./output"
停止Notebook实例前备份文件
Notebook实例停止时,后端对应的容器环境会被删除,只有“/home/ma-user/work”目录下的内容会持久化保存,其他目录下的修改都会丢失。
备份方法
可以在停止Notebook实例前手工复制文件到/home/ma-user/work目录下。
需要复制的目录内容包括:
- /home/ma-user/ AscendProjects目录下的自建工程
- /home/ma-user/modelzoo/目录下的模型转换后的om文件、配置文件、评估报告
- /home/ma-user/.mindstudio目录下的ssh配置
- 其他用户自己修改的内容
当Notebook实例再次启动时,用户将手工备份的目录内容复制回原始目录后即可正常继续使用。