最近帮舍友配pytorch、cuda、cudnn环境的时候,回想起来自己两年以前也只会按照教程安装,例如像个白痴一样搜索cuda xx.x+cudnn x.x+pytorch1.x.0安装教程,顺着步骤来,中间错一步或者一步不一样,简直十万个草泥马路过。一直是出现什么错误就搜教程,按照教程试奇奇怪怪的命令,运气好的话突然就成功了,但始终不知道自己干了些啥?
到现在配环境两个小时够够的(除非原环境是个屎)
温馨提示:
1、本篇文章需要读者有一定的基础(至少能分清anaconda与python,conda与pip,环境变量是什么意思的程度)
2、读本篇文章的时候多点耐心,本文倾向于给出在逻辑上先干什么再干什么最终达成目的,帮助读者去理解如何配pytorch
3、读懂本篇文章后足以全方位了解pytorch+cuda+cudnn到底怎么配。以后在安装过程中出现问题也可以自行快速解决
4、建议先迅速通读全文,对整体有个印象,然后再细细尝试每一个知识点
4、若是想要直接得到一套可行的命令行组合,请移步其他博客。
5、小白一点基础也没有没关系!读一遍不理解也记不住也没关系!建议收藏,多读几遍-其义自见。
pytorch有cpu版本的也有gpu版本的,cpu版本的通过conda或者pip安装就可以用。
炼丹玩家可以通过执行conda list
查看自己安装的python库.第一步是能看懂pytorch的版本描述。
例如我安装的这个是 适合在python3.6、cuda10.0、cudnn7.5.1环境下运行的1.1.0版本。带着cuda说明的一定是GPU版本,因为cpu运行不需要cuda.玩家可以对应着自己的版本描述理解一下。
其次玩家也需要理解:版本并不是一一对应关系而是多对多关系,比如cuda10.0可以与几种不同的cudnn兼容、cudnn8.0也可以与几种不同的cuda兼容。CUDA和CUDA Driver显卡驱动不是一一对应的,比如同一台电脑上可同时安装CUDA 9.0、CUDA 9.2、CUDA 10.0等版本。在不同版本间切换我常常使用更改环境变量的方式。(有人可能喜欢创建动态链接的方式)这里看不懂没关系,继续往下读。
读到这里有玩家可能会问cuda、cudnn、NVIDIA。
的关系是啥?
nvidia是英伟达公司,我们用的GPU通常是他家生产的,主要产品有GTX系列。有了显卡(GPU别名)还得需要驱动程序,英文名交NVIDIA Accelerated Graphics Driver,在安装某些东西的时候会出现这个单词,建议记住。那电脑上是否有驱动程序呢?打开cmd->执行nvidia-smi
(无空格)如果有反应则代表有GPU并且安装了驱动程序。
CUDA是显卡厂商NVIDIA推出的运算平台。CUDA是一种由NVIDIA推出的通用并行计算架构,是一种并行计算平台和编程模型,但我们通常说的安装CUDAx.x则是指CUDA Toolkit即cuda工具包。
关于CUDA Toolkit (cuda工具包)就有的注意了:上面说了在cuda官网上下载的runfile是cudatoolkit下载起来蛮麻烦,那我从conda上直接执行conda install cudatoolkit也能下载下来一个东西是不是也行?答案是不行:anaconda是python版本管理工具也可以说是包管理工具那么他下载的只是一个名字叫做cudatoolkit的第三方库,这个可以理解为从官网下载的子集。但是从NVIDIA CUDA官网上下载的CUDA Toolkit则是还包括cuda编译器(nvcc)等等组件,如果没这些,也是无法运用cuda加速的。
cuDNN是NVIDIA专门针对深度神经网络中的基础操作而设计基于GPU的加速库。cuDNN为深度神经网络中的标准流程提供了高度优化的实现方式,例如convolution、pooling、normalization以及activation layers的前向以及后向过程。CUDA这个平台一开始并没有安装cuDNN库,当开发者们需要用到深度学习GPU加速时才安装cuDNN库,工作速度相较CPU快很多。所以还得想要在深度学习模型训练上加速还得下载cudnn。
至于pytorch、torch、torchvision、torchaudio这四个名词的意思,可以简单理解下载pytorch的时候其实是下载三个python第三方库一个叫torch(官网下载链接名称)、一个叫torchvision、一个叫torchaudio。不过如果执行conda list查看下载的第三方库就可以发现库的真实名字叫pytorch与torchvision和torchaudio。看名字也知道torchvision主要处理图片,torchaudio是音频。(用什么下什么)
看到这里没理解没关系,可以接着往下读。
其实我们需要的其实就是一个pytorch GPU版本的python第三方库,但是这个第三方库依赖有点多。看着刚刚的图也应该知道,应该从下往上安装,先查看硬件、驱动再下载cuda、cudnn最后下载torch、torchvision。当然也有自己的硬件只支持一部分版本的cuda,cuda版本又限制了cudnn、torch、torchvision版本的原因。当然既然是python第三方库肯定与python的版本有对应关系。
#在安装环境之前,我的建议是先查看一下目前自己的环境
#打开cmd或者linux终端
nvcc -V #查看之前是否装过cuda 之前装过也不用卸载,因为不同版本之间可以通过修改环境变量更换。
python
>>> import torch
>>> torch.__version__ #查看目前安装的pytorch版本
>>> torch.cuda.is_available() #查看是否可以使用cuda加速,只有有cuda且与pytorch兼容的情况才是True
# 如果返回True说明兼容
第一步:玩家的笔记本需要有 NVIDIA英伟达的GPU芯片:右击“此电脑(或:我的电脑)”-->属性-->设备管理器-->显示适配器,会有显示如下
代表我的显卡是GTX 1050 (显卡就是GPU),用服务器的朋友可以直接看第二步(应该都有)
第二步:玩家需要有GPU的驱动程序,打开命令行cmd -> 输入 nvidia-smi
nvidia-smi命令的意思是查看英伟达驱动程序,执行完只要有这个界面就说明有驱动程序(自然也有NVIDIA显卡)
没有驱动程序的参考文章或自行搜索:https://blog.csdn.net/zataji/article/details/123104569
看到图片中我红框圈住的文字代表 我的显卡最高支持到CUDA11.1.也就是只能安装cuda11.1以下的版本如cuda10.0、cuda10.1、cuda10.2等等,玩家根据自己的配置确定自己的显卡支持的cuda版本范围。(注:一般都是向下兼容的,但也有像3090只支持11.0以上的情况)
第三步:确定好cuda支持的版本范围后下载cuda Toolkit(cuda工具包)
前文解释过,cuda是英伟达的一个计算平台,而我们平时所说的配环境中的安装cuda是安装cuda工具包:选择安装cuda toolkit版本:https://developer.nvidia.com/cuda-toolkit-archive
点击链接进入界面:
点击自己需要安装的版本,我点击的是11.0,因为我的显卡支持11.1以下的版本。
上面选择runfile而不是deb,deb文件安装方式是基于debian发行版本对应的安装方式(了解即可),我个人使用常常runfile,感觉还是更简单。至于选择local而不是network则是因为网络安装慢死,还有中断风险。
有玩家看到这有疑问了,我的界面这里怎么没有wget
命令,只有sh .run
命令呀!有图形界面可以点击网页安装,那linux服务器无操作界面咋办呀!遇到这种问题:我通常使用wget http://.......
命令来通过cuda下载链接下载cuda toolkit文件。 那这个网址(链接)应该是啥呢?如下图这种情况,可以通过右键->复制链接
获取下载链接!(注:右键复制的链接有时候会发现最后下载的文件没有.run修饰导致执行sh cuda_x.x.x_x.x_linux.run
这条命令的时候找不到文件,但没关系,对应的修改sh+文件名这条命令,也去除.run结尾)
有玩家又有疑问了!这个安装教程下面还有一个Patch 1是什么东西?其实是补丁的意思,遇到这种情况不仅需要下载上面的的.run文件 还需要下载下面这个补丁,下载方式也是如果有图形界面就点击下载按钮,下载到本地后到相应目录下执行sudo sh xxxxxxx.run
即可,若无图形界面则通过wget http://......
下载文件,链接通过右键->复制链接
获得,然后到相应目录下执行sudo sh xxxxxxx.run
在有图形界面的情况下按照导航安装就好了,第一次安装选择自定义->除了Visual Studio Integration外全选
,这是让安装一些组件,也不怎么占内存,防止出错,后面安装可以安装精简版
的。尤其需要注意的是不要安装Visual Studio Integration这玩意,会导致安装失败。
linux无图形界面安装疑问会多一些:
Do you accept the previously read EULA?
accept/decline/quit: accept #您接受之前阅读的EULA吗?许可协议什么的 输入accept接受
NVIDIA Accelerated Graphics Driver for Linux-x86_64 410.48?
(y)es/(n)o/(q)uit: n #询问是否安装NVIDIA加速图形驱动程序?这里就是指是否安装nvidia驱动程序,**如果前面nvidia-smi执行后查询到了驱动程序就选择no。**重复安装会出现问题,还得费劲删除一个。
Install the CUDA 10.0 Toolkit? #安装CUDA 10.0工具包?输入y
(y)es/(n)o/(q)uit: y
Enter Toolkit Location [ default is /usr/local/cuda-10.0 ]:直接Enter键 #安装地址,建议linux下就安在默认地址usr/local/cuda-x.x,到时候好找(我看了无数教程,windows安在非系统盘防止出问题,但linux都是安在usr/local)
Do you want to install a symbolic link at /usr/local/cuda? #问是否建立动态链接 我这里都选择no,我理解的动态链接是一个映射,意思是说在环境变量中的/usr/local/cuda,实际上是指前面我们下载的 /usr/local/cuda-10.0这个文件目录,也就是如果我之前下载过一个cudax.x.x到/usr/local/cuda,然后将环境变量指向了/usr/local/cuda,在我又下载了cuda10.0,现在我肯定是想要使用cuda10.0,然后通过使用动态链接将/usr/local/cuda映射到 /usr/local/cuda-10.0就不用改环境变量了,但是问题是我可能下载了多个cuda版本,本来我想换哪个的时候改一下环境变量就好了(linux改环境变量很简单),但是如果有动态链接的话,单看目录我也不知道最终指向哪里了,反而造成管理上的混乱。
(y)es/(n)o/(q)uit: n
Install the CUDA 10.0 Samples? #询问创建一个简单的可以测试是否下载成功的例子,随便,即使不下载也有其他测试方式
(y)es/(n)o/(q)uit: y
安装好软件以后需要依次执行(注意修改一下CUDA_HOME=/usr/local/cuda-x.x改成自己的版本,需要cd usr/local
进入默认安装目录,或者自己设定的安装目录,确认一下自己安装的位置。第一次安装文件名应该是cuda没有版本号后缀,应该是后续安装才有版本号,所以确认一下是改成cuda还是改成cuda-x.x)
# 下面三步是添加环境变量,设置三条的好处是,以后想要改成别的cuda版本只需要改第一条的版本就好了.**缺点是要记得自己新增的名字是CUDA_HOME**.要是怕记不住就把下面三条自行改成两条,不再赘述
export CUDA_HOME=/usr/local/cuda-10.0
export LD_LIBRARY_PATH=${CUDA_HOME}/lib64
export PATH=${CUDA_HOME}/bin:${PATH}
#这一步其实是进入主目录,但是也有让刚刚修改的环境变量生效的功能
source ~/.bashrc
# 这一步是查看环境变量文件,不过需要图形界面
sudo gedit ~/.bashrc
# 无图形界面 查看环境变量 PATH
sudo echo $PATH
# 无图形界面 查看环境变量 CUDA_HOME
sudo echo $CUDA_HOME
安装完后查看 是否安装成功执行nvcc -V
或者 nvcc --version
,这个命令中nvcc是cuda的编译器,可以从CUDA Toolkit的/bin目录中获取,类似于gcc就是c语言的编译器。这个命令只要能执行就说明cuda安装成功了。-V则是代表查看版本,执行后显示的版本即当前安装的cuda版本。 如果不能执行,就看一下安装目录,默认是/usr/local/是否有文件叫cuda或者cudax.x,如果有则查看环境变量是否加入成功,如果也加了就看看是否让新更改的环境变量生效。(无非就是这三个地方要对应清楚)
有玩家大呼,怎么我刚刚安装的是10.0,现在显示的是11.0呀!(总之版本好像不是自己刚刚安装的),那就可以回过头去查看一下/usr/local/这个目录下有几个cuda,然后看一下环境变量中指向的cuda,如果发现指向的是新安装的地址呀,那可能还有动态链接在作怪了。这里提供个歪方法:新建一个动态链接将你安装的cuda所在目录指向环境变量里面写的目录,以毒攻毒。但更好还是仔细查看一下问题出在哪!
直到能顺利执行nvcc -V 并且查看版本是自己想要的才算成功。
安装CUDnn基本上只有一个点需要注意:需要根据安装的cuda版本去下载指定版本范围的CUDnn
点击 官网链接 :https://developer.nvidia.com/rdp/cudnn-download
无图形界面的linux系统用老方法 wget http://..........
下载链接通过右键->复制链接
获得
没怎么遇到过CUDnn安装问题。如果有其他疑问,可以在评论去留言。我后期加上
一般情况下安装pytorch gpu版本的教程都会让去pytorch官网:https://pytorch.org/get-started/locally/
玩家要问了?这里怎么只有10.2和11.3可以选? 我们来看一下它提示的命令conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch
,
conda 是指 让使用 conda包管理工具(python版本管理工具)安装 四个第三方库 install 是指下载的意思 pytorch
torchvision torchaudio cudatoolkit=10.2
是四个python第三方库,我们在第一部分介绍的时候解释过,我们**平时说的安装pytorch其实是安装
pytorch和torchvision和torchaudio三个python第三方库。**或者是像我一样做视觉不需要torchaudio就可以把命令改成conda install pytorch torchvision cudatoolkit=10.2 -c pytorch
,删掉torchaudio。这里cudatoolkit第三方库前面也解释过了,我们平时说的安装cuda是在cuda官方网站上通过下载.run文件(runfile)然后安装CUDA
Toolkit 这个里面还有 cuda编译器啥的一堆组件。通过conda
下载的cudatoolkit是同名python第三方库。所以有玩家只通过conda下载cudatoolkit库是不行的!至于
=10.2
就是指定版本了。
-c pytorch 是一个指定安装通道的东西。
这么看命令是不是自己想要什么环境就可以直接安装了?无非是改一下cudatoolkit后面的版本号!是不是三个拆开来执行 conda install pytorch -c pytorch、conda install torchvision -c pytorch、conda install cudatoolkit=10.2 -c pytorch也能正确地安装好库?答案是不行的:前面也说过pytorch版本要受cuda版本约束,要是把命令拆开还怎么通过cuda版本约束呀!
但其实还有个很坑的的问题!在提出这个问题之前想请玩家思考一下,凭什么conda、pip这两个包管理工具通过执行conda install+包名,或者pip install +包名就可以成功下载?我电脑上什么都没有,它凭空造出来的?还有个问题是 大家应该了解过编译安装,就是自己在网上找到轮子以后在本地安装。再不济应该也听说过给pip换源,什么清华源、豆瓣源,都是给pip某个文件里面加一个网址!说到这玩家们应该也知道pip和conda其实是通过从某个网站上根据你提供的包名自动寻找一个随机版本的轮子然后给你下载到本地。或者像是pip install cudatoolkit=10.2这种就根据包名和版本号去给定的网站寻找相应的轮子然后下载到本地。如果找不到就返回错误:找不到这个包
那另一个问题呼之欲出:如果给定的网站中没有自己想要的gpu版本的轮子怎么办?一般情况下,普通的包是随便下载一个版本都兼容且成熟的,但pytorch就比较坑了,很多通过执行conda install pytorch torchvision cudatoolkit=10.2 -c pytorch
的时候因为找不到GPU版本的pytorch就自动下载一个CPU版本的还他妈的不报错。比如清华源就是这样。
所以接下来就写一个编译安装的方法:**1、找到自己想要的轮子 2、本地安装。**重点就是第一步
第一步 找到自己想要的轮子:conda\pip原理都是一样的,不同版本也都可以通过这种方式下载,通过点不同组合直到找到 底下出现一个网址。
我这里给出一个:https://download.pytorch.org/whl/cu113
看到这个网址也能大概明白,https://下载、pytorch/轮子/cuda11.3版本。 想要下载cuda10.0就把最后三个数字改成100,想下载11.0就改成110.是不是很简单。
然后想要下载pytorch这个第三方库就点击torch,想要下载torchvision就点击torchvision。同理torchaudio。。。
以torch为例:点击以后是, ctrl + F
查询,想下载哪个pytorch版本就输入哪个版本(但其实我是输入cuda版本),因为主要受到cuda版本限制。我就随便输入了110,想下10.1就输入101即可
那看到这么多版本都兼容cuda11.0,那我下载哪个呢?我们看一下链接描述:
torch-1.7.0+cu110-cp36-cp36m-linux_x86_64.whl
torch:是指这个包是pytorch第三方库的轮子
1.7.0: pytorch版本
cu110: 是指本pytorch库与cuda11.0兼容
cp36:是指本pytorch库需要运行在python3.6上
linux_x86_64:是指本pytorch库适合的操作系统是64位linux
那玩家就根据自己的需要下载相应的版本了,一般来讲,主要是管cuda的版本和操作系统的版本,python版本可以撞一下运气,不完全一样,最好还是一样防止出错。这里就看出anaconda的好处了。
第二步:本地安装 :
将轮子下载到本地以后,通过执行pip install xxxx.whl或者conda insatll xxx.whl 安装即可。无操作系统的linux想要安装就通过 wget http://.....
下载到本地,然后再通过pip 或者conda 下载即可。
第三步:查看是否安装成功 :通过python 调用 torch库 检测cuda是否能够使用
。如果能使用代表安装成功
命令行输入
python
import torch #pytorch第三方库
print(torch.cuda.is_available()) #是否能够使用cuda
# 如果输出True则代表安装成功
print(torch.__version__) #查看pytorch版本
# 确认是自己想要的版本,别出现误打误撞cuda能用却不是自己想要的版本的情况
exit() #退出python环境
最好最后再输入一下 nvcc -V确认一下cuda版本(首尾呼应)
感谢各位玩家耐心看到最后,祝大家炼丹顺利!
写这篇文章一是方便我自己后续查看,二是真心觉得自己不算聪明,学东西很慢,当然也有点懒:之前每次配环境都不搞清楚每一步的意思,只要能执行就不再追究,出错就疯狂调bug,但其实很多bug都是因为所给教程忽略了某些步骤导致的必然出错。所以把目前我对配pytorch环境的理解写下来,希望给他人带来一些方便。也希望自己能在研究生阶段称为炼丹高玩。
创作不易,请勿转载,如果方便的话点个赞呗!