以AscendPytorch仓库下pytorch/examples/libtorch_resnet模型为例,介绍libtorch推理的快速使用。
已完成NPU适配的模型代码与编译文件请参见libtorch_resnet.cpp与CMakeLists.txt。另外resnet_trace.py用于导出torchscript文件可用于libtorch推理,编译与推理脚本可参见libtorch_resnet.sh。
- 需提前安装torch、torch_npu、torchvision、expecttest。
- torch与torch_npu、torchvision安装请参见安装PyTorch。
- expecttest安装可使用以下命令。
pip3 install expecttest
- 编译文件添加NPU编译配置。
在CMakeLists.txt编译文件中,添加了以下内容用于引用libtorch_npu插件,以便进行后续基于NPU的编译工作。
set(torch_npu_path path_to_libtorch_npu) # 设置libtorch_npu的路径
include_directories(${torch_npu_path}/include) # 设置引用libtorch_npu的头文件路径
link_directories(${torch_npu_path}/lib) # 设置引用libtorch_npu的库文件路径
target_link_libraries(libtorch_resnet torch_npu) # 链接torch_npu库
- 为了使模型在NPU设备上初始化和运行,用户需在C++代码中已将GPU接口修改为适配NPU接口,当前脚本中已完成对应修改,用户可参见以下内容对实际开发的脚本进行修改。
代码示例如下,引入torch_npu头文件并设置初始化device。
// 使用libtorch_npu相关接口,需引用libtorch_npu的头文件
#include<torch_npu/torch_npu.h>
// 使用npu设备前需进行初始化
torch_npu::init_npu("npu:0");
// 通过传npu字符串构造npu设备
at::Device("npu:0")
- 执行编译并推理,运行脚本位于pytorch/ci/libtorch_resnet.sh,当前提供的脚本已集成了导出torchscript文件、编译与推理部分。
bash libtorch_resnet.sh
显示以下内容,表示编译成功。
图1 命令回显