paddle环境搭建之GPU版本

1、简介

显卡驱动,cuda,cudnn,深度学习库的关系

这四者从底层(硬件)到上层(软件)的顺序是:驱动->cuda(->cudnn)->深度学习库

        cudnn加括号是因为cudnn的版本和cuda版本是一一对应的,深度学习库的版本依赖往往是直接看cuda版本,而不需要关注cudnn。这其中最重要的问题是版本依赖。

显卡驱动

显卡驱动是告诉系统如何调用显卡这个硬件,

  • 驱动版本越新越好,都是向下兼容的。新的驱动仍然支持旧的cuda,但旧的驱动就无法支持新版本的cuda。比如430.26的驱动只能支持到10.1的cuda,10.2和11.0的就不行。具体对应关系参照英伟达的说明
  • 如果你使用的是脱胎换骨的显卡系列比如30系列,那么以上规则可能不适用。比如3090只支持11.1的cuda。有钱人的玩具我不懂:)
  • 同一个驱动版本可以用在不同型号的显卡(前提是这个型号的显卡有更新到该版本的驱动)。比如我一开始在1080上安装430.26的驱动,后来我把TITAN X (Pascal)装上去,一样可以正常用,不需要针对TITAN重装驱动。但是我为了支持cuda11想把驱动更新到450,这就行不通。因为NVIDIA已经停止对TITAN X (Pascal)更新驱动了,TITAN X (Pascal)最新驱动版本停留在2019年的436.15。

cuda

cuda是构筑在显卡驱动之上的工具库(toolkit),cudnn是构筑在cuda之上的深度学习相关的工具库。因此,不管是做graphics(3D渲染等)还是搞深度学习,想要使用显卡都必须安装cuda,但做graphics的朋友就不需要安装cudnn。

cudnn

由于cudnn的关系更简单,因此这里放在前面说。如上所述,cudnn和cuda的版本一般是一一对应的(加上一般是因为低于对应版本的cudnn也可以使用,但是可能性能会有差),甚至于cudnn只不过是解压出来放在cuda文件夹里的一个文件夹。装好就不用再管它。

之间关系

cuda和驱动,cuda和cudnn的关系在上面已经说过了。那么它和我们工作的核心——深度学习库是什么关系呢。

  • 一般来说,深度学习库的开发者每发布一个新版本的深度学习库,都会让它同时兼容好几代的cuda,但太旧的就不会再支持。如pytorch1.6已经不支持cuda8了。因此需要一定程度上保持cuda的与时俱进。(除非由于显卡型号太老,没有新的驱动支持了,也就装不了新的cuda。比如我的TITAN X Pascal)
  • 在安装tensorflow和pytorch时,它实际上会同时在conda的虚拟环境里帮你安装cudatoolkit,但注意这个cudatoolkit并不能等同于系统里的cuda。原因是cudatoolkit只支持pytorch或tensorflow等部分库的使用,实际上它只是整个cuda的一部分,即pytorch的库要用到的部分。如果你要在虚拟环境里编译其他要用到cuda的库,是没办法用到cudatoolkit的,只能用系统里的cuda。用实际案例来解释一下:假设现在系统里安装了10.0的cuda,你在conda虚拟环境里安装了cuda10.2的pytorch1.6,那么pytorch确实可以正常使用没毛病。但是此时你需要自己编译一个同时基于pytorch和cuda的库,由于它没法用到pytorch的cudatoolkit,而只能使用系统cuda,而系统cuda版本和pytorch对应的cuda版本又不相同,那么它很有可能就会编译失败。我已经碰过好几次这种坑了。
  • 那么以上问题是不是就没有办法了呢。也不是。因为在ubuntu里,cuda的路径/usr/local/cuda实际上是一个软链接(类似windows里的快捷方式),它链接了另一个同目录下的另一个cuda文件夹,比如/usr/local/cuda-10.0。更方便的是,它只需简单两行代码(直接搜多cuda切换就能找到)就可以链接到同目录下的其他cuda文件夹,比如/usr/local/cuda-10.2。(当然是在你显卡型号够新才能支持。)这就意味着我们可以轻易地改变系统cuda版本。不过如果你只是希望使用pytorch或者tensorflow一个库,而不需要其他依赖于pytorch和cuda的库,那么不需要这一步,有了cudatoolkit即可。
  • what if 你不是root用户,就没法把cuda装在/usr/local/cuda,或者你在公用服务器上跑代码,也不好直接把所有人的cuda都换成另一个。此时应该把cuda装在用户目录下,更改~/.bashrc中的cuda路径,把所有/usr/local/cuda改成你的实际安装路径。那么其他库安装时就会链接到你的用户目录下安装的cuda。注意此时安装时要点进options,把Library install path 和Toolkit Options中的Toolkit Install Path都改成相同的用户目录下的文件夹。最后把对应的cudnn复制到cuda文件夹中即可。

综上,为了更可能高的兼容性和更方便的操作,我们需要:

  1. 用尽可能新的或者流行的显卡,这样才能获取NVIDIA最新的驱动版本支持(显然这一点主要是老板控制)
  2. 装尽可能新的驱动,从而获得最新的cuda版本支持。
  3. 装尽可能多的cuda放着,以免不时之需。
  4. 换环境时要留意cuda是否需要更换

        Cuda和cudnn是支持NVIDIA支持GPU的两个库,分别用于高性能计算和深度神经网络计算的支持。

a、Cuda(Compute Unified Device Architecture),是NVIDIA支持GPU的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。可以看作使能GPU的驱动程序或算法SDK。

b、cudnn是基于Cuda的深度学习GPU加速库,有了它可以在GPU上完成高效的深度学习计算。

c、TensorRT有GA和EA两个版本,即稳定版和体验版,建议安装GA版本

2、下载

Cuda历史版本下载地址:
https://developer.nvidia.com/cuda-toolkit-archive

cudnn历史版本下载地址:
https://developer.nvidia.com/rdp/cudnn-archive

TensorRT历史版本下载地址:https://developer.nvidia.com/nvidia-tensorrt-download
TensorRT有GA和EA两个版本,即稳定版和体验版,建议安装GA版本 

tensorflow版本及支持的对应Cuda和cudnn版本
https://tensorflow.google.cn/install/source_windows?hl=cn

3、安装

paddle最新版本2.5最新环境:

  • CUDA 工具包 12.0 配合 cuDNN v8.9.1, 如需使用 PaddleTensorRT 推理,需配合 TensorRT8.6.1.6

  •  安装cudnn

解压缩 cuDNN 包。
cudnn-windows-x86_64-*-archive.zip

将以下文件从解压缩的软件包复制到 NVIDIA cuDNN 目录中。
复制到 。bin\cudnn*.dllC:\Program Files\NVIDIA\CUDNN\v8.x\bin
复制到 。include\cudnn*.hC:\Program Files\NVIDIA\CUDNN\v8.x\include
复制到 。lib\cudnn*.libC:\Program Files\NVIDIA\CUDNN\v8.x\lib

将以下环境变量设置为指向 cuDNN 所在的位置。要访问环境变量的值,请执行以下步骤:$(PATH)
从“开始”菜单打开命令提示符。
输入并点击回车键。Run
发出命令。control sysdm.cpl
选择窗口顶部的“高级”选项卡。
单击窗口底部的环境变量。
将 NVIDIA cuDNN 目录路径添加到 PATH 变量:bin
Variable Name: PATH 
Value to Add: C:\Program Files\NVIDIA\CUDNN\v8.x\bin

将 cuDNN 添加到您的 Visual Studio 项目中。
打开 Visual Studio 项目,在“解决方案资源管理器”中右键单击项目名称,然后选择“属性”。
单击“VC++ 目录”并追加到“包含目录”字段。C:\Program Files\NVIDIA\CUDNN\v8.x\include
单击“链接器”>“常规”并追加到“其他库目录”字段。C:\Program Files\NVIDIA\CUDNN\v8.x\lib
单击“链接器>输入”并追加到“其他依赖项”字段,然后单击“确定”。cudnn.lib 

4、验证

import paddle
paddle.utils.run_check()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值