算子包部署指执行自定义算子包的安装,算子工程的编译结果会自动部署到算子包安装目录下。
在自定义算子包所在路径下,执行如下命令,安装自定义算子包。
./custom_opp_<target os>_<target architecture>.run --install-path=<path>
--install-path为可选参数,用于指定自定义算子包的安装目录。支持指定绝对路径,运行用户需要对指定的安装路径有可读写权限。
如果部署算子包时通过配置--install-path参数指定了算子包的安装目录,则在使用自定义算子前,需要执行source <path>/vendors/<vendor_name>/bin/set_env.bash命令,set_env.bash脚本中将自定义算子包的安装路径追加到环境变量ASCEND_CUSTOM_OPP_PATH中,使自定义算子在当前环境中生效。
命令执行成功后,自定义算子包中的相关文件将部署至当前环境中。
├── opp //算子库目录 │ ├── vendors //自定义算子所在目录 │ ├── config.ini │ └── vendor_name1 // 存储对应厂商部署的自定义算子,此名字为编译自定义算子安装包时配置的vendor_name,若未配置,默认值为customize │ ├── framework //自定义算子插件库 │ ├── op_api │ │ ├── include │ │ │ └── aclnn_xx.h //算子调用API声明文件 │ │ └── lib │ │ └── libcust_opapi.so │ ├── op_impl │ │ └── ai_core │ │ └── tbe │ │ ├── config │ │ │ └── ${soc_version} //昇腾AI处理器类型 │ │ │ └── aic-${soc_version}-ops-info.json //自定义算子信息库文件 │ │ ├── vendor_name1_impl //自定义算子实现代码文件 │ │ │ └── dynamic │ │ │ ├── xx.cpp │ │ │ └── xx.py │ │ ├── kernel //自定义算子二进制文件 │ │ │ └── ${soc_version} //昇腾AI处理器类型 │ │ │ └── config │ │ └── op_tiling │ │ ├── lib │ │ └── liboptiling.so │ └── op_proto //自定义算子原型库所在目录 │ ├── inc │ │ └── op_proto.h │ └── lib │ ├── vendor_name2 // 存储厂商vendor_name2部署的自定义算子
当“opp/vendors”目录下存在多个厂商的自定义算子时,您可通过配置“opp/vendors”目录下的“config.ini”文件,配置自定义算子包的优先级。
“config.ini”文件的配置示例如下:
load_priority=vendor_name1,vendor_name2,vendor_name3
指定目录安装场景下,如果需要多个自定义算子包同时生效,分别执行各算子包安装路径下的set_env.bash脚本即可。每次脚本执行都会将当前算子包的安装路径追加到ASCEND_CUSTOM_OPP_PATH环境变量的最前面。因此可以按照脚本执行顺序确定优先级:脚本执行顺序越靠后,算子包优先级越高。
比如先执行source <path>/vendor_name1/bin/set_env.bash,后执行source <path>/vendor_name2/bin/set_env.bash,vendor_name2算子包的优先级高于vendor_name1。ASCEND_CUSTOM_OPP_PATH示例如下:
ASCEND_CUSTOM_OPP_PATH=<path>/vendor_name2:<path>/vendor_name1:
支持安装多平台的自定义算子包,安装时同样支持默认路径和自定义路径安装。
以默认路径安装为例,在aarch64平台上分别安装aarch64平台和x86_64平台算子包,安装成功后可查看目录结构兼容两种平台类型,如下所示:
├── opp //算子库目录 │ ├── vendors //自定义算子所在目录 │ ├── config.ini │ └── vendor_name1 // 存储对应厂商部署的自定义算子,此名字为编译自定义算子安装包时配置的vendor_name,若未配置,默认值为customize │ ├── framework //自定义算子插件库 │ ├── op_impl │ │ └── ai_core │ │ └── tbe │ │ ├── config │ │ │ └── ${soc_version} │ │ │ └── aic-${soc_version}-ops-info.json //自定义算子信息库文件 │ │ ├── vendor_name1_impl //自定义算子实现代码文件 │ │ │ └── dynamic │ │ │ ├── xx.cpp │ │ │ └── xx.py │ │ ├── kernel //自定义算子二进制文件 │ │ │ └── ${soc_version} │ │ │ └── config │ │ └── op_tiling │ │ ├── lib │ │ │ └──linux │ │ │ ├──aarch64 │ │ │ │ └──libcust_opmaster_rt2.0.so │ │ │ └──x86_64 │ │ │ └──libcust_opmaster_rt2.0.so │ │ └── liboptiling.so -> lib/linux/aarch64/libcust_opmaster_rt2.0.so │ └── op_proto //自定义算子原型库所在目录 │ ├── inc │ │ └── op_proto.h │ └── lib │ └──linux │ ├──aarch64 │ │ └──libcust_opsproto_rt2.0.so │ └──x86_64 │ └──libcust_opsproto_rt2.0.so │ ├── vendor_name2 // 存储厂商vendor_name2部署的自定义算子