(可选)编译libtorch_npu
编译操作
- 参见安装前必读、安装PyTorch框架和安装torch_npu插件完成依赖与PyTorch框架的安装。
- 获取libtorch_npu源码。支持PyTorch 2.1.0及以后的版本。命令示例如下:
git clone -b v2.1.0-6.0.rc1 https://gitee.com/ascend/pytorch.git cd pytorch git submodule update --init --recursive
- 执行编译生成libtorch_npu安装包。
python3 build_libtorch_npu.py
默认编译release版本,如需debug版本,添加DEBUG=1环境变量。编译完成后,当前目录下生成libtorch_npu目录,包含以下文件。- include:生成的C++头文件。
- lib:生成的C++库文件。
- share:包含Torch_npuConfig.cmake,用于用户编译构建时获取必要的头文件,库文件等配置文件。
libtorch推理测试
以Ascend Extension for PyTorch源码仓下pytorch/examples/libtorch_resnet模型为例,介绍libtorch推理的快速使用。
- 需提前安装torch、torch_npu、torchvision、expecttest以及packaging。
- torch与torch_npu、torchvision安装请参见安装前必读、安装PyTorch框架以及安装torch_npu插件。
- expecttest、packaging安装可使用以下命令。
pip3 install expecttest pip3 install packaging
- 编译文件添加NPU编译配置。
已完成NPU适配的编译文件请参见CMakeLists.txt,可以直接用于编译工作。
用户如果使用自定义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的接口。当前脚本中已完成对应修改,用户可参见以下内容对实际开发的脚本进行修改。已完成NPU适配的模型代码请参见libtorch_resnet.cpp。代码示例如下,引入torch_npu头文件并设置初始化Device,在NPU使用结束时需要调用torch_npu::finalize_npu()释放资源,否则可能会有报错提示。
// 使用libtorch_npu相关接口,需引用libtorch_npu的头文件 #include<torch_npu/torch_npu.h> // 使用NPU设备前需进行初始化 torch_npu::init_npu("npu:0"); // 通过传NPU字符串构造NPU设备 at::Device("npu:0") // 使用NPU设备结束需进行反初始化 torch_npu::finalize_npu()
表1 C++接口说明 接口
说明
torch_npu::init_npu()
使用NPU设备前需进行初始化,输入值格式为npu:id,其中id为NPU卡号。
at::Device()
通过传NPU字符串构造NPU设备,输入值格式为npu:id,其中id为NPU卡号。
torch_npu::finalize_npu()
使用NPU设备结束需进行反初始化,输入值格式为npu:id,其中id为NPU卡号。
- 执行编译并推理。resnet_trace.py用于导出torchscript文件可用于libtorch推理,编译与推理脚本可参见libtorch_resnet.sh。运行脚本位于pytorch/ci/libtorch_resnet.sh,当前提供的脚本已集成了导出torchscript文件、编译与推理部分。
bash libtorch_resnet.sh
父主题: 安装步骤