0


一张图了解GPU、CUDA、CUDA toolkit和pytorch的关系

文章目录

GPU、Cuda Driver和 Cuda Toolkit的图解关系

在这里插入图片描述

省流,简略版本

  • Nvidia Driver驱动:操作系统和硬件GPU进行沟通交互的程序,没这个驱动,GPU就是一个摆设,调用不起来,所以得先装这个。装了这个电脑就能用GPU了,但是深度学习搞不定。
  • CUDA Toolkit工具包:是基于驱动程序,用来实现GPU并行计算和加速深度学习的软件包。通过这个软件包,调用驱动,实现更加高级的功能。
  • cudnn深度学习加速库:是专门针对深度学习的GPU加速库,如果你要使用深度学习框架,这个是必需的。虽然也是CUDA Toolkit的组件,但是官方的下载包里面并没有,需要自己额外下载。
  • pytorch,tensorflow深度学习框架:CUDA Toolkit并没有提供深度学习的框架,只是提供了如何高效调用GPU的软件库。如果你要创建深度学习模型,进行训练。还是要使用深度学习框架。
  • Nvidia官方下载的CUDA:官方下载的CUDA Toolkit是包含了驱动的,并且联合到一块是称为CUDA的。
  • conda下载的CUDA:是不包含驱动的,但是高版本的驱动,是向前兼容的,你可以下载相匹配的cuda toolkit,构成不同版本的cuda

要实现多版本的cuda怎么办

在这里插入图片描述

  • 说明- 只需要安装不同版本的cuda toolkit即可

复杂版(你要是觉得简略版说的太简单,这里给你找文档证明)

一、Nvidia Driver和CUDA Toolkit的关系

  • 下图是从官网找到的对应表格,链接

在这里插入图片描述

  • 说明: - CUDA Driver是向前兼容的,就是后续的开发的新版本,是支持前面的cuda toolkit的。- 根据表格可以看出,安装的驱动尽可能新- CUDA Toolkit和驱动兼容,只需要满足最低版本就行
  • 安装建议- 虽然官方的cuda都是包含了驱动的,如果你想单独安装也行,我就是单独安装的,没看技术文档。- 单独安装驱动的链接
安装GPU显卡驱动Nvidia Driver

下载

  • 下载链接
  • 在对应的选框中,选择适合的Nvidia驱动,注意,对于linux而言,这个驱动是包括cuda driver和nvidia driver的。这个是向前兼容的。在这里插入图片描述* 点击下载在这里插入图片描述
  • ubuntu系统,下载的是run文件

在这里插入图片描述

安装

  • 去除本地已经安装的Nvidia Driver
  • 1、按 ctrl+alt+F1 进入tty, 登录tty后输入如下命令关闭图形界面
sudoservice lightdm stop
  • 这里注意要禁用Nouveau
sudovim /etc/modprobe.d/blacklist.conf
blacklist nouveau
  • 2、卸载nvidia显卡驱动。注意此时千万不能重启,重新电脑可能会导致无法进入系统。
sudoapt-get remove nvidia*
  • 3、安装显卡驱动
sudosh NVIDIA-Lunix-x86_64-525.105.17.run
  • 在这里,会安装过程中,会遇到一些选项,这里可以直接看这个链接,我是按照这个做的

最后,重启后安装cudnn, 进入解压后的cuda所在的目录。

sudocp lib* /usr/local/cuda/lib64/
sudocp cudnn.h /usr/local/cuda/include/
  • 4、进入系统检查是否安装成功
# 查看安装的cuda配置
nvidia-smi
# 启动图形化界面配置
nvidia-settings

在这里插入图片描述
在这里插入图片描述

二、CUDA Toolkit是真的不包含CUDNN的

CUDA Toolkit的组件内容
  • 数据获取链接

在这里插入图片描述
在这里插入图片描述

  • 说明- 通过阅读整个表格可以知道,toolkit是包含了nvcc编译器的,但是没有包含cudnn的,所以我们还是需要重新在下载的。- cudnn的下载链接,这里记得找相对应的版本在这里插入图片描述- CUDA Toolkit的下载链接,这里老是让我下载12.1,结果没有版本能带起来,这里给了一个所有版本的下载目录在这里插入图片描述

三、CUDA Toolkit从Nvidia下载的,是真的包含了驱动的

证明1
  • 网络链接
  • 下图我是选择了我自己操作的ubuntu系统下载一个toolkit,给你生成的指令,可以看到默认是给你安装了515的驱动,在这里插入图片描述
证明2
  • 网络链接
  • 下图红框里是我摘录的原文,中文意思就是为了方便,驱动安装是作为toolkit安装的一部分的。在这里插入图片描述
证明3
  • conda 安装是没有驱动的,好吧我没找到,不过找到了别人也是那么认为的,而且我在chatGPT上也问了一下,确实如此。
  • 下图网络链接在这里插入图片描述
  • chatGPT的回答内容在这里插入图片描述
CUDA Toolkit安装
  • 打开链接,如下在这里插入图片描述
  • 选择适合的版本,进行安装。不过一般都是根据你的pytorch进行安装,而且装pytorh的时候,也会让你装cuda在这里插入图片描述
  • 官网生成的语句中,除了要求你安装pytorch需要的包,包括pytorch,torchvision,torchaudio三个包。还有一个pytorch-cuda11.7,这是和当前的要安装的pytorch兼容的cuda版本。
  • 这里回归正题,还是从nvidia官网直接下载toolkit,选择你需要的版本,直接进行安装在这里插入图片描述
  • 我这里已经安装了驱动,所以需要相应的裁剪一下。只需要装一个toolkit就行了。

四、你还是要单独装一下CUDNN的,不然回报错

不装CUDNN的报错如下

在这里插入图片描述

安装CUDNN
  • 找到官方,链接
  • 找一个适合自己的版本,按照步骤装下来就行了

在这里插入图片描述

五、如何实现多版本的CUDA?

  • 之前看了很多博客,都是基于conda进行安装的,但都是基于windows系统进行的,别的都是使用软链接,下载多个版本,修改系统路径实现的。截图如下,链接在这里插入图片描述
  • 别的基本上都是基于window环境的,使用docker之类的,不过这里找到一个自动化脚本,可以直接切换。参考连接
  • 直接将代码放到这里
#!/usr/bin/env bash# Copyright (c) 2018 Patrick Hohenecker## Permission is hereby granted, free of charge, to any person obtaining a copy# of this software and associated documentation files (the "Software"), to deal# in the Software without restriction, including without limitation the rights# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell# copies of the Software, and to permit persons to whom the Software is# furnished to do so, subject to the following conditions:## The above copyright notice and this permission notice shall be included in all# copies or substantial portions of the Software.## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE# SOFTWARE.# author:   Patrick Hohenecker <[email protected]># version:  2018.1# date:     May 15, 2018set -e

# ensure that the script has been sourced rather than just executedif[["${BASH_SOURCE[0]}"="${0}"]];thenecho"Please use 'source' to execute switch-cuda.sh!"exit1fiINSTALL_FOLDER="/usr/local"# the location to look for CUDA installations atTARGET_VERSION=${1}# the target CUDA version to switch to (if provided)# if no version to switch to has been provided, then just print all available CUDA installationsif[[ -z ${TARGET_VERSION}]];thenecho"The following CUDA installations have been found (in '${INSTALL_FOLDER}'):"ls -l "${INSTALL_FOLDER}"|egrep -o "cuda-[0-9]+\\.[0-9]+$"|whileread -r line;doecho"* ${line}"doneset +e
    return# otherwise, check whether there is an installation of the requested CUDA versionelif[[! -d "${INSTALL_FOLDER}/cuda-${TARGET_VERSION}"]];thenecho"No installation of CUDA ${TARGET_VERSION} has been found!"set +e
    returnfi# the path of the installation to usecuda_path="${INSTALL_FOLDER}/cuda-${TARGET_VERSION}"# filter out those CUDA entries from the PATH that are not needed anymorepath_elements=(${PATH//:/ })new_path="${cuda_path}/bin"forpin"${path_elements[@]}";doif[[!${p}=~ ^${INSTALL_FOLDER}/cuda ]];thennew_path="${new_path}:${p}"fidone# filter out those CUDA entries from the LD_LIBRARY_PATH that are not needed anymoreld_path_elements=(${LD_LIBRARY_PATH//:/ })new_ld_path="${cuda_path}/lib64:${cuda_path}/extras/CUPTI/lib64"forpin"${ld_path_elements[@]}";doif[[!${p}=~ ^${INSTALL_FOLDER}/cuda ]];thennew_ld_path="${new_ld_path}:${p}"fidone# update environment variablesexportCUDA_HOME="${cuda_path}"exportCUDA_ROOT="${cuda_path}"exportLD_LIBRARY_PATH="${new_ld_path}"exportPATH="${new_path}"echo"Switched to CUDA ${TARGET_VERSION}."set +e
return

cuda切换的简单方法

  • 修改软链接cuda,具体链接到的cuda文件即可
sudorm -rf cuda
sudoln -s /usr/local/cuda-10.1 /usr/local/cuda
linux下CUDA和CUDNN安装
CUDA安装
  • 这里选了本地安装在这里插入图片描述
  • 下载完毕在这里插入图片描述
  • 进行安装,发现本地的驱动,如果我选择abort会直接跳出安装,所以选择continue在这里插入图片描述
  • 后续还有一个选择的选项,去掉了driver,最终的安装结果如下。
  • 本来以为没有的,结果有装错了,重新来了一次在这里插入图片描述

在这里插入图片描述

  • 将当前安装而cuda添加到系统路径中,修改所有用户的PATH,这里他说的~/.bashrc,在我的系统中找不到,直接改变了系统变量,参考连接

在这里插入图片描述

  • 修改LD_LIBRARY_PATH,切换到当前用户下的home目录,然后编辑.bashrc文件,将下列文本添加到末尾
exportPATH=/usr/local/cuda-11.7/bin:$PATHexportLD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64:$LD_LIBRARY_PATHexportCUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.7

在这里插入图片描述

  • 运行如下命令。重置环境,并测试成果
# 切换到当前的用户的home目录下方cdsource .bashrc
nvcc -V

在这里插入图片描述

  • 真想剁了我的手,这波耍懒,没有给我保存快照,然后装cudnn的时候失败了,有结束不了,cuda驱动也运行不了,重新装了一遍。
  • 注意!!这里我修改了两种环境的bash,分别是root和当前用户的
  • 又来了一次,这波得保存好快照,手再贱,就剁手!!

在这里插入图片描述

  • 这波放心了!!!
CUDNN的安装
  • 点击官网,进行下载,注意版本,**加粗样式**
  • 估计这伙下错了,是针对ubuntu的deb文件,是可以安装和执行的,不需要换目录,先试试看吧。先创建一个镜像在这里插入图片描述
  • 这个方法不行,还是得下载压缩文件。这种安装方式反而把我的显卡驱动给我搞崩溃了,不行!!
  • 下载压缩文件的方式,下载连接,下载截图,这里直接下载tar压缩文件在这里插入图片描述
  • 下载完毕,root打开,复制文件在这里插入图片描述
  • 将相关的库文件进行迁移,并赋予权限,可以看得出,还是一个懒人新手,直接给777了
cp cudnn-linux-x86_64-8.6.0.163_cuda11-archive/include/cudnn.h /usr/local/cuda-11.7/include/
cp cudnn-linux-x86_64-8.6.0.163_cuda11-archive/lib/libcudnn* /usr/local/cuda-11.7/lib64/
chmod a+r /usr/local/cuda-11.7/include/cudnn.h
chmod a+r /usr/local/cuda-11.7/lib64/libcudnn*

在这里插入图片描述

  • 测试是否安装成功,按照他们说的,输入指令
cat /usr/local/cuda-11.7/include/cudnn.h |grep CUDNN_MAJOR -A 2

出现如下的东西就是正确的

在这里插入图片描述

  • 但是我看了这个文件,里面确实没这个东西,在没有编译的情况下,就是打开了不应该会有变化。在这里插入图片描述
pytorch安装
  • 找到官网,链接
  • 复制到conda,自己进行安装!!

在这里插入图片描述

  • 先创建一个conda环境,然后不需要装cuda了,指令如下
# 创建环境,这波忙猜python版本3.8应该够的,有犯病了
conda create --name pytorch2.0 python==3.8# 激活环境
conda activate pytorch2.0
# 安装对应的包
conda install pytorch torchvision torchaudio -c pytorch 
  • 我愿称之为光速打脸,再建一个环境吧。在这里插入图片描述
  • 当我没说,重新输入一遍上面的指令,改改
# 你没看到,我刚把上一个环境删除了
conda remove --name pytorch2.0 --all
conda create --name pytorch2-0 python==3.9# 激活环境
conda activate pytorch2-0
# 安装对应的包
conda install pytorch torchvision torchaudio -c pytorch 
  • 安装完毕,这个深度学习的代码测试一下在这里插入图片描述

问题

  • 我的anaconda是通过root安装的,我当前用户调用不了。这个就暂时搁置了,难道要重新装anaconda吗???
  • 哦吼!我已经成功解决了,给你一个链接,为什么会出现这个问题。anaconda安装的正确姿势
  • 然后安装了pytorch1.13版本,安装成功,下面就是跑跑程序了。

在这里插入图片描述

  • 测试能否顺利调用GPU进行加速在这里插入图片描述
  • 这就很烦了,弄了半个月都没成功,不过这都不是问题,我查看了一下显卡和驱动,发现了这个奇怪的事情。显卡驱动对应的cuda版本是12.1,但是我当时专门装了驱动,但是没有装cuda,难道会默认给我安装cuda,但是在路经里面并没有发现啊。然后调用装好cuda的编译器版本发,发现是正常的11.7并没有任何异常,这个版本异常就是最大的异常了。在这里插入图片描述
  • 显卡驱动对应的是cuda driver version,然后编译器对应的cuda版本是runtime version,所以两个是不冲突的,runtime version是cuda版本的上限,runtime version只要小雨runtime version就行了。
离谱,conda永远不成功,venv一下子就成功了
  • 这是venv安装的,终于找到了对应的cuda,检测到了GPU,。在这里插入图片描述
  • 这是conda安装的,就尼玛离谱,我装了好几次都不得行。在这里插入图片描述
  • 做最后一次尝试,不行我就用venv.我猜测如果路径的问题,这些conda环境是安装在opt下方的,并不是安装在用户的目录下的。换了用户还是不行。所以放弃了,直接使用venv吧,下面分析一下这两个的差别。

在这里插入图片描述

  • 主要问题是因为conda我找不到目录下方的那些个bin目录下的编译器文件,所以就识别不了对应的环境。但是venv就可以,就算我改了权限是777,也没什么用。我可以在试试看重新安装。在这里插入图片描述
  • venv和conda的差别,这里是参考了这里的链接《python配置-virtualenv 和 conda的区别,基本上没啥区别- conda是功能强大的环境管理工具,可以管理很多中开发语言的环境,但是这里基本上只需要操作python环境,所以不需要- venv是依赖主环境的,我需要制定,conda是可以独立于主编译器环境的,但是也没是,我基本上还是只需要一种虚拟环境- venv自己自行下载,但是conda就不需要自行下咋

我已经尝试够了,感觉就是我的conda安装不对,但是没有那么多时间去做额外的尝试了,暂时就删除了吧

七、卸载系列

卸载Nvidia Driver和CUDA
  • 暂时没有找到好的方法,要么直接恢复镜像,要么直接从装系统。
卸载conda
  • 特定目录,直接删除对应anaconda文件
sudorm -rf path/anaconda3
  • 修改配置文件
# 切换到当前的目录cd# 删除配置文件中的内容有关conda的东西
gedit .bashrc

总结

现在的理解就是我可以装多个版本的cuda toolkit,,然后不同的框架会自动调用

参考

其中用到的参考链接如下,如果认为侵删,请联系,我把相应的内容删除

  • 一文讲清楚CUDA、CUDA toolkit、CUDNN、NVCC关系
  • 驱动卸载和安装
  • linux mint 驱动命令,如何在Linux Mint上安装Nvidia驱动程序
  • 【亲测有效】Linux系统安装NVIDIA显卡驱动
  • Linux Nvidia显卡驱动安装
  • 官方文档Installation Guide

本文转载自: https://blog.csdn.net/Blackoutdragon/article/details/130233562
版权归原作者 客院载论 所有, 如有侵权,请联系我们删除。

“一张图了解GPU、CUDA、CUDA toolkit和pytorch的关系”的评论:

还没有评论