之前的文章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 updates
和Notify me of a new Ubuntu version
设置为Never
,如图所示。
主动更新依赖命令
1 | sudo apt update |
添加ppa源
Ubuntu 16.4官方源的驱动版本已经过时,不支持CUDA 10.0,好在NVIDIA为Ubuntu 16.04提供了ppa源,其中有支持CUDA 10.0的显卡驱动可用。命令如下: 1
2sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
安装显卡驱动
去NVIDIA官网下载的显卡驱动,可能对应系统没有对应版本的release而导致需要编译安装,但是编译往往会报错,是一个不可取的方案。本文使用ppa源安装显卡驱动,这样可以完全避免安装驱动导致的各种奇怪问题。
在Software & Updates
中定位到Additional Drivers
,选择最新版本的NVIDIA binary driver,然后Apply Changes
。等待安装完成之后reboot
即可,如图所示。
这里有一个知识点需要注意,显卡驱动和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 | conda search tensorflow |
tensorflow 1.13.1
1 | conda create --name tensorflow_1_13_1 python=3.6 |
tensorflow 2.1.0
1 | conda create --name tensorflow_2_1_0 python=3.6 |
pytorch 1.6.0
1 | conda create --name pytorch_1_6_0 python=3.6 |
使用虚环境
如果要使用命令行运行代码,那么在运行代码之前使用conda activate envname
命令激活对应的虚环境即可。
如果在PyCharm中运行代码,那么在File>>Settings>>Project: project name>>Python Interpreter
指定对应的虚环境即可。
如需安装其他包,可在激活环境之后使用conda install packagename
来安装,也可以使用PyCharm环境管理器安装。若需要安装pip包,也可在激活环境之后直接使用pip install packagename
安装,也会安装到对应虚环境内部。