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 文件。
# 台式机安装不加这个参数也可以正常安装,笔记本不加可能会出现循环登录。
- 驱动安装过程中的一些选项
- An alternate method of installing the NVIDIA driver was detected.
选择 continue installation 。这个应该是推荐你通过 Ubuntu 的 “Software & application” 中的 “Additional Drivers” 安装驱动,不用管,继续安装- The distribution-provided pre-install script failed! Are you sure you want to continue? 选择 yes 继续。
- 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继续
- Install NVIDIA’s 32-bit compatibility libraries? 选择No 继续
- 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 继续
- 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、参考
- Ubuntu20.04 安装 NVIDIA 显卡驱动
- 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 # 卸载CUDA
sudo 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、参考
- NVIDIA cuDNN 9.4.0 Downloads
- 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、参考
- 【系统配置】深度学习环境配置
- Target “cmTC_e7e07“ requires the language dialect “CUDA17“ (with compiler extensions),解决。
- Ubuntu20.04安装LibTorch并完成高斯溅射环境搭建