install pytorch is all you need

install pytorch is all you need

当你想要使用pytorch时,可能需要知道的东西:

gpu driver cuda cudnn cudatoolkit conda pip torch


摘要

文章实在是太长了,先上结论吧
安装cudatoolkit有两种方式:官网和conda

常说的安装cuda就是安装cudatoolkit

安装pytorch有两种方式:pip和conda
推荐的torch安装方式:使用conda同时安装torch和cudatoolkit

conda install pytorch==1.9.0 torchvision==0.10.0 torchaudio==0.9.0 cudatoolkit=11.3 -c pytorch -c conda-forge

更多版本的torch点我

注意:如果在conda和pip镜像源安装软件时,如果安装的版本和你指定的版本不一致,比如安装gpu版的torch,安装完之后却是cpu版的,那一定是你的镜像源出了问题,镜像和官网没有一致性同步导致的。可以直接打开对应的镜像源的网页,搜索你要安装的软件版本,查看对应的版本号,确保有可用的软件再进行安装。
更重要的是安装时不要无脑点yes,先看一下要下载的版本是否是自己想要的版本:
在这里插入图片描述
(图来自 zxz)
上图中的pytorch就是指定了cudatoolkit10.2还有cudnn的正确版本。

GPU driver

众所周知,跑深度学习需要一块GPU(硬件),而为了让这块硬件能够正常工作就需要安装GPU驱动(driver),一般来说服务器上的GPU都已经由管理员安装了显卡驱动,所以如果你是一个普通用户这步就不需要你操作了。如果你是服务器管理员,那么可以在英伟达官网下载对应的显卡驱动进行安装,CentOS7显卡驱动安装,在这里我们不再赘述。

  • 那么如何知道我的显卡驱动版本呢?

使用 nvidia-smi 命令,查看详细的信息:
gpu driver

可以看到当前驱动的版本是455.32.00(特别感谢伟大的管理员为我们安装高版本的驱动),CUDA deriver api 版本是11.1 (一定要记住现在是cuda deriver)然后这台服务器有两张显卡可以使用,编号分别是0和1,这点一定要特别注意,显卡编号从0开始

CUDA

我们平时所说的安装cuda是其实是安装cuda toolkit,因为cuda仅仅是一种计算平台,而cuda toolkit才是我们真正要使用的程序。在第一步中,我们已经有了显卡驱动,cuda toolkit和显卡驱动版本是有非一一对应关系的。

  • cuda toolkit 和显卡对应版本关系

    cuda toolkit要求的最低显卡驱动版本对照表
    在这里插入图片描述
    我们以第一行为例:如果你要安装cuda 11.6,那么你的显卡驱动版本要>=450.80.02。也就是说如果现在你的显卡驱动版本>=450.80.02,那么你既可以安装cuda 11.6 也能安装 cuda 11.1 甚至是 cuda 10.2,所以你只要满足了最高版本的cuda显卡驱动要求,就能向下兼容所有的cuda 版本。并且这些cuda版本可以并存,只要我的驱动版本满足要求,我可以在服务器上安装多个cuda 。


CUDA有两个主要的API:runtime(运行时) API和driver API

当我们使用 nvidia-smi 命令时显示的就是driver API(这是安装显卡驱动时自带的cuda,这是一种更接近底层的接口,训练神经网络并不会用到),当我们使用 nvcc -V 命令时调用的是runtime(运行时) API,也就是你程序真正用到的cuda版本。


  • 如何安装cuda toolkit 呢?(官网安装cuda toolkit)

参考:显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn到底是什么?

1.下载

cuda toolkit 历史版本

到 CUDA Toolkit Download 下载所需版本,以 cuda_9.0.176_384.81_linux.run为例(一般都建议下载.run结尾的文件,便于我们多版本切换):
在这里插入图片描述

2.安装

进入到放置 cuda_9.0.176_384.81_linux.run 的目录:

sudo chmod +x cuda_9.0.176_384.81_linux.run # 为 cuda_9.0.176_384.81_linux.run 添加可执行权限
./cuda_9.0.176_384.81_linux.run # 安装 cuda_9.0.176_384.81_linux.run

在安装过程中截取其中比较重要的几个选择:

Do you accept the previously read EULA?
accept/decline/quit: accept

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81?
(y)es/(n)o/(q)uit: n # 如果在这之前已经安装好更高版本的显卡驱动就不需要再重复安装,如果需要重复安装就选择 yes,此外还需要关闭图形界面。

Install the CUDA 9.0 Toolkit?
(y)es/(n)o/(q)uit: y

Enter Toolkit Location
 [ default is /usr/local/cuda-9.0 ]: ~/cuda-9.0 # 一般选择安装在自己的家目录,因为你不是sudo没有其他位置的权限

~/cuda-9.0 is not writable.
Do you wish to run the installation with 'sudo'?
(y)es/(n)o: y

Please enter your password: 
Do you want to install a symbolic link at /usr/local/cuda? # 是否将安装目录通过软连接的方式 link 到 /usr/local/cuda,取决于你是否使用 /usr/local/cuda 为默认的 cuda 目录。
(y)es/(n)o/(q)uit: n

Install the CUDA 9.0 Samples?
(y)es/(n)o/(q)uit: n #这仅仅是一个例子,不用装

#除了问你是否要安装Toolkit之外的都可以不安装

前面选择的一些汇总:

Driver:   Not Selected
Toolkit:  Installed in ~/cuda-9.0
Samples:  Not Selected

Please make sure that
 -   PATH includes ~/cuda-9.0/bin
 -   LD_LIBRARY_PATH includes ~/cuda-9.0/lib64, or, add ~/cuda-9.0/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run the uninstall script in ~/cuda-9.0/lib64/bin

Please see CUDA_Installation_Guide_Linux.pdf in ~/cuda-9.0/lib64/doc/pdf for detailed information on setting up CUDA.

***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 384.00 is required for CUDA 9.0 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:
    sudo <CudaInstaller>.run -silent -driver

安装完成后可以在 自己家 目录下看到:

cuda-9.0 # 刚刚安装的cuda-9.0

此时你已经有了一个cuda9.0,并且它的安装路径为~/cuda-9.0

3.安装cudnn

参考:centos 7 安装CUDA9.0 +CUDNN

cudnn专门为深度学习计算设计的软件库,里面提供了很多专门的计算函数,如卷积等,如果你要训练神经网络,那么cudnn的安装时必不可少的。

cudnn的安装特别简单,下载对应cuda版本的cudnn(需要注册账号才能下载,一般一个cuda对应三个版本的cudnn,可以随意选择)压缩包,然后将解压后的内容复制到我们刚刚安装的cuda的文件对应路径当中去。

#解压
tar -xzvf cudnn-9.0-linux-x64-v7.1.tgz
#复制相关文件到cuda特定目录下
cp cuda/include/cudnn.h ~/cuda-9.0/include
cp cuda/lib64/libcudnn* ~/cuda-9.0/lib64
#修改文件权限
chmod a+r /usr/local/cuda-9.0/include/cudnn.h /usr/local/cuda-9.0/lib64/libcudnn*

这样cudnn就安装好了,是不是特别简单

4.多个版本的cuda切换

现在假定我们系统上有两个版本的cuda,第一个是刚刚我们自己安装的cuda-9.0,第二个是管理员为所有用户安装的cuda-11.1

如果你要切换对应版本的cuda,只需要在自己的~/.bashrc文件写入下面三句,并修改对应的路径即可

vim ~/.bashrc
 
#插入
 
export LD_LIBRARY_PATH=~/cuda-9.0/lib64:$LD_LIBRARY_PATH
export PATH=~/cuda-9.0/bin:$PATH
export CUDA_HOME=~/cuda-9.0:$CUDA_HOME

#CUDA_HOME是torch用来寻找可用cuda时的变量,如果不设置会先去系统里寻找
 
#退出
:wq! 
 
更新
source ~/.bashrc

好,现在我们已经安装了cuda toolkit,并设置了环境变量,这样我们可以通过nvcc -V来查看当前正在使用的cuda版本


5.cuda toolkit中的显卡驱动

在刚刚安装cuda toolkit的过程中我们可以有一句是:

Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 384.81?

这是在问你是不是要安装显卡驱动,所以说显卡驱动可以单独在英伟达官网下载安装,也可以在安装cuda toolkit时配套安装,但往往我们更推荐前者,先在官网安装驱动,再安装cuda toolkit


我们再来看一张图

CUDA Toolkit 版本中打包的开发 NVIDIA GPU 驱动程序的版本如下所示
在这里插入图片描述
也就说cuda toolkit中自带了显卡驱动,但我们就是不用,哎就是玩。

那么什么时候是cuda runtime API 什么时候是cuda driver API呢?

在装显卡驱动后,驱动自带就是cuda driver API,使用nvidia-smi 命令查看

在装cudatoolkit后,cudatoolkit对应路径下的就是cuda runtime API 使用 nvcc -V 查看

有了这样的概念后,当我们看到 nvcc -V 和 nvidia-smi 显示的 cuda 版本不一致是正常的,我们只用知道 nvcc -V 看到的是我们程序要用的就行了

安装pytorch

安装好了cuda也就是cuda toolkit后,我们就能安装pytorch了。

假定我们现在安装的cuda版本为11.1,也就是用nvcc -V 查看到的版本为11.1

1.虚拟环境

首先,使用conda创建一个虚拟环境

conda create -n my_env python=3.7 
conda activate my_env

2.安装

pytorch安装地址


可以看到官网有两种安装pytorch的方法:

第一种pip安装

# CUDA 11.1
pip install torch==1.8.0+cu111 torchvision==0.9.0+cu111 torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html

# CUDA 10.2
pip install torch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0

# CPU only
pip install torch==1.8.0+cpu torchvision==0.9.0+cpu torchaudio==0.8.0 -f https://download.pytorch.org/whl/torch_stable.html

可以看到如果你直接指定torch的版本,它安装的是对应cuda10.2版本的,而你系统使用的cuda版本为11.1,故而不配套,到时候用起来要出问题。所以我们应该选择第一条命令,和本地安装的cuda对应


第二种conda安装

# CUDA 10.2
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=10.2 -c pytorch

# CUDA 11.1
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge

# CPU Only
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cpuonly -c pytorch

可以看到用conda命令安装时包的名字叫pytorch,并且并且还有一个一起安装的包叫cudatoolkit(重点)

这时候有同学已经发现了,我们之前在系统上安装cuda时就是安装cudatoolkit,怎么这里还有一个cudatoolkit。这里不得不说conda的强大之处就在这里,conda是一个包管理工具,不仅仅可以用来安装和python程序有关的包,还能安装一些系统的包,比如gcc、cudatoolkit。所以在这里我们在安装pytorch的同时又额外安装了一个cudatoolkit,这里的cudatoolkit可以代替系统安装的cudatoolkit完成深度学习任务。


3.小结

  • 使用pip和conda安装torch的区别
  1. 使用pip安装torch时,torch版本的选择要和我们系统安装的cuda toolkit的版本对应,也就是nvcc -V显示的版本 比如torch==1.8.0+cu111,这样的好处是速度快,依赖少
  2. 使用conda安装torch时,可以同时选择安装cudatoolkit,这样即使我们系统中没有安装这个版本的cudatoolkit,我们也能使用conda安装的cudatoolkit进行深度学习
  3. 当你系统中没有你想要版本的cudatoolkit时,比如用nvcc -V查看到的cuda版本为11.1,而你想安装对应10.2版本的torch时,你就可以使用 conda命令安装,并且同时指定conda安装时的cudatoolkit版本为10.2
  4. 如果你在安装tensorflow等对系统环境有要求的包时,你可以用conda单独安装cudatookit cudnn gcc等你需要的系统工具,只要设置对应的环境变量就可以独立于环境之外运行,这就是conda真正强大的地方

后记

既然一台机器上可以并存多种cuda,那么什么时候在用哪个呢?

conda安装的cudatoolkit, cudnn与在主机上安装的cuda, cudnn有何关系?

Pytorch 使用不同版本的 cuda

linux上的,多种安装方式产生的,多个cuda版本,以及执行顺序问题

conda安装的cudatoolkit与Nvidia官方提供的cudatoolkit的区别

调用哪个 cuda 库要看生成 tensorflow / pytorch 库的时候,设置的链接库寻找目录,以 pytorch 为例,项目根目录下的 setup.py 中指定链接库的搜索目录,其中 cuda 的根目录 CUDA_HOME在 tool.setup_helpers.cuda 中有获取逻辑,大概过程是:

  1. 先取默认 cuda 安装目录 /usr/local/cuda
  2. 如默认目录不存在(例如安装原生 cuda 到其他自定义位置),那么搜索 nvcc 所在的目录
  3. 如果 nvcc 不存在,那么直接寻找 cudart 库文件目录(此时可能是通过 conda 安装的 cudatoolkit,一般直接用 conda install cudatoolkit,就是在这里搜索到 cuda 库的),库文件目录的上级目录就作为 CUDA_HOME。
  4. 如果最终未能得到 CUDA_HOME,那么生成的 pytorch 将不使用 CUDA。

(以上过程的 pytorch 源码版本 ‘1.3.0’)

然后,通过 conda 安装 cudatoolkit 包含的库文件均在 miniconda3/lib 中可以找到(或者直接在 miniconda3 / pkgs / cudatoolkit-10.x.xxx /lib 中查看)

ls -al libcu*
ls -al libnpp*
ls -al libnv*

anaconda 的 cudatoolkit 不包含完整安装cuda的全部文件,只是包含了用于 tensorflow,pytorch,xgboost 和 Cupy 等所需要的共享库文件

验证一下上面的想法:

import torch
import torch.utils.cpp_extension

#torch安装时的编译版本
print(torch.version.cuda)
#torch使用时搜索CDUA_HOME变量的路径
print(torch.utils.cpp_extension.CUDA_HOME)

从上面看来,不管是用系统的cuda toolkit还是conda安装的cuda toolkit在调用时都是在搜寻CUDA_HOME路径,当CUDA_HOME路径未设置时会去 /usr/local/cuda 下找系统的cuda,这样一来使用conda中cuda toolkit安装的pytorch岂不是会没法正常用?

但事实好像并非这样,如果使用 conda 安装 pytorch 并且同时安装 cuda toolkit 是不管你是否安装了系统级的cuda toolkit都可以正常使用的,因为他使用时只需要去加载动态链接库,而使用conda安装的cuda toolkit动态链接库是存放在当前环境的lib目录下的,具有较高优先级,可以正常使用。

综上:可以将conda安装的cuda toolkit路径加入LD_LIBRARY_PATH,从而达到在环境外使用当前环境中的cuda toolkit

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值