【Ubuntu 3090 CUDA配置】一文缕清 驱动+CUDA Toolkit+cuDNN+pytorch+cudatoolkit 环境配置流程

2023-11-15

2021年12月9日更新:可查看本人最新的CUDA环境配置博客:https://zhuanlan.zhihu.com/p/443114377,系对本文的提炼、归纳与总结



环境配置流程总结(2021年6月10日更新)

经过许久的沉淀,对于驱动+CUDA Toolkit+cuDNN+pytorch+cudatoolkit这套环境的配置流程,现总结如下

  1. 查看CUDA的维基百科,确定与显卡型号适配的CUDA版本,并选择其中一个
  2. 查看CUDA官方文档,确定与CUDA版本适配的驱动版本,并选择其中一个
  3. 下载驱动并安装
  4. 下载CUDA Toolkit并安装,配置软链接~/.bashrc,详见正文(Windows用户可参考这篇博客配置环境变量
  5. cuDNN下载页面选择CUDA版本支持的cuDNN版本下载并安装
  6. 创建python环境(推荐使用conda)
  7. 根据pytorch官网的指示安装pytorch+cudatoolkit,需注意cudatoolkitCUDA Toolkit一样要选择与显卡型号驱动版本适配的版本,pytorch版本则按需选择

重要概念:(务必看)

  1. 版本的确定流程为:显卡型号 >> CUDA >> 驱动&cuDNN

  2. CUDA是一个并行计算平台和编程模型,简单来说,它使得你能够用NVIDIA GPU进行通用计算。使用CUDA前,显卡一定要安装好驱动(事实上,没装驱动的显卡什么都干不了)。

  3. CUDA有两种API,分别是:随驱动安装的driver API(nvidia-smi显示的CUDA版本就是driver API的版本);随CUDA Toolkit安装的runtime API(可以用nvcc -V查看runtime API的版本)。两者版本不需要一致。 driver API的CUDA不能完成runtime API的CUDA的工作,所以仅安装驱动而不安装CUDA Toolkitcudatoolkit是没法在开发中使用CUDA的。

  4. CUDA Toolkit由NVIDIA官方发行,不仅包含了CUDA的runtime API,还包含了CUDA代码的编译器nvcc(CUDA也有自己的语言,代码需要编译才能执行)和debug工具等。

  5. cudatoolkitpytorch提供的、编译好的、用以支持pytorch运行的CUDA部件(动态链接库DLL等),在运行pytorch时,调用的CUDA都是cudatoolkit;仅当需要编译依赖CUDA的torch拓展模块时,会调用CUDA Toolkit(可以参考这个帖子)。

  6. 综上述3、4条,cudatoolkitCUDA Toolkit没有关系,版本也不需要一致。且在使用pytorch时,如果不需要编译CUDA代码,则不会调用CUDA Toolkit,也不需要安装CUDA Toolkit;仅在pytorch中使用CUDA的话,cudatoolkit就足够了。 经测试,仅安装pytorch+cudatoolkit,而没有安装CUDA Toolkit时,也是可以在pytorch中使用CUDA的。

  7. 无论是CUDA Toolkit还是cudatoolkit,在安装时都必须选择与显卡型号驱动版本适配的版本。

  8. cuDNN(CUDA 深度神经网络库)是经GPU加速的深度神经网络基元库,可大幅优化标准例程(例如用于前向传播和反向传播的卷积层、池化层、归一化层和激活层)的实施。可以简单地将cuDNN理解为CUDA的拓展和加速模块。CUDA Toolkit的cuDNN需要专门安装;而cudatoolkit中包含了cuDNN的相关部件。

注:与pytorch不同,TensorFlow的运行必须依赖CUDA Toolkit等,详见TensorFlow官方的安装指南


写在开头:

当前时间2021年6月10日,服务器的配置是Ubuntu 18.04.4 LTS (GNU/Linux 5.3.0-28-generic x86_64)+RTX3090,采用conda管理环境,选择的版本号如下

环境名称 最新版本号 所用版本号
显卡驱动 460.84 455.23
CUDA Toolkit 11.3 11.1
cuDNN 8.2.1 8.0.5
pytorch 1.8.1 1.8.0
cudatoolkit 11.1 11.1
python 3.9.2 3.9.1

1 显卡驱动+CUDA Toolkit+cuDNN配置

只讲重点

1.1 显卡驱动 & CUDA Toolkit

首先搞清楚显卡型号、CUDA版本、显卡驱动版本之间的关系,并依此确定安装什么版本的CUDA驱动

①确定CUDA版本:NVIDIA不同型号显卡的计算能力不同,而不同的CUDA版本能支持的最大计算能力不同,详见CUDA的维基百科,截图如下:

在这里插入图片描述

在这里插入图片描述

可见,由于RTX3090的计算力为8.6,11.1以下版本的CUDA都无法支持,所以最低需要安装CUDA 11.1(不管是这里的CUDA Toolkit还是下文的cudatoolkit)。

②确定显卡驱动版本:CUDA官方文档显示了显卡驱动版本和CUDA版本之间的关系,截图如下:

在这里插入图片描述

可见,CUDA 11.1最少需要455.23版本的显卡驱动(Linux 64-bit系统)。

综上,我们首先确定RTX3090最少需要CUDA 11.1,并选择安装CUDA 11.1,然后确定CUDA 11.1最少需要455.23版本的驱动,最终确定安装CUDA 11.1 + 455.23驱动

接下来进行安装:

①在NVIDIA驱动下载页面搜索显卡支持的驱动并下载安装,这个很简单,截图如下:

在这里插入图片描述

下载CUDA Toolkit并安装:

按照NVIDIA官方的说明下载和运行安装程序:

wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.run
sudo sh cuda_11.1.0_455.23.05_linux.run

   
   
   
   
  • 1
  • 2

由于已经安装了驱动,这里取消驱动的选项,再Install

在这里插入图片描述

需要注意:/usr/local/目录下可以同时存在(安装)多个不同版本的CUDA Toolkit(例如cuda-11.1cuda-11.2),而默认使用的那个是名为cuda的软链接,如果你的系统里没有安装过其他版本的CUDA Toolkit,安装程序会自动创建软链接到你刚刚安装的CUDA Toolkit上,否则会进行询问,如下图所示

在这里插入图片描述

这里取决于你是否要将刚刚安装的这个CUDA Toolkit设为默认,之后也可以手动进行软链接,例如下述命令就是删除了原本的软链接,再将cuda-11.1设为默认:

sudo rm -rf /usr/local/cuda
sudo ln -s /usr/local/cuda-11.1 /usr/local/cuda

   
   
   
   
  • 1
  • 2

安装程序结束后会弹出一个Summary

在这里插入图片描述

(配图是11.0版本,仅用以辅助说明)

根据Summary的指示,需要保证~/.bashrcPATH中包含/usr/local/cuda-11.1/binLD_LIBRARY_PATH中包含/usr/local/cuda-11.1/lib64,打开~/.bashrc,在文件末添加:

export PATH="/usr/local/cuda-11.1/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-11.1/lib64:$LD_LIBRARY_PATH"

   
   
   
   
  • 1
  • 2

最后重启终端或执行指令source ~/.bashrc(以应用~/.bashrc的修改),完成CUDA Toolkit的安装

Windows用户可参考这篇博客配置环境变量

注意:软链接~/.bashrc的改动都会影响到当前用户所使用的CUDA Toolkit版本,这里面的细节我还没有搞清楚,但这两者最好设置为同一版本的CUDA Toolkit

1.2 cuDNN

下载cuDNN并解压、复制文件到CUDA Toolkit目录。cuDNN版本与CUDA版本之间的关系在下载页面有显示,选择适配的安装即可。


2 Anaconda配置

2.1 下载

打开浏览器,打开Anaconda官网,选择如图所示的版本,右击,复制链接地址(本人于2021.06.10通过复制得到的下载地址为:https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh)。

在这里插入图片描述

然后进入终端,输入如下指令进行下载:

wget https://repo.anaconda.com/archive/Anaconda3-2021.05-Linux-x86_64.sh

   
   
   
   
  • 1

下载完成后,使用指令

sudo sh Anaconda3-2021.05-Linux-x86_64.sh

   
   
   
   
  • 1

进行安装,一路yes

安装完成后,替换Anaconda源为清华大学开源软件镜像站(请查看使用帮助

2.2 创建conda环境

conda具体的用法在此不赘述,直接

conda create -n py python=3.9

   
   
   
   
  • 1

创建一个名为py,python版本号为3.9的conda环境,中途会提示是否继续(proceed),当然yes

注意: 若指令为conda create -n py python==3.9,则python版本强制为3.9.0;仅使用一个等号时,conda会自动安装最新的python 3.9.x


3 pytorch+cudatoolkit配置

3.1 注意事项

注意:务必看文章开头的“重要概念”

cudatoolkit为pytorch提供的、编译好的、用以支持pytorch运行的CUDA部件(动态链接库DLL等)。

cudatoolkitCUDA Toolkit没有关系,版本也不需要一致。但都必须选择与显卡型号驱动版本适配的版本,因此这里也选择11.1版本进行安装。

在运行pytorch时,调用的CUDA都是cudatoolkit;仅当需要编译依赖CUDA的torch拓展模块时,会调用CUDA Toolkit(可以参考这个帖子)。

所以假如我们安装CUDA Toolkit 11.2pytorch 1.8.0 + cudatoolkit 11.1,实际运行的仍是pytorch 1.8.0 + CUDA 11.1

3.2 安装

这里不折腾pytorch preview(nightly)测试版了,直接按照pytorch官方的教程安装稳定版

首先激活conda环境

conda activate py

   
   
   
   
  • 1

然后安装pytorch + cudatoolkit

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

   
   
   
   
  • 1

完成


4 测试

依旧是在上文创建的conda环境里输入指令,首先激活conda环境

conda activate py

   
   
   
   
  • 1

具体的测试指令和对应的结果如下

(py) usr1@ubuntu:~$ python -c "import torch; print(torch.__version__)"
1.8.0
(py) usr1@ubuntu:~$ python -c "import torch; print(torch.version.cuda)"
11.1
(py) usr1@ubuntu:~$ python -c "import torch; print(torch.backends.cudnn.version())"
8005
(py) usr1@ubuntu:~$ python -c "import torch; print(torch.cuda.current_device())"
0

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

依次代表pytorch版本,cuda版本,cudnn版本,当前显卡设备号(0表示当前所用显卡的序号为0,若显卡无法使用会报错)

还可以使用以下指令测试显卡

(py) usr1@ubuntu:~$ python -c "import torch; print(torch.cuda.is_available())"
True
(py) usr1@ubuntu:~$ python -c "import torch; print(torch.cuda.device_count())"
8

   
   
   
   
  • 1
  • 2
  • 3
  • 4

此外,使用nvcc -V指令可以测试CUDA Toolkit是否正确安装,以及所使用的版本:

(py) usr1@ubuntu:~$ nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Tue_Sep_15_19:10:02_PDT_2020
Cuda compilation tools, release 11.1, V11.1.74
Build cuda_11.1.TC455_06.29069683_0

   
   
   
   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

若上述测试没有报错,则确定CUDA可以正常使用

注1:本人之后在系统里安装了8.1.1的cuDNN,但torch.backends.cudnn.version()的返回值仍为8005,因此cudatoolkit中应该包含了cuDNN相关的部件)

注2:头文件/usr/local/cuda/include/cudnn_version.h内有cuDNN版本的计算方法,8005 = 8x1000 + 0x100 + 5

注3:可以使用conda list指令查看pytorchtorchvisiontorchaudiocudatoolkit等是否正确安装,有时候会因为安装发生了错误而导致代码运行时报错

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Ubuntu 3090 CUDA配置】一文缕清 驱动+CUDA Toolkit+cuDNN+pytorch+cudatoolkit 环境配置流程 的相关文章

随机推荐

  • 因果模型四:实现因果模型的python工具——pycasual

    因果模型四 实现因果模型的python工具 pycasual 关于因果模型 我们在前三篇文章中简单介绍了因果模型的研究发展历程 一个因果模型的数学化求解过程和因果模型在医学和商业领域的两个应用实例 今天我们就来简单介绍一个实现因果模型的py
  • 对UDP编程的初步认识

    UDP与TCP的区别 1 1 TCP协议 传输控制协议 使用TCP协议前 须先建立TCP连接 形成传输数据通道 传输前 采用 三次握手 方式 TCP协议进行通信的两个应用进程 客户端 服务端 在连接中进行大数据量的传输 传输完毕 需释放已建
  • 淘宝开放平台 ISV入驻开发流程

    原本的千牛插件整合到淘宝开放平台中 原本的千牛入驻教程时间为17年的 已经不适用了 最新的新手入驻指南是的是2020年6月的 按照流程登录账号 确定需要创建应用的类目 有的类目比如订单管理都是定向开发者无法申请的 我申请的是服务类目的 根据
  • 【objectARX学习计划】

    按照 ObjectARX开发实例教程 pdf 学习计划 序号 模块 开发功能 是否重点 难度 学时 天 时间计划 完成情况 备注 1 创建和编辑基本图形对象 创建直线 是 容易 1 2 创建圆 是 容易 3 创建圆弧 是 容易 4 创建多段
  • 网页伸缩式导航栏(附源码)

    网页伸缩式导航栏 效果图如下 文件目录 html代码 index html
  • Kubernetes之(十九)资源指标和集群监控

    目录 Kubernetes之 十九 资源指标和集群监控 资源指标和资源监控 metrics server 部署metrics server Prometheus 概述 部署prometheus Grafana数据展示 Kubernetes之
  • .net Core竟然支持xamrain

    终于明白 net Core的意义 以前在微软推出 net Core时 我有点不明白 为啥微软要弄个阉割版的net平台 现在 刚接触 xamarin跨平台开发 发现 net Core竟然轻松支持xamrain开发安卓程序 微软微软 真是用心良
  • Linux系统常用命令

    Linux系统常用命令 一 常用快捷键 ctrl shift table 表示临时变大 ctrl table 表示临时变小 ctrl t 打开多个 一个 终端 永久生效 终端上的 edit 属性设置 ctrl l clear 清屏 ctrl
  • 2021蓝桥杯模拟赛-受伤的皇后

    题目 题目链接 题解 DFS 八皇后问题改编而已 加入判断左上三格内和右上三格内是否存在皇后 代码 include
  • MYSQL对表进行操作

    添加列 基本形式 alter table 表名 add 列名 列数据类型 after 插入位置 示例 在表的最后追加列 address alter table students add address char 60 在名为 age 的列后
  • 84. Largest Rectangle in Histogram

    84 Largest Rectangle in Histogram Given n non negative integers representing an elevation map where the width of each ba
  • 组合预测模型

    组合预测模型 MLP RF多层感知机结合随机森林多输入单输出回归预测 Matlab程序 目录 组合预测模型 MLP RF多层感知机结合随机森林多输入单输出回归预测 Matlab程序 预测结果 评价指标 基本介绍 程序设计 参考资料 预测结果
  • 【Java基础】之深入理解四中访问权限

    这篇文章将深入讲解Java的四种访问权限 访问权限介绍 访问权限控制指的是 本类及本类内部的成员 成员变量 成员方法 内部类 对其他类的可见性 即这些内容是否允许其他类访问 Java 的访问权限一共有四种 public protected
  • iOS提交审核时报错:您必须为要添加的 App 提供版权信息

    可以随便填 但是必填 否则被拒 很耽搁时间
  • java面向对象超详细总结(期末必备)

    文章目录 面向对象 什么是对象 对象的组成 类是什么 类的组成 类的创建语法 类的使用 使用类必须为类创建对象 调用属性 调用方法 方法的重载 构造方法 构造函数 构造器 构造器的语法 对象的引用 this关键字 OOP练习 练习一 案例代
  • LINQ的基本使用

    一 什么是LINQ 长期以来 开发社区形成以下的格局 1 面向对象与数据访问两个领域长期分裂 各自为政 2 编程语言中的数据类型与数据库中的数据类型形成两套不同的体系 例如 C 中字符串用string数据类型表示 SQL中字符串用NVarc
  • 静态代码检测遇到的一些问题总结

    393 S Single parameter constructor not explicit 原因 只有一个参数的构造函数存在隐式类型转换的可能 解决方法 在单参数构造函数之前添加 explicit 例子 class test publi
  • HTML5中的save()和restore()方法的用法

    HTML5中的save 和restore 方法的用法 1 save 方法将当前的绘图环境压入堆栈顶部 2 restore 方法将从栈顶部弹出的一组状态信息 并根据此恢复当前绘图环境的各个状态
  • OpenWrt入门完美教程

    近来由于毕业设计需要用到摄像头模块 考虑利用 OpenWrt UVC mjpg streamer 方案驱动摄像头模块 学习了一篇很好的OpenWrt入门美文 原文链接如下 http zhidx com p 186 html 从零开始学习Op
  • 【Ubuntu 3090 CUDA配置】一文缕清 驱动+CUDA Toolkit+cuDNN+pytorch+cudatoolkit 环境配置流程

    2021年12月9日更新 可查看本人最新的CUDA环境配置博客 https zhuanlan zhihu com p 443114377 系对本文的提炼 归纳与总结 目录 环境配置流程总结 2021年6月10日更新 重要概念 务必看 写在开