不同隔离级别下的CUDA环境配置
CUDA库文件
CUDA
库文件是指Nvidia公司发布的,用于在GPU上进行高性能计算的库文件。在CUDA
中定义了一系列的算子,这些算子是TensorFlow
、PyTorch
等当下流行的深度学习框架得以在GPU上运行的基础。同时,与众多工具库一样,CUDA
库文件同样拥有多个版本,不同版本之间功能与特性上均有着一定的差异,数据接口也并不一致。因此,对于这些需要使用GPU进行高性能计算的深度学习框架而言,不同的框架版本对CUDA
库的版本也有着不同的依赖。
在训练或使用不同的深度学习模型时,通常对深度学习框架的版本有着不同的要求,这也使得其对CUDA
库的版本有着不同的需求。
软件运行环境的隔离
大多数程序运行过程中,都是需要一个运行环境,来将程序中使用程序设计语言描述的计算过程,转换为在计算机硬件上的执行过程,各种操作系统就是一种较为底层的软件运行环境。
不同的程序对于软件的运行环境有着不同的需求,在实际工作中,我们通常会需要多种环境,来运行不同的程序。最直接的做法就是我们直接安装不同的操作系统,在不同的操作系统中运行不同的程序,这是一种非常彻底的做法,不同操作系统之间安装的运行环境之间是没有任何干扰的。但很显然这种做法是非常浪费的,因为很多时候,我们的程序所需求的运行环境之间只有很小的区别,整个操作系统的替换不仅会浪费大量的磁盘空间,还会导致运行环境之间的切换变得异常麻烦。
大多数情况下,我们并不需要操作系统级别的运行环境隔离,而是选择采用虚拟机或者基于环境变量的库文件选择的方式来进行运行环境的隔离。从运行环境的隔离级别上来看,我们可以认为其遵循如下的层级关系: [ \text{操作系统}\rightarrow\text{虚拟机}\rightarrow\text{环境变量} ] 通常而言,更低的隔离级别,意味着更高程度的资源复用。同时在低隔离级别运行环境中的库文件通常会覆盖上一层隔离级别运行环境中的库文件设定。
CUDA的安装与版本切换
CUDA
作为一个GPU计算库,依赖于Nvidia GPU的驱动程序,也就是说,一台计算机上可以使用哪些版本的CUDA
库,是取决于该计算机上安装的Nvidia GPU的驱动版本的。而Nvidia的驱动版本适配,又取决于具体的Nvidia GPU型号。在选择CUDA
库版本时,应当对Nvidia GPU的型号与驱动版本进行确认。例如当前的Ampere
架构的Nvidia GPU就只支持CUDA 11.0
以上版本。
在安装CUDA
库时,针对三种不同的隔离级别,有着多种不同的安装方式
直接在系统中安装
访问Nvidia CUDA Toolkit根据自己的操作系统版本选择安装CUDA工具包并安装。以Linux为例,安装CUDA 11.7
时可以使用以下命令:
|
|
在操作系统中可以同时安装多个版本的CUDA
库,且这些CUDA
库将会在操作系统中共存,Linux
系统中,会通过软链接的方式将最后安装的CUDA
库链接到/usr/local/CUDA
目录下
使用Docker安装
Nvidia官方在Docker Hub上维护了带有CUDA
与cuDNN
库的常用Linux
发行版的镜像,可访问Docker Hub nvidia/cuda 选用合适的镜像。
例如通过以下命令:
|
|
将会从Docker Hub拉取一个带有CUDA 11.2.0
与cudnn 8
的Ubuntu
镜像。并基于此镜像创建一个Docker容器,并运行一个bash
终端。
Docker是一种应用容器引擎,通过一个被称作容器的轻量级虚拟机来构建一个运行环境。可以通过Docker容器来构建多个相互隔离的运行环境,这些运行环境之间相互不会影响,并且可以同时运行。
使用Conda安装
Conda是一个软件包管理和环境管理系统。目前通常被应用于Python环境的创建与管理。与大家通常印象中的Conda只是用来创建Python运行环境和安装Python工具包的印象不同,Conda同样可以安装CUDA Toolkit
和cuDNN
库。
Conda可以创建多个运行环境,并通过切换环境变量的方式来在多个运行环境间快速切换,因此可以在不同的Conda运行环境中安装不同版本的CUDA ToolKit
和cuDNN
库,并使用Conda在不同版本的CUDA ToolKit
和cuDNN
库之间快速切换。
创建Conda环境时,可参照如下命令:
|
|
安装CUDA ToolKit
和cuDNN
库时,可参照如下命令:
|
|
使用Conda管理CUDA
环境时,优点在于环境间切换方便,相比于Docker没有文件隔离,程序文件的管理更加集中方便。但缺点在于Conda的资源库中存储的CUDA
与cuDNN
的版本并不多。