【深度学习】显卡驱动, cuda, cudnn的关系与版本对应问题

转载自:https://blog.csdn.net/weixin_39673002/article/details/113053729
仅作学习记录


这四者从底层(硬件)到上层(软件)的顺序是:

驱动 —> cuda(—>cudnn)—> 深度学习库

cudnn加括号是因为cudnn的版本和cuda版本是一一对应的,深度学习库的版本依赖往往是直接看cuda版本(如pytorch),而不需要关注cudnn。

这其中最重要的问题是版本依赖

显卡驱动

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

  • 驱动版本越新越好,都是向下兼容的。新的驱动仍然支持旧的cuda,但旧的驱动就无法支持新版本的cuda
    比如430.26的驱动只能支持到10.1的cuda,10.2和11.0的就不行。具体对应关系参照英伟达的说明(cuda与驱动的对应关系)。
  • 如果你使用的是脱胎换骨的显卡系列比如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与cudnn

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

cudnn

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

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是否需要更换。
  5. 不建议3来,其实更好的做法是在服务器上用docker来管理开发环境。物理机只装显卡驱动,cuda、cudnn的版本都在各自开发镜像里装即可,互不干扰,物理机环境也不会乱
  • 13
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值