Ascend RC场景下运行
下面详细介绍进行单算子运行验证的操作步骤。
- 以HwHiAiUser(运行用户)登录开发环境,并进入“acllib/sample/acl_execute_op/acl_execute_conv2d”目录。
- 生成Conv2dTik算子的单算子离线模型文件。
- 设置环境变量。环境变量设置示例如下所示,此处只描述必选环境变量,环境变量的详细解释请参考《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,可选,表示在当前终端窗口打印执行日志,方便问题定位。
- 进入样例工程的“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)。
说明:模型转换时,会优先去查找自定义算子库去匹配模型文件中的算子。
- 设置环境变量。
- 生成测试数据。
进入样例工程目录的run/out/test_data/data目录下,执行如下命令:
python3.7.5 generate_conv2d.py
会在当前目录下生成数据文件input_0.bin与input_1.bin,用于进行Conv2dTik算子的验证。
- 编译样例工程,生成单算子验证可执行文件。
- 配置编译依赖的头文件与库文件路径。
编译脚本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
- 切换到样例工程根目录acl_execute_matmul,然后在样例工程根目录下执行如下命令创建目录用于存放编译文件,例如,创建的目录为“build/intermediates/host”。
mkdir -p build/intermediates/host
- 切换到“build/intermediates/host”目录,执行cmake命令生成编译文件。
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库。
- 执行如下命令,生成可执行文件。
会在工程目录的“run/out”目录下生成可执行文件execute_conv2d_op。
- 配置编译依赖的头文件与库文件路径。
- 在Atlas 200 DK侧执行单算子验证文件。
- 以HwHiAiUser用户(运行用户)拷贝开发环境中样例工程acl_execute_conv2d/run/目录下的out文件夹到Atlas 200 DK任一目录,若后续需要进行单算子profiling操作,建议上传到/home/HwHiAiUser/HIAI_PROJECTS目录下,例如上传到/home/HwHiAiUser/HIAI_PROJECTS/run_conv2d/目录下。
- 在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。
- 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.
