一文详解LibTorch环境搭建:Ubuntu20.4配置LibTorch CUDA与cuDNN开发环境
随着深度学习技术的迅猛发展,越来越多的应用程序开始集成深度学习模型以提供智能化服务。为了满足这一需求,开发者们不仅依赖于Python等高级编程语言提供的便捷框架,也开始探索如何将这些模型与C++应用程序相结合,以便在性能关键型应用中充分利用底层硬件资源。LibTorch作为PyTorch的C++前端
,正好满足了这种需求,其允许开发者直接在C++环境中构建
、训练
和部署深度学习模型
。
然而,在Ubuntu平台上配置LibTorch环境
,并确保其能够有效利用NVIDIA GPU的强大计算能力
并非易事。这涉及到正确安装并配置LibTorch
、CUDA(Compute Unified Device Architecture)
以及cuDNN(CUDA Deep Neural Network library)
,每一个步骤都需要精确操作才能保证整个系统的稳定性和高效性。
本文希望在Ubuntu平台搭建基于LibTorch的深度学习开发环境
。我们将逐步讲解如何下载和配置LibTorch
,安装适合您硬件条件的CUDA版本
,以及设置cuDNN来加速神经网络运算
。此外,我们还将介绍如何通过配置cmakeList.txt
文件来创建一个简单的工程示例,验证本地安装环境是否成功。无论你是初次接触这些工具的新手,还是想要优化现有工作流程的经验丰富的开发者,这份文档都将为你提供有价值的指导信息。
一、CUDA Toolkit安装
CUDA(Compute Unified Device Architecture)是NVIDIA开发的并行计算平台和编程模型
,用于利用NVIDIA GPU的并行计算能力
。允许开发者在标准C/C++或Fortran代码中嵌入特定于GPU的内核函数
,利用GPU
的大规模并行计算能力
加速各种类型的应用程序
,包括科学计算
、深度学习
、图形渲染
等,并提供了一套丰富的API和工具,包括核心的CUDA Runtime API
、CUDA Driver API
以及各种辅助工具和库。
有一点需要特别说明:这里我们说的安装CUDA,实际上是指安装CUDA Toolkit
。当Ubuntu系统中并未安装CUDA时,nvcc指令是执行不成功的。
1.1 查看CUDA版本
安装CUDA前,先要确认本地电脑支持的CUDA版本。
- 打开终端,输入
lspci | grep -i nvidia
,查看本地设备是否包含nvidia显卡。若有显卡信息输出,则包含显卡。 - 然后,在终端输入
nvidia-smi
命令,查看显卡支持的CUDA版本
。驱动的CUDA版本版本越高,则可安装的CUDA版本越高。CUDA向下兼容,我这里是输出的CUDA版本为12.8
,并不是意味着我的电脑只能安装12.8版本的CUDA,而是可以安装12.8及以下任何版本的CUDA。
若执行 nvidia-smi
命令后,无上图所示的信息显示,则需要用户手动安装nvidia显卡驱动
,关于如何安装驱动,朋友们可以查找该专栏中,我之前介绍驱动安装的技术文章一文详解Ubuntu独显开机黑屏:NVIDIA驱动安装攻略。
1.2 下载CUDA Toolkit
前文提到过,以nvidia-smi
指令看到的CUDA Version
,作为此显卡最大支持的CUDA版本号
。因此,我们从官网下载CUDA,版本号不能高于这个值。
进入developer.nvidiahttps://developer.nvidia.com/cuda-toolkit-archive选择要安装的CUDA版本。这里我选择了12.8
。
根据操作系统
版本,选择对应版本CUDA进行下载。这里选择安装方式是推荐使用run安装方式:
- 用run方式安装CUDA,会附带安装显卡驱动,
可以选择不安装;
- 用deb方式安装CUDA,会附带安装显卡驱动,
默认安装
。
1.3 安装CUDA
根据上图,我选择了run方式安装
。官方在上图的下方给出了推荐安装的命令,根据命令执行安装:
wget https://developer.download.nvidia.com/compute/cuda/12.8.0/local_installers/cuda_12.8.0_570.86.10_linux.run
sudo sh cuda_12.8.0_570.86.10_linux.run
接受许可证协议:在这一步输入accept,然后按Enter继续。
选择安装项: 一般情况我们都安装了显卡驱动,所以这里第一项驱动最好不勾选,其他默认安装。
1.4 配置环境变量
安装成功后需要配置一下环境变量,这步很关键。
编辑~/.profile:
vim ~/.profile
在文件末尾添加变量:
# cmake
export PATH=/opt/cmake-4.0.0-rc4-linux-x86_64/bin:$PATH
使更改生效:
source ~/.profile
使用以下命令检查 CUDA 是否安装成功。
nvcc -V
二、cuDNN安装
cuDNN(CUDA Deep Neural Network library)
是NVIDIA专门针对深度学习应用开发的GPU加速库
。其提供了一系列高效的深度学习算法的实现
,包括卷积神经网络(CNN)
、循环神经网络(RNN)
等常用网络结构的基本操作,如卷积
、池化
、归一化
、激活函数
等。cuDNN针对NVIDIA GPU进行了高度优化
,利用GPU的并行计算能力加速深度学习模型的训练和推理过程。通过使用cuDNN,开发者可以轻松地将深度学习模型部署到支持CUDA的NVIDIA GPU上,并获得显著的性能提升。
总的来说,CUDA提供了通用的并行计算平台和编程模型,而cuDNN则是针对深度学习应用进行了优化的GPU加速库,二者结合起来可以实现高效的深度学习模型训练和推理。
2.1 下载cuDNN
NVIDIA Developer https://developer.nvidia.com/rdp/cudnn-archive下载cuDNN。
选择cuDNN版本:这里要和前文安装的CUDA版本保持一致
,我的CUDA是12.8
,所以这里应该选择选择12.x
。
2.2 安装cuDNN
下载完成后,通过如下命令,解压并安装 cuDNN:
tar -xzvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
sudo cp cudnn-linux-x86_64-8.9.7.29_cuda12-archive/include/cudnn*.h /usr/local/cuda-12.8/include
sudo cp cudnn-linux-x86_64-8.9.7.29_cuda12-archive/lib/libcudnn* /usr/local/cuda-12.8/lib64
sudo chmod a+r /usr/local/cuda-12.8/include/cudnn*.h /usr/local/cuda-12.8/lib64/libcudnn*
2.3 查看cuDNN版本
在终端输入如下命令,查看cuDNN版本。
cat /usr/local/cuda-12.8/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
上图中,本机中的cuDNN是8.9.7
2.4 验证CUDA和NVCC
完成以上配置后,理论上已经完成CUDA和NVCC的安装,接下来我们可以创建一个简单的CUDA程序来测试我们的配置。
- 创建一个名为
hello.cu
的文件,并添加以下内容:
#include <stdio.h>
__global__ void helloCUDA() {
printf("Hello from GPU!\n");
}
int main() {
helloCUDA<<<1, 1>>>();
cudaDeviceReset();
return 0;
}
- 在终端中,使用以下命令编译程序:
nvcc hello.cu -o hello
- 在终端中,运行以下命令执行程序:
./hello
若看到如下输出,则表明CUDA和NVCC已正确配置。
Hello from GPU!
三、LibTorch安装
LibTorch是PyTorch的C++ API,为开发者提供了一种在C++环境中使用PyTorch功能的方法
。使得那些需要将深度学习模型集成到C++应用程序中的开发者可以利用PyTorch强大的自动微分系统和动态计算图来进行模型训练、评估等操作。
3.1 LibTorch下载
首先,进入torch官网查看,并选择合适的libTorch
,这里我选择最新版本的libtorch。
Torch官网:https://pytorch.org/get-started/locally/
获取到 url 后,回到 ubuntu 中使用如下命令进行下载:
# 下载包
wget https://download.pytorch.org/libtorch/cu126/libtorch-cxx11-abi-shared-with-deps-2.6.0%2Bcu126.zip
# 解压包
unzip libtorch-cxx11-abi-shared-with-deps-2.6.0%2Bcu126.zip
3.2 LibTorch验证
打开Clion工具,新建C++项目,编写以下代码:
CMakeCache.txt
# 指定CMake的最小版本要求为3.23.2
cmake_minimum_required(VERSION 3.23.2)
# 定义项目名称为CLion_LibTorch_Demo。
project(CLion_LibTorch_Demo)
# 设置C++标准版本为C++17
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 设置 CUDA 标准
set(CMAKE_CUDA_STANDARD 17)
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
# 根据你的GPU架构调整设置:https://developer.nvidia.com/cuda-gpus
# set(CMAKE_CUDA_ARCHITECTURES "89")
# libtorch
set(Torch_DIR /home/bjxia//libtorch/share/cmake/Torch)
find_package(Torch REQUIRED)
# 告诉CMake要编译main.cpp文件,并将其链接成一个名为CLion_LibTorch_Demo的可执行文件。
add_executable(CLion_LibTorch_Demo main.cpp)
# 指定链接哪些库:
target_link_libraries(CLion_LibTorch_Demo "${TORCH_LIBRARIES}")
main.cpp
#include <iostream>
#include <vector>
#include<torch/torch.h>
#include<torch/script.h>
using namespace std;
int main() {
auto a = torch::rand({ 5, 3 });
std::cout << "cuda::is_available():" << torch::cuda::is_available() << std::endl;
std::cout << "torch::cuda::cudnn_is_available():" << torch::cuda::cudnn_is_available() << std::endl;
std::cout << "torch::cuda::device_count():" << torch::cuda::device_count() << std::endl;
if (torch::cuda::is_available()) {
cout << "cuda可用" << endl;
}
else
{
cout << "不可用" << endl;
}
cout << a << endl;
}
运行程序,输出如下输出结果,代表LibTorch运行成功。
参考
https://zhuanlan.zhihu.com/p/363611229
https://blog.csdn.net/h3c4lenovo/article/details/119003405
https://blog.csdn.net/u010329292/article/details/129639235
https://blog.csdn.net/lovely_yoshino/article/details/139618350