文档
注册
评分
提单
论坛
小AI

应用编译&运行

完成程序代码编写后,可按照本节中的指导编译程序、执行应用。

编译及运行应用

  1. 编译代码

    可参考基于Caffe ResNet-50网络实现图片分类(同步推理)中的说明,主要步骤如下:

    1. 创建编译脚本。
      您可以从该基于Caffe ResNet-50网络实现图片分类(同步推理)样例中获取编译脚本CMakeLists.txt,在该编译脚本的基础上修改如下参数。
      • include_directories:添加头文件所在的目录。依赖的头文件请参见调用接口依赖的头文件和库文件说明

        示例如下:

        include_directories(
                directoryPath1
                directoryPath2
        )
      • link_directories:添加库文件所在的目录。

        示例如下:

        link_directories(
                 directoryPath3 
                 directoryPath4
        )
      • add_executable:修改可执行文件的名称(例如:main)、添加*.cpp文件所在的目录。

        示例如下:

        add_executable(main
                directoryPath5
                directoryPath6)
      • target_link_libraries:修改可执行文件的名称(与add_executable中设置的名称保持一致)、添加可执行文件依赖的库文件。依赖的库文件与接口所在的头文件有关,请参见调用接口依赖的头文件和库文件说明

        示例如下:

        target_link_libraries(main
                ascendcl
                libName1 
                libName2)

        编译基于AscendCL接口的代码逻辑时,请按照include的头文件依赖对应的库文件,如果引用多余的so文件(例如libascendcl.a),可能导致版本功能异常或后续版本升级时存在兼容性问题。

      • 编译选项,修改可执行文件的名称(与add_executable中设置的名称保持一致),以及可执行文件的安装目录。
        示例如下,表示main安装在${CMAKE_INSTALL_PREFIX}/out目录下,${CMAKE_INSTALL_PREFIX}变量定义的路径是相对路径,相对cmake命令执行的路径:
        set(CMAKE_RUNTIME_OUTPUT_DIRECTORY  "../../../out")
        
        install(TARGETS main DESTINATION ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
    2. 设置环境变量

      如果用户是自行开发的编译脚本,未使用DDK_PATH、NPU_HOST_LIB环境变量,则无需设置该环境变量,用户根据编辑脚本逻辑自行增加相关配置即可。

      如果用户是基于基于Caffe ResNet-50网络实现图片分类(同步推理)样例中的CMakeLists.txt编译脚本进行修改时,则需设置DDK_PATH、NPU_HOST_LIB环境变量。

      DDK_PATH、NPU_HOST_LIB环境变量分别用于指向AscendCL头文件目录、库文件目录。如下为设置环境变量的示例,${INSTALL_DIR}表示CANN软件安装目录,例如,$HOME/Ascend/ascend-toolkit/latestarch表示操作系统架构,{os}表示操作系统。

      export DDK_PATH=${INSTALL_DIR}
      export NPU_HOST_LIB=${INSTALL_DIR}/{arch-os}/devlib

      使用“${INSTALL_DIR}/{arch-os}/devlib”目录下的*.so库,是为了编译基于AscendCL接口的代码逻辑时,不依赖其它组件(例如Driver)的任何*.so库。因此在使用cmake编译命令时,请务必将DCMAKE_SKIP_RPATH设置为TRUE,代表不会将rpath路径(即“${INSTALL_DIR}/{arch-os}/devlib”)添加到编译生成的可执行文件中去。

      编译通过后,运行应用时,通过配置环境变量,应用会链接到运行环境上“lib64”目录下的*.so库,运行时会自动链接到依赖其它组件的*.so库。

    3. 执行cmake命令编译代码。

      示例命令如下,其中,“../../../src”表示CMakeLists.txt文件所在的目录,请根据实际目录层级修改;通过-DCMAKE_CXX_COMPILER参数指定的编译器,请根据实际版本要求修改。

      • 当开发环境与运行环境操作系统架构相同时,执行如下命令编译:
        cmake ../../../src -DCMAKE_CXX_COMPILER=g++ -DCMAKE_SKIP_RPATH=TRUE
      • 当开发环境与运行环境操作系统架构不同时,执行以下命令进行交叉编译:

        例如,当开发环境为X86架构,运行环境为AArch64架构时,执行以下命令进行交叉编译。

        cmake ../../../src -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ -DCMAKE_SKIP_RPATH=TRUE

      关于cmake参数的详细介绍,请参见https://cmake.org/cmake/help/latest/guide/tutorial/index.html,选择对应的版本后再查看参数。

    4. 执行make命令生成可执行文件。
      make
  2. 运行可执行文件

    将AscendCL初始化配置文件(acl.json)所在的目录、可执行文件所在的目录、测试图片所在的目录、*.om文件所在的目录都上传到运行环境的同一个目录下,再登录到运行环境,切换到可执行文件所在的目录,运行可执行文件,示例命令如下:

    ./main

    如果在AscendCL初始化阶段,在aclInit接口中传入空指针,则无需将AscendCL初始化配置文件(acl.json)所在的目录上传到运行环境

问题定位

运行应用时如果出错,您可以参见日志参考获取日志文件,以便查看日志文件中详细报错。根据报错初步定位后:

  • 如果是接口约束导致接口调用逻辑不对,需查看总体的使用约束以及各接口本身的约束,再调整接口调用逻辑。
  • 如果是算子在AI Core上运行报错,需要进一步定位算子报错的原因,调用AscendCL提供的接口,获取出错算子的描述信息,用于进一步分析时使用,可参见AI Core异常信息获取,查看原理及调用示例。
  • 典型的案例及其解决方法请参见故障处理
搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词