Ubuntu18.04 安装 CUDA 配置 Pytorch 踩坑过程

最近由于项目原因,需要使用 Pytorch 进行深度学习的算法开发,于是采购了 Dell T640 服务器并搭载两张 Nvidia 的 GeForce RTX3090 GPU,服务器本身已安装好 Ubuntu18.04 系统和 Nvidia 显卡驱动,要想正常使用 GPU 版的 Pytorch,后续还需要手动安装 CUDA,Nvidia APEX 等。以下详细介绍踩坑全过程,很多地方理解不深,恳请通过留言补充。


1. 关于 CUDA 版本:

配置深度学习 Pytorch 环境的大致步骤一般为:安装 Nvidia 驱动 -> 安装 CUDA -> 安装 Pytorch,但在安装好显卡驱动后,可以通过 nvidia-smi 查询显卡信息,这时候如下图所示在右上角也可以看到一个 CUDA 版本的信息 CUDA Version: 11.1

但是这时通过 nvcc --version 我查不到 CUDA 信息,也就是 nvcc --version 和 nvidia-smi 显示的 CUDA 版本不同,这是因为 CUDA 有两类主要的 API,一种是 Driver API,一种是 Runtime API。而这两种 API 都有对应的 CUDA 版本,Driver API 依赖于 Nvidia Driver,由 nvidia-smi 可以查看,Runtime API 可通过 nvcc --version 查看,一般 Driver API version >= Runtime API version 即可。

  

用于支持 Driver API 的必要文件(如 libcuda.so 和 nvidia-smi)是由 GPU Driver Installer 安装的。而用于支持 Runtime API 的必要文件(如 libcudart.so 和 nvcc)则是由 CUDA Toolkit Installer 安装的,CUDA Toolkit Installer 有时可能会集成了 GPU Driver Installer。nvcc 是与 CUDA Toolkit 一起安装的 CUDA compiler-driver tool,它只知道它自身构建时的 CUDA Runtime 版本,不知道安装了什么版本的 GPU Driver,甚至不知道是否安装了 GPU Driver。综上,Driver API 和 Runtime API 的 CUDA 版本不一致是因为我使用的是单独的 GPU Driver Installer,而不是 CUDA Toolkit Installer 里的 GPU Driver Installer。因此还需要单独安装 CUDA Toolkit 的 11.1 以下版本。

 

GPU Driver 版本、CUDA 版本和 cuDNN 版本应该相对应,一般安装顺序为:GPU Driver -> CUDA Toolkit -> cuDNN


  

2. 禁用 Nouveau 驱动:

在安装 CUDA 前,需要通过以下命令禁用 Nouveau:

# lsmod | grep nouveau

若无内容输出,则禁用成功,否则可通过以下操作来禁用 Nouveau:

# sudo vim /etc/modprobe.d/blacklist.conf    //打开blacklist.conf

然后插入以下语句:

blacklist nouveau
options nouveau modeset=0

然后 :wq! 保存退出,再禁用 Nouveau:

# echo options nouveau modeset=0
# sudo update-initramfs -u

  

3. 下载和安装 CUDA Toolkit:

CUDA Toolkit 的安装,在下载 CUDA Toolkit 的时候要注意版本应和之前安装的显卡驱动版本相兼容匹配,可通过官方文档查看

由于之前已安装的 GPU Driver 版本为 455.23,而 CUDA Driver API 的版本为 11.1,需要满足 GPU Driver -> CUDA Toolkit,结合上图显卡版本要求,最终选定安装 CUDA Toolkit 11.0。

安装方式有 runfile 和 deb 两种,这里我尝试的是 runfile 方法,前往官网一步步选择,如下图所示:

选择好之后在下面官方推荐可以直接在命令行用 wget 进行下载,然后安装:

$ wget http://developer.download.nvidia.com/compute/cuda/11.0.2/local_installers/cuda_11.0.2_450.51.05_linux.run
$ sudo sh cuda_11.0.2_450.51.05_linux.run

但如果 wget 相对浏览器直接下载慢太多的话也可以直接 copy 这个网址到浏览器直接下载,再传到服务器,然后执行第二句进行安装。安装的时候记得不要再选择安装 GPU Driver 了,其余都选 yes 即可。另外,如果需要卸载 CUDA Toolkit,需要在 /usr/local/cuda-11.0/bin 目录中找到并运行 cuda-uninstaller:

$ sudo /usr/local/cuda-11.0/bin/cuda-uninstaller
$ sudo rm -rf /usr/local/cuda-11.0/

如果需要卸载 GPU Driver 重新安装:

$ sudo /usr/bin/nvidia-uninstall

4. 设置环境变量:

上述安装完成之后还需要添加环境变量,具体操作就是打开 .bashrc 文件插入两行环境变量,首先用 vim 打开 .bashrc 文件,这个文件在 ~ 目录下:

$ vim ~/.bashrc

然后按 i 进入 vim 的编辑模式进行插入,在最后插入两行环境变量:

export PATH="/usr/local/cuda-11.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-11.0/lib64:$LD_LIBRARY_PATH"

然后按 esc 退出编辑模式,在按 :wq! 回车保存退出,然后执行:

$ source ~/.bashrc

完成环境变量配置。


5. 测试:

至此 CUDA Toolkit 已经完全安装完成,现在可以测试一下:

$ cd /usr/local/cuda/samples/1_Utilities/deviceQuery
$ sudo make
$ ./deviceQuery

输出以下内容则证明安装成功:


6. CUDA 多版本管理:

CUDA Toolkit 默认安装在 /usr/local ,可以使用 ls -l /usr/local | grep cuda 查看该目录下有哪些 CUDA 版本,如下图所示:

上图输出表示当前系统安装了CUDA Toolkit 10.2 和 11.0 两个版本,这是因为刚开始的时候我安装了 10.2,后面发现与 Pytorch 还有 Nvidia apex 混合精度运算库匹配有问题,所以又直接多装了一个 11.0,而原来的 10.2 并没有卸载。

其中 cuda -> /usr/local/cuda-11.0 是一个软链接,将 /usr/local/cuda 链接到了 /usr/local/cuda-11.0 目录,表示当前系统使用的是 cuda-11.0 版本,如果想在已安装的 cuda 中进行版本更改,则删除当前软链接,然后重新建立软链接指向想要的版本,最后修改环境变量与想要修改的版本一致即可,例如想改用 10.2:

$ sudo rm -rf cuda
$ sudo ln -s /usr/local/cuda-10.2 /usr/local/cuda

记得修改环境变量,或者,可以将 ~/.bashrc 中环境变量的 /usr/local/cuda-11.0/ 全都改成 /usr/local/cuda/ ,之后再切换 CUDA 版本的时候就不再需要修改环境变量了。


7. Pytorch 安装:

CUDA Toolkit 安装好之后,就可以安装 Pytorch 的 GPU 版本了:

直接用 pip 安装非常慢,可以更换 pip 源为国内的阿里云源:

$ mkdir -p ~/.pip
$ touch ~/.pip/pip.conf
$ vim ~/.pip/pip.conf

插入如下语句:

[global]
timeout = 6000
index-url = https://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com

以上为 Ubuntu 系统,如果是 win10:

先打开文件资源管理器,然后在路径那里输入:%APPDATA%,如下图所示:

然后新建一个 pip 目录并新建一个文件 pip.ini,然后输入以下内容:

[global]
trusted-host=mirrors.aliyun.com
index-url=http://mirrors.aliyun.com/pypi/simple/

注意,无论是用 pip 还是 pip3,都是按上述流程,创建的都是 pip 文件夹。安装完成之后可以通过以下方式查看当前 Pytorch 使用的 CUDA 版本:

import torch
print(torch.version.cuda)

原文地址:https://www.cnblogs.com/hmlovetech/p/14346202.html