算子kernel侧和host侧实现开发完成后,需要对算子工程进行编译,生成自定义算子安装包*.run,详细的编译操作包括:
{ "version": 1, "cmakeMinimumRequired": { "major": 3, "minor": 19, "patch": 0 }, "configurePresets": [ { "name": "default", "displayName": "Default Config", "description": "Default build using Unix Makefiles generator", "generator": "Unix Makefiles", "binaryDir": "${sourceDir}/build_out", "cacheVariables": { "CMAKE_BUILD_TYPE": { "type": "STRING", "value": "Release" }, "ENABLE_SOURCE_PACKAGE": { "type": "BOOL", "value": "True" }, "ENABLE_BINARY_PACKAGE": { "type": "BOOL", "value": "True" }, "ASCEND_COMPUTE_UNIT": { "type": "STRING", "value": "ascendxxx" }, "ENABLE_TEST": { "type": "BOOL", "value": "True" }, "vendor_name": { "type": "STRING", "value": "customize" }, "ASCEND_CANN_PACKAGE_PATH": { "type": "PATH", "value": "/usr/local/Ascend/latest" //请替换为CANN软件包安装后的实际路径 }, "ASCEND_PYTHON_EXECUTABLE": { "type": "STRING", "value": "python3" }, "CMAKE_INSTALL_PREFIX": { "type": "PATH", "value": "${sourceDir}/build_out" }, "ENABLE_CROSS_COMPILE": { //使能交叉编译,请根据实际环境进行配置 "type": "BOOL", "value": "False" }, "CMAKE_CROSS_PLATFORM_COMPILER": { //请替换为交叉编译工具安装后的实际路径 "type": "PATH", "value": "/usr/bin/aarch64-linux-gnu-g++" } } } ] }
参数名称 |
参数描述 |
默认值 |
---|---|---|
ASCEND_CANN_PACKAGE_PATH |
CANN软件包安装路径,请根据实际情况进行修改。 |
“/usr/local/Ascend/latest” |
CMAKE_BUILD_TYPE |
编译模式选项,可配置为:
|
“Release” |
ENABLE_SOURCE_PACKAGE |
是否开启源码编译 |
“True” |
ENABLE_BINARY_PACKAGE |
是否开启二进制编译 |
“True” |
vendor_name |
标识自定义算子所属厂商的名称。建议开发者自行指定所属厂商名称,避免和其他厂商提供的算子包冲突。 |
“customize” |
./build.sh
编译成功后,会在当前目录下创建build_out目录,并在build_out目录下生成自定义算子安装包custom_opp_<target os>_<target architecture>.run。
完成算子代码实现后,如果当前平台架构和运行环境一致则参考上一节的内容进行编译即可,如果需要实现算子包的交叉编译,您可以参考如下流程。
当前平台架构 |
运行环境平台架构 |
编译工具下载命令 |
---|---|---|
x86_64 |
aarch64 |
sudo apt-get install -y g++-aarch64-linux-gnu |
aarch64 |
x86_64 |
sudo apt-get install g++-x86-64-linux-gnu |
"ENABLE_CROSS_COMPILE": { "type": "BOOL", "value": "True" }
"CMAKE_CROSS_PLATFORM_COMPILER": { "type": "PATH", "value": "/usr/bin/aarch64-linux-gnu-g++" }
编译成功后,会在当前目录下创建build_out目录,并在build_out目录下生成自定义算子安装包custom_opp_<target os>_<target architecture>.run
在算子工程中,如果开发者想要对算子kernel侧代码增加一些自定义的编译选项,比如:
-Dname=definition
可以参考如下内容进行编译选项的定制。
修改算子工程op_kernel目录下的CMakeLists.txt,使用add_ops_compile_options来增加编译选项,方法如下:
add_ops_compile_options(OpType COMPUTE_UNIT soc_version1 soc_version2 ... OPTIONS option1 option2 ...)
具体参数的介绍如下:
参数名称 |
可选/必选 |
参数描述 |
---|---|---|
OpType(算子类型) |
必选 |
第一个参数应传入算子类型,如果需要对算子工程中的所有算子生效,需要配置为ALL。 |
COMPUTE_UNIT |
可选 |
标识编译选项在哪些AI处理器型号上生效,多个型号之间通过空格间隔。不配置时表示对所有AI处理器型号生效。 说明:
COMPUTE_UNIT具体配置如下: 在安装昇腾AI处理器的服务器执行npu-smi info命令进行查询,在查询到的“Name”前增加Ascend信息,例如“Name”对应取值为xxxyy,实际配置的<soc_version>值为Ascendxxxyy。 |
OPTIONS |
必选 |
自定义的编译选项。多个编译选项之间通过空格间隔。 |
add_ops_compile_options(AddCustom COMPUTE_UNIT Ascendxxxyy ... OPTIONS -DNEW_MACRO1=xx) add_ops_compile_options(AddCustom COMPUTE_UNIT Ascendxxxyy ... OPTIONS -DNEW_MACRO2=xx) add_ops_compile_options(AddCustom COMPUTE_UNIT Ascendxxxyy ... OPTIONS -DNEW_MACRO3=xx)