Ascend C自定义算子开发实践
展示如何使用msOpGen工具进行Ascend C自定义算子的工程创建、编译和部署,并使用msOpST工具对AscendC自定义算子进行功能测试。
前提条件
已参考使用前准备,完成msOpGen工具的使用准备。
${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。例如,若安装的Ascend-cann-toolkit软件包,则安装后文件存储路径为:$HOME/Ascend/ascend-toolkit/latest。
操作步骤
- 参考以下json文件,准备算子原型文件(以MatMulCustom算子为例)。
[ { "op": "MatmulCustom", "language": "cpp", "input_desc": [ { "name": "a", "param_type": "required", "format": [ "ND" ], "type": [ "float16" ] }, { "name": "b", "param_type": "required", "format": [ "ND" ], "type": [ "float16" ] }, { "name": "bias", "param_type": "required", "format": [ "ND" ], "type": [ "float" ] } ], "output_desc": [ { "name": "c", "param_type": "required", "format": [ "ND" ], "type": [ "float" ] } ] } ]
- 使用msOpGen工具执行以下命令,创建算子工程。
${INSTALL_DIR}/python/site-packages/bin/msopgen gen -i MatMulCustom.json -f tf -c ai_core-Ascendxxxyy -lan cpp -out MatmulCustom
- 命令执行完毕,会在指定目录下生成如下算子工程目录。
MatmulCustom/ ├── build.sh // 编译入口脚本 ├── cmake │ ├── xx.cmake │ ├── .... │ ├── util // 算子工程编译所需脚本及公共编译文件存放目录 ├── CMakeLists.txt // 算子工程的CMakeLists.txt ├── CMakePresets.json // 编译配置项 ├── framework // 算子插件实现文件目录,单算子模型文件的生成不依赖算子适配插件,无需关注 ├── op_host // host侧实现文件 │ ├── matmul_custom_tiling.h // 算子tiling定义文件 │ ├── matmul_custom.cpp // 算子原型注册、shape推导、信息库、tiling实现等内容文件 │ ├── CMakeLists.txt ├── op_kernel // kernel侧实现文件 │ ├── CMakeLists.txt │ ├── matmul_custom.cpp // 算子代码实现文件 ├── scripts // 自定义算子工程打包相关脚本所在目录
- 编辑CMakePresets.json配置项文件,修改"ASCEND_CANN_PACKAGE_PATH"字段中的value为CANN包实际安装路径${INSTALL_DIR}。
"ASCEND_CANN_PACKAGE_PATH": { "type": "PATH", "value": "${INSTALL_DIR}" },
- 执行算子工程编译。
./build.sh
- 进行自定义算子包部署。
- 执行以下命令,将算子部署到CANN:
./build_out/custom_opp_<target os>_<target architecture>.run
- 执行以下命令,将算子部署到自定义路径(以xxx/ MatmulCustom /installed为例):
./build_out/custom_opp_<target os>_<target architecture>.run --install-path="xxx/MatmulCustom/installed"
- 执行以下命令,将算子部署到CANN:
- 执行以下命令,生成ST测试用例。
${INSTALL_DIR}/python/site-packages/bin/msopst create -i "xxx/MatmulCustom/op_host/matmul_custom.cpp" -out ./st // xxx需要修改为用户实际工程路径
- 进行ST测试。
- 根据CANN包安装路径,配置以下环境变量:
export DDK_PATH=${INSTALL_DIR} export NPU_HOST_LIB=${INSTALL_DIR}/runtime/lib64/stub
- 执行以下命令,进行ST测试,并将输出结果到指定路径:
${INSTALL_DIR}/python/site-packages/bin/msopst run -i ./st/xxx.json -soc Ascendxxxyy -out ./st/out //xxx.json为步骤8获得的测试用例
- 根据CANN包安装路径,配置以下环境变量:
父主题: 典型案例