这里写目录标题
- 一、NVIDIA显卡驱动安装
- 二、安装CUDA
- 官网找对应版本
- 下载安装文件
- 安装
- 配置环境变量
- 三、安装cuDNN
- 选择版本
- 另一种下载方式
- 四、cuDNN与CUDA关系
- CUDA
- cuDNN的依赖关系
- 与CPU的交互
- 开发编程角度
- 图示
- 总结
一、NVIDIA显卡驱动安装
我这里之前就装好了
使用命令
nvidia -smi //查看驱动型号
还需要知道Ubuntu的版本号
我是直接使用图形化界面打开了/etc/os-release文件
也可以直接使用命令查看
cat /etc/os-release
准备工作做好之后,就进行CUDA的安装
二、安装CUDA
官网找对应版本
官网上找到驱动和CUDA的对应关系
链接: https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.html
下载安装文件
下载地址
链接: https://developer.nvidia.com/cuda-12-2-2-download-archive
顺着往下点,找到和你的系统一一对应的版本
有三种下载方式,根据自己系统情况选择相应选项,我三个都试了,都失败了,别人说最后一个选择runfile最不容易出问题,但是我也失败了
这里说一下遇到的问题,不敢兴趣的同学可以直接跳过:
首先使用的是deb(local)的安装,执行到第3句的时候,每次都需要70多分钟,最后99%的时候报错–段错误(核心已转储)
同样的使用runfile(local)时,出现了同样的问题,总之就是仓库包没有拉下来,报段错误(这个问题没有解决)
曲线救国–下载安装包
使用工具拉不下来,咱就自己下载安装包
仍旧选择deb(local)下载安装包到本地,然后继续执行后面的命令,直到最后一个命令,安装CUDA的时候报错
最后!成功的是使用本地下载的runfile文件,执行成功
直接复制这个地址到浏览器,就可以直接下载了https://developer.download.nvidia.com/compute/cuda/12.2.2/local_installers/cuda_12.2.2_535.104.05_linux.run
安装
下载完成之后,还使用命令运行run文件
sudo sh cuda_12.2.2_535.104.05_linux.run
选择continue继续
输入accept,回车
使用回车取消第一个驱动,因为驱动已经安装好了了,接着移动到install安装
安装成功,出现下面的界面
配置环境变量
打开配置文件----在.bashrc文件里配置环境变量
sudo vim ~/.bashrc
在打开文件的最后一行之后追加下面内容:
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-12.2/lib64
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda-12.2/lib64
/usr/local/cuda-12.2/目录是CUDA的安装路径。如果你使用了不同的安装路径,需要相应地修改上述命令中的路径。
要应用上面这些更改,需要重新加载shell配置文件
source ~/.bashrc
检查 CUDA Toolkit是否安装成功
$nvcc -V
三、安装cuDNN
选择版本
官网找到和CUDA的对应版本
链接: https://developer.nvidia.com/rdp/cudnn-archive
点开
下载压缩包,然后解压缩
tar zxvf 压缩文件名 .
将cuDNN库的文件安装或复制到指定的CUDA安装目录下,并确保这些文件对所有用户都是可读的。
sudo cp cuda/include/cudnn.h /usr/local/cuda-12.2/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-12.2/lib64
sudo chmod a+r /usr/local/cuda-11.2/include/cudnn.h
sudo chmod a+r /usr/local/cuda-11.2/lib64/libcudnn*
到此,cudnn安装配置完成了!
命令解释:(不想了解命令的作用的可以直接跳过这一段)
首先复制cuDNN头文件:
第一条命令将cudnn.h(cuDNN的头文件)从cuda/include/目录复制到/usr/local/cuda-11.2/include/目录。cudnn.h是cuDNN库的主要头文件,包含了调用cuDNN函数所需的声明和定义。复制到CUDA安装目录下的include子目录是为了确保在编译时能够找到这些头文件。
复制cuDNN库文件:
第二条命令将cuda/lib64/目录下所有以libcudnn开头的文件(通常是cuDNN的动态链接库文件)复制到/usr/local/cuda-11.2/lib64/目录。这些库文件包含了cuDNN函数的实现,对于在运行时使用cuDNN功能是必需的。
设置cuDNN头文件为可读:
第三条命令通过修改文件权限,使得所有用户(a表示所有用户)都能读取(+r表示添加读取权限)/usr/local/cuda-11.2/include/cudnn.h文件。这是为了确保在编译时,任何用户都能够访问到这个头文件。
设置cuDNN库文件为可读:
类似于上一步,第四条命令将所有以libcudnn开头的库文件在/usr/local/cuda-11.2/lib64/目录下的权限设置为对所有用户可读。这是为了确保在运行时,任何用户都能够访问到这些库文件。
另一种下载方式
官网
这里没有选择和CUDA版本对应的选项,所以安装之后,运行有问题,小伙伴可以自己试试,我这里没有成功。
四、cuDNN与CUDA关系
cuDNN(NVIDIA CUDA Deep Neural Network library)是一个专门为深度学习设计的GPU加速库,它依赖于CUDA平台来执行其优化操作。
CUDA
CUDA是NVIDIA推出的一个并行计算平台和编程模型,它允许开发者利用NVIDIA GPU的并行计算能力来加速计算密集型应用程序。CUDA提供了GPU编程的接口和工具,使得开发者能够编写在GPU上运行的程序。
● 底层硬件交互:CUDA负责直接与GPU硬件进行交互,管理GPU上的计算资源、内存资源等,为上层应用提供高效的并行计算能力。
cuDNN的依赖关系
● 基于CUDA的加速:cuDNN是建立在CUDA平台之上的,它利用CUDA提供的GPU并行计算能力来加速深度学习中的各种操作,如卷积、池化、激活函数等。cuDNN通过高度优化的算法和GPU加速技术,显著提高了深度学习模型的训练速度和推理速度。
● API与函数库:cuDNN提供了一套丰富的API和函数库,这些API和函数库都是基于CUDA编写的。开发者在编写深度学习应用时,可以通过调用cuDNN的API来利用GPU加速深度学习操作。这些API背后是cuDNN在CUDA平台上实现的优化算法和并行计算逻辑。
与CPU的交互
● CPU与GPU的协同工作:虽然cuDNN主要依赖于CUDA平台来执行GPU加速操作,但在深度学习应用中,CPU和GPU通常是协同工作的。CPU负责处理一些不适合并行计算的任务,如数据预处理、模型参数更新等,而GPU则负责执行大规模并行计算任务,如神经网络的前向传播和反向传播。
● 数据传输与同步:在CPU和GPU之间,需要频繁地进行数据传输和同步操作。CUDA提供了相应的机制来支持这些操作,如内存拷贝函数(如cudaMemcpy)和同步函数(如cudaDeviceSynchronize)。cuDNN在执行深度学习操作时,也会利用这些机制来确保数据的正确传输和同步。
开发编程角度
- 开发人员编程:
开发人员编写深度学习应用时,会包含cuDNN的头文件(如cudnn.h),这些头文件提供了cuDNN库的类型定义、函数声明等接口信息。
开发人员通过调用这些接口(即cuDNN提供的函数)来执行深度学习中的操作,如卷积、池化等。 - cuDNN调用CUDA:
当开发人员调用cuDNN的某个函数时,该函数内部会进一步调用CUDA的接口(API)来实现具体的GPU加速操作。
cuDNN作为一个高级别的库,它封装了底层的CUDA调用,使得开发人员可以更加专注于深度学习算法的实现,而不需要深入了解GPU的硬件细节和CUDA的编程细节。 - CUDA与GPU交互:
CUDA的接口负责与GPU硬件进行交互,管理GPU上的计算资源、内存资源等。
CUDA通过驱动程序与GPU硬件进行通信,将计算任务分配给GPU上的不同核心(或称为CUDA核心)来并行执行。
CUDA还提供了内存管理、同步机制等功能,以确保GPU上的计算任务能够正确、高效地执行。
图示
总结起来就是我上一篇文章( AI服务器环境搭建-总结和思考)中画的图中的下边一部分
总结
为了构建一个高效、灵活且功能强大的深度学习开发环境,需要安装PyTorch、Miniconda、cuDNN、CUDA四款软件,它们共同构成了一个完整的深度学习开发环境,能够支持高效的模型训练、推理和部署。今天主要写了cuDNN,CUDA的安装,过几天我再写一下关于miniconda和pytorch的安装。