Ubuntu 深度学习环境全配置

驱动、CUDA、cuDNN、Conda、PyTorch、代理、多CUDA并存

Posted by Tian on October 16, 2019

一、前言

之前写过一篇 NVIDIA显卡配置,主要参考官方文档,用包管理器的方式来安装显卡驱动和CUDA。

但是这种方法不够灵活,配置自己的机器没问题,如果要在多人共用的服务器上,有下列的需求或情况时,不好处理:

  1. 多版本 CUDA 并存,不影响其他用户
  2. 无 sudo 权限,安装 CUDA
  3. 使用机器已安装的显卡驱动

这一篇主要记录下针对以上的情况,如何快速稳定地配置深度学习环境。

二、安装驱动

一般服务器供应商会帮你安装好驱动。如果驱动可用,可以跳过这一节;如果别人安装的驱动不满足要求,用这节的方法可以快速稳定地安装显卡驱动。

自己重装驱动前,一定一定要记得先卸载原驱动!否则后面可能会遇到各种各样的问题!

1、查询显卡和驱动信息

查看显卡信息:

1
2
3
4
5
lshw -numeric -C display
# or
lspci -vnn | grep VGA
# output
01:00.0 VGA compatible controller [0300]: NVIDIA Corporation GP106 [GeForce GTX 1060 6GB] [10de:1c03] (rev a1) (prog-if 00 [VGA controller])

输出显卡型号为 [GeForce GTX 1060 6GB]

查看显卡驱动版本:

1
2
3
4
5
6
7
# 查看已有显卡驱动版本
lspci -k | grep -EA3 'VGA|3D|Display'

# 查看 NAVIDIA 驱动版本
nvidia-settings --version
# or
cat /proc/driver/nvidia/version

2、卸载驱动

驱动兼容性列表:

01

推荐先卸载所有 NVIDIA 驱动。

卸载驱动命令:

1
2
3
4
5
6
# 卸载驱动 runfile 方式安装的驱动
sudo /usr/bin/nvidia-uninstall 

# 卸载 Deb 方式安装的驱动
sudo apt-get --purge remove nvidia* 
sudo apt-get autoremove

确保驱动卸载干净后,可以安装我们的驱动了。(可用 nvidia-smi 测试驱动是否可调用)

3、安装驱动

这篇文章 总结的很好,安装驱动有三种方法:

  • 使用标准 Ubuntu 仓库进行自动化安装
  • 使用 PPA 仓库进行自动化安装
  • 使用官方的 NVIDIA 驱动进行手动安装(需要禁用 Nouveau)

其实还有第四种,就是 CUDA Toolkit 自带驱动,不过版本是固定的。

这里推荐用第一种方法来安装,这种方法最简单。

(1)检测你的 NVIDIA 显卡型号和推荐的驱动程序的模型。

在命令行中输入如下命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
ubuntu-drivers devices
# 输出类似下列内容
== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00001180sv00001458sd0000353Cbc03sc00i00
vendor   : NVIDIA Corporation
model    : GK104 [GeForce GTX 680]
driver   : nvidia-304 - distro non-free
driver   : nvidia-340 - distro non-free
driver   : nvidia-384 - distro non-free recommended
driver   : xserver-xorg-video-nouveau - distro free builtin
 
== cpu-microcode.py ==
driver   : intel-microcode - distro free

从输出结果可以看到,目前系统已连接 Nvidia GeFrand GTX 680 显卡,建议安装驱动程序是 nvidia-384 版本的驱动。

注意:在一些 server 版的 Ubuntu 中,没有 ubuntu-drivers 命令,可以按下列流程安装:

1
2
3
4
5
sudo apt-get install ubuntu-drivers-common 
# 可访问外网,则直接添加 ppa
# sudo add-apt-repository ppa:graphics-drivers/ppa 
# 网络不好,则用国内反代添加 ppa
sudo add-apt-repository https://launchpad.proxy.ustclug.org/graphics-drivers/ppa/ubuntu 

(2)使用仓库自动化安装

输入安装命令:

1
2
3
4
# 安装推荐的驱动程序
sudo ubuntu-drivers autoinstall
# 或者自己选择安装版本
sudo apt install nvidia-340

安装结束,重启系统,就完成了。

更新:

如果想安装比较新的驱动,可以先加入 PPA:

1
2
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update

然后再安装上面的步骤,就可以安装最新的驱动了。

三、安装 CUDA

在以前的文章 NVIDIA显卡配置 中说过,安装 CUDA 有两种方法:

  1. 用对应系统的包管理器(对 Ubuntu 系统来讲就是 Deb 包)
  2. 用 runfile 文件

官方文档 推荐用包管理器安装,但是为了解决前言中列出的问题,本文推荐用 runfile 文件安装。

1、查询 CUDA 信息

查询 CUDA 版本:

1
2
nvcc -V
dpkg -l | grep cuda

查询 CUDA 安装位置:

1
which nvcc

CUDA 兼容性列表:

02

注意:用本文的安装方式可以多 CUDA 共存,不需要卸载已有 CUDA

卸载 CUDA 命令:

1
2
3
4
5
6
# 卸载 runfile 方式安装的 CUDA
sudo /usr/local/cuda-X.Y/bin/uninstall_cuda_X.Y.pl 

# 卸载 Deb 方式安装的 CUDA
sudo apt-get --purge remove cuda 
sudo apt-get autoremove

2、安装 CUDA

(1)下载 CUDA

CUDA 官网 下载 CUDA,注意选择 runfile[local] 文件。

(2)执行安装命令

1
sh cuda_xxx_linux.run

说明:

  1. 选择不安装驱动、安装 CUDA、不安装sample
  2. CUDA 安装目录自定义,但是如果安装到系统路径,需要 sudo 执行

3、设置环境变量

将以下内容添加到 ~/.bashrc 或者 ~/.zshenv 中:

1
2
3
4
# /usr/local/cuda-10.0 换成对应 CUDA 安装路径
export PATH=/usr/local/cuda-10.0/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

source 一下修改的文件,然后执行 nvcc -V,看 CUDA 是否配置成功。

4、多 CUDA 并存

多版本 CUDA 的安装方法和上面一样,用 runfile 安装到另一个路径下即可。

切换 CUDA 版本时,修改环境变量的 CUDA 路径,或者用软链接的方式修改软链接,就可以切换了。

四、安装 cuDNN

1、查询 cuDNN 信息

查询 cuDNN 版本:

1
2
3
4
5
6
# tar方式安装的 cuDNN
# /usr/local/cuda 换成 cuda 安装路径
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

# Deb方式安装的 cuDNN
dpkg -l | grep cudnn

2、安装 cuDNN

cuDNN 一样也有两种安装方式:

  1. 通过 tar 压缩包安装
  2. 通过 Deb 包管理器安装

本文推荐用 tar 压缩包安装。

1
2
3
4
5
tar -xzvf cudnn-9.0-linux-x64-v7.tgz
# /usr/local/cuda 换成 cuda 安装路径
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h/usr/local/cuda/lib64/libcudnn*

五、安装 Miniconda

1、下载安装 Miniconda

Miniconda 下载地址

1
2
# 按照提示安装
bash Miniconda3-latest-Linux-x86_64.sh

2、新建 conda 环境

1
conda create --name pytorch python=3.6

3、设置代理

(1)设置 conda 代理:清华 conda 镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
vim ~/.condarc
# 添加以下内容
channels:
  - defaults
show_channel_urls: true
default_channels:
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
custom_channels:
  conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
  simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud

(2)设置 pip 代理:清华 pypi 镜像

1
2
3
4
5
6
7
# 用镜像升级 pip
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U
# 配置镜像
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 临时使用
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

(3)可选:Ubuntu 清华镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 备份 /etc/apt/sources.list,替换为下面内容
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse

4、常用 conda 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 获取版本号
conda -V

# 创建环境
conda create --name your_env_name
# 创建指定 python 版本的环境
conda create --name your_env_name python=3.6
# 创建包含某些包的环境
conda create --name your_env_name python=3.5 numpy scipy

# 列出当前所有环境
conda env list
conda info -e

# 进入某个环境
conda activate your_env_name

# 查看已安装的包
conda list

# 退出当前环境
deactivate

# 复制某个环境
conda create --name new_env_name --clone old_env_name

# 删除某个环境
conda remove --name your_env_name --all

5、conda、pip 环境复制

1
2
3
4
# conda 导出已有环境
conda env export > environment.yaml
# 导入环境
conda env create -f environment.yaml
1
2
3
4
# pip 导出已有环境
pip freeze > requirements.txt
# pip 导入环境
pip install -r requirements.txt

在环境移植的过程中,如果想要在不联网的情况下直接复制别的机器或者自己的环境,可以将 env 下面对应的环境直接进行拷贝,(只适用于 anacoda 大版本相近 anaconda2 与 3 应该是不行的因为对应路径就已经有了变化),直接将整个环境复制然后全部拷贝到新环境的路径文件夹中。

注意:

直接拷贝到本机时候 link 文件是不会被拷贝下来的 会使得环境失效 然后解决方案是 通过 tar 进行压缩之后将环境压缩包拷贝到新的机器文件夹下面 解压即可 如果想改变环境名字 直接更改环境对应的文件夹名字即可。


更新:conda 环境迁移见新博文「Conda环境迁移」

六、安装 PyTorch

1、安装最新 PyTorch:

官网链接

1
conda install pytorch torchvision cudatoolkit=10.1 -c pytorch

2、指定 PyTorch 版本:

1
conda install pytorch=1.0 torchvision cudatoolkit=10.1 -c pytorch

3、指定 CUDA 版本:

1
conda install pytorch torchvision cudatoolkit=9.0 -c pytorch

参考