一文说透 AI 大模型背后的基础设施

作者:王锦

云计算背后的基础设施大家可能已经耳熟能详,AI 大模型惊艳地进入大众视野之后,人工智能算法其背后的基础设施,也成了大家常常讨论的话题。那么到底是哪些基础设施,支撑起了模型的训练和模型的运行,我们先从衡量基础设施的算力说起。

从区块链的算力说起

在比特币出现之前,大家可能对算力都没什么特别的概念,只是在买电脑的时候隐约知道,CPU 频率越高,CPU 每秒可以执行的指令就越多,电脑的性能也就越好。直到比特币的出现,工作量证明计算(Proof of Work)直接与钱挂钩,算力这个概念才开始显式地出现在各种工程以及软件中,大家也会用算力来衡量各种硬件。比特币中的计算主要用到的是哈希算法。衡量工作量证明计算的算力就是哈希率(hash rate),即每秒能计算多少个哈希值。

那么这个哈希计算的算力和 AI 大模型的算力有什么关系呢?且听我慢慢道来。我先用生活中常见的做饭让大家来理解一下这个哈希计算的过程:

制作一道牛肉炒饭,首先需要将牛肉和米饭分别处理,将牛肉切块后放入平底锅中煎炒,在这个过程中,添加一些佐料,例如盐、胡椒粉、酱油等等,来调整炒出的牛肉口感和味道。最后将煮好的米饭加入锅中与牛肉翻炒在一起,得到一份美味的牛肉炒饭。

这个将各种食材和佐料混合到一起过程就是哈希计算的过程,它是一个单向不可逆的计算过程,牛肉炒饭没法恢复成牛肉。而比特币和这个计算过程有什么关系呢?继续按照这个炒饭的例子来说,就是比特币全网每隔一段时间会发布一个任务,谁能把最近 10 分钟新鲜食材都融合起来(收集交易账本),最先炒出的炒饭有黯然销魂的味道,就能获得一个比特币。那要怎么办?多炒几份,每份的料都稍微有一点点不一样,然后做完之尝一下有没有黯然销魂的味道,第一个炒出黯然销魂炒饭的人,便证明了自己工作量,也就获得了对应的奖励。

从这个例子中,我们可以发现,在单位时间内炒的饭的数量越多,炒出黯然销魂炒饭的可能性也就越高。

这个时候就有人就会想办法,我多搞几个灶台同时炒,是不是就能快一些?是的,这个就是 CPU 和 GPU 算力的差异。CPU 就像家里常见的燃气灶,灶台数量不多(核数少),但是火很旺,各种复杂的菜都能炒,但是单位时间内只能炒几次饭。而 GPU 就像一个小灶子,火很小,但刚好能炒出炒饭,由于灶台数量非常多(核数多),所以单位时间内能炒的饭的数量非常多。GPU 的这个核数多的特性记一下,我们后面马上还提到。

同时,我们也可以从这个炒饭的角度,来理解一下为什么区块链中的工作量证明计算(Proof of Work)是非常浪费的。因为最终只有那份黯然销魂味道的饭是有用的,其他的饭在尝尝没有黯然销魂味之后全部都要被倒掉。

GPU 的算力基础

AI 大模型的深度学习模型主要运行在神经网络之上,而神经网络网络的计算过程可以被视为大量矩阵计算的组合。矩阵计算有别于普通的逻辑计算,多核的并行计算能够极大地提升计算速度,是的,GPU 多核在这里就派上用处了:10x10 的矩阵运算就像 100 个灶台都摆着锅,同时可以把 100 种食材放到对应的 100 口锅中去烹饪。这些计算与工作量证明计算的最大差异就是这 100 个灶台烧的菜都是不一样的,而且烧出来的菜都是有用的,不像区块链中的工作量证明场景下炒出来的饭 99.999%都被倒掉。

不过 GPU 可不是一开始就这么牛的,在 NVIDIA 的 CUDA 出现以前,可以说 GPU 相对于 CPU 毫无算力优势。NVIDIA 的 CUDA(Compute Unified Device Architecture)是在 2007 年 6 月推出,是一种基于 NVIDIA GPU 的并行计算平台和编程模型。CUDA 是为了支持 NVIDIA 的高性能计算 GPU 而开发的,可以让开发者使用 C/C++、Python 等编程语言编写并行计算程序,从而充分利用 GPU 的并行计算能力,也就是上文提到的 GPU 的多核能力。

在 2017 年,NVIDIA 在为了进一步提升深度学习模型的运算效率,在 Volta 架构上提供了一种叫 Tensor Cores 的新型计算单元,具有专门的电路设计,用于执行深度学习中的矩阵乘法和卷积等张量运算,以提高计算效率。因此,Tensor Cores 可以被视为专门针对深度学习计算的硬件加速器。

其加速效果可视演示如下动图所示,非常惊艳:

由此来看 GPU 作为算力基础,支撑起了通用 AI 大模型的训练。我们来拆解一下 GPU 的组成,看看哪些对算力起了至关重要的影响。

  • CUDA Cores:通用计算单元,主要用于执行标准的浮点运算,例如加法、乘法和向量操作。它们被设计用于高并发的数据并行计算,能够同时执行大量的浮点运算,CUDA 核心数量决定了 GPU 并行处理的能力。
  • Tensor Cores:Tensor Core 是专为执行张量或矩阵运算而设计的专用执行单元,使用低精度浮点运算(FP16)执行矩阵乘法和累加操作,能够极大地提高深度学习模型的训练速度和效率。该计算单元在 Volta 架构上推出,专为深度学习而设计的,在最近推出的 Turing 和 Ampere 架构上不断演进。
  • 显存:暂时储存 GPU 要处理的数据和处理完毕的数据。显存的容量越大,GPU 就能够处理更大规模的数据和程序,从而提高算力。
  • 显存带宽:显存带宽是指芯片与显存之间的数据传输速率,它以字节/秒为单位。显存带宽是决定显卡性能和速度最重要的因素之一。
  • NVLink:NVIDIA 推出的一种高速连接技术,用于连接多块 GPU 之间的数据传输。NVLink 的传输速度比 PCIe 更快,PCIe 4.0 的带宽最高可以达到 16GB/s,而 NVLink 2.0 的带宽则高达 300GB/s,这意味着 NVLink 的传输速度是 PCIe 的数十倍。NVLink 能够让 GPU 直接访问其他 GPU 上的显存,能够大幅度提高多 GPU 系统的性能和效率。

常见的含NVIDIA显卡的GPU服务器的结构示意图 (图片来源:GPU内存(显存)的理解与基本使用)

通过这张图可以看到,随着 GPU 并行计算的不断发展,PCIe 总线连接方式在高性能计算领域已经显得有些过时。在传统的 CPU 体系结构下,各个计算单元通过 PCIe 总线与主板上的 CPU、内存、硬盘等设备进行通信,由于 PCIe 总线带宽有限,这种方式往往无法满足大规模并行计算的需求。于是 NVIDIA 在物理层面另开了一条叫 NVLink 的高速互联通道,将多个 GPU 直接连接起来,形成一个高性能计算集群。从 NVLink 也可以看出,通信交换带宽的提升是基础设施中提升算力的关键点,这个我们后面还会讲到。

算力基础设施

拆解完 GPU 的算力基础组成之后,我们再来看看算力基础设施,几张显卡就能构成算力基础设施吗?不是的,基础设施是个复杂的系统工程,比如要将大自然的水变成拧开水龙头就能出来的自来水,就要落地一套包含水源、输水、净水、配水的供水工程。

那么,GPU 也是同样的,从单张卡构成计算集群提供巨大算力,也是一个庞大的软硬件结合的工程。其中通用计算集群部分因为篇幅的原因在本文就不过多展开,我们主要讲讲 GPU 相关的部分:和所有的基础设施一样,算力基础设施最关键也是算力分配问题,当前 GPU 单卡的算力越来越强,也越来越贵,如果粗暴地按照单卡的粒度去分配算力,将会导致较大的资源浪费,让多个训练任务跑在一张显卡上是非常有必要的。

vGPU 是 NVIDIA 推出的一个支持在 VM 应用上的虚拟 GPU 软件,它支持在一块物理 GPU 创建许多小型的虚拟 GPU,并让这些虚拟 GPU 提供给不同的用户使用,其内部原理如下图所示:

对于物理硬件的虚拟化,主要分为两个:存储的虚拟化、运算的虚拟化

  • 存储:通过创建专用的 buf(dedicated framebuffer),事先占据方式创建虚拟 GPU 的存储空间
  • 运算:通过时间片管理器(scheduling)来控制任务对 GPU 物理设备引擎的使用时间

基于时间片(time-sliced) 的 vGPU 本质上面还是让任务公用物理设备(引擎),通过改变虚拟 GPU 的时间片使用多少,来控制任务对整个物理设备上的资源的使用量。这么方式虽然能够满足一些应用场景,但是由于物理卡上的资源是公用的,所有任务要轮着用,使得整卡切分后在算力/带宽/任务切换上面难做到好的 QoS。

国内 GPU 虚拟化的方式基本上是参考 vGPU 的方式进行。GPU 的虚拟化基本围绕:数据是否安全、隔离是否充分、QoS 是否能够保证这三个问题来进行设计。不可否认,这些虚拟化都取得了很好的效果,而且对集群资源利用率的提升上面帮助很大。但是毕竟不能修改约束底层硬件,在安全和资源分配平衡上始终都存在局限。还有就是,软件切分隔离会带来物理卡的资源浪费,切分越多浪费越严重。

不过 NVIDIA 自 2020 年推出的 Ampere 架构的芯片就很好的解决了上述的问题。以大家最广泛提到的 A100 显卡为例:Ampere 架构通过硬件上的设计使得 GPU 能够创建子 GPU(这个虚拟化出来 GPU 也常被称为是 GPU Instance/GI)。通过对系统通道、控制总线、算力单元(TPC)、全局显存、L2 cache、数据总线)这些 GPU 物理资源的切分后的重新组合,每个 GI 能够做到数据保护、故障隔离独立、服务(Qos)稳定。

  • GI:创建 GI 可以被认为是将一个大 GPU 拆分为多个小 GPU,每个 GI 都有专用的计算和内存资源。每个 GI 的行为就像一个更小、功能完全独立的 GPU,它包括预定义数量的 GPC(Graphics Processing Cluster)、SMs、二级缓存片、内存控制器和帧缓冲内存。
  • CI:计算实例(Compute Instance, CI)是可以在 GI 中配置不同级别的计算能力的分组,封装了可以在 GI 中执行工作的所有计算资源(GPC、复制引擎、NVDEC 单元的数量等),每个 GI 中的 CI 数量可变。但结合我们现有的调度粒度,我们倾向于在一个 GI 中只创建一个 CI,然后在 CI 内部再通过现有方式实现并发。

下面左图将 A100 作为整体使用的示意图,右图为开启 MIG 的 A100 示意图:

由于显存和 SM 的切分的硬件限制,GI 的显存/算力只能是有限的几种组合,GI 的切分方式可枚举为以下 18 种。

以 A100(40GB)为例,则表中的 7 代表 7g.40gb,4 代表 4g.20gb,3 代表 3g.20gb,2 代表 2g.10gb,1 代表 1g.5gb,根据 MIG Device Name 的规则,1g 代表 GI 包括 1 个计算切片,5gb 代表 GI 的内存大小;而 A100(80GB)只需要相应地改变内存大小。

通过 OpenAI 近期披露的文章《Scaling Kubernetes to 7,500 nodes》和 2018 年披露的文章《Scaling Kubernetes to 2,500 nodes》,我们可以窥探到 OpenAI 的训练集群也是一个 Kubernetes 集群,上面 GPU 虚拟化最终落地的编排算力任务方案就是 k8s,有关 k8s 集群以及云原生因为篇幅有限在本文就不做过多展开了,我们针对 OpenAI 的文章稍微讲几个点:

  1. 模型生产流程:文章提到这个集群不太依赖负载均衡,因此这 7500 台机器的 k8s 集群是一个训练集群,并不是最终提供服务的集群,有关模型的生产流程最后一节会展开说。
  2. k8s API Server:集群规模变大之后,和大家最常遇到的问题一样,API Server 最先扛不住,把存储从网络 SSD 盘切换到本地 SSD 盘解决问题。
  3. 大模型镜像:镜像大模型的镜像都特别大,拉镜像网络扛不住,使用镜像预热方案降低了一部分带宽,剩下的问题放在未解决中还希望继续优化。推荐可以试试阿里开源的分布式镜像分发方案 Dragonfly。
  4. 容器网络:2018 年的时候 OpenAI 还在考虑怎么把 Flannel 网络 (~2Gbit/s) 切到 hostNetwork 网络(10-15Gbit/s),最近披露的文章中提到已经切到 Azure 的 VMSSes CNI 方案了。根据资料,Azure Kubernetes Service(AKS)中的单个 Node 使用 CNI 的话,带宽能到 40 Gbit/s。

高性能计算

通过循序渐进的描述,我们从原理到结构,逐步了解了算力基础设施的组成。同时,因为 AI 大模型的爆发,整体的训练数据集也越来越大,训练周期越来越长,几乎所有的训练都是多机多卡。那么这个时候,前文所提到通信带宽就成为了限制算力提升的瓶颈。

为了解决这个问题的技术,在专业领域我们将其称之为:High-Performance Computing 高性能计算,旨在提高运算单元间的通信效率。由于 OpenAI 并未披露这些细节,我们以阿里云的高性能网络 EFlops 实践展开来讲讲。

EFlops 网络的性能优化分为两层:服务器内部的通信优化和服务器间的网络通信优化。

服务器内部的通信优化,主要是解决 PCIe 各场景下的通信拥塞问题进而提升通信效率。

在服务器间的通信优化方面,EFlops 采用了 RDMA(Remote Direct Memory Access)网络作为通信网络,同时自研通信库 ACCL(Alibaba Collective Communication Library)提供通用的分布式多机多卡的集合通信功能。ACCL 实现了创新的无拥塞算法和高速网络传输,性能接近甚至超越了业界领先的其它通信库。同时,ACCL 也兼容 Nvidia 的 NCCL 通信库,以提高其普适性。

与其它集合通信库类似,ACCL 支持各种常用的深度学习框架和平台。在底层数据传输方面,由于 RDMA 具有低时延和高吞吐率的特性,节点间主要通过 RDMA / GPU Direct (GDR)进行数据传输。而节点内部也支持 PCIe/NVLink 等各种互联方式。

AI 全栈平台 PAI

作为一个基础设施,我们基本都讲清楚了,但事实上,我们的算力基础设施,不能简单地类比那些水电煤的基础设施的,算力是个非常抽象的东西,这种资源在自然界是不存在的。

如果非要类比水厂的话,可以说输入的是海量的数据和数据科学家们的思考和想法,然后中间过程是基于科学家们精心设计的工程,利用大量的显卡的算力进行大规模的模型训练,最后的输出是一个可以提供问答服务的模型接口。所以模型训练对于整个人工智能算法生产过程而言,只是一个最重要的中间环节,完整的模型生产过程包括了模型开发、模型训练和模型部署。在网上大家所使用的问答服务,是最后一个环节,模型部署的产物。

所以如果要生产出一个非常强大的 AI 模型,这一套完整的生产过程是必不可少的,于是阿里云提供了 AI 全栈平台 PAI。

阿里云机器学习产品 PAI(Platform of Artificial Intelligence) 面向企业客户及开发者提供易上手、高性价比、高性能、方便扩展、具备多种行业场景插件的机器学习/深度学习工程化平台。内置 140+种优化算法,提供包括数据标注(PAI-iTAG)、模型构建(PAI-Designer、PAI-DSW)、模型训练(PAI-DLC)、编译优化、推理部署(PAI-EAS)等全流程 AI 工程化能力。

在模型开发阶段,可通过 PAI-Designer 和 PAI-DSW 两款开发工具来完成建模。

  • PAI-Designer 免写代码开发工具,提供经典的机器学习算法组件,如回归、分类、聚类、文本分析等。
  • PAI-DSW 机器学习交互式编程开发工具,适用于不同水平的开发者。

在模型训练阶段, PAI-DLC 提供一站式的云原生深度学习训练平台。

  • PAI-DLC 支持多种算法框架、超大规模分布式深度学习任务运行和自定义算法框架,具备灵活、稳定、易用和高性能等特点。

在模型部署阶段,PAI-EAS 提供在线预测服务,PAI-Blade 提供推理优化服务。

  • PAI-EAS 支持用户将通过机器学习模型(PMML,PAI-OfflineModel,Tensorflow,Caffe 等)一键部署成服务,同时也支持用户根据 EAS 制定的接口规范开发自定义的在线服务。
  • PAI-Blade Blade 的所有优化技术均面向通用性设计,可以应用于不同的业务场景,通过模型系统联合优化,使模型达到最优推理性能。

在整个 PAI 平台中,我们可以将架构分成三层:

  • 最上层即我们最近常提的 Model As A Service,为终端用户提供直接可用的模型服务。
  • Paas 层即平台层,以算法模型生命周期构建的各个产品平台,从模型开发、模型训练到最终的模型部署。
  • Iaas 层基础设施层即本文花最大篇幅讲的东西,在 PAI 中主要是灵骏智算和弹性 ECS 集群,提供算力、网络、存储等。

最后,随着 AI 大模型逐步渗透到各行各业,很多领域都在发生着天翻地覆的变化。在 AI 大模型的算力加持下,很多行业正在发生质的变化,不断实现效率提升和数智升级。虽然国内的算力基础设施与国际最前沿存在一定差距,但是这种差距并不大,我们已经在多点并进,逐步突破性能瓶颈,不断推动着 AI 算力的升级。在这个过程中,欢迎大家构想出各种数智需求场景,对我们平台的算力支撑提出更高的要求,我们也非常乐于去应对这些挑战,让我们一起迎接人工智能时代的到来。

参考:

[1]GPU 硬件的发展与特性分析---Tesla 系列汇总

https://zhuanlan.zhihu.com/p/515584277

[2]GPU 内存(显存)的理解与基本使用

https://zhuanlan.zhihu.com/p/462191421

[3]Eflops 硬件集群简介_产品简介_机器学习_敏捷版通用版本

https://help.aliyun.com/apsara/agile/v_3_6_0_20210705/learn/ase-product-introduction/hardware-cluster.html

[4]EFLOPS: Algorithm and System Co-Design for a High Performance Distributed Training Platform

https://ieeexplore.ieee.org/document/9065603

[5]ACCL: Architecting Highly Scalable Distributed Training Systems With Highly Efficient Collective Communication Library

https://ieeexplore.ieee.org/document/9462480

[6]Scaling Kubernetes to 7,500 nodes

https://openai.com/research/scaling-kubernetes-to-7500-nodes

[7]Scaling Kubernetes to 2,500 nodes

https://openai.com/research/scaling-kubernetes-to-2500-nodes

[8]Visualized Modeling in Machine Learning Designer - Machine Learning Platform for AI - Alibaba Cloud Documentation Center

https://www.alibabacloud.com/help/en/machine-learning-platform-for-ai/latest/visualized-modeling-in-machine-learning-studio

[9]DSW Notebook Service - Machine Learning Platform for AI - Alibaba Cloud Documentation Center

https://www.alibabacloud.com/help/en/machine-learning-platform-for-ai/latest/dsw-notebook-service

[10]EAS Model Serving - Machine Learning Platform for AI - Alibaba Cloud Documentation Center

https://www.alibabacloud.com/help/en/machine-learning-platform-for-ai/latest/eas-model-serving

[11]Inference Acceleration (Blade) - Machine Learning Platform for AI - Alibaba Cloud Documentation Center

https://www.alibabacloud.com/help/en/machine-learning-platform-for-ai/latest/pai-blade-and-inference-optimization-agile-edition

{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/5583868/blog/8704637