CUDA、CUDNN、CUDA Driver、CUDA Toolkit、NCVV的区别?

1、什么是CUDA?

CUDA 英文全称是Compute Unified Device Architecture,是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。

image-20220107080025307

2、什么是CUDNN?

CUDNN 是用于深度神经网络的GPU加速库。它强调性能、易用性和低内存开销。可以集成到高级的机器学习框架中,如谷歌的Tensorflow、加州大学伯克利分校的caffe框架、Facebook的PyTorch框架等等。

  • CUDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算;
  • CUDA这个平台一开始并没有安装CUDNN库,当开发者们需要用到深度学习GPU加速时才安装CUDNN库,工作速度相较CPU快很多。

那CUDA与CUDNN的关系是什么呢?知乎上的一个解释挺好理解:

CUDA看作是一个工作台,上面配有很多工具,如锤子、螺丝刀等。cuDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算。它就相当于工作的工具,比如它就是个扳手。但是CUDA这个工作台买来的时候,并没有送扳手。想要在CUDA上运行深度神经网络,就要安装cuDNN,就像你想要拧个螺帽就要把扳手买回来。这样才能使GPU进行深度神经网络的工作,工作速度相较CPU快很多。

3、什么是CUDA Driver?

这个就是常说的显卡驱动,比如我的电脑显卡型号是:GTX 1660 SUPER,显卡驱动程序的版本:441.08。

每个版本的CUDA工具包都对应一个最低版本的CUDA Driver,也就是说如果你安装的CUDA Driver版本比官方推荐的还低,那么很可能会无法正常运行。CUDA Driver是向后兼容的,这意味着根据CUDA的特定版本编译的应用程序将继续在后续发布的Driver上也能继续工作。通常为了方便,在安装CUDA Toolkit的时候会默认安装CUDA Driver。在开发阶段可以选择默认安装Driver,但是对于像Tesla GPU这样的商用情况时,建议在官方安装最新版本的Driver。

一篇博客上总结的, CUDA Toolkit 和 CUDA Driver 版本的对应情况如下:

在这里插入图片描述

4、什么是CUDA Toolkit?

CUDA Toolkit 就是Nvidia 官方提供的一个完整的工具安装包,其中提供了Nvidia 驱动程序、开发CUDA 程序相关的开发工具包等可供安装的选项。

使用 Nvidia 官网提供的 CUDA Toolkit 可以安装开发 CUDA 程序所需的工具,包括 CUDA 程序的编译器、IDE、调试器等,CUDA 程序所对应的各式库文件以及它们的头文件。但对于 Pytorch 之类的深度学习框架而言,其在大多数需要使用 GPU 的情况中只需要使用 CUDA 的动态链接库支持程序的运行( Pytorch 本身与 CUDA 相关的部分是提前编译好的 ),就像常见的可执行程序一样,不需要重新进行编译过程,只需要其所依赖的动态链接库存在即可正常运行。故而,Anaconda 在安装 Pytorch 等会使用到 CUDA 的框架时,会自动为用户安装 cudatoolkit,其主要包含应用程序在使用 CUDA 相关的功能时所依赖的动态链接库。在安装了 cudatoolkit 后,只要系统上存在与当前的 cudatoolkit 所兼容的 Nvidia 驱动,则已经编译好的 CUDA 相关的程序就可以直接运行,而不需要安装完整的 Nvidia 官方提供的 CUDA Toolkit 。

5、什么是NCVV?

nvcc就是CUDA的编译器,可以从CUDA Toolkit的/bin目录中获取,类似于gcc就是c语言的编译器。由于程序是要经过编译器编程成可执行的二进制文件,而cuda程序有两种代码,一种是运行在cpu上的host代码,一种是运行在gpu上的device代码,所以nvcc编译器要保证两部分代码能够编译成二进制文件在不同的机器上执行。

参考文献

链接: https://cloud.tencent.com/developer/article/1536738. 链接: https://developer.aliyun.com/article/761648. 链接: https://zhuanlan.zhihu.com/p/83971195.