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

2023-05-16

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

文章目录

  • 显卡驱动
  • cuda与cudnn
    • cudnn
    • cuda
  • 建议

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

驱动 —> 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下载页面
  • 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的版本都在各自开发镜像里装即可,互不干扰,物理机环境也不会乱
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • c/c++笔试

    1 xff0e 进程和线程的差别 线程是指进程内的一个执行单元 也是进程内的可调度实体 与进程的区别 1 调度 xff1a 线程作为调度和分配的基本单位 xff0c 进程作为拥有资源的基本单位 2 并发性 xff1a 不仅进程之间可以并发执
  • android onNewIntent 调用时机

    当前Activity已经在Activity堆栈当中时 xff0c 主要取决于LaunchMode对应的设置 LaunchMode为SingleTop时 xff0c 如果ActivityA在栈顶 且现在要再启动ActivityA xff0c
  • 不知道怎么开发VR游戏?Unity5.3官方VR教程重磅登场-系列3 VR中的交互方式

    不知道怎么开发VR游戏 xff1f Unity5 3官方VR教程重磅登场 系列3 VR中的交互方式 王寒 4 个月前 https zhuanlan zhihu com p 20505470 概览 xff1a 在VR项目中 xff0c 我们需
  • Java多线程通信-利用传统的线程通信wait(),notify()方法实现“生产者消费者模式”

    想利用传统的线程通信wait notify xff0c notifyAll 方法 xff0c 必须依赖于同步监听器的存在 xff0c 也就是说 xff0c 对于synchronized修饰的同步方法 xff0c 因为该类的默认实例 xff0
  • java TCP/IP实现简单的多人聊天功能

    TCP IP是可靠的网络协议 xff0c 数据的传输需要服务端和客户端之间三次 握手 xff0c 比较适合文本等一些可靠性要求高的数据传输 xff0c 但是它的效率较UDP低 下面通过一张图来简要说明使用 ServerSocket 创建 T
  • JavaScript开发工具WebStorm使用教程:从命令行运行代码检查

    从命令行运行代码检查 WebStorm运行代码检查可以发现并突出显示语法错误 死代码 可能的错误 错误的编码风格和其他问题 还可以从命令行为特定项目运行所有已配置的检查 xff0c 并将结果存储为 XML JSON 或带有报告的纯文本文件
  • 基于Spark的机器学习经验

    这篇内容基于我去年的一些感悟写的 xff0c 但是今年才在Stuq 的微信群做的分享 从技术角度而言 xff0c 对Spark的掌握和使用还是显得很手生的 但是今天一位做数据分析相关的朋友说 xff0c 受这篇内容影响 xff0c 他接受了
  • Linux(manjaro)微信web开发者工具

    安装 wine和winetricks span class hljs built in sudo span pacman S wine winetricks 打开winetricks 安装需要的组件 安装linux版本运行程序 github
  • C++类与对象

    C 43 43 面向对象 一 面向对象程序设计方法概述 1 凡是以类对象为基本构成单位的程序称为基于对象的程序 2 面向对象和面向过程的区别 xff1a 在笔者看来 xff0c 通俗地讲 xff0c 面向对象 就是在描述一个对象 xff0c
  • SVN无法提交修改问题

    分享一下我老师大神的人工智能教程 xff01 零基础 xff0c 通俗易懂 xff01 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 xff0c 造福人民 xff0c 实现我们中华民族伟大
  • AbstractApplicationContext.refresh()应用上下文刷新方法

    前情提要 学习源码光看博客文章基本没有记住的可能 结合源码和博客 43 实践才能够通过理解记住 看了很多天才断断续续看完 发现它和其他IOC Bean生命周期都有关联 将之前片段式的认知串联起来了 这个刷新的代码很长 建议没耐心的时候就先不
  • IIC协议--简要理解

    1 iic协议是什么 xff1f IIC Inter xff0d Integrated Circuit 总线是一种由 PHILIPS 公司开发的两线式串行总线 xff0c 用于连接微控制器及其外围设备 它是由数据线 SDA 和时钟 SCL
  • RISC与CISC比较

    RISC的设计重点在于降低由硬件执行指令的复杂度 xff0c 因为软件比硬件容易提供更大的灵活性和更高的智能 xff0c 因此RISC设计对编译器有更高的要求 xff1b CISC的设计则更侧重于硬件执行指令的功能 xff0c 使CISC的
  • 操作系统选择调度方式和算法的若干准则

    1 调度的类型 按调度的层次 xff1a 长期 xff08 长程 作业 高级 xff09 调度 xff1b 中期 xff08 中级 中程 xff09 调度 xff1b 短期 xff08 短程 进程 低级 xff09 调度 按OS 的类型 x
  • 提灯过桥问题

    题目 xff1a 小明一家过一座桥 xff0c 过桥时是黑夜 xff0c 所以必须有灯 现在小明过桥要1秒 xff0c 小明的弟弟要3秒 xff0c 小明的爸爸要6秒 xff0c 小明的妈妈要8秒 xff0c 小明的爷爷要12秒 每次此桥最
  • 如何判断一个整数数组中是否有重复元素

    题目 xff1a 写一个函数判断一个int类型的数组是否是有效的 所谓有效是指 xff1a 假设数组大小为n xff0c 那么这个int数组里的值为0 n 1之间的数 xff0c 并且每个数只能出现一次 xff0c 否则就是无效数组 例如
  • 2014百度校招开发测试工程师笔试题

    时间 xff1a 2013 9 28 地点 xff1a 深圳 职位 xff1a 开发测试工程师
  • Spark Streaming + Spark SQL 实现配置化ETL流程

    Spark Streaming 非常适合ETL 但是其开发模块化程度不高 xff0c 所以这里提供了一套方案 xff0c 该方案提供了新的API用于开发Spark Streaming程序 xff0c 同时也实现了模块化 xff0c 配置化
  • 整体了解HADOOP框架及一些开源项目

    Hadoop框架中 xff0c 有很多优秀的工具 xff0c 帮助我们解决工作中的问题 Hadoop的位置 从上图可以看出 xff0c 越往右 xff0c 实时性越高 xff0c 越往上 xff0c 涉及到算法等越多 越往上 xff0c 越
  • Kafka简介

    Kafka简介 在当前的大数据时代 xff0c 第一个挑战是海量数据的收集 xff0c 另一个就是这些数据的分析 数据分析的类型通常有用户行为数据 应用性能跟踪数据 活动数据日志 事件消息等 消息发布机制用于连接各种应用并在它们之间路由消息

随机推荐

  • Flume入门笔记------架构以及应用介绍

    在具体介绍本文内容之前 xff0c 先给大家看一下Hadoop业务的整体开发流程 xff1a 从Hadoop的业务开发流程图中可以看出 xff0c 在大数据的业务处理过程中 xff0c 对于数据的采集是十分重要的一步 xff0c 也是不可避
  • 分布式服务框架dubbo原理解析

    alibaba有好几个分布式框架 xff0c 主要有 xff1a 进行远程调用 类似于RMI的这种远程调用 的 dubbo hsf xff0c jms消息服务 napoli notify xff0c KV数据库 tair 等 这个框架 工具
  • Android Studio Gradle project Sync Failed解决方法

    1 查看项目使用的gradle和本地gradle是否一致 本地gradle一般目录在C Users admin gradle文件夹下面 项目使用的gradle在项目的gradle wrapper properties文件中 distribu
  • Docker not running on windows 10 error: Hardware assisted virtualization and data execution protecti

    Docker not running on windows 10 error Hardware assisted virtualization and data execution protection must be enabled in
  • [高通SDM450][Android9.0]user版本uartlog常开

    文章目录 开发平台基本信息问题描述解决方法user版本调试串口可输入user版本uartlog常开 开发平台基本信息 芯片 SDM450 版本 Android 9 0 kernel msm 4 9 问题描述 user版本调试串口默认只输入调
  • Ubuntu 7.04 乱码解决

    一 解决XMMS乱码问题 菜单乱码的解决 1 sudo ln s etc gtk gtkrc zh CN etc gtk gtkrc zh CN utf 8 2 sudo gedit etc gtk gtkrc zh CN utf 8 填写
  • yii2连接websocket服务实现服务端主动推送消息给客户端

    上一篇写的是websocket的服务 xff0c 这一篇写写调用服务和web端调用 xff0c 接收消息部分 1 调用websocket服务 主动推送消息的方法 lt php namespace common services use co
  • 生产者消费者算法

    span class hljs comment include lt unistd h gt span span class hljs comment include lt stdlib h gt span span class hljs
  • MongoDB ODM 框架MongoMongo-简化你的数据存储

    MongMongo是一个用Java写的ODM框架 xff0c 使得对MongoDB的操作更加便捷 MongoMongo努力为Java开发者提供类似于ActiveORM 或者 Hibernate的操作API 并且保留了MongoDB的sche
  • archlinux安装deb软件步骤

    archlinux安装deb软件步骤 步骤 步骤 安装yay安装debtap安装转换出的pkg软件 注意事项 xff1a 安装yay问题解决 xff1a go语言相关安装debtap问题解决 xff1a git代理设置
  • 第六章 正则,BeautifulSoup,xpath

    文章目录 1 正则1 1 提取字符串1 2 替换1 3 搜索 2 beautifulsoup2 1 各种解析器2 2 提取方式2 3 find方法2 3 1 find2 3 2 find all2 3 3 通过id和类型精确定位2 3 3
  • spring如何获取bean的6种方法,你知道几个?

    spring获取bean的6种方法 Bean工厂 xff08 com springframework beans factory BeanFactory xff09 是Spring框架最核心的接口 xff0c 它提供了高级IoC的配置机制
  • c语言中while与do while循环的主要区别是什么

    while循环与do while循环的区别如下 xff1a 1 循环结构的表达式不同 while循环结构的表达式为 xff1a while xff08 表达式 xff09 循环体 xff1b do while循环结构的表达式为 xff1a
  • MVC设计模式

    MVC的全名是Model View Controller xff0c 是模型 Model xff0d 视图 view xff0d 控制器 controller 的缩写 xff0c 是一种设计模式 它是用一种业务逻辑 数据与界面显示分离的方法
  • MVC 模式及其优缺点

    一 MVC 原理 MVC 是一种程序开发设计模式 它实现了显示模块与功能模块的分离 提高了程序的可维 护性 可移植性 可扩展性与可重用性 xff0c 降低了程序的开发难度 它主要分模型 视图 控制器三层 1 模型 model 它是应用程序的
  • MVC 模式及其优缺点

    一 MVC 原理 MVC 是一种程序开发设计模式 它实现了显示模块与功能模块的分离 提高了程序的可维 护性 可移植性 可扩展性与可重用性 xff0c 降低了程序的开发难度 它主要分模型 视图 控制器三层 1 模型 model 它是应用程序的
  • MyBatis生命周期2的过程(最终)?

    首先加载mybatis config xml总配置文件 xff0c 根据development的参数配置连接数据库 xff1b 查询mappers映射关系 xff0c 找到mapper xml配置文件 执行mapper xml文件 xff0
  • spring boot使用redis做数据缓存

    1 添加redis支持 在pom xml中添加 1 lt dependency gt 2 lt groupId gt org springframework boot lt groupId gt 3 lt artifactId gt spr
  • Springboot配置支持Redis实例

    思路 xff1a 既然使用redis就要添加redis依赖 xff0c redis是 lt key value gt 的存储方式 xff0c 支持字符串存储 有了jar包 xff0c 就要把我们的数据存进去 xff0c 读出来 redis不
  • 【深度学习】显卡驱动, cuda, cudnn的关系与版本对应问题

    转载自 xff1a https blog csdn net weixin 39673002 article details 113053729 仅作学习记录 文章目录 显卡驱动cuda与cudnncudnncuda 建议 这四者从底层 xf