当前位置: 首页 > news >正文

一文详解LibTorch环境搭建:Ubuntu20.4配置LibTorch CUDA与cuDNN开发环境

随着深度学习技术的迅猛发展,越来越多的应用程序开始集成深度学习模型以提供智能化服务。为了满足这一需求,开发者们不仅依赖于Python等高级编程语言提供的便捷框架,也开始探索如何将这些模型与C++应用程序相结合,以便在性能关键型应用中充分利用底层硬件资源。LibTorch作为PyTorch的C++前端,正好满足了这种需求,其允许开发者直接在C++环境中构建训练部署深度学习模型

然而,在Ubuntu平台上配置LibTorch环境,并确保其能够有效利用NVIDIA GPU的强大计算能力并非易事。这涉及到正确安装并配置LibTorchCUDA(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 APICUDA 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-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

根据操作系统版本,选择对应版本CUDA进行下载。这里选择安装方式是推荐使用run安装方式:

  • 用run方式安装CUDA,会附带安装显卡驱动,可以选择不安装;
  • 用deb方式安装CUDA,会附带安装显卡驱动,默认安装

根据操作系统以及系统的CUP架构,选择对应版本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

验证 CUDA 安装

二、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

下载cuDNN

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版本

上图中,本机中的cuDNN是8.9.7

2.4 验证CUDA和NVCC

完成以上配置后,理论上已经完成CUDA和NVCC的安装,接下来我们可以创建一个简单的CUDA程序来测试我们的配置。

  1. 创建一个名为hello.cu的文件,并添加以下内容:
#include <stdio.h>

__global__ void helloCUDA() {
    printf("Hello from GPU!\n");
}

int main() {
    helloCUDA<<<1, 1>>>();
    cudaDeviceReset();
    return 0;
}
  1. 在终端中,使用以下命令编译程序:
nvcc hello.cu -o hello
  1. 在终端中,运行以下命令执行程序:
./hello

若看到如下输出,则表明CUDA和NVCC已正确配置。

Hello from GPU!

验证CUDA和NVCC

三、LibTorch安装

LibTorch是PyTorch的C++ API,为开发者提供了一种在C++环境中使用PyTorch功能的方法。使得那些需要将深度学习模型集成到C++应用程序中的开发者可以利用PyTorch强大的自动微分系统和动态计算图来进行模型训练、评估等操作。

3.1 LibTorch下载

首先,进入torch官网查看,并选择合适的libTorch,这里我选择最新版本的libtorch。

Torch官网:https://pytorch.org/get-started/locally/

LibTorch官方
获取到 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_Demoproject(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运行成功。

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

相关文章:

  • spark 的流量统计案例
  • DeepSeek 全套汇总资料pdf免费下载(最新更新8篇)
  • 【Proteus仿真】【32单片机-A007】PT100热敏温度检测系统设计
  • 【中大厂面试题】阿里巴巴 java 后端 校招 最新面试题
  • 加密≠安全:文件夹密码遗忘背后的数据丢失风险与应对
  • React 项目 PDF 批注插件库在线版 API 示例教程
  • 多域名​ SSL 证书能保护多少个域名?
  • 【云计算物理网络】从传统网络到SDN:云计算的网络演进之路
  • MATLAB如何打印一个桃心形状
  • 数字政府与电子政务综合分析报告
  • rpm仓库管理工具yum架构实现分析
  • C++经典面试题解析:深入理解左值与右值
  • Qt实现鼠标右键弹出弹窗退出
  • 系统运维工程师,如何利用Deepseek提高工作效率
  • 无公网实体服务器加装多个操作系统供多个用户互不打扰使用_part1
  • 聊一聊接口测试时遇到上下游依赖时该如何测试
  • Spring Boot项目信创国产化适配指南
  • 前沿科技:社会性交互技术原理与核心概念解析
  • docker快捷打包脚本(ai版)
  • Java中的列表(List):操作与实现详解
  • 电信宽带办理/搜索引擎优化培训
  • 个人网站能百度推广吗/如何拿高权重网站外链进行互换?
  • 网站技术支持什么意思/深圳优化网站方法
  • 如何手机做任务赚钱的网站/百度竞价可以自学吗
  • 网站建设报价明细/关键词挖掘长尾词
  • 网站地址格式/如何做免费网站推广