第 2 章 环境配置#

在介绍完深度学习的发展历史以后,我们将正式开始迈入深度学习的原理与应用实践学习中。在正式介绍深度学习的内容之前我们先来介绍如何从零安装配置深度学习的代码运行环境。同时,由于本书所有内容都是基于PyTorch这一深度学习框架所展开的,所以在环境安装这部分将主要以PyTorch为例进行介绍说明。

2.1 体系结构介绍#

深度学习代码的运行环境主要是依托一系列的基础软件设施,例如GPU驱动、CUDA Toolkit、CUDNN、Python和PyTorch深度学习框架等等。为了帮助各位读者能够更加清晰地理解它们之间的关系,同时也方便后续深度学习环境安装过程的理解,在本节内容中我们将会先简单介绍一下整个深度学习环境的体系结构以及一一些其它的相关基础知识。

2.1.1 基础软硬件设施#

想要能够使用GPU硬件来运行一套基于Python语言的深度学习项目,一些基础的软硬件设施是必不可少的。这些基础软件包括GPU、GPU Driver、Nvidia CUDA Toolkit、CUDNN Library、Python、Conda和深度学习框架等。对于这些基础软硬件设施,我们可以通过如图2-1所示的形式来表示它们之间的依存关系。

图 2-1 基础软硬件结构图

如图2-1所示便是这些基础软硬件设施以操作系统为核心的层次结构关系。下面我们对其中的部分术语进行一个简单的介绍:

  • 操作系统 (Operating System, OS):操作系统是管理计算机硬件与软件资源的系统软件,它为各种应用软件提供了一个基础平台。操作系统负责管理和协调硬件与软件资源,提供用户界面,并执行用户命令和控制程序执行。

  • 图形处理单元 (Graphics Processing Unit, GPU):GPU是一种专门设计用于处理图像和视频数据的强大处理器。近年来,由于其并行处理能力,GPU已被广泛用于高性能计算任务,特别是在科学计算和机器学习领域。

  • GPU驱动 (GPU Driver):GPU驱动是一种软件,它允许操作系统和其他软件使用特定的图形处理单元,它负责在GPU和操作系统之间提供必要的接口和支持以便有效地利用GPU的处理能力。

  • Nvidia CUDA工具包(Nvidia Compute Unified Device Architecture Toolkit ):是由Nvidia开发的一个工具平台,它允许开发者使用Nvidia GPU进行通用计算。CUDA工具包中包含用于开发CUDA应用程序的编译器、库和调试工具等,以便开发者能够在Nvidia GPU上编写和运行CUDA程序。

  • CUDNN库(CUDA Deep Neural Network Library):是一个由Nvidia提供专为深度神经网络计算而设计的GPU加速库,它提供了高度优化的常用深度学习操作(如卷积运算),优化了在Nvidia GPU上执行深度学习算法的效率使得在Nvidia GPU上进行网络训练更加高效。

  • Python:Python是一种高级编程语言,以其简洁明了的语法和强大的库支持而闻名。在数据科学、机器学习和人工智能领域,Python因其易于学习和使用,以及广泛的社区支持,而成为了一种非常流行的语言。

  • PyTorch:PyTorch [1]是Meta公司一个开源的深度学习框架,它提供了灵活的计算图,广泛的深度学习算法支持,并能够有效地利用GPU加速。与之类似的还有Google公司开源的TensorFlow [2] 、亚马逊公司开源的MXNet [3] 以及百度公司开源的PaddlePaddle [4]等等。

  • Conda:是一个开源的包管理器,主要用于对Python开发环境的管理与隔离。

以上就是图2-1中各个部分的介绍,简单总结就是,操作系统负责统筹分配与协调各类软硬件资源;GPU是一种具有超高并行计算处理能力的硬件,而GPU驱动则是操作系统能够驱动该硬件的前提;Nvidia CUDA Toolkit是一个包含用于开发CUDA应用程序的编译器、库和调试工具的平台,而CUDNN是基于Nvidia CUDA Toolkit专为深度神经网络计算设计的GPU加速库;PyTorch是一种深度学习计算框架,提供了广泛的深度学习算法支持。这些技术共同构成了现代高性能计算和深度学习的基础框架,允许研究人员和开发者构建和部署复杂的计算密集型应用程序。

2.1.2 版本依赖关系#

由于整套基于Nvidia GPU资源的计算环境涉及到多个软件的使用,所以在安装配置深度学习环境时尤其需要注意各个软件之间的版本依赖关系。通常来说,如果个软件之间版本不匹配则可能会出现部分软件无法安装,或者即使安装成功后也无法正常运行。根据图2-1可知,整个计算环境涉及到的软件版本有:操作系统版本(如Ubuntu 22.04)、GPU驱动版本(如Driver Version 418.39)、CUDA Toolkit版本(如CUDA 10.2)、CUDNN版本(如cuDNN v8.0.1)、PyTorch版本(如PyTorch 2.0)和Python版本。

从整体来看,越是处于底层的软件其版本的兼容性覆盖面更大,而越是上层的软件版本之间的兼容程度则更小 [5]。在整个环境的安装过程中,我们有两种方式来确定各个软件应该安装的版本型号。第1种是自下而上先根据操作系统版本来确定对应支持的GPU驱动版本,然后再根据驱动版本来确定对应的CUDA Toolkit版本,最后再来确定需要安装的深度学习框架版本。第2种则是与之相反通过自上而下的方式来确定版本。通常来说,第2种使用场景更为常见,因为最接近我们使用的便是深度学习框架,我们可以根据它对应的版本来决定其它基础软件的版本。不过尽管如此,对于繁琐的版本确认问题依旧存在着较高的门槛。不过好在PyTorch官方提供了一种有效的方式来帮助我们解决这一问题,让我们只需要关注具体的PyTorch版本,而不需要关注底层各个软件的版本依赖关系。

PyTorch官方主要提供了两种方式来安装PyTorch框架,基于源码的安装方式和基于安装包的安装方式,通常我们使用的pip install或者conda install就是基于安装包的方式。在基于源码的安装方式 [6] 中,我们需要严格遵循各个软件的依赖关系去自行编译生成相关的库文件,例如CUDA Toolkit中的libtorch_cuda.so文件和CUDNN中的libcudnn.so.8文件等等,最后再去安装PyTorch框架。 在基于安装包的方法中,对应版本的whl包中已经包含了需要依赖的相关库文件,所以我们并不需要额外去安装CUDNN或者是CUDA Toolkit软件。后续,我们也将会以安装包的方式为例进行介绍。

由于在后续介绍大语言模型的内容中我们需要用到PyTorch 2.0版本中的新特性,所以接下来我们将以安装2.0版本的PyTorch为例来介绍如何通过安装包的方式来安装基于GPU环境下的PyTorch框架。同时,对于支持GPU环境的操作系统我们也将以Linux中的Ubuntu发行版本为例进行介绍,其它Linux发行版操作方式类似。对于Windows系统来说,因为其并不能发挥GPU的绝对优势所以本书就不做介绍,后续我们只需要在Windows系统上完成CPU版本的安装用于代码编写调试即可。

2.1.3 Conda工具介绍#

由于不同的开源项目通常都会用到不同的Python或者PyTorch版本,所以我们还需要一种有效的方式来对不同的运行环境进行隔离和管理。在实际应用中,我们可以借助Conda [7] 管理工具来轻松创建一个包含特定版本的Python、PyTorch以及其他依赖的环境,从而为每个项目提供一个稳定且一致的运行环境。相比于其它的Python虚拟环境管理工具,Conda的主要特点包括:

  • 跨平台性: Conda可以在Windows、macOS和Linux操作系统上运行,而且使用方式一致;
  • 环境管理: 它允许用户创建隔离的环境,以避免不同项目之间的包依赖冲突。
  • 易于使用: Conda提供了命令行界面,使得Python环境的管理变得直观和简单。

Conda作为一个包管理工具,在Python环境中我们可以通过两种方式来进行安装。第1种是下载Miniconda [8] 进行安装,第2种则是下载Anaconda[9] 进行安装。Anaconda和Miniconda本质上都是基于Conda的软件包,Anaconda拓展自Miniconda,区别在于前者包含了更多的Python科学计算包是一款商业软件,因此安装文件通常也比较大;而Miniconda则是一款开源且小巧的Conda软件包,我们可以根据实际需要来安装相应的Python软件。

下面是一些常用的Conda使用命令:

创建名为py38且Python版本为3.8的Python环境,命令如下:

conda create -n py38 python=3.8

删除名为py38的虚拟环境,命令如下:

conda env remove -n py38 

激活环境py38环境,命令如下:

conda activate py38

退出当前Python环境,命令如下:

conda deactivate

列出当前所有的Python虚拟环境,命令如下:

conda env list

对某个虚拟环境中的Python版本进行升级,命令如下:

1 conda activate py38 # 先激活进入到虚拟环境py38
2 conda install python==3.9 # 将Python版本从3.8升级到3.9

2.1.4 安装源介绍#

在计算机领域,“源” 通常指的是存储库或服务器,它用于提供软件包、应用程序或系统组件的源代码或二进制文件。例如常见的源有

  • pip源:pip 是Python的包管理器,用于安装 Python 包。pip源是存储 Python包的服务器,可以通过它来下载和安装 Python包。

  • Conda源:Conda是一个跨平台的包管理器,用于安装软件包和环境。Conda源是存储Conda软件包的服务器,它可以包含各种软件,不仅限于 Python包。

  • Linux源:对于 Linux 操作系统,源通常指的是软件包管理器使用的软件源或仓库,包含了系统中的软件包信息和其可安装的版本。用户可以通过这些源来安装、更新和卸载软件

由于网络速度的原因,通常我们在安装环境的过程中都会将这些源替换的为国内的源,例如清华源、网易源、阿里云源等等。总的来说,源可以理解为一个中央存储库,提供了获取特定类型的软件或代码的途径,这些源可以用于安装、更新或下载软件,以及协作开发。

2.1.5 小结#

在本节内容中,我们首先介绍了基于GPU硬件下深度学习环境所依赖的基础软硬件设施,并对其中的各个部分进行了一个简单的介绍;然后介绍了GPU环境下安装PyTorch框架所需要遵循的版本依赖关系,可以通过以源码编译和直接通过安装包这两种方式来安装PyTorch深度学习环境;最后介绍了Python环境中的虚拟环境管理工具Conda以及安装源的一些常识。在下一节内容中,我们将详细介绍如何一步一步完成基于PyTorch框架的深度学习运行环境。

引用#

[1] https://www.pytorch.org

[2] https://www.tensorflow.org

[3] https://mxnet.apache.org

[4] https://www.paddlepaddle.org.cn

[5] https://docs.nvidia.com/deeplearning/cudnn/pdf/cuDNN-Support-Matrix.pdf

[6] https://github.com/pytorch/pytorch#from-source

[7] https://docs.conda.io

[8] https://docs.conda.io/projects/miniconda/en/latest

[9] https://www.anaconda.com