更新时间:2021-03-18 GMT+08:00
分享

Ascend RC场景下运行

下面详细介绍进行单算子运行验证的操作步骤。

  1. 以HwHiAiUser(运行用户)登录开发环境,并进入“acllib/sample/acl_execute_op/acl_execute_conv2d”目录。
  2. 生成Conv2dTik算子的单算子离线模型文件。

    1. 设置环境变量。
      环境变量设置示例如下所示,此处只描述必选环境变量,环境变量的详细解释请参考ATC工具使用指导中的转换样例
      export SLOG_PRINT_TO_STDOUT=1
      export install_path=/home/HwHiAiUser/Ascend/ascend-toolkit/latest
      export PATH=${install_path}/atc/ccec_compiler/bin:${install_path}/atc/bin:$PATH
      export PYTHONPATH=${install_path}/atc/python/site-packages/te:${install_path}/atc/python/site-packages/topi:${install_path}/atc/python/site-packages/auto_tune.egg/auto_tune:${install_path}/atc/python/site-packages/schedule_search.egg
      export LD_LIBRARY_PATH=${install_path}/atc/lib64:$LD_LIBRARY_PATH
      export ASCEND_OPP_PATH=${install_path}/opp
      • install_path为ATC与OPP组件的安装路径。
      • export SLOG_PRINT_TO_STDOUT=1,可选,表示在当前终端窗口打印执行日志,方便问题定位。
    2. 进入样例工程的“acl_execute_conv2d/run/out”目录,在out目录下执行如下命令,生成单算子模型文件。

      atc --singleop=test_data/config/conv2d_tik_op.json --soc_version=Ascend310 --output=op_models

      其中:

      • singleop:算子描述的json文件。
      • soc_version:昇腾AI处理器的版本。
      • --output=op_models:代表生成的模型文件存储在当前目录下的op_models文件夹下。
      模型转换成功后,会生成如下文件:
      • 在当前目录的op_models目录下生成单算子的模型文件0_Conv2DTik_1_0_8_512_7_7_1_0_512_512_3_3_1_0_8_512_7_7.om,命名规范为:序号+opType + 输入的描述(dateType_format_shape)+输出的描述。

        数据类型、数据排布格式及数字的对应关系可参考应用软件开发指南中的“AscendCL API参考”章节中的“aclDataType”“aclFormat”章节。

      • 当前目录下生成kernel_meta文件夹,包含算子二进制文件(*.o)及算子描述文件(*.json)。

      说明:模型转换时,会优先去查找自定义算子库去匹配模型文件中的算子。

  3. 生成测试数据。

    进入样例工程目录的run/out/test_data/data目录下,执行如下命令:

    python3.7.5 generate_conv2d.py

    会在当前目录下生成数据文件input_0.bin与input_1.bin,用于进行Conv2dTik算子的验证。

  4. 编译样例工程,生成单算子验证可执行文件。

    1. 配置编译依赖的头文件与库文件路径。

      编译脚本CMakeLists.txt中设置的编译依赖的头文件路径为“/usr/local/Ascend/acllib/include/”、库文件路径为“/usr/local/Ascend/acllib/lib64/stub/”

      • 如果未设置${DDK_PATH}、${NPU_HOST_LIB}环境变量,则以编译脚本CMakeLists.txt中的路径为准,若当前CMakeLists.txt中路径为您实际的Ascend RC形态的ACL Lib包的头文件与库文件路径,则此步骤可跳过。
      • 如果已设置${DDK_PATH}、${NPU_HOST_LIB}环境变量,则编译脚本CMakeLists.txt优先以环境变量为准,按环境变量指向的路径查找编译依赖的头文件和库文件,环境变量设置为Ascend RC形态的ACL Lib包的头文件与库文件路径。

        如下为设置环境变量的示例,请将/home/HwHiAiUser/Ascend/ascend-toolkit/latest替换为Ascend RC形态的ACL Lib包的实际安装路径。

        export DDK_PATH=/home/HwHiAiUser/Ascend/ascend-toolkit/latest/arm64-linux
        export NPU_HOST_LIB=/home/HwHiAiUser/Ascend/ascend-toolkit/latest/arm64-linux/acllib/lib64/stub
    2. 切换到样例工程根目录acl_execute_matmul,然后在样例工程根目录下执行如下命令创建目录用于存放编译文件,例如,创建的目录为“build/intermediates/host”

      mkdir -p build/intermediates/host

    3. 切换到“build/intermediates/host”目录,执行cmake命令生成编译文件。

      cd build/intermediates/host

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

      • “../../../src”表示CMakeLists.txt文件所在的目录,请根据实际目录层级修改。
      • DCMAKE_CXX_COMPILER:编译此应用程序所用的编译器。
      • DCMAKE_SKIP_RPATH:请设置为TRUE,代表不会将rpath信息(即NPU_HOST_LIB配置的路径:xxx/acllib/lib64/stub)添加到编译生成的可执行文件中去。

        可执行文件运行时会自动搜索实际设置的LD_LIBRARY_PATH(xxx/acllib/lib64)中的动态链接库。

        使用“/home/HwHiAiUser/Ascend/ascend-toolkit/latest/arm64-linux/acllib/lib64/stub”目录下的*.so库,是为了编译基于ACL接口的代码逻辑时,不依赖其它组件(例如Driver)的任何*.so库。

        编译通过后,在Atlas 200 DK上运行应用时,通过配置环境变量,应用会链接到Atlas 200 DK上"/home/HwHiAiUser/Ascend/acllib/lib64"目录下的*.so库,运行时会自动链接到依赖其它组件的*.so库。

    4. 执行如下命令,生成可执行文件。

      make

      会在工程目录的“run/out”目录下生成可执行文件execute_conv2d_op

  5. 在Atlas 200 DK侧执行单算子验证文件。

    1. 以HwHiAiUser用户(运行用户)拷贝开发环境中样例工程acl_execute_conv2d/run/目录下的out文件夹到Atlas 200 DK任一目录,若后续需要进行单算子profiling操作,建议上传到/home/HwHiAiUser/HIAI_PROJECTS目录下,例如上传到/home/HwHiAiUser/HIAI_PROJECTS/run_conv2d/目录下。
    2. Ascend RC中执行execute_conv2d_op文件,验证单算子模型文件。

      在/home/HwHiAiUser/HIAI_PROJECTS/run_conv2d/out目录下执行如下命令:

      chmod +x execute_conv2d_op

      ./execute_conv2d_op

      执行完成后,会屏显出输入数据及输出数据,同时会生成结果二进制文件result_files/output_0.bin。

    3. test_data/data目录中提供了check_out.py脚本用于比对算子实际结果与调用tensorflow命令生成的预期结果。

      开发者可将生成结果文件后的out文件夹拷贝到开发环境,然后在开发环境上进入test_data/data目录执行如下操作进行结果校验。

      python3.7.5 check_out.py

      说明:执行此脚本需要确保开发环境中已安装tensorflow 1.15版本。此脚本调用tensorflow命令生成预期结果,然后将算子实际运行结果与预期结果进行比对。

      若回显如下,则代表实际运行结果与预期结果比对成功。

      Compared with the tf conv2d method, the result is correct.

      若回显如下,则代表实际运行结果与预期结果比对失败。

      Compared with the tf conv2d method, the result is wrong.

分享:

    相关文档

    相关产品

close