一文解决深度学习环境问题

之前的文章Ubuntu 16.04安装tensorflow运行环境给出了一个使用conda管理深度学习环境的方案,实际操作起来比NVIDIA官网,TensorFlow官网等的解决方案都更加容易上手,且不易出错。但是在使用的时候会发现存在一个问题,导致该方案无法直接推广到需要NVCC编译器的项目。其原因在于,conda源中维护的cudatoolkit版本为NVIDIA官方提供的cuda版本的一个子集,即不包含编译器的版本。通过谷歌搜索与自己动手实践,现已解决该问题,故记录于此,以备不时之需。解决方案是,使用conda-forge维护的cudatoolkit-dev软件包,这个软件包是完整的cuda工具箱。PyTorch和TensorFlow都会默认依赖cudatoolkit,这就会导致cudatoolkit和cudatoolkit-dev同时存在。但是,目前我没发现这会导致冲突,故无需处理。

本文所有实验基于Ubuntu 16.04 Desktop,如需推广到其他系统,只需按对应系统安装好显卡驱动和Anaconda,后续虚环境配置过程理论上没有区别。

关闭自动更新并主动更新系统依赖

Ubuntu自动更新软件在后台运行的时候会导致终端中很多命令无法使用,故新系统建议关闭自动更新。设置方法为在Software & Updates中定位到Updates,将Automatically check for updatesNotify me of a new Ubuntu version设置为Never,如图所示。 关闭自动更新

主动更新依赖命令

1
2
sudo apt update
sudo apt upgrade

添加ppa源

Ubuntu 16.4官方源的驱动版本已经过时,不支持CUDA 10.0,好在NVIDIA为Ubuntu 16.04提供了ppa源,其中有支持CUDA 10.0的显卡驱动可用。命令如下:

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

安装显卡驱动

去NVIDIA官网下载的显卡驱动,可能对应系统没有对应版本的release而导致需要编译安装,但是编译往往会报错,是一个不可取的方案。本文使用ppa源安装显卡驱动,这样可以完全避免安装驱动导致的各种奇怪问题。

Software & Updates中定位到Additional Drivers,选择最新版本的NVIDIA binary driver,然后Apply Changes。等待安装完成之后reboot即可,如图所示。 Additional Drivers

这里有一个知识点需要注意,显卡驱动和cuda版本不必要一一对应,但是由于cuda是依赖于显卡驱动的,所以显卡驱动版本不能低于cuda要求的最低版本。安装完成显卡驱动之后,使用nvidia-smi命令输出的cuda版本为该驱动支持的最高cuda版本,但是更低版本的cuda也是可以支持的。基于以上分析,我们直接安装最新版本的驱动即可。

安装anaconda

参考Anaconda官网安装指南安装即可。

切换清华源

务必将conda源切换为清华源,否则由于网络问题导致的各种错误会让你怀疑人生。配置方法直接参考清华大学开源软件镜像站提供的Anaconda 镜像使用帮助。也可以顺便把pip源也切换了pypi 镜像使用帮助

配置虚环境

本文提供3个实例供参考,TensorFlow版本与CUDA之间的对应关系可在这里找到,PyTorch不同版本安装命令可在这里这里找到,安装命令已经体现了PyTorch版本与CUDA之间的对应关系。注意安装cudatoolkit-dev时需要去NVIDIA官网下载相关文件,故会在Executing transction停留很久,需要耐心等待。

安装其他版本的环境的时候需要自己确认是否有对应版本的release,命令如下。

1
2
3
conda search tensorflow
conda search -c pytorch pytorch
conda search -c conda-forge cudatoolkit-dev

tensorflow 1.13.1

1
2
3
4
5
6
7
8
conda create --name tensorflow_1_13_1 python=3.6
conda activate tensorflow_1_13_1
conda install numpy=1.16.4
conda install tensorflow-gpu=1.13.1
conda install conda
conda install -c conda-forge cudatoolkit-dev=10.0
cat /home/usrname/anaconda3/envs/tensorflow_1_13_1/include/cudnn.h | grep CUDNN_MAJOR
nvcc -V

tensorflow 2.1.0

1
2
3
4
5
6
7
conda create --name tensorflow_2_1_0 python=3.6
conda activate tensorflow_2_1_0
conda install tensorflow-gpu=2.1.0
conda install conda
conda install -c conda-forge cudatoolkit-dev=10.1
cat /home/usrname/anaconda3/envs/tensorflow_2_1_0/include/cudnn.h | grep CUDNN_MAJOR
nvcc -V

pytorch 1.6.0

1
2
3
4
5
6
conda create --name pytorch_1_6_0 python=3.6
conda activate pytorch_1_6_0
conda install pytorch torchvision cudatoolkit=10.1 -c pytorch
conda install conda
conda install -c conda-forge cudatoolkit-dev=10.1
nvcc -V

使用虚环境

如果要使用命令行运行代码,那么在运行代码之前使用conda activate envname命令激活对应的虚环境即可。

如果在PyCharm中运行代码,那么在File>>Settings>>Project: project name>>Python Interpreter指定对应的虚环境即可。

如需安装其他包,可在激活环境之后使用conda install packagename来安装,也可以使用PyCharm环境管理器安装。若需要安装pip包,也可在激活环境之后直接使用pip install packagename安装,也会安装到对应虚环境内部。

0%