大模型实战:微调、优化与私有化部署
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.1 CUDA环境准备

2.1.1 基础环境

1.操作系统

首先,我们需要考虑操作系统要求。目前,开源的大模型都支持在Windows、Linux、Mac系统上进行部署和运行,并且Python及许多与深度学习相关的框架也都能够跨平台运行。

针对大模型服务而言,Linux系统通常在资源利用和性能方面更加高效。特别是在服务器环境中,Linux系统更适合于多卡并行运行和服务优化等企业级部署场景。因此,在实践大模型时,建议使用Ubuntu系统。然而,许多用户可能更偏向于在Windows系统上进行实践和学习。尽管Windows系统在处理大规模计算任务时性能和资源管理方面相对于Ubuntu略显不足,但其更符合大多数用户的使用习惯。

因此,在随后的章节内容中,我们将逐一阐述GLM大模型在Ubuntu及Windows平台上的部署方法。从部署流程的广义视角观察,采用Ubuntu系统或Windows系统,部署GLM大模型的核心步骤基本一致。不过,值得注意的是,在本书深入探讨大模型微调的部分,我们发现Windows系统对于QLoRA这一量化微调技术的支持相对有限,因此,出于优化微调体验的考虑,我们强烈建议读者使用Linux(如Ubuntu)系统进行操作。

2.硬件配置要求

本书提供两种模型(GLM-4-9B-chat和ChatGLM3-6B)的本地化部署方案,请读者根据自身的硬件配置情况,选择性部署相应的模型。其中,GLM-4-9B-chat在推理运行时,大约消耗21~22GB的显存资源;若采用即将阐述的INT4量化技术,则能有效将显存需求降至约为15GB。值得注意的是,即便采用量化手段,对此模型进行微调仍需约为32GB的显存,请作者根据自身硬件条件谨慎考虑。若当前硬件配置无法满足上述要求,则推荐选用ChatGLM3-6B,其标准配置下需至少13GB显存与16GB内存支持,而采用INT4版本时,显存需求骤减至5GB以上,内存需求为8GB以上,极大地降低了硬件门槛。至于ChatGLM3-6B的微调作业,最低显存要求为16GB,这符合多数消费级显卡的标准配置。

在本章中,我们将重点讲解如何配置GPU环境来部署运行两类不同参数规模的模型。本章在一个纯净的Ubuntu 22.04和Windows系统基础上,安装必要的大模型运行依赖环境,并实际部署、运行及使用这两类模型。

2.1.2 大模型运行环境

关于大模型运行环境,安装显卡驱动程序(简称驱动)显然是首先要做的事情。我们需要确保可以正常地将大模型部署在GPU上,这也是比较容易出现问题的环节,如安装过程中因各种环境问题导致安装不成功、缺依赖包等,总会遇到莫名其妙的报错,从而在安装的第一步就受挫。

下面简要说明需要安装的三大部分。

(1)NVIDIA(英伟达)显卡驱动:Linux系统默认不会安装相关显卡驱动,需要自己安装。除CUDA(Compute Unified Device Architecture,计算统一设备架构)外,最重要的是驱动,因为硬件需要驱动才能与软件一样被其他软件使用。通常,NVIDIA的CUDA版本和它的GPU驱动版本具有一定的匹配关系。

(2)CUDA:是NVIDIA公司开发的一组编程语言扩展、库和工具,让开发者能够编写内核函数,可以在GPU上并行计算。假设已安装了11.8版本的CUDA,在未来的某一天,PyTorch升级后对CUDA有了新的要求,则需要同时更新CUDA和GPU Driver。因此,最好安装最新版本的显卡驱动和对应的最新版本CUDA。

(3)cuDNN(CUDA Deep Neural Network Library,CUDA深度神经网络库):是NVIDIA公司针对深度神经网络的应用而开发的加速库,以帮助开发者更快地实现深度神经网络训练推理过程。

2.1.3 安装显卡驱动

显卡驱动的核心功能在于激活与管理显卡硬件,确保其高效运行,它是连接操作系统与显卡硬件之间的桥梁,使二者能够顺畅沟通并协同工作。通过优化显卡的运行效率,显卡驱动不仅加速了图形处理任务,还促进了与显卡相关的软件应用的高效执行,确保了这些程序能够充分利用显卡的硬件资源。

具体而言,显卡驱动扮演的角色是,它不仅有效地驱动硬件设备以最佳状态运行,还包含了必要的硬件配置信息,确保系统及其他软件能够准确无误地与显卡硬件互动,实现预期功能。

1.安装包准备

在众多高性能计算服务器场景中,NVIDIA公司制造的GPU尤其受到青睐。这些GPU不仅擅长加速图形渲染,还在机器学习、深度学习等领域展现了卓越性能。其中,广泛采用的型号包括GTX 4080、GTX 4070 Ti及GTX 4060 Ti,这些产品以其强大的计算能力和高度的能效比著称。

如图2-1所示,NVIDIA官网提供了相关产品的下载入口。欲了解更多详细信息,包括NVIDIA的全系列产品阵容,可访问NVIDIA官网,查看最新的产品系列介绍和详尽规格,以便用户根据具体需求做出合适的选择。

图2-1

2.Windows系统

通常,为了进行大模型的实践和部署,对于台式机而言,如果选择ChatGLM3-6B并进行量化,则至少需要2060(6GB显存显卡)或更高规格的显卡;对于笔记本电脑,则至少需要3060(8GB显存显卡)或更高规格的显卡。需要特别注意的是,尽管两者可能使用相同型号的显卡,但由于移动端显卡(笔记本电脑显卡)受限于功耗和散热等因素,其性能和显存容量通常会略逊于主机显卡(台式机显卡)。因此,在选择设备时,应充分考虑到实际的使用需求和性能要求,以确保系统能够高效运行和处理计算任务。

如图2-2所示,在Windows的搜索栏中搜索并打开“计算机管理”,如果计算机上没有安装NVIDIA显卡驱动,则需要下载安装。如果已安装,则跳过此章节。

图2-2

(1)找到之前下载的Windows显卡驱动安装包的.exe文件,双击后执行,如图2-3所示,建议选择默认路径。

图2-3

(2)进入NVIDIA显卡驱动安装程序:找到NVIDIA显卡驱动安装的.exe文件,如图2-4所示,按流程进行安装。

图2-4

(3)验证NVIDIA安装程序是否已完成,执行到最后一步的结果如图2-5所示。

图2-5

(4)安装完成后,需要重启计算机才会生效。验证方法是:重启计算机后,在桌面上单击鼠标右键,出现如图2-6所示的图标则表明安装成功。

图2-6

3.Ubuntu系统

在Ubuntu系统下,安装显卡驱动通常有以下两种主要方式。

(1)手动安装官方提供的NVIDIA显卡驱动,这种方式相对稳定可靠,但可能需要解决一些问题。

(2)通过系统自带的“软件和更新”程序进行附加驱动的更新,这种方法比较简单,但需要确保系统能够连接到互联网。

由于我们通常会在本地化部署的服务器上进行操作,考虑到网络安全因素,有时服务器可能无法连接到互联网,因此我们选择了手动安装的方式。无论选择哪种方法,都需要进行一些前置操作,包括安装必要的依赖包和禁用默认的显卡驱动。具体的操作步骤如下。

①安装依赖包。

在终端依次执行完如下命令,如代码2-1所示。

代码2-1

②禁用默认驱动。

在安装NVIDIA显卡驱动前需要禁止系统自带显卡驱动nouveau。如代码2-2所示,在终端输入命令打开blacklist.conf文件或新建一个单独的blacklist-nouveau.conf文件。

代码2-2

如代码2-3所示,在打开的文件末尾输入代码并保存。

代码2-3

如代码2-4所示,通过update-initramfs命令更新系统的initramfs镜像文件,完成以上步骤后,重启计算机。然后,在终端中输入lsmod命令进行验证。

代码2-4

如果没有输出,则说明禁用了nouveau。

③如图2-7所示,找到之前下载的Ubuntu显卡驱动。

使用cd命令进入存放驱动文件的目录中,使用ls命令查看目录中的文件。选择好显卡驱动和适用平台后单击下载,下载完成后,对该驱动添加执行权限,否则无法进入安装页面。

图2-7

执行如代码2-5所示的代码,给出执行权限。

代码2-5

随后进入安装界面,依次选择Continue→不安装32位兼容库(选择no)→不运行x配置(选择no)。最后输入reboot命令重启主机。重新进入图形化界面,在终端输入nvidia-smi命令。

2.1.4 安装CUDA

安装完驱动后,很多读者可能会存在一个误解,即通过nvidia-smi命令可以查看到显卡驱动兼容的CUDA版本,而本机显示的版本为“CUDA Version:12.2”。这让很多人误以为已经成功安装了CUDA 12.2版本,实际上,这个版本指的是显卡驱动兼容的最高CUDA版本。换言之,当前系统驱动所支持的最高CUDA版本是12.2。因此,安装更高版本的CUDA可能会导致不兼容的问题,需要谨慎考虑。

需要明确的是,显卡驱动与CUDA的安装是两个不同的过程。显卡驱动的安装使计算机系统能够正确识别和使用显卡,而CUDA则是NVIDIA开发的一个平台,允许开发者利用特定的NVIDIA GPU进行通用计算。CUDA主要用于完成大量并行处理的计算密集型任务,例如深度学习、科学计算和图形处理等。如果应用程序或开发工作需要利用GPU的并行计算能力,那么CUDA就显得至关重要。但是,如果只进行常规使用,例如网页浏览、办公软件使用或轻度的图形处理,那么安装标准的显卡驱动就足够了,不需要单独安装CUDA。然而,考虑到进行大模型实践的需求,安装CUDA是必不可少的。

CUDA提供两种主要的编程接口:CUDA Runtime API(Application Programming Interface,应用程序编程接口)和CUDA Driver API。这两种接口为开发者提供了灵活且高效的方式来利用GPU进行并行计算,从而加速各种类型的计算任务的执行。

(1)CUDA Runtime API是一种更高级别的抽象,旨在简化编程过程,它自动处理许多底层细节,使得编程更加简便。大多数程序员选择使用CUDARuntime API,因为它更易于学习和使用,并能够提高编程效率。

(2)相比之下,CUDA Driver API提供了更细粒度的控制,允许开发者直接与CUDA驱动进行交互。它通常用于需要对计算资源进行更精细控制的高级应用场景,如特定硬件架构下的性能优化、并行计算任务的调度等。

安装CUDA,其实就是在安装CUDA Toolkit,其版本决定了我们可以使用的CUDA RuntimeAPI和CUDA Driver API的版本。安装CUDA Toolkit时会安装一系列工具和库,用于开发和运行CUDA加速的应用程序。这包括CUDA编译器(nvcc)、CUDA库和API,以及其他用于支持CUDA编程的工具。如果安装好了CUDA Toolkit,则可以开发和运行使用CUDA的程序。

1.安装包准备

需要进入NVIDIA官网,如图2-8所示,找到需要下载的CUDA版本。

图2-8

在Linux系统下,用户需根据自身系统配置与需求,依次选定合适的操作系统版本等参数。如图2-9所示,Linux提供三种安装包选项以适应不同的部署情景。

(1)runfile(local):本地安装,这是一种便捷的安装方式,将所有安装文件整合为一个单独的runfile。用户下载完毕后,直接执行该文件即可启动安装进程,不需要额外的在线下载步骤,简化了安装流程。

(2)deb(network):网络安装,适用于偏好通过网络安装的用户,需借助操作系统自带的包管理工具(如APT)来添加CUDA的官方软件源。完成源的添加后,即可利用包管理工具直接搜索并安装CUDA,此法便于后续的更新与维护。

(3)deb(local):除网络安装外,用户同样可以选择事先下载deb包至本地,然后通过包管理器手动导入并安装,这种方式适用于网络条件受限或希望离线部署的场景。

图2-9

Windows情况如图2-10所示,概述了两种可选的安装包。

图2-10

这两种可选的安装包如下。

(1)exe(local):本地安装包,这是一个完整的CUDA安装包,包含所有必需的组件,以可执行文件形式提供,体积较大,大约占用2GB的存储空间。

(2)exe(network):网络安装包,管理器作为另一种选择,该安装包的体积较小,约为300MB,实质上是一个下载器,它会在安装过程中连接至网络下载所需的CUDA组件,适合那些希望节省初始下载带宽或仅需特定组件的用户。

2.Windows系统

在Windows系统下,用户可通过在命令提示符下执行命令nvcc -V来检查CUDA的安装版本,以此验证CUDA是否已成功安装在系统中,如图2-11所示。

图2-11

如图2-12所示,打开CUDA的安装目录:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\。

图2-12

若出现如图2-12所示的文件,说明已经安装,那么可以跳过该步骤。如果未安装,则执行以下步骤。

(1)双击下载的本地安装包,如图2-13所示。

图2-13

(2)选择需要安装的组件,如图2-14所示。

图2-14

(3)选择安装位置,建议采用默认设置,如图2-15所示。

图2-15

(4)添加环境变量,如图2-16所示,该环境变量有助于未来实现多版本CUDA的切换。

图2-16

(5)重新执行nvcc -V命令进行验证,如图2-17所示。

图2-17

3.Ubuntu系统

如图2-18所示,当运行CUDA应用程序时,通常是在使用与安装的 CUDA Toolkit版本相对应的Runtime API。这可以通过nvcc -V命令查询。

图2-18

或者进入/usr/local以查看是否有cuda,如图2-19所示。

图2-19

如果已经安装,则可以跳过该步骤。如果发现未安装,则执行以下步骤。

(1)通过apt install nvidia-cuda-toolkit安装的是Ubuntu仓库中可用的CUDA Toolkit版本,它可能不是最新的版本,也可能不是特定需要的版本。该安装包主要用于本地CUDA开发(如果想直接编写CUDA程序或编译CUDA代码)。

如图2-20所示,根据当前官方给出的代码,在终端执行即可安装。

图2-20

(2)修改配置文件:执行命令sudo vim ~/.bashrc,在文本的最后一行添加代码2-6。

代码2-6

(3)通过代码2-7,检查CUDA是否安装正确。

代码2-7

2.1.5 安装cuDNN

cuDNN的安装过程相比CUDA而言更为简便,仅需以下几个步骤:首先,下载与你的系统及CUDA版本相匹配的cuDNN压缩包;然后,将解压后的文件复制到指定的系统目录中;最后,确保对这些文件设置正确的访问权限,以便系统能够顺利调用。通过以上操作,cuDNN即可完成安装并准备就绪。

1.安装包准备

访问NVIDIA官方网站,导航至cuDNN的专属下载页面。请注意,为获取下载权限,需要先登录账户并完成一份简短小问卷。根据图2-21的指示,根据CUDA版本进行选择,可直接单击相关链接,开始下载cuDNN的压缩包。

图2-21

和CUDA的安装一样,如图2-22所示,官网提供了两种系统的不同安装方式,可根据你的系统进行选择。

图2-22

2.Windows系统

在Windows系统下,完成cuDNN压缩包的下载后,按照如图2-23所示的步骤进行操作:首先,将下载的压缩包解压缩;然后,将解压出的bin、include和lib这三个文件夹分别复制至CUDA工具包的v11.1版本目录下,目的是替换该目录中原有的bin、include和lib文件夹,以此完成cuDNN的安装过程。

图2-23

3.Ubuntu系统

在Ubuntu系统下,完成文件下载后,需执行代码2-8中的操作:首先,将相关文件复制至系统指定目录;然后,通过执行适当的命令为这些文件赋予必要的权限,以确保后续操作能够顺利进行。

代码2-8