算子工程编译
简介
算子交付件开发完成后,需要对算子工程进行编译,生成自定义算子安装包custom_opp_Linux_Arch.run,详细的编译操作包括:
- 将算子信息库定义文件*.ini编译成算子信息库*.json。
- 针对AI CPU算子,将算子实现文件*.h与*.cc编译为动态库文件libcust_aicpu_kernels.so。
- 将算子插件实现文件*.h与*.cc编译成算子插件libcust_{tf|caffe|onnx}_parsers.so。
- 将算子原型定义文件.h与*.cc编译成算子原型库libcust_op_proto.so。
图1 编译过程
- Windows操作系统不支持本地编译。
- 旧版本的AI CPU算子工程在使用最新版本的Ascend-cann-toolkit开发套件包时,存在不兼容问题,需要修改CMakeLists.txt文件后重新编译算子工程。解决方法如下:
- 修改算子工程目录下/cpukernel/CMakeLists.txt文件。
... set(AICPU_SOC_VERSION $ENV{AICPU_SOC_VERSION}) message(STATUS "AICPU_SOC_VERSION=${AICPU_SOC_VERSION}") # 添加如下代码 if(EXISTS "${ASCEND_AICPU_PATH}/opp/built-in/op_impl/aicpu/aicpu_kernel/lib/${AICPU_SOC_VERSION}/libascend_protobuf.a") target_link_options(${AICPU_KERNEL_TARGET} PRIVATE -s -Wl,-Bsymbolic -Wl,--exclude-libs=libascend_protobuf.a ) target_link_libraries(${AICPU_KERNEL_TARGET} PRIVATE -Wl,--whole-archive ${ASCEND_AICPU_PATH}/opp/built-in/op_impl/aicpu/aicpu_kernel/lib/${AICPU_SOC_VERSION}/libascend_protobuf.a -Wl,--no-whole-archive ) endif() if(EXISTS "${ASCEND_AICPU_PATH}/opp/built-in/op_impl/aicpu/aicpu_kernel/lib/${AICPU_SOC_VERSION}/libcpu_kernels_context.a") ...
- 参考本章节重新编译算子工程。
- 修改算子工程目录下/cpukernel/CMakeLists.txt文件。
编译操作
- (可选)AI CPU算子引用的三方库路径可通过修改算子工程目录下的“cpukernel/CMakeLists.txt”文件进行配置。
- 在MindStudio工程界面,选中算子工程,单击顶部菜单栏的 。
- 进入编译配置页面。单击添加新增配置,默认添加编译类型“Release(default)”,请参考表1进行编译配置。图2 编译配置页面
表1 编译配置参数说明 参数
说明
Name
配置名称自定义,默认为Release。
Build type
配置类型,可选,默认为Release。
Toolchain
工具链配置器,根据已安装的CANN包预置架构一致的自定义Toolchain,支持本地和远程编译功能。
可单击“Manage toolchains...”自定义配置Toolchain,配置详情请参见Toolchains。
CMake options
CMake选项,默认:“-DCMAKE_BUILD_TYPE=Release”。
Build directory
编译目录相对路径,该路径是相对于工程目录的路径。
Build options
编译加速选项。
Environment variables
环境变量配置:支持编译前配置环境变量。
可直接手动配置或单击符号,在弹出窗中配置管理。
Environment from path
输入路径或单击右侧,选择环境变量配置文件。配置文件以单行<变量名>=<变量值>方式填写,保存为文件,如:
APATH=/usr/local/xxx X_PATH=/xxx/xxx
若选用远程Toolchain,将默认添加一个Deployment,用户需要配置环境变量。
在Environment Variables输入框中输入环境变量。
- ASCEND_TENSOR_COMPILER_INCLUDE:CANN软件头文件所在路径。
ASCEND_TENSOR_COMPILER_INCLUDE=Ascend-cann-toolkit安装目录/ascend-toolkit/latest/include
- ASCEND_OPP_PATH:用于查找AI CPU算子头文件所在的路径编。
ASCEND_OPP_PATH=Ascend-cann-toolkit安装目录/ascend-toolkit/latest/opp;
- ASCEND_AICPU_PATH:用于查找AI CPU算子相关的静态库。
ASCEND_AICPU_PATH=Ascend-cann-toolkit安装目录/ascend-toolkit/latest
- AICPU_KERNEL_TARGET:AI CPU算子实现文件编译生成的动态库文件名称。
AICPU_KERNEL_TARGET=cust_aicpu_kernels_3.3.0
建议用户配置AICPU_KERNEL_TARGET环境变量,并添加软件版本号的后缀,避免后续由于AI CPU软件升级造成自定义AI CPU动态库文件的冲突。
若不配置此环境变量,使用默认值:cust_aicpu_kernels。
若选用本地编译需用户在操作系统中增加环境变量。export ASCEND_AICPU_PATH=Ascend-cann-toolkit安装目录/ascend-toolkit/latest export AICPU_KERNEL_TARGET=cust_aicpu_kernels_3.3.0(建议配置)
- ASCEND_TENSOR_COMPILER_INCLUDE:CANN软件头文件所在路径。
- 单击或 进行工程编译。
- 在界面最下方的窗口查看编译结果,并在算子工程的cmake-build目录下生成自定义算子安装包custom_opp_Linux_Arch.run。
其中Arch的取值根据安装的CANN包和Toolchain的信息获取。
父主题: 算子开发