前言:使用系统Ubuntu16.04,之前折腾了NVIDIA驱动和cuda,顺利完成安装。最近因为要用pytorch,由于可能需要使用不通版本的语言或框架,所以考虑为了日后环境管理方便,安装了anaconda3,并基于此来安装pytorch,安装过程遇到的一些问题,在此记录解决的过程和思路:
本人主要遇到的问题:
1.安装anaconda3时在可以访问anaconda的官网,但是下载时,没有速度或速度太慢,下不动
2.安装pytorch时,官网上最新版本需要的cuda版本太高,硬件不支持,安装过程中下载环节网络连接不通
3.pytorch安装成功了,安装时明明设置了对应的cuda版本,但是运行torch.cuda.is_available()时始终返回False,cuda不可用
PS:一个可能普遍存在的问题,大部分人都不可能保持自己的机器硬件设备或驱动都是最新的,各种软件包版本都是最新的,有些源码也是需要旧版本软件包的,而pytorch官网上给出的用命令安装的基本都是最新版本,要安装历史版本需要另外找方法下载,所以希望这篇笔记能够对其他人有参考意义。
NVIDIA驱动和cuda安装
这个步骤的资料比较多见了,也可以参考我之前的一篇文章
Ubuntu安装NVIDIA驱动和CUDA,这里就不赘述了。
cuda多版本切换
这个问题原本可以通过conda建立多个虚拟环境,在不通虚拟环境中安装不同版本来解决。不过本人的经历是这样的(不知道有没有类似的朋友,时间宝贵的可以略过此段):先是装好了显卡驱动和cuda10.0的版本,本人的显卡最高支持到NVIDIA驱动418.56版本(418还有更高的子版本),安装驱动后就直接顺便装了cuda10.0。装了anaconda3之后,发现pytorch官方首页上面提供推荐的支持版本只有cuda9.2和cuda10.1,当时觉得找历史版本自己装麻烦,想装最新的,就又装了cuda10.1,第一次是直接卸载后重装,结果后来还是遇到了前面所说的问题3,经过一番查找和思考,发现我的显卡只支持10.1.130,但是pytorch with cuda10.1的离线文件名中体现出需要的是10.1.243,即需要安装NVIDIA官网中的“cuda 10.1 update2"那个,但是我的显卡并不支持。于是又要回到cuda10.0的版本去。
安装了多版本的cuda,会在/usr/local/目录中有多个cuda版本的目录,如下所示:
可以看到,除了两个版本的cuda目录外,安装程序还创建了一个软链接cuda指向某一个版本的cuda目录(有时候安装程序不会创建这样的链接,我们可以自己手动创建),这样一来,在配置系统环境变量的时候,可以不按照之前的帖子,直接把cuda某一版本的安装目录配置进去,而是讲链接配置进去,使用如下命令:
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda/bin:$PATH
但凡有一些Linux系统使用基础的朋友应该都能明白了,需要更改版本的时候,修改/usr/local/目录重点软链接就可以了,可以使用如下命令:
sudo ln -snf /usr/local/cuda-x.x /usr/local/cuda
网上有些帖子说的是先删除旧的,再创建新的(命令我就不写了,效果一样的,只是因为只用ln -s
会提示已存在该链接的错误,关于ln
命令的用法,可以通过ln --help
来查看,就知道各参数的含义了)。
cuDNN安装
根据官网的提示按照以下步骤安装即可。(基础好的直接查看cudnn官方文档)
- 下载cuDNN
cuDNN的下载需要在NVIDIA注册开发者账号(免费的),注册完登录以后可以进入下载页面,如图所示: - 安装cuDNN
下载不同的文件,安装方式不一样(推荐下述第1种,目录设置和查找比较方便)
第一种: 通过tar文件解压安装
cudnn是cuda的扩展计算库,是采用的插入式设计,即将cudnn的库文件拷贝到cuda的目录下就可以使用了,所以直接解压文件,然后拷贝的方法是最便捷的。
在上图的下载链接中,选择”cuDNN Library for Linux“就可以下载所需要的文件,后缀为.tgz的压缩包。
然后创建自己所需要存放cuDNN的目录(例如,我自己创建了目录/usr/mylib/cudnn7.6.3forCUDA10.0),将压缩包拷贝到该目录下,用如下命令解压安装:
tar -xzvf cudnn-10.0-linux-x64-v7.6.3.30.tgz
后面的文件名根据自己下载的文件更改
解压之后,当前目录会生成一个名为cuda的目录,进入该目录,可以看到如下文件列表:
然后将文件拷贝到对应位置,执行如下命令:
sudo cp include/cudnn.h /usr/local/cuda/include
sudo cp lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
*注意:1. 很多官网和网站上的复制命令后面的目录是 “cuda/include……”和“cuda/lib64……”,这是在cuda目录的上一级目录里执行的,我这里因为进入了cuda目录,所以就是上面这样了,这个自己领会,比较简单。2.上面因为提到安装cuda的时候,创建了名为cuda的软链接,实际cuda的安装所在目录是后面带版本号的,如果安装时没有自动或者手动创建这个软链接,就需要注意这里的复制目标和修改权限的目录中应该是cuda实际安装的目录了。
第二种:通过deb文件安装
本人没有亲自试,根据官网文档和自己的理解说明
下载前面所说的官网中的几个对应.deb文件,然后依次执行如下安装命令:
#安装运行环境库
sudo dpkg -i libcudnn7_7.6.3.30-l+cuda10.0_amd64.deb
#安装开发库
sudo dpkg -i libcudnn7-dev_7.6.3.30-l+cuda10.0_amd64.deb
#安装代码样例和文档
sudo dpkg -i libcudnn7-doc_7.6.3.30-l+cuda10.0_amd64.deb
本人个人理解:官网并没有写复制相关库文件的说明,应该是deb包安装过程中,根据环境变量中有关cuda的目录设置自行将相关文件创建到对应目录中去了,相比第一种安装过程,可能透明度不高,所以我比较推荐第一种
cudnn版本切换
cudnn由于是插入式设计,版本切换实际上替换不同版本的cudnn.h文件和相应的libcudnn*系列文件就可以了。这也是为什么我推荐上述第一种方式安装的原因。使用deb文件,有部分用户可能自己都不知道文件安装去哪了,而不同版本cudnn的这些文件的文件名有很多是相同的。
切换cudnn版本,只需要将新版本的cudnn的压缩包(.tgz)解压之后,将解压出来的文件,按照上面安装过程中的复制命令替换原来版本的cudnn文件即可。
Anaconda安装
作为比较成熟的发行版,anaconda的安装是比较简单的,正常情况下,通过Anaconda官方下载得到相应的.sh文件然后执行即可。
但是,对于国内部分用户来说,很可能通过官网下载不下来(本人就是……)。我是通过清华的源下载的(庆幸清华源通过与anaconda公司的交涉恢复了conda源,网上那些说清华源失效的帖子,可以都不看了)。
- 通过清华源下载anaconda安装文件:下载地址
PS:注意自己的系统架构以及32位或64位
我是下载的“Anaconda3-2019.10-Linux-x86_64.sh",后面以此文件名为例。 - 通过sh文件安装
在上述下载文件所在目录执行下列命令:
sudo sh Anaconda3-2019.10-Linux-x86_64.sh
执行后出现下图所示,回车后继续,阅读说明
然后一路空格到最后,出现如下提问
输入”yes“以后回车,会提示安装目录,如下图
默认是会安装到用户目录里的,我是选择安装到/opt目录中,所以输入”/opt/anaconda3"回车。
安装完成后一般会自动在环境变量中做相关设置,终端的命令前面会增加显示(base),表示conda的base环境,之后终端默认进入这个环境。如果意外出现环境变量有问题,下图为我自己安装正常以后关于conda的环境变量截图,供参考。
3. 为conda配置国内的源
PS:这一步按自己的需要选择是否添加或者添加什么源
因为conda默认的官方源是国外的,部分用户访问会特别慢甚至无法下载(比如我),所以国内用户最好是添加一下国内源,一般是清华的和中科大的(因为授权原因,中科大源停用后还没有恢复,清华的已经恢复了,这里就只讲清华源的添加了。
这里给出anaconda清华源和中科大源的网站,资深用户可以自行查看期帮助文档和说明:清华anaconda源和中科大anaconda源
在终端输入如下命令给conda配置清华源:
#添加源链接
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
#以上是主要的一些软件包的地址,基本上添加这两个就够了
#设置搜索时显示通道地址(方便安装包时查看是否启用了国内的源)
conda config --set show_channel_urls yes
按照上面的命令,实际上是在用户目录下创建并修改了文件.condarc
,通过如下命令可以查看这个文件的内容:
#方法一:通过查看文件来查看
cat ~/.condarc
#方法二:通过conda命令来查看
conda config --show-sources
可以看到文件中channels属性中,除了defaults以外,还有上面我们添加的地址,另外show_channel_urls属性为True。
清华源官方Anaconda 镜像使用帮助中有更详细的方法,是直接创建或修改文件.condarc的内容,和上述略有不同,我没有亲测,但应该效果一样。
Pytorch安装
Pytorch官网给出了各种版本的conda安装命令,如下图所示:
我之前就是因为看到官网直接给出命令的只有cuda9.2和cuda10.1,又怕麻烦不想去找其他的安装方法,就把cuda版本从10.0换到了10.1。
另外,在安装过程中,即时添加了清华的源,还是会出现下载不了的情况,经过一番搜索查看后,发现是命令里面要去掉-c pytorch
,否则还是会默认搜索pytorch的官方源(访问国外网站速度快的或者能够科学上网的朋友可以忽略),于是,使用如下命令安装:
conda install pytorch torchvision cudatoolkit=10.1
安装是顺利的,测试torch也是没问题的,但是准备测试cuda的时候总是无法使用cuda,torch.cuda.is_available()总是返回False,运行cuda程序会提示”pytorch is not compiled using cuda“。于是怀疑最新的pytorch是需要10.1.243的版本(即需要安装NVIDIA官网里的cuda10.1 update2)。
也有网上的帖子说清华的源用命令安装会默认不使用cuda,也就是说命令中的cuda有关的参数不起作用,于是打算从清华的源里面直接下载安装文件。
通过以下链接下载相关的安装文件:
清华源pytorch安装文件下载
根据自己的系统,以及自己的Python、cuda、cudnn的版本来选择安装文件(也可以先看看自己打算下载什么版本,然后根据文件名的指示,选择安装cuda和cndnn的版本,以免安装好cuda和cudnn后发现没有对应的pytorch安装包)
以下是我选择下载的文件:
除了pytorch,还需要下载torchvision(和torch配合使用的Python包,提供了一些常用数据集、经典网络模型、图像处理工具之类的),有其他需求的,可以自己在上面的链接里找。下图是我下载的torchvision的安装文件:
下载完成后,使用conda install
命令进行安装即可,以我下载的文件为例,命令如下:
conda install pytorch-1.4.0-py3.7_cuda10.0.130_cudnn7.6.3_0.tar.bz2
conda install torchvision-0.5.0-py37_cu100.tar.bz2
安装完成后,终端进入Python测试一下,显示如下结果,大功告成!
所有结果显示正常了,终于进入了pytorch的大门(坑)!