ubuntu安装libtorch

Ubuntu20.04安装libtorch

  • 〇、前期准备
    • 1、查看NVIDIA显卡算力和CUDA版本支持的算力
    • 2、查看CUDA与显卡驱动的版本对应
  • 一、NVIDIA显卡驱动安装
    • 1、下载显卡驱动
    • 2、安装驱动
      • A. 安装依赖
      • B. 禁用nouveau驱动
      • C. 显卡驱动安装
    • 3、参考
  • 二、CUDA安装
    • 1、下载安装CUDA
    • 2、测试CUDA是否安装成功
    • 3、卸载CUDA
  • 三、CUDNN安装
    • 1、查看CUDNN支持的CUDA版本
    • 2、安装
    • 3、测试
    • 4、卸载CUDNN
    • 5、参考
  • 四、libtorch安装
    • 1、下载libtorch
    • 2、安装
    • 3、测试
    • 4、参考

〇、前期准备

1、查看NVIDIA显卡算力和CUDA版本支持的算力

这一步很重要,一定要确定好安装的CUDA版本是否支持显卡的算力,否则安装成功也无法使用GPU加速。如果显卡比较新,通常低版本的CUDA是不支持 的。

  • 查看NVIDIA显卡算力:https://developer.nvidia.com/cuda-gpus

在这里插入图片描述

这里以GeForce RTX 3090为例,对应的算力是8.6。

  • 不同版本CUDA支持的算力:https://en.wikipedia.org/wiki/CUDA#GPUs_supported

在这里插入图片描述
GeForce RTX 3090的算力是8.6,因此只能安装高于11.1的CUDA版本。这里选择安装CUDA 12.1。

2、查看CUDA与显卡驱动的版本对应

确定了CUDA版本后,需要确定支持该版本的最低显卡驱动版本。

  • 查看CUDA版本与显卡驱动版本对应:https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html

在这里插入图片描述
因为选择了CUDA 12.1,因此显卡驱动必须要大于525.60.13。

一、NVIDIA显卡驱动安装

1、下载显卡驱动

进入NVIDIA显卡驱动官网:https://www.nvidia.cn/drivers/results/
输入显卡型号和操作系统,查找可以安装的驱动版本,这里选择550.107.02

2、安装驱动

下载完成后,使用命令进行安装

A. 安装依赖

sudo apt update
sudo apt install gcc
sudo apt install g++
sudo apt install make

B. 禁用nouveau驱动

nouveau是由第三方为NVIDIA显卡开发的一个开源3D驱动,ubuntu默认集成了nouveau驱动,安装NVIDIA驱动前必须禁用系统自带的显卡驱动nouveau,否则安装NVIDIA驱动时会报错。

  • 查看nouveau是否启用
lsmod | grep nouveau

如果有输出,说明已启用。

  • 打开blacklist.conf文件
sudo gedit /etc/modprobe.d/blacklist.conf
  • 在文件最后添加以下内容,禁用nouveau
blacklist nouveau
options nouveau modeset=0
  • 修改后更新并重启
sudo update-initramfs -u
# 重启
sudo reboot
  • 重启后再次执行以下命令,如果没有输出表示已经成功禁用nouveau
lsmod | grep nouveau

C. 显卡驱动安装

  • 停止当前显示服务

安装NVIDIA显卡驱动需要停止当前的显示服务。最简单的方法就是使用 telinit 命令更改系统运行级别为3。

sudo telinit 3

如果上面的命令不行,可以通过以下命令进行tty模式

Ctrl + Alt + F2~F6
  • 进入命令行后,关闭 X-window 服务

安装NVIDIA显卡驱动过程中通常会提示关闭lightdm,但ubuntu20.04和ubuntu 22.04自带的是 gdm3 显示管理器,可以先安装 lightdm,再禁用;或者直接禁用 gdm3。lightdm和gdm3直观的区别就是gdm3的登录窗口在显示器中间,而lightdm的登录窗口在偏左边,正常使用没有区别。
方式一: 先安装lightdm,再禁用

sudo apt install lightdm  # 安装
# 禁用,现面两个命令任选一个
sudo service lightdm stop
sudo /etc/init.d/lightdm stop

方式二: 直接禁用 gdm3

sudo service gdm3 stop
# 或者
sudo /etc/init.d/gdm3 stop
  • 安装驱动
cd ~/Downloads
chmod +x NVIDIA-Linux-x86_64-550.107.02.run
sudo sh NVIDIA-Linux-x86_64-550.107.02.run --no-opengl-files
# 参数 --no-opengl-files 只安装驱动文件,不安装 OpenGL 文件。
# 台式机安装不加这个参数也可以正常安装,笔记本不加可能会出现循环登录。
  • 驱动安装过程中的一些选项
  1. An alternate method of installing the NVIDIA driver was detected.
    选择 continue installation 。这个应该是推荐你通过 Ubuntu 的 “Software & application” 中的 “Additional Drivers” 安装驱动,不用管,继续安装
  2. The distribution-provided pre-install script failed! Are you sure you want to continue? 选择 yes 继续。
  3. Would you like to register the kernel module sources with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later? 选择NO继续
  4. Install NVIDIA’s 32-bit compatibility libraries? 选择No 继续
  5. Would you like to run the nvidia-xconfigutility to automatically update your x configuration so that the NVIDIA x driver will be used when you restart x? Any pre-existing x confile will be backed up. 选择 Yes 继续
  6. Would you like to sign the NVIDIA kernel module? 选择Install without signing
  • 重启显示服务
    安装完成后输入以下命令重启 X-window 显示服务,即可自动进行登录界面,如果无法进入,按Ctrl+Alt+F1或者重启电脑。(如果重启后仍无法进入图形界面,尝试进行BIOS将Secure Boot设置为disable)
# lightdm
sudo service lightdm start# gdm3
sudo service gdm3 start
  • 检查是否安装成功
nvidia-smi

在这里插入图片描述

# 查看图形界面
nvidia-settings

3、参考

  1. Ubuntu20.04 安装 NVIDIA 显卡驱动
  2. NVIDIA CUDA Installation Guide for Linux

二、CUDA安装

1、下载安装CUDA

最新版CUDA:https://developer.nvidia.com/cuda-downloads
之前版本CUDA:https://developer.nvidia.com/cuda-toolkit-archive

按照官方的指令进行下载和安装:

wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
sudo sh cuda_12.1.0_530.30.02_linux.run
  • continue
    在这里插入图片描述

  • 输入accept
    在这里插入图片描述

  • 因为已经安装了显卡驱动,这里去掉Driver,kernel objects也默认不选
    在这里插入图片描述

  • 安装完成,这里会提示安装未完成,是因为没有选显卡驱动,不用管
    在这里插入图片描述

  • 配置环境变量

# 打开 /etc/profile
sudo gedit /etc/profile
# 添加以下内容,保存退出
export PATH=/usr/local/cuda-12.1/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH
# source使配置生效
source /etc/profile

2、测试CUDA是否安装成功

  • 下载示例代码:CUDA 12.1的安装目录中没有直接安装示例代码,需要自己下载
cd /usr/local/cuda-12.1/
sudo git clone https://github.com/NVIDIA/cuda-samples.git -b v12.1
cd cuda-samples/Samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
# 有如下输入说明安装成功

在这里插入图片描述

3、卸载CUDA

cd /usr/local/cuda-12.1/bin
sudo ./cuda-uninstaller  # 卸载CUDAsudo rm -rf /usr/local/cuda*# 重启
sudo reboot

三、CUDNN安装

1、查看CUDNN支持的CUDA版本

  • 最新版cudnn的Support Matrix网址:https://docs.nvidia.com/deeplearning/cudnn/latest/reference/support-matrix.html#support-matrix
    在这里插入图片描述
  • 之前版本cudnn的Support Matrix网址:可以将其中的 cudnn-892 修改成对应的版本号
    https://docs.nvidia.com/deeplearning/cudnn/archives/cudnn-892/support-matrix/index.html

因为安装的CUDA版本为12.1,这里选择最新版的CUDNN 9.4.0进行安装。

2、安装

按照官网的安装指导进行安装:

  • 下载安装包
wget https://developer.download.nvidia.com/compute/cudnn/9.4.0/local_installers/cudnn-local-repo-ubuntu2004-9.4.0_1.0-1_amd64.deb

之前版本的cuDNN下载地址:https://developer.nvidia.com/rdp/cudnn-archive

  • 安装
sudo dpkg -i cudnn-local-repo-ubuntu2004-9.4.0_1.0-1_amd64.deb
  • 导入CUDA GPG密钥到 /usr/share/keyrings/ 目录
sudo cp /var/cudnn-local-repo-ubuntu2004-9.4.0/cudnn-*-keyring.gpg /usr/share/keyrings/
  • 更新软件包列表
sudo apt update
  • 安装对应的运行时库(元包)
sudo apt install cudnn  # 为最新的 CUDA 版本安装最新的 cuDNN
# 如果安装的cuda不是最新版,需要指定cuda的版本
sudo apt install cudnn-cuda-12  # 为最新的 CUDA12 版本安装最新的cuDNN
sudo apt install cudnn9  # 为最新的 CUDA 版本安装最新的 cuDNN 9
sudo apt install cudnn9-cuda-12  # 为最新的 CUDA12 版本安装最新的 cuDNN 9

NOTE: 这里需要注意,如果安装的CUDA不是最新版,直接使用以上命令安装cuDNN可能存在CUDA和cuDNN版本不匹配的问题,在更新软件列表后可以先不要安装运行时库,可以多下载几个cuDNN版本的deb包,通过以下命令查看当前的cuDNN版本是否有与已经安装的CUDA版本匹配的运行时库。

sudo apt-cache policy libcudnn8

在这里插入图片描述
我试了5个版本发现8.9.2.26和cuda12.1匹配,然后分别安装运行时库、开发人员库和示例:

sudo apt install libcudnn8=8.9.2.26-1+cuda12.1
sudo apt install libcudnn8-dev=8.9.2.26-1+cuda12.1
sudo apt install libcudnn8-samples=8.9.2.26-1+cuda12.1

最后再进入 /etc/apt/sources.list.d/ 目录,将不需要的与cudnn相关的repository删掉;进入 /var/ 目录删除不匹配的cudnn;进入 /usr/share/keyrings/ 目录删除不需要的密钥

# 删除apt update不需要的repository
cd /etc/apt/sources.list.d
sudo rm cudnn-local-ubuntu2004-9.4.0.list
# 删除不匹配的cudnn
cd /var/
sudo rm -rf cudnn-local-repo-ubuntu2004-9.4.0/
# 删除不需要的密钥
cd /usr/share/keyrings
sudo rm cudnn-local-0AA868E1-keyring.gpg

或者也可以直接以下命令卸载

sudo dpkg -r package_name  # 似乎会有问题

3、测试

  • 安装 cuDNN 示例
sudo apt install libcudnn9-samples
  • 验证是否安装成功

NOTE: 需要注意的是这里要使用root权限,否则会出现 “test.c no such file” 的报错

cd /usr/src/cudnn_samples_v9/mnistCUDNN
sudo make clean
sudo make

如果出现找不到 FreeImage.h 的报错,
在这里插入图片描述

执行以下命令进行安装:

sudo apt install libfreeimage3 libfreeimage-dev
  • 重新编译后运行 mnistCUDNN 示例
./mnistCUDNN

出现Test passed!就说明安装成功。

4、卸载CUDNN

sudo apt remove cudnn

5、参考

  1. NVIDIA cuDNN 9.4.0 Downloads
  2. Installing cuDNN on Linux

四、libtorch安装

1、下载libtorch

可以从官网下载最新版的libtorch
在这里插入图片描述

如果需要的版本不是最新版,也可以根据最新版下载链接自行修改为需要的版本。比如需要 libtorch2.1.2+cuda12.1,对应的下载地址为:

https://download.pytorch.org/libtorch/cu121/libtorch-cxx11-abi-shared-with-deps-2.1.2%2Bcu121.zip

2、安装

解压下载好的压缩包

cd Downloads
unzip libtorch-cxx11-abi-shared-with-deps-2.1.2+cu121.zip

3、测试

main.cpp文件

#include <iostream>
#include <torch/script.h>
#include <torch/torch.h>int main() {std::cout << "Hello, World!" << std::endl;std::cout << "CUDA available:" << torch::cuda::is_available() << std::endl;std::cout << "CUDNN available:" << torch::cuda::cudnn_is_available << std::endl;std::clock_t s = clock();torch::Tensor tensor = torch::randn({3, 5}, torch::device(torch::kCUDA));std::cout << tensor << std::endl;std::clock_t e = clock();std::cout << "Run time:" << e - s << " us" << std::endl;return 0;
}

CMakeLists.txt文件

cmake_minimum_required(VERSION 3.16)
project(cpp_libtorch_test)set(CMAKE_CXX_STANDARD 17)find_package(PythonInterp REQUIRED)
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "/home/dell/3rdparty/libtorch212_cuda121")
find_package(Torch REQUIRED)add_executable(libtorch_test libtorch_test.cpp)
target_link_libraries(libtorch_test ${TORCH_LIBRARIES})

问题1: 如果cmake版本低于3.18,会出现下面的报错,这是由于低于3.18的cmake不支持CUDA17的编译,需要更新cmake版本。
在这里插入图片描述

Target "cmTC_ee350" requires the language dialect "CUDA17" (with compiler extensions), but CMake does not know the compile flags to use to enable it.

解决方法:

NOTE: 如果已经安装ROS,那千万不要使用apt remove命令卸载低版本的CMake,否则会删掉ROS中的文件导致ROS无法使用。直接下载高版本CMake进行安装,然后在 “~/.bashrc” 文件中指定高版本的CMake即可。

  • 下载高版本的cmake: https://github.com/Kitware/CMake/tags

  • 下载完成后解压并进行安装

# 解压
tar -zxvf CMake-3.29.8.tar.gz
# 安装
cd CMake-3.29.8
./bootstrap --qt-gui  # 如果不需要GUI可以去掉 --qt-gui
make
sudo make install

执行 ./bootstrap --qt-gui 时如果找不到OpenSSL

Could not find OpenSSL. Install an OpenSSL development package or ...

安装OpenSSL

sudo apt install libssl-dev
  • 默认会安装 /usr/local/bin 目录下,将该目录添加到source文件中
# 打开 .bashrc 文件
gedit ~/.bashrc
# 在最后添加以下内容
export PATH=$PATH:/usr/local/bin  # 如果 .bashrc 中已经有了,就不需要添加了
  • 保存 .bashrc 文件,查看CMake版本
source ~/.bashrc  # 使修改生效
cmake --version

更新CMake后重新编译即可。
问题2:

在这里插入图片描述
上面的Warning是由于从CMake 3.12开始,FindPythonInterp 和 FindPythonLibs 模块被删除了,需要用 FindPython3, FindPython2, FindPython 替换

find_package(PythonInterp REQUIRED)
# 替换为
find_package(Python3 REQUIRED)

问题3: 如果在CMakeLists.txt文件中设置的最小CMake版本大于 3.16,可能会出现如下的报错

CUDA_ARCHITECTURES is empty for target "cmTC_0f8a3"

解决方法:在CMakeLists.txt中加入以下内容,指定使用的CUDA架构

set(CMAKE_CUDA_ARCHITECTURES "86")

4、参考

  1. 【系统配置】深度学习环境配置
  2. Target “cmTC_e7e07“ requires the language dialect “CUDA17“ (with compiler extensions),解决。
  3. Ubuntu20.04安装LibTorch并完成高斯溅射环境搭建

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/880251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大语言模型-教育方向数据集

大语言模型-教育方向数据集 编号论文数据集1Bitew S K, Hadifar A, Sterckx L, et al. Learning to Reuse Distractors to Support Multiple-Choice Question Generation in Education[J]. IEEE Transactions on Learning Technologies, 2022, 17: 375-390.Televic, NL, https…

双向链表的基本结构及功能实现

1.基本结构: 双向链表是一种链表数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含三个部分&#xff1a; (1).数据域&#xff1a;存储节点的数据 (2).前驱指针:指向前一个节点 (3).后驱指针:指向下一个节点 2.基本特性&#xff1a; 双向链接: 与单向链表…

连锁多门店收银系统源码

近年来&#xff0c;越来越多的零售行业从业者意识到&#xff0c;线下线上全渠道整合将成为国内消费市场的大趋势&#xff0c;其中&#xff0c;线下门店能够赋予品牌发展的价值依然不可小觑。 1. 线下连锁门店发展方向&#xff0c;多种经营模式 新零售时代&#xff0c;基于品牌…

excel导出图片---HSSFWorkbook--SXSSFWorkbook

1 概述 平时在工作中&#xff0c;excel导出图片经常会用到&#xff0c;但奈何HSSFWorkbook导出数据数量有限制问题&#xff0c;所以企业里大多都用SXSSFWorkbook格式&#xff0c;很少用HSSFWorkbook。所以今天以这两种格式分别记录下&#xff0c;图片的导出过程。 2 HSSFWork…

Reddit账号太多?一文教你轻松管理

想要在Reddit上扩大品牌影响力&#xff0c;但不知道如何管理多个账号&#xff1f;面对复杂的社区规则&#xff0c;你是否在担心账号安全&#xff1f;渴望提升参与度&#xff0c;却对内容策略一筹莫展&#xff1f;本文将为你揭秘如何高效管理你的Reddit账号&#xff0c;让你在这…

PR快速片段分割教程

方法一&#xff1a; 方法二yyds&#xff1a; ctrla全选&#xff0c;拽过来ME导出即可。

周文强:我感受到了海口经济学院创新创业的热情

日前&#xff0c;由中国志愿服务基金会、中国志愿服务基金会汇成百年专项基金以及共青团海口市委员会主办&#xff0c;共青团海口经济学院委员会承办的“2024 首届青领杯大学生创新创业大赛”海口站线下培训在海口经济学院开展。汇成百年专项基金发起人周文强作为本次大赛的创业…

ReadWriteLock读写锁

读写锁基本概念 ReadWriteLock是Java并发包中的一个接口&#xff0c;它定义了两种锁&#xff1a;读锁&#xff08;Read Lock&#xff09;和写锁&#xff08;Write Lock&#xff09;&#xff0c;真正的实现类是ReentrantReadWriteLock。读锁允许多个线程同时读取共享资源&#…

基于单片机的家用安防报警系统设计

本设计基于STM32F103单片机作为主控&#xff0c;通过DS18B20温度传感器和MQ烟雾传感器对家庭环境的温度和烟雾浓度进行检测实现火灾预警的设计要求&#xff0c;当检测数据异常时激发报警提示。系统采用红外传感器对家庭环境中是否有盗贼进入实现检测&#xff0c;当出现异常情况…

机器学习的应用领域

机器学习在许多领域有广泛的应用&#xff0c;下面列出了一些主要的应用领域及其典型应用&#xff1a; 1. 图像识别 人脸识别&#xff1a;用于解锁手机、自动标记照片、监控安全系统。物体识别&#xff1a;应用于自动驾驶汽车、机器人、医疗影像分析中&#xff0c;帮助机器理解…

面试经典 150 题:力扣88. 合并两个有序数组

每周一道算法题启动 题目 【题目链接】 【解法一】合并后排序 排序后的数组自动省略0的数字&#xff0c;又学到了 class Solution { public:void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {//合并两个数组后排序for(int i0; i<…

计算机网络详解:发展史、TCP/IP协议、网络通信与应用开发全流程

文章目录 1. 计算机网络的发展史1.1 初期阶段&#xff1a;网络的萌芽&#xff08;1960年代&#xff09;1.2 第二阶段&#xff1a;TCP/IP协议的引入&#xff08;1970-1980年代&#xff09;1.3 第三阶段&#xff1a;互联网的普及与商业化&#xff08;1990年代&#xff09;1.4 现代…

线性跟踪微分器TD详细测试(Simulink 算法框图+CODESYS ST+博途SCL完整源代码)

1、ADRC线性跟踪微分器 ADRC线性跟踪微分器(ST+SCL语言)_adrc算法在博途编程中scl语言-CSDN博客文章浏览阅读784次。本文介绍了ADRC线性跟踪微分器的算法和源代码,包括在SMART PLC和H5U平台上的实现。文章提供了ST和SCL语言的详细代码,并讨论了跟踪微分器在自动控制中的作用…

基于python+django+vue的电影数据分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

【一句话点破】【C++重要题目】基类与派生类的成员变量值被对象调用的结果(二)

【一句话点破】基类/派生类的成员变量由哪个对象初始化的&#xff0c;哪个对象调用该成员变量时就用由它初始化的值 [尤其找准是基类对象or派生类对象的值] 【重要例题】15浙工大卷二读程序5题 可运行代码如下 #include "bits/stdc.h" #include<iostream> u…

DataGemma:谷歌大模型

诸神缄默不语-个人CSDN博文目录 DataGemma是谷歌出的大模型&#xff0c;是gemma 2的升级版&#xff0c;主要亮点是基于检索解决幻觉问题。 在huggingface和kaggle上均可下载模型权重。 检索数据源是Google’s Data Commons知识图谱。 官方博客&#xff1a;https://blog.googl…

learn C++ NO.18——多态

什么是多态&#xff1f; 多态是C面向对象编程中的一个核心概念&#xff0c;它允许程序在执行过程中&#xff0c;根据对象的实际类型来调用适当的函数。多态性主要通过继承和虚函数来实现&#xff0c;这使得代码更加灵活和可扩展。多态的条件如下&#xff1a;1、调用函数是重写…

[翟旭发射器]python-推导式-列表list表达式练习

# 简单的列表生成 numbers00[x for x in range(1,11)] print(numbers00) # 带条件的列表生成 numbers01[x for x in range(1,11) if x%20] print(numbers01) # 带表达式的列表生成 numbers10[x**2 for x in range(1,11)] print(numbers10) # 嵌套循环的列表生成 coordinates[(x…

基于SpringBoot+Vue+MySQL的美食点餐管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 在数字化快速发展的今天&#xff0c;餐饮行业也迎来了转型升级的重要机遇。传统餐饮管理方式面临效率低下、顾客体验不佳等问题。为此&#xff0c;开发一款基于SpringBootVueMySQL架构的美食点餐管理系统显得尤为重要。该系统旨…

在MySQL中,要查询所有用户及其权限,您可以使用以下命令:

文章目录 1、查询所有用户1.1、登录数据库1.2、select user,host from mysql.user; 2、查看用户的权限 1、查询所有用户 1.1、登录数据库 [rootlocalhost ~]# docker exec -it spzx-mysql /bin/bash rootab66508d9441:/# mysql -uroot -p123456 mysql: [Warning] Using a pas…