昇腾社区首页
中文
注册

算子动态库编译

算子入图场景下,提供算子动态库编译功能,自定义算子工程支持将算子实现、入图适配文件编译打包成动态库,简化入图部署,便于开发者对算子工程进行集成。

  • 该特性支持如下型号:
    • Atlas A2训练系列产品
    • Atlas 推理系列产品
  • 动态库编译和run包编译功能不能混用,即在同一环境上不能同时进行算子的run包部署和so部署。

编译步骤

开发者进行编译时参考如下的步骤进行操作:

  1. 完成工程编译相关配置。
    除了上文介绍的基础配置,入图场景算子动态库编译需要在工程目录下的CMakePresets.json cacheVariables的配置项中配置ASCEND_PACK_SHARED_LIBRARY为True,默认为False(会生成run包)。
    "ASCEND_PACK_SHARED_LIBRARY": {
        "type": "BOOL",
        "value": "True"
     }
  2. 在算子工程目录下执行如下命令,进行算子工程编译。
    ./build.sh

    编译成功后,会在${CMAKE_INSTALL_PREFIX}/op_api目录存放生成的算子原型定义头文件和lib库libcust_opapi.so。具体目录结构如下:

    ├── op_api
    │   ├── include
    │       └── op_proto.h       // 算子原型定义头文件
    │   ├── lib
    │       ├── libcust_opapi.so // 算子动态库
  3. 动态库的使用。
    • 配置ASCEND_CUSTOM_OPP_PATH环境变量,将libcust_opapi.so的绝对路径追加到该环境变量。由GE框架在图编译和执行时根据该环境变量搜索算子动态库并使用。环境变量位置越靠前,算子的优先级越高。
      export ASCEND_CUSTOM_OPP_PATH=${CMAKE_INSTALL_PREFIX}/op_api/lib/:${ASCEND_CUSTOM_OPP_PATH}
    • 如果开发者通过Ascend Graph进行图开发,除了配置环境变量的方式也可以采用直接在应用程序的编译文件中链接libcust_opapi.so的方式。Ascend Graph图开发的相关信息请参考Ascend Graph开发指南。动态库链接方式的so加载优先级高于环境变量配置方式。