文章目录
- 什么是CUDA?
- CUDA的基本要点
- CUDA的关键组成部分
- CUDA的作用
- CUDA安装位置的差异
- CUDA安装在base环境上
- CUDA安装在Anaconda虚拟环境上
- 性能差异
- 直接在虚拟环境中安装CUDA
- 总结
- 参考文献
对于刚开始学习深度学习的同学来说,往往第一件事就是安装CUDA、Anaconnda和PyCharm等软件,然后使用Anaconda来配置虚拟环境。那么什么是CUDA?以及我们经常在base
环境下安装CUDA之后,在新创建的虚拟环境里面下载PyTorch
的时候又下载对应版本的CUDA,这两个CUDA有什么区别呢?接下来这篇文章将带你了解CUDA,并解决以上疑问。
什么是CUDA?
CUDA(Compute Unified Device Architecture)是由NVIDIA开发的并行计算平台和编程模型,专门用于在NVIDIA的GPU(图像处理单元)上进行计算加速。CUDA允许开发者利用GPU的强大计算能力来执行通常由CPU处理的复杂计算任务,如深度学习、科学计算和图像处理等。这种架构在深度学习、计算机视觉、自然语言处理和其他需要高并发计算的领域具有广泛应用。
CUDA的基本要点
- 并行计算能力:CUDA能够将计算任务分解为多个小任务,并将这些任务分配到数千个GPU内核上同时执行,以大幅提升计算速度。
- CUDA库:CUDA提供了一系列专门设计的数学和科学库,如cuDNN(专门用于深度学习的神经网络加速库)、cuBLAS(基本线性代数库)、cuFFT(傅里叶变换库)等。这些库在深度学习框架中被广泛使用,比如PyTorch、TensorFlow。
- 编程语言:CUDA使用C/C++语言编写,还提供了Python的接口库(如PyCUDA和Numba),方便开发者更灵活地编写GPU加速程序。
CUDA的关键组成部分
- CUDA内核:GPU中的小程序片段,可以并行运行在数千个线程上。
- CUDA线程和块:CUDA通过线程和块的分层结构来管理并行计算。一个任务分解成多个线程,而多个线程组成一个块,多个块可以被调度到GPU中执行。
- CUDA内存管理:CUDA允许用户在CPU和GPU之间高效地传输数据,显存(GPU RAM)用于存储GPU所需的数据和结果。
CUDA的作用
CUDA的核心作用是将复杂计算任务(例如神经网络中的矩阵运算)转移到GPU上执行,因为GPU具有大量并行处理单元,能够处理大量小规模、独立的计算任务,从而显著提高运行速度。
CUDA安装位置的差异
在我们配置深度学习所需要的环境的时候,通常情况下会在base
环境下面通过CUDA的官网找到一个合适的CUDA版本(例如CUDA12.5)进行下载,然后一通安装,然后当我们找跑模型或者复现代码的时候,通过anaconda创建一个独属于该项目(比如说项目dl)的虚拟环境,然后在该环境下面再通过命令pip install torch==1.13.0+cu117 torchvision==0.14.0+cu117 torchaudio==0.13.0 --extra-index-url https://download.pytorch.org/whl/cu117
下载该项目的对应的pytorch版本以及cuda版本,通过对比可以看到,我们在虚拟环境dl里面的cuda版本是CUDA11.7,但是我们电脑base环境的CUDA版本却是12.5。那么这两者又有什么差异呢。
CUDA安装在base环境上
- 如果说我们按照上面所说的,通过CUDA官网下载12.5版本的进行安装,那么此时我们的base环境的CUDA就是12.5,这是全局版本,所有系统中的软件如果需要使用CUDA,那么都会默认调用这个12.5版本的CUDA。
- 在base环境安装CUDA的时候,它依赖于显卡驱动的版本,所以可能要求驱动版本要足够新 才能够兼容。系统安装的CUDA必须与电脑的显卡驱动匹配,不然会导致无法正常使用CUDA。
- 另外,如果在base环境中安装了PyTorch或者TensorFlow,它会默认调用系统安装的CUDA 12.5版本,如果项目要切换不同版本的CUDA,则需要重新配置或更改系统环境变量来更改对应的CUDA。
CUDA安装在Anaconda虚拟环境上
- 如果CUDA安装在虚拟环境(例如:dl)上,版本为11.7,那么CUDA 11.7仅对该dl环境内有效,并不会影响到其他环境或者系统的CUDA版本,因为这是在虚拟环境内安装的CUDA。并且可以根据不同的项目来创建不同的虚拟环境来安装不同的CUDA版本,这种隔离性适合管理多个深度学习项目并使用不同版本CUDA的时,可以灵活地在anaconda环境中切换和管理不同版本。
- 虚拟环境中实际安装的是 CUDA Runtime(包含CUDA库和加速组件),在虚拟环境内自带CUDA库,不依赖于系统显卡驱动。Anaconda中的CUDA可以和不同的驱动版本一起工作,不需要安装相应的系统CUDA驱动。
- 在虚拟环境中,如果使用PyTorch,TensorFlow框架,它会优先使用虚拟环境中的CUDA版本(11.7)。也就是说,深度学习框架会自动根据虚拟环境的CUDA版本运行,与系统CUDA无关。
性能差异
在大部分情况下,二者的性能差异可以忽略不计,虚拟环境中的CUDA库是通过Anaconda配置的CUDA Runtime,与base环境下的CUDA相比不会有太大性能差别。
直接在虚拟环境中安装CUDA
相信这个时候可能有同学要问了,如果我不在base环境下安装CUDA,直接在创建的项目虚拟环境中使用PyTorch来安装CUDA是否可行?答案是当然可以。以下是详细解释。
在Anaconda环境中安装的CUDA实际上是 CUDA Runtime(包含了最常用的库cuBLAS、cuDNN等和一些加速组件,可以用于深度学习、矩阵运算、张量操作,加速神经网络的训练)。这个虚拟环境中的CUDA是与base环境隔离的,只要在该环境中安装了合适的版本,它就可以直接支持GPU加速。
深度学习框架在虚拟环境中运行时,会自动检测是否有合适的CUDA版本,如果在虚拟环境中安装了CUDA,它会优先使用虚拟环境中的CUDA版本来驱动GPU计算,在安装框架时,可以通过conda
或pip
直接安装包含CUDA的版本,无需系统全局安装CUDA。例如,安装PyTorch时选择cudatoolkit=11.7
版本即可在虚拟环境中配置好CUDA支持。
值得注意的是,虽然系统base环境上可以不安装CUDA,但显卡驱动仍然是必须的。NVIDIA的GPU加速需要NVIDIA驱动程序,驱动程序提供与硬件的接口,让CUDA能够利用GPU,也就是说如果系统上没有安装NVIDIA驱动,CUDA(即使在虚拟环境中)也无法访问和利用GPU进行计算(这也是为什么大多数人会先在系统base环境上安装CUDA安装驱动的原因)。
总结
以上就是CUDA的简单介绍,以及关于CUDA安装在系统base环境还是anaconda虚拟环境中的区别,希望这篇文章能够对你有所帮助。
参考文献
- CUDA Toolkit Documentation 12.6 Update 2
- https://pytorch.org/docs/stable/index.html
- 《GPU Computing Gems Emerald Edition》 edited by Wen-mei W. Hwu