GPU

​ 显卡是我们平时说的GPU,现在大多数的电脑使用NVIDIA公司生产的显卡;常见的型号有Tesla V100,GTX950M,GTX1050TI,GTX1080等。

显卡驱动

​ 特指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

nvidia-smi 和 nvcc 结果的版本为何不一致

​ 首先需要知道,两者不是必须一致

​ CUDA 有两种API,分别是运行时API和驱动API:Runtime API 与 Driver API。
nvidia-smi是 CUDA Driver API(驱动API)的版本,也是当前驱动支持的最高CUDA版本,如在这里是10.0。
​ 而nvcc的结果是对应 CUDA Runtime API(运行API)的版本。
每个CUDA的版本(指上文介绍安装的cudatoolkit)会要求一个最低的显卡驱动版本;而显卡驱动会提供一个最高支持的CUDA 版本。

参考

https://zhuanlan.zhihu.com/p/91334380