草庐IT

显卡、显卡驱动、cuda、cudnn 通俗解释及深度学习环境搭建

骑着蜗牛向前跑 2023-04-08 原文

场景描述

搞深度学习时需要先搭建环境,需要折腾显卡驱动、cuda、cudnn、以及各种深度学习框架(TensorFlow、Pytorch等)。光听这些名词有好些人都迷糊了,更不要提解决他们之间的不兼容,完成环境搭建了。这里先简单解释上述名词,不求高深与专业,理解他们处于什么位置就行。


通俗解释

  • 显卡:一块焊了GPU 芯片的电路板,上面还有电容电阻以及其他辅助芯片。 因为有些复杂计算 CPU 效率太低了,所以放在 GPU 中执行运算。类比的, cpu主板也就是一块焊了 CPU 、辅助芯片、电容电阻的电路板。至于独立显卡与集成显卡的概念,自己查吧。

  • 显卡驱动 :GPU 是硬件,操作系统怎么识别并与它传输数据呢?这就需要在操作系统上装显卡驱动了。目前 GPU 厂商国外有 inter、nvidia、amd三家巨头,国内有景嘉微、中船重工等厂商。不同厂商的 GPU 都有各自的显卡驱动,因为还要适配操作系统,所以每个型号的 GPU 都有 windows 和 linux 两套版本的显卡驱动。

  • CUDA:GPU 的运算能力很强大,如果只用在做简单的、特定的计算任务那就有点亏。但是直接操作 GPU 难度又有点高,英伟达就设计了一个 GPU 的通用计算框架构(框架):cuda,并且开发实现 cuda 意图的完整的工具:CUDA Toolkit。这个 CUDA Toolkit 中包含了英伟达 GPU 的驱动程序、cuda库函数、编译器等等等等。那它能做什么呢?1:调用CUDA Toolkit 里面的cuda api 就能直接操作 GPU;2:CUDA Toolkit 里面的一些工具能将 pytorch 语法编译成 GPU 可识别的指令,pytorch 底层是 C++ 实现的。英伟达设计的 cuda 的目的就是做 GPU 的通用计算平台,开发者只需要使用 cuda api 或者 cuda可翻译的语言写程序,就能实现操作 GPU,这大大降低了使用门槛。正如不是所有的奶都叫特仑苏,也不是所有的 GPU 都支持 cuda 。 cuda 是英伟达设计并实现的,所以只支持 NVIDIA GPU。

  • CUDNN:这是一个专门针对深度学习领域的软件库,它里面提供了一些函数能够加速卷积神经网络的运算。它也只支持 NVIDIA GPU,这么做的原因很简单,cuda+cudnn,想搞深度学习大概率只能买 NVIDIA GPU。

  • 深度学习框架:各种互联网大厂在 cuda + cudnn 的基础上设计的框架。二十多层的网络架构,调用 pytorch 只需要配置入口参数一行代码就搞定了,自己使用底层语言搭模型,难度大,费时间不说,关键还不一定能 work。TensorFlow、Ptorch 的只需要会 python 就行,至于搭网络,一行代码搞定。框架的出现更是降低了开发者的使用门槛,一批一批的人前赴后继地入坑。

上述解释是自己根据自己理解写出来的,若有错误,李姐万岁!


环境搭建

好多人都折在版本不兼容以及安装时出现的各种奇奇怪怪的异常,这块需要胆大心细,大不了全掀了重来。以 NVIDIA GPU 为硬件搭建环境。

  1. 查看GPU 型号以及操作系统版本

    # lspci | grep -i vga
    01:00.0 VGA compatible controller: NVIDIA Corporation GM200 [GeForce GTX TITAN X] (rev a1)
    
    # uname -a
    Linux deployer-All-Series 5.15.0-50-generic #56~20.04.1-Ubuntu SMP Tue Sep 27 15:51:29 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
    

    CPU:x86_64

    GPU:GeForce GTX TITAN X

    OS:20.04.1-Ubuntu

  2. 安装显卡驱动

    这里有两种方式安装(1)先装显卡驱动,在安装cuda;(2)安装cuda时一并将显卡驱动安装了。

    第(2)种方式:

    在官网下载cuda,需要先注册才能下载。我安装的是 CUDA Toolkit 11.6.2。不推荐使用 deb(local) 方式安装,因为该方式即便选定了指定版本,依旧会安装最新版本,可能软件仓库里面保存的就只最新版本吧。选择 runfile(local) 一次性将 显卡驱动和 cuda 都安装。

# 下载安装文件到本地
wget https://developer.download.nvidia.com/compute/cuda/11.6.2/local_installers/cuda_11.6.2_510.47.03_linux.run
# 必须以 sudo 权限安装。
sudo sh cuda_11.6.2_510.47.03_linux.run

安装文件中包含有显卡驱动和 cuda 工具包,可以选择是否安装,这里全选。

如果安装失败,可以查看日志文件寻找失败原因:

  • 显卡驱动安装日志:/var/log/nvidia-installer.log
  • cuda 安装日志:/var/log/cuda-installer.log

安装成功会显示信息:

===========
= Summary =
===========

Driver:   Installed
Toolkit:  Installed in /usr/local/cuda-11.6/

Please make sure that
 -   PATH includes /usr/local/cuda-11.6/bin
 -   LD_LIBRARY_PATH includes /usr/local/cuda-11.6/lib64, or, add /usr/local/cuda-11.6/lib64 to /etc/ld.so.conf and run ldconfig as root

To uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-11.6/bin
To uninstall the NVIDIA Driver, run nvidia-uninstall
Logfile is /var/log/cuda-installer.log

这里一定要配置 PATH 和 LD_LIBRARY_PATH ,否则上层的框架总还是找不见 cuda 在哪里!!!

# vi ~/.bashrc
export PATH="$PATH:/usr/local/cuda-11.6/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda-11.6/lib64"
# 退出
source ~/.bashrc

至此,显卡驱动和 cuda一次性安装成功。

第(1)种方式:先安装显卡驱动,在安装cuda

显卡驱动安装:https://www.cnblogs.com/chua-n/p/13208398.html

cuda安装:按照(2)中方式选择,下载cuda,在安装时选择不安装 Driver

cuda 安装完成后就可以使用 nvidia-smi 查看 GPU 信息了。

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 510.47.03    Driver Version: 510.47.03    CUDA Version: 11.6     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA GeForce ...  Off  | 00000000:01:00.0 Off |                  N/A |
| 22%   45C    P8    30W / 250W |   5343MiB / 12288MiB |      0%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|    0   N/A  N/A   2898247      C   python                           2960MiB |
|    0   N/A  N/A   3553478      C   /usr/local/bin/python3.7         2377MiB |
+-----------------------------------------------------------------------------+
  1. 安装 cudnn

    官方安装说明:https://docs.nvidia.com/deeplearning/cudnn/install-guide/index.html

​ 推荐使用 tar 包的形式安装,因为自己心里清楚到底装的是什么版本的。

  1. 安装上层框架

    这个自己装啦。

有关显卡、显卡驱动、cuda、cudnn 通俗解释及深度学习环境搭建的更多相关文章

  1. ruby - 有人可以帮助解释类创建的 post_initialize 回调吗 (Sandi Metz) - 2

    我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法

  2. ruby-on-rails - 如何在 Ruby on Rails 中实现由 JSF 2.0 (Primefaces) 驱动的 UI 魔法 - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。问题1)我想知道ruby​​onrails是否有功能类似于primefaces的gem。我问的原因是如果您使用primefaces(http://www.primefaces.org/showcase-labs/ui/home.jsf),开发人员无需担心javascript或jquery的东西。据我所知,JSF是一个规范,基于规范的各种可用实现,prim

  3. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  4. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  5. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  6. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  7. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  8. ruby - 解释为局部变量会覆盖方法名称吗? - 2

    如thisquestion,当在其自己的赋值中使用未定义的局部变量时,它的计算结果为nil。x=x#=>nil但是当局部变量的名称与现有的方法名称冲突时,就比较棘手了。为什么下面的最后一个示例返回nil?{}.instance_eval{a=keys}#=>[]{}.instance_eval{keys=self.keys}#=>[]{}.instance_eval{keys=keys}#=>nil 最佳答案 在Ruby中,因为可以在没有显式接收器和括号的情况下调用方法,所以在局部变量引用和无接收器无参数方法调用之间存在语法歧义:f

  9. 语法类似于 GitHub Flavored Markdown 的 Ruby markdown 解释器? - 2

    我使用Jekyll运行博客,并认为我会解决RedcarpetMarkdown解释器,因为它是developedandusedbyGitHub.好吧,我只是碰巧遇到了一个错误,去检查问题,然后foundthis.Maintainersays,"Asyouprobablyhavenoticed(harharharhar)Idon'thavetimetomaintainRedcarpetanymore.It'snotapriorityforme(IfindMarkdownthoroughlyboring)andit'snotapriorityforGitHub,becausewenolong

  10. ruby - 我如何学习 ruby​​ 的正则表达式? - 2

    如何学习ruby​​的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby​​的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/

随机推荐