文档首页> AI开发平台ModelArts> 开发环境> 使用Notebook开发Ascend算子
更新时间:2024-04-29 GMT+08:00
分享

使用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

  1. Notebook创建完成后处于运行状态,单击操作列的“更多 > VS Code接入”,参考VS Code一键连接Notebook连接云上开发环境。
  2. 成功连接云上开发环境后,VS Code界面上会显示云上已下载的工程如图2所示。
    图2 工程目录

在VS Code中调试Add算子

  1. 在Terminal中执行如下命令进入Add算子所在目录。
    cd samples/cplusplus/level1_single_api/4_op_dev/6_ascendc_custom_op/kernel_invocation/Add
  2. 执行如下命令编译和运行脚本。
    1. CPU模式下执行如下命令。
      bash run.sh add_custom ascend910B1 VectorCore cpu

      其中,add_custom表示需要运行的算子,ascend910B1表示算子运行的AI处理器型号,VectorCore表示在VectorCore上运行,cpu表示算子以cpu模式运行。

      运行结果如下,当前使用md5sum对比了所有输出bin文件,md5值一致表示实际的输出数据和真值数据相符合。

      图3 CPU模式运行结果
    2. NPU模式下执行如下命令
      bash run.sh add_custom ascend910B1 VectorCore npu

      运行结果如下,当前使用md5sum对比了所有输出bin文件,md5值一致表示实际的输出数据和真值数据相符合。

      图4 NPU模式运行结果

在VS Code中调试matmul算子

  1. matmul算子所在目录为“samples/cplusplus/level1_single_api/4_op_dev/6_ascendc_custom_op/kernel_invocation/Matmul”
  2. 在work目录下执行如下命令。
    cd samples/cplusplus/level1_single_api/4_op_dev/6_ascendc_custom_op/kernel_invocation/Matmul
  3. 执行如下命令修改main.cpp文件,此文件为调用算子的应用程序文件。
    vim main.cpp

    将param4FileSize的值改为192

    图5 修改param4FileSize为192
  4. 执行如下命令修改vim matmul_custom.cpp文件。
    vim matmul_custom.cpp

    将 matmul_custom.cpp中的tiling.K更改成tiling.Ka

    图6 tiling.K更改成tiling.Ka
  5. 手动在Matmul目录下创建名为“output”的文件夹。
    图7 创建output文件夹
  6. 执行如下命令编译和运行脚本。
    1. CPU模式下执行如下命令
      bash run.sh matmul_custom ascend910B1 AiCore cpu ONBOARD CUSTOM_TILING

      运行结果如下,当前使用md5sum对比了所有输出bin文件,md5值一致表示实际的输出数据和真值数据相符合。

      图8 CPU模式运行结果
    2. NPU模式下执行如下命令
      bash run.sh matmul_custom ascend910B1 AiCore npu ONBOARD CUSTOM_TILING

      运行结果如下,当前使用md5sum对比了所有输出bin文件,md5值一致表示实际的输出数据和真值数据相符合。

      图9 NPU模式运行结果

生成profile

NPU调试后,会在工程目录下生成matmul_custom_npu可执行文件,执行如下命令生成profiling。

msprof --application="matmul_custom_npu" --output="./output"
图10 生成profile

停止Notebook实例前备份文件

Notebook实例停止时,后端对应的容器环境会被删除,只有“/home/ma-user/work”目录下的内容会持久化保存,其他目录下的修改都会丢失。

备份方法

可以在停止Notebook实例前手工复制文件到/home/ma-user/work目录下。

需要复制的目录内容包括:

  1. /home/ma-user/ AscendProjects目录下的自建工程
  2. /home/ma-user/modelzoo/目录下的模型转换后的om文件、配置文件、评估报告
  3. /home/ma-user/.mindstudio目录下的ssh配置
  4. 其他用户自己修改的内容

当Notebook实例再次启动时,用户将手工备份的目录内容复制回原始目录后即可正常继续使用。

分享:

    相关文档

    相关产品