成功不是终点,失败也并非末日,最重要的是继续前进的勇气。
——英/温斯顿·丘吉尔
最近从Ubuntu 19.10升级到了20.04 LTS,感兴趣可以看Ubuntu 20.04 尝鲜记:从 19.10 升级和安装。
系统升级之后需要重新安装深度学习三大件(NVIDIA Driver/CUDA/cuDNN),简单记录一下完整流程和一些BUG的解决方法,以备后用。
安装NVIDIA驱动
使用ubuntu-drivers devices
命令查看显卡型号和推荐驱动版本:
1 | ubuntu-drivers devices |
自动安装推荐(recommended)的驱动:
1 | sudo ubuntu-drivers autoinstall |
或者也可以直接安装指定驱动:
1 | sudo apt install nvidia-driver-440 |
安装成功后重启,确认能进入系统后使用nvidia-smi
命令确认安装成功:
1 | Sat May 2 12:31:52 2020 |
P.S. 『循环登陆』
在Ubuntu 18.04和19.10上我遇到循环登陆的问题,但在20.04上还采用自动安装没有遇见这类问题。如果真的遇到循环登陆,开机后选择Ubuntu (Advanced)
引导,在root权限下删除所有nvidia驱动相关软件后,禁用开源noueau驱动,下载并使用runfile进行local安装,附加以下参数。
1 | sudo sh NVIDIA-Linux-x86_64-440.64.run -no-x-check -no-nouveau-check -no-opengl-files |
安装CUDA
CUDA是NVIDIA推出的用于自家GPU的并行计算框架,也就是说CUDA只能在NVIDIA的GPU上运行,而且只有当要解决的计算问题是可以大量并行计算的时候才能发挥CUDA的作用。
TensorFlow的CUDA版本一直值得诟病,目前最新的消息是普遍支持CUDA 10.1,所以我们就安装 CUDA Toolkit 10.1 update2 Archive
好了。
打开CUDA Toolkit 10.1 页面按照18.04版本安装本地runfile:
1 | 先下载runfile到本地 |
如果按照上述流程安装了最新的NVIDIA Driver,runfile安装过程中会提醒是否继续(Existing package manager installation of the driver found. It is strongly recommended that you remove this before continuing.),选择继续continue
,在后续选择安装内容时去除驱动选择。
查看NVIDIA官方User Guide可以知道,CUDA Toolkit 10.1支持的gcc编译器版本为7.3.0,Ubuntu 20.04自带的gcc版本为9.3.0,如果出现gcc版本问题我们可以添加override
标识跳过gcc版本检查。
1 | sudo sh cuda_10.1.243_418.87.00_linux.run --override |
运行成功后看见输出Summary,根据提示需要进行环境变量的设置
,在.bashrc(ZSH使用者对应.zshrc)末尾追加如下文字。
1 | 还是使用.bashrc文件举例,zsh用户自行替换为.zshrc |
最后测试以下CUDA是否成功安装,运行nvcc -V
:
1 | nvcc: NVIDIA (R) Cuda compiler driver |
或者也可以运行位于/usr/local/cuda-10.1/samples/
中的测试用例,具体不说了,按照我前面的流程一步步走下来没毛病。
安装cuDNN
cuDNN(CUDA Deep Neural Network library):是NVIDIA打造的针对深度神经网络的加速库,是一个用于深层神经网络的GPU加速库。如果你要用GPU训练模型,cuDNN不是必须的,但是一般会采用这个加速库。
在cuDNN Archive 页面挑选适合我们CUDA版本的cuDNN,我们选择cuDNN v7.6.4 (September 27, 2019), for CUDA 10.1
- cuDNN Library for Linux
。
cuDNN的下载需要注册,相信对于大家来说并不是什么问题。下载并解压之后运行如下命令将cuDNN压缩包中的文件拷贝到CUDA 10.1的文件夹中:
1 | sudo cp cuda/include/cudnn.h /usr/local/cuda-10.1/include |
查看CUDA和cuDNN版本
1 | CUDA 版本 |
通过软链接同时维护和使用多个版本的CUDA库
在安装完成CUDA和对应cuDNN的库之后,我们可以看到/usr/local/cuda
指向了当前的CUDA文件夹:
1 | lrwxrwxrwx 1 root root 20 May 3 16:38 cuda -> /usr/local/cuda-10.1 |
观察得知/usr/local/cuda
是一个链接文件,在上述安装过程中被安装程式自动指向了当前安装版本的CUDA所在文件夹,于是我们可以通过更新链接指向,维护多个CUDA版本并动态的调用。
1 | ln -snf [源] [链接文件] 更新链接文件的指向 |
再次观察/usr/local/cuda
指向了新的CUDA文件夹,由于我们上面过程中添加在.bashrc or .zshrc 中的路径是/usr/local/cuda/***
,于是这一条命令就可以改变当前调用的CUDA及cuDNN版本了。
不过CUDA的文件夹不算小,同时维护CUDA10.0-TF1.15/CUDA10.1-TF2.X/CUDA10.2-PyTorch使得SSD上的空间岌岌可危,所以说,Linux的正确分区挂载习惯hh
TensorFlow及Pyorch安装 (顺手)
虚拟环境不说了,virtualenv
还是conda
自选。(我是用miniconda,用什么装什么。)
TensorFlow
TensorFlow目前最高支持Python 3.7 && CUDA 10.1。
旧版 TensorFlow(1.x),CPU 和 GPU 软件包是分开的:
1 | pip install tensorflow==1.15 # CPU |
对于TensorFlow 2.x CPU 和 GPU 软件包是统一的:
1 | pip install tensorflow # CPU 和 GPU 的最新稳定版 |
PyTorch
PyTorch最高支持CUDA 10.2,同时支持10.1和9.2版本。我们安装CUDA 10.1版本对应的PyTorch。
1 | pip install torch==1.5.0+cu101 torchvision==0.6.0+cu101 -f https://download.PyTorch.org/whl/torch_stable.html |
Reference
- https://www.tensorflow.org/install/gpu
- https://developer.nvidia.com/cuda-10.1-download-archive-update2?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=1804&target_type=runfilelocal
- https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html
- https://blog.csdn.net/u014380165/java/article/details/77340765
History
- 2020-05-02: 创建
- 2020-05-03: 添加通过修改软链接维护和调用不同版本CUDA的方法