版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42406643/article/details/109545766
————————————————
介于在服务器上安装Nvidia、CUDA、cuDNN等等,对各自的概念以及它们之间存在的关系一直不够清晰,借此机会,整理相关内容于此,若有错误望指正,评论多交流
目录
GPU
显卡是我们平时说的GPU,现在大多数的电脑使用NVIDIA公司生产的显卡;常见的型号有Tesla V100,GTX950M,GTX1050TI,GTX1080等。
显卡驱动Driver
特指NVIDIA的显卡驱动程序。
CUDA
CUDA是显卡厂商NVIDIA推出的运算平台。CUDA™是一种由NVIDIA推出的通用并行计算架构,是一种并行计算平台和编程模型,该架构使GPU能够解决复杂的计算问题。CUDA英文全称是Compute Unified Device Architecture。
有人说:CUDA是一门编程语言,像C,C++,python 一样,也有人说CUDA是API。
官方说:CUDA是一个并行计算平台和编程模型,能够使得使用GPU进行通用计算变得简单和优雅。
运行CUDA应用程序要求系统至少具有一个具有CUDA功能的GPU和与CUDA Toolkit兼容的驱动程序。
查看CUDA版本命令:nvcc -V
或nvcc --version
或cat /usr/local/cuda/version.txt
需要知道:CUDA和CUDA Driver显卡驱动不是一一对应的,比如同一台电脑上可同时安装CUDA 9.0、CUDA 9.2、CUDA 10.0等版本。
CUDA Toolkit
CUDA工具包的主要包含了CUDA-C和CUDA-C++编译器、一些科学库和实用程序库、CUDA和library API的代码示例、和一些CUDA开发工具。(通常在安装CUDA Toolkit的时候会默认安装CUDA Driver;但是我们经常只安装CUDA Driver,没有安装CUDA Toolkit,因为有时不一定用到CUDA Toolkit;比如我们的笔记本电脑,安装个CUDA Driver就可正常看视频、办公和玩游戏了)
详细内容见NVIDIA官方
NVCC
NVCC就是CUDA的编译器,可以从CUDA Toolkit的/bin目录中获取,类似于gcc就是c语言的编译器。由于程序是要经过编译器编程成可执行的二进制文件,而cuda程序有两种代码,一种是运行在cpu上的host代码,一种是运行在gpu上的device代码,所以nvcc编译器要保证两部分代码能够编译成二进制文件在不同的机器上执行。
cuDNN
cuDNN的全称为NVIDIA CUDA® Deep Neural Network library,是NVIDIA专门针对深度神经网络中的基础操作而设计基于GPU的加速库。cuDNN为深度神经网络中的标准流程提供了高度优化的实现方式,例如convolution、pooling、normalization以及activation layers的前向以及后向过程。
CUDA这个平台一开始并没有安装cuDNN库,当开发者们需要用到深度学习GPU加速时才安装cuDNN库,工作速度相较CPU快很多。
CUDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算;
来自知乎的解释:CUDA看作是一个工作台,上面配有很多工具,如锤子、螺丝刀等。cuDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算。它就相当于工作的工具,比如它就是个扳手。但是CUDA这个工作台买来的时候,并没有送扳手。想要在CUDA上运行深度神经网络,就要安装cuDNN,就像你想要拧个螺帽就要把扳手买回来。这样才能使GPU进行深度神经网络的工作,工作速度相较CPU快很多。
基本上所有的深度学习框架都支持cuDNN这一加速工具,例如:Caffe、Caffe2、TensorFlow、Torch、Pytorch、Theano等。
Caffe可以通过修改Makefile.config中的相应选项来修改是否在编译Caffe的过程中编译cuDNN,如果没有编译cuDNN的话,执行一些基于Caffe这一深度学习框架的程序速度上要慢3-5倍(Caffe官网上说不差多少,明明差很多嘛)。Caffe对cuDNN的版本不是很严格,只要大于cuDNN 4就可以。
查看cuDNN版本:cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
CUDA Toolkit和 显卡驱动 的版本对应
每个版本的CUDA Toolkit 都对应一个最低版本的显卡驱动版本(CUDA Driver),详情见下表。显卡驱动下载,CUDA Toolkit下载,显卡驱动安装教程,CUDA Toolkit安装教程1,CUDA Toolkit安装教程2
安装CUDA Driver核心命令:
sudo sh ./NVIDIA-Linux-x86_64-???.??.run
详细教程参考其他博客
需要知道:CUDA Toolkit和显卡驱动有版本的对应关系。
但同时:在同一台机器上(即同一个CUDA Driver版本)可以安装多个版本的CUDA(如CUDA 9.0、CUDA 10.1……只需要满足当前CUDA Driver版本支持安装的CUDA版本即可,满足关系见下图。
我的理解:安装CUDA就是安装CUDA Toolkit,就是从官网下载CUDA Toolkit安装.run文件(如cuda_9.0.176_384.81_linux.run)进行安装。
安装成功后,在/usr/local路径下才会有cuda-9.0文件夹,且同时才可以使用nvcc -V
可以查询到cuda版本
- Anaconda在安装Pytorch时,会同时用户安装cudatoolkit,如命令
conda install pytorch torchvision torchaudio cudatoolkit=10.1 -c pytorch
,其主要包含应用程序在使用CUDA相关的功能时所依赖的动态链接库。conda安装只会安装一些计算库,不会安装编译工具。而官方的cuda包包含的东西会完整一些。 - 使用 Anaconda 安装的 CUDA Toolkit 不位于 lib64 路径中,也不会产生冲突
- 在考虑安装tensorflow时,如安装TensorFlow2.1过程中,需要安装CUDA Toolkit=10.1(tensorflow与cuda也有版本兼容问题,官方文档)
查询上图,我们发现需要显卡驱动版本应该大于等于418.96,故系统中的显卡驱动版本应该至少为418.39。 - CUDA Toolkit本地安装包(local)内含特定版本Nvidia显卡驱动的,当在CUDA官网下载CUDA Toolkit后进行安装时会让用户选择安装项。
- 如果想安装其他版本的显卡驱动,则就需要在Nvidia官网自己下载并先安装好(或本机已经安装了合适版本的显卡驱动时),最后在安装CUDA Toolkit时取消安装内置版本的Nvidia显卡驱动。
CUDA / CUDA Toolkit和cuDNN的版本对应
CUDA / CUDA Toolkit和cuDNN之间有版本对应关系。
但同时:同一个CUDA 版本支持安装多个版本的cuDNN(如cuDNN v7.6.4、cuDNN v7.6.3……选择其一安装即可。cuDNN下载,cuDNN下载安装教程
- 查阅cuDNN下载网站,可以知道,如果目前电脑中安装了CUDA Toolkit=10.1(也就是CUDA10.1),那么cuDNN的可选版本有7.6.4、7.6.3、7.6.2
同上,如需要安装TensorFlow2.1,故我们需要安装CUDA Toolkit=10.1,同时cuDNN就需要从7.6.4、7.6.3、7.6.2这三个版本中选择。
显卡驱动程序的选择
可以查看所下载的驱动版本支持的GPU版本:
nvidia-smi 和 nvcc 结果的版本为何不一致
首先需要知道,两者不是必须一致
CUDA 有两种API,分别是运行时API和驱动API,即所谓的 Runtime API 与 Driver API。
nvidia-smi的结果除了有 GPU 驱动版本型号,还有 CUDA Driver API的型号,如在这里是10.0。
而nvcc的结果是对应 CUDA Runtime API:
https://blog.csdn.net/ljp1919/article/details/102640512
https://blog.csdn.net/qxqxqzzz/article/details/103453413
https://forums.developer.nvidia.com/t/cuda-driver-version-9-0-cuda-runtime-version-8-0/60139
https://stackoverflow.com/questions/53422407/different-cuda-versions-shown-by-nvcc-and-nvidia-smi
问题:在conda安装pytorch参考哪个版本的?
安装pytorch时选择的是nvidia-smi查看到的版本
CUDA版本管理可行方式
当本机上安装有多个版本cuda时可以通过一下步骤进行管理/版本切换:
sudo vim ~/.bashrc加入以下的内容:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
- 1
- 2
- 3
修改完毕保存,source ~/.bashrc
sudo rm -rf cuda # 删除旧版本的软连接
sudo ln -s /usr/local/cuda-9.1 /usr/local/cuda # 建立新版本的软连接
# 前面的路径是需要的版本的cuda的安装路径。
- 1
- 2
- 3
之后再使用nvcc -V查看cuda版本,如
写在最后
- 在安装Nvidia驱动时,可能会遇到gcc版本过高或较低的问题,可以参考其他文章安装合适版本的gcc,gcc镜像下载,gcc5.4安装教程
- cuda/cuDNN也可以使用conda安装
更多详情见:知乎专栏
已求证:
可以直接使用conda install cuda 和 cudnn,只要注意版本关系即可,详情见
代求证:“以深度学习为例,如果依赖cudatoolkit,那与 nvidia官网原生安装的 cuda 库无关,可以直接 conda install -c anaconda cudatoolkit,不需要去 nvidia 官网下载cuda 安装包,但是 nvidia 显卡驱动少不了,还是要装的”
经过自己安装实验,对网络上一些言语依旧有疑问,记录在最后,可以多交流 [抱拳][抱拳][抱拳]