install pytorch is all you need

install pytorch is all you need,第1张

install pytorch is all you need
    • 摘要
    • GPU driver
    • CUDA
    • 安装pytorch
    • 后记

当你想要使用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点我

GPU driver

众所周知,跑深度学习需要一块GPU(硬件),而为了让这块硬件能够正常工作就需要安装GPU驱动(driver),一般来说服务器上的GPU都已经由管理员安装了显卡驱动,所以如果你是一个普通用户这步就不需要你 *** 作了。


如果你是服务器管理员,那么可以在英伟达官网下载对应的显卡驱动进行安装,CentOS7显卡驱动安装,在这里我们不再赘述。




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

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

可以看到当前驱动的版本是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  with the name of this run file:
    sudo .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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/569417.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存