GPU、CUDA与深度学习环境配置

GPU、CUDA与深度学习环境配置_第1张图片

上周在一台服务器上配环境配了两天才配好,踩坑同时也发现自己对于GPU与并行计算的基础知识所知甚少,因此学习总结一下。

一、名词解释

这篇文章写的非常详细,值得仔细阅读,显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn区别?,下面结合自己的理解总结一下。

1 CUDA

官方定义:CUDA是NVIDIA创建的一个并行计算平台和编程模型,它不是编程语言,也不是一种API。

CUDA is a parallel computing platform and programming model created by NVIDIA.
Some people confuse CUDA, launched in 2006, for a programming language — or maybe an API.

2 CUDNN

官方定义: NVIDIA CUDA®深度神经网络库(cuDNN)是一个用于深度神经网络的GPU加速库。cuDNN为标准例程(如前向和后向卷积、池化、归一化和激活层)提供了高度优化的实现。

The NVIDIA CUDA® Deep Neural Network library (cuDNN) is a GPU-accelerated library of primitives for deep neural networks. cuDNN provides highly tuned implementations for standard routines such as forward and backward convolution, pooling, normalization, and activation layers.

但深度学习训练的时候不装CUDNN也能训练(此处存疑,我没有装但是还可以正常训练,也可能是系统原本装好了)。

3 NVCC

NVCC就是cuda编译器,类似于gcc是C++的编译器一样。

4 如何查看显卡版本

nvidia-smi -L

5 CUDA Toolkit和CUDA Driver的关系

**CUDA Toolkit可以认为是一个软件安装包,**它可以安装cuda driver,nvcc(编译器),libraries, CUDA Samples。

传统上,安装 NVIDIA Driver 和 CUDA Toolkit 的步骤是分开的,但实际上我们可以直接安装 CUDA Toolkit,系统将自动安装与其版本匹配的 NVIDIA Driver。下面我们讲述安装 CUDA Toolkit 的方法。

安装方式:下载CUDA Toolkit 安装CUDA和cuDNN到指定目录

sh cuda_11.1.1_455.32.00_linux.run --silent --toolkit --toolkitpath=path_to_install

export PATH="~/cuda-11.1/bin:$PATH"
export LD_LIBRARY_PATH="~/cuda-11.1/lib64:$LD_LIBRARY_PATH"

6 为什么nvccnvidia-smi显示的CUDA版本不同 (参看stackoverflow,很清晰)

CUDA有两个主要的API:runtime(运行时) API和driver API,这两个API都有对应的CUDA版本。

driver API是通过GPU driver installer安装的,可理解为系统出场安装的默认驱动,nvidia-sim显示的是 driver API。

runtime API是通过CUDA toolkit安装的,可理解为用户自己安装的驱动,nvcc显示的是runtime API。

因此,在设计层面这两个数字就不一定匹配,因为它们反映了两种不同的事物。

Therefore, by design, these two numbers don’t necessarily match, as they are reflective of two different things.

The version reported by nvcc and nvidia-smi may not match, and that is expected behavior and in most cases quite normal.

通常情况下,这两个显示都是不一样的,不过不用担心,只要driver API比runtime API高,一般都没问题。但是我自己的例子却证明了版本差太多是有问题的,我遇到的问题见下面问题7。

driver API 和runtime API关系如下图:

GPU、CUDA与深度学习环境配置_第2张图片


二、实践问题

经过上面的基础知识学习,安装过程中的遇到的种种问题就解释通了。

安装前问题

问题1 为什么nvidia smi显示有cuda驱动,而/usr/local下却没有cuda文件夹?

这里的cuda11.4 driver就是系统默认的drvier API,但是位置不在/usr/local下。

问题2 要装什么cuDNN、CUDA driver、CUDA toolkit这些都要装吗?

用CUDA toolkit这个安装包去安装 CUDA runtime driver,cuDNN我没有装,但是还能正常跑起来。

问题3 Conda安装的CUDA toolkit会装CUDA driver吗?

conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 cudatoolkit=11.1 -c pytorch -c conda-forge,不会安装NVCC编译器,只会安装一些运行时的库,完整版的驱动还是需要通过下载CUDA toolkit安装包安装。

问题4 为什么centerNet只通过conda安装了cuda toolkit就能正常训练?

centerNet不需要ncvv来编译,而MMDetection3D是需要用NVCC编译。

问题5 怎么安装到指定目录(由于没有服务器sudo权限,不能装到/usr/local,需自定义安装位置)

安装CUDA和cuDNN到指定目录

安装过程中问题

问题6 Log file not open. Segmentation fault (core dumped)

别人装过了,生成了/tmp/cuda-installer.log,把这个文件删了就好了。参考链接

问题7 驱动安装好了环境也配好了,训练不起来

**原因:cuda runtime driver与driver API版本相差太大。**分析如下:

服务器是RTX 3090,nvidia smi显示有cuda driver驱动且版本是cuda11.4。

先是通过CUDA Toolkit安装cuda runtime driver 10.2,MMDetection3D可编译安装成功,但是训练PointPliiar会启动不起来。

然后通过CUDA Toolkit安装cuda driver 11.1后,就可以正常训练了。

由此可以说明两个driver应该不能差一个大版本。一个同事也跟我说RTX 3090不支持cuda10.2,这个不支持应该指的就是驱动不匹配。

共勉!

你可能感兴趣的:(深度学习,深度学习,python,人工智能)