(可选)编译libtorch_npu
编译操作
- 参见安装前必读、安装PyTorch框架和安装torch_npu插件完成依赖与PyTorch框架的安装。
- 获取libtorch_npu源码。支持PyTorch 2.1.0及以后的版本。
git clone -b v2.1.0-6.0.rc2 https://gitee.com/ascend/pytorch.git cd pytorch git submodule update --init --recursive
拉取对应PyTorch版本分支代码,以v2.1.0-6.0.rc2为例,其他版本请参见《版本说明》中的“版本配套关系”章节下载对应PyTorch版本分支代码。
- 执行编译生成libtorch_npu安装包。
python3 build_libtorch_npu.py
编译时依赖的cmake需为3.18.0版本及以上。
默认编译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、hypothesis、expecttest以及packaging。
- torch与torch_npu、torchvision安装请参见安装前必读、安装PyTorch框架以及安装torch_npu插件。
- hypothesis、expecttest、packaging安装可执行如下命令。如果使用非root用户安装,需要在命令后加--user,例如:pip3 install expecttest --user。
pip3 install expecttest pip3 install packaging pip3 install hypothesis
- 编译文件添加NPU编译配置。
已完成NPU适配的编译文件请参见“pytorch/examples/libtorch_resnet/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适配的模型代码文件请参见“pytorch/examples/libtorch_resnet/libtorch_resnet.cpp”。代码示例如下,引入torch_npu头文件并设置初始化Device,在NPU使用结束时需要调用torch_npu::finalize_npu()释放资源,否则可能会有报错提示。
1 2 3 4 5 6 7 8 9 10 11
// 使用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卡号。
- 执行编译并推理。
“pytorch/examples/libtorch_resnet/resnet_trace.py”脚本用于导出torchscript文件,可用于libtorch推理。
编译与推理脚本可参见“pytorch/ci/libtorch_resnet.sh”,当前提供的脚本已集成了导出torchscript文件、编译与推理部分,执行如下命令编译并推理:bash libtorch_resnet.sh
显示以下内容,表示编译成功。
父主题: 安装步骤