大模型中的互联技术

介绍

生成式人工智能(Generative AI)和大型语言模型(Large Language Models)以惊人的速度吸引了全世界的关注。

本文简要介绍LLM、训练这些模型所面临的硬件挑战,以及GPU和网络领域在优化训练AI方面所做的努力。

本文通过gpt4(gptschools.cn)协助撰写

生成式AI/大型语言模型

生成式AI是人工智能的一个分支,专注于创建或生成新的内容,例如图像、文本或音乐,这些内容不是直接从现有例子中复制或衍生而来。它涉及训练深度学习模型来学习大数据集的潜在模式和特征,然后利用这些知识来产生新颖的输出。

大型语言模型(LLMs)是一种生成式AI,它们使用先进的深度学习算法在大量自然语言数据上进行训练。这些模型学习人类语言的模式和结构,并能对各种书面输入或提示生成类似人类的回应。

LLM模型已经酝酿了十多年,但直到OpenAI发布了chatGPT,它才开始引起广泛关注。chatGPT使任何有互联网接入的人都能与其中一个最强大的LLM模型GPT-3.5/GPT4进行交互。当个人和组织开始“玩”chatGPT时,他们意识到它能够以一种以前无法想象的方式改变许多应用。
chatGPT和其他最近的LLM的几乎完美的类人回应是由模型架构的进步所实现的,这些架构是高效的深度神经网络(DNN),具有数十亿到万亿个参数,并在大数据集上进行训练。大部分参数都是在训练和推理中使用的矩阵权重。

这些模型的训练浮点运算(FLOP)数量几乎与参数数量和训练数据集的大小呈线性增长。这些运算是在专门设计用于矩阵运算的处理器上执行的,如图形处理单元(GPU)、张量处理单元(TPU)和其他专门的AI芯片。GPU/TPU和AI加速器以及它们之间的通信互连的进步使得训练这些庞大的模型成为可能。

LLM应用

LLMs有许多用例,几乎每个行业都可以从中受益。组织可以根据自己的需求和领域对模型进行微调。

微调是在特定数据集上对现有语言模型进行训练,使其更专业化和符合特定任务。微调使组织能够利用这些训练模型的现有能力,并将其适应于其特殊要求。它使模型能够获得特定于领域的知识,从而提高其生成组织用例所需输出的能力。有了经过微调的模型,组织可以将LLMs用于多种用例。

例如,对于受过公司文档微调的LLMs可以用于客户支持。LLMs可以通过创建代码或支持软件工程师创建代码部分来帮助软件工程师。当对组织的专有代码库进行微调时,LLMs有可能生成与现有代码库相似并符合现有代码库要求的软件。

LLMs的许多用例包括情感分析来衡量客户反馈、将技术文档翻译成其他语言、总结会议和客户电话以及生成工程和市场内容。
随着这些LLMs的规模不断呈指数增长,计算资源和互连资源的需求也大大增加。只有在训练和微调模型以及进行推理的成本变得经济实惠时,LLMs的广泛应用才能实现。

LLM训练

为了使用自然语言文本训练LLM,通常需要收集大量数据,可以使用网络爬虫(Web Scrape)、维基百科、GitHub、Stack Exchange、Arixiv等。

大多数模型通常使用开放数据集进行训练。来自这些数据集的大量文本首先会进行标记化,通常使用字节对编码等方法。标记化将来自互联网的原始文本转换为整数(标记)序列。一个标记(唯一整数)可以代表一个字符或一个词,甚至可以代表一个词的一部分。例如,单词“unhappy”可能被拆分为两个标记 - 一个表示子词“un”,另一个表示子词“happy”。

img

根据数据集的不同,可能有数以万计的唯一标记,并且数据集本身可能对应数千亿个标记。

序列长度是模型在训练期间预测下一个标记时将查看的连续标记的数量。在GPT-3和LLaMA(来自Meta的LLM)中,序列长度约为2K~16K。一些模型使用的序列长度为10万数量级。表1比较了GPT-3和LLaMA模型的训练参数。

No alt text provided for this image

为了训练模型,标记被分成大小为batch_size(B)x序列长度的数组,并且这些批次被输送到大型神经网络模型中。对于本文,我将不深入讨论模型架构,因为这需要更深入的深度学习和Transformer知识。训练通常需要数周甚至数月,并且需要大量的GPU集群。

一旦基础模型训练完成,通常会进行监督微调(Supervised Fine Tuning,SFT)。这是一个重要的步骤,可以让LLMs扮演助手的角色,回答人类提示的问题!在监督微调中,人工承包商创建一组精心策划的数据集(数量较少但质量较高的数据集),以提示后跟着一个回应,然后使用此数据集对基础模型进行重新训练。就这样!经过训练的SFT模型现在成为一个能够对用户提示给出类似人类回应的助手。这只是对LLMs的过于简化的解释,只是为了给后面部分提供一些背景信息。

模型计算

一个具有175B参数的模型通常需要超过1TB的内存来存储参数和计算过程中的中间状态。它还需要存储训练状态的检查点(以防在训练迭代中遇到硬件错误时回退到检查点)。一万亿个令牌通常需要4TB的存储空间。像Nvidia的H100这样的高端GPU具有80GB的集成HBM内存。一个GPU的内存无法容纳模型参数和训练数据集。

根据维基百科的数据,一个LLM通常需要每个参数和标记进行六次浮点运算(FLOP)。这意味着训练GPT-3模型需要3.15 x 10^23个浮点运算,因为GPT-3模型的参数量为175B。GPT-3模型需要一个月的时间来进行训练。因此,在该持续时间内,它需要12.15 x 10^16个FLOPS(每秒浮点运算)的计算能力。

Nvidia H100 GPU中性能最高的GPU使用FP32时,大约可以做到~67 TeraFLOPS。如果这些GPU的利用率达到100%,我们需要大约2000个GPU才能获得12.15 x 10^16个FLOPS。但是,在许多训练工作负载中,由于内存和网络瓶颈,GPU利用率通常在30%左右或更低。因此,训练需要三倍于GPU数量的GPU,大约6000个H100 GPU。最初的LLM模型(表1)是使用旧的(V100)GPU进行训练的,因此需要10000个GPU。

使用成千上万的GPU,模型和训练数据集需要在GPU之间进行划分,以实现并行运算。并行计算可以在多个维度上进行。

数据并行

数据并行将训练的数据集分割为多份,每一个GPU运行模型的一个副本,分别训练分割的数据集。主要流程如下:

  1. 数据分布: 训练数据被划分成小批次,并在多个GPU上分布。每个GPU获得一个独特的小批次训练集。
  2. 模型复制: 模型的副本被放置在每个GPU上(工作进程)。
  3. 梯度计算: 每个GPU使用其小批次进行一次模型训练迭代,进行一次前向传播以进行预测,然后进行一次反向传播以计算梯度(梯度指示了下一次迭代前应如何调整模型的参数)。
  4. 梯度聚合: 然后将所有GPU的梯度进行聚合。通常通过取梯度的平均值来完成这一步骤。
  5. 模型更新: 聚合梯度被广播到所有GPU。GPU更新其本地模型参数并进行同步。
  6. 重复: 该过程重复多次,直到模型完全训练完成。

数据并行可以显著加快训练速度,尤其是在使用大型数据集时。然而,它可能会产生相当大的GPU间通信量,因为每个GPU必须与参与训练的每个其他GPU交换结果。这种全互连通信在每个训练迭代中可能会在网络中产生大量的流量。

有几种方法可以减少这种情况。对于小规模模型,可以使用专用服务器(参数服务器)来聚合梯度。这可能会导致从许多GPU到参数服务器的通信瓶颈。类似环形归约的方案被用来按环形模式将梯度从一个GPU发送到另一个GPU,其中每个GPU在接收到前一个GPU发来的梯度后,将其与本地计算的梯度进行聚合,然后将聚合结果发送到下一个GPU。这个过程非常慢,因为梯度聚合被分布在各个GPU上,并且最终结果需要在环形拓扑结构中传播回所有GPU。如果网络中存在拥塞,GPU流会被阻塞,等待聚合梯度。

此外,拥有数十亿参数以上的的大型语言模型(LLM)无法放入单个GPU。因此,仅使用数据并行还不行。

模型并行

模型并行的目标是解决模型无法放入单个GPU的情况,通过将模型参数(和计算)分散在多个GPU上来实现。一般的流程如下:

  1. 模型划分: 将模型划分为多个部分。每个部分分配给不同的GPU。由于深度神经网络通常包含一系列纵向层,因此通过层来切分大型模型是合乎逻辑的选择,其中一层或一组层可能被分配给不同的GPU。
  2. 前向传播: 在前向传播过程中,每个GPU使用“整个”训练集计算其部分模型的输出。一个GPU的输出作为输入传递给序列中的下一个GPU。下一个GPU无法开始处理直到它收到来自上一个GPU的更新。
  3. 反向传播: 在反向传播过程中,一个GPU的梯度传递给序列中的前一个GPU。收到输入后,每个GPU计算其部分模型的梯度。与前向传播类似,这在GPU之间创建了顺序依赖关系。
  4. 参数更新: 每个GPU在其反向传播结束时更新其部分模型的参数。需要注意的是,这些参数不需要广播给其他GPU。
  5. 重复: 重复这个过程,直到模型在所有数据上完成训练。

模型并行允许训练那些无法放在单个GPU上的大型模型。但它也导致了在前向和后向传递中GPU之间的跨GPU通信。

此外,上述描述的完整训练数据集通过一系列GPU的实现可能对于LLMs而言不切实际,因为数据集大小巨大。它还在GPU之间创建了一个顺序依赖关系,导致了长时间等待和计算资源的严重低利用率。这就是流水线并行的作用所在。

流水线并行

流水线并行结合了数据并行和模型并行,在训练数据集的每个小批次进一步分成几个微批次。在上面的模型并行示例中,处理一个GPU使用第一个微批次计算输出并将数据传递给序列中的下一个GPU之后,它不会空闲等待直到在后向传递中从该GPU获取输入,而是开始处理训练数据集的第二个微批次,以此类推。这增加了GPU之间的通信,因为每个微批次需要在序列中相邻的GPU之间进行前向传递和后向传递的通信。

张量并行

模型并行和流水线并行技术都在层边界上垂直划分模型。对于大型LLMs,甚至将单个层放在一个GPU中可能是一个挑战!张量并行在这种情况下有所帮助。它是一种模型并行的形式,但不是在层级别上分区模型,而是在单个操作或“张量”的级别上分区模型。这允许更细粒度的并行处理,并对某些模型来说可能更有效。

还有许多其他将数据集和模型参数划分到GPU之间的技术。研究领域的主要重点是减少GPU之间的互通以及减少GPU的空闲时间(FLOP利用)。当训练大型模型时,大多数深度学习框架都内置了对模型和数据集进行分区的支持(如果用户不想手动设置)。

无论使用哪种并行性,由于参数和数据集的巨大,LLMs通过连接这些GPU的网络传输会产生显着的跨GPU流量。网络中的任何拥塞都可能导致训练时间长且GPU利用率非常低。

因此,互连技术和用于GPU/TPU集群的拓扑结构在LLMs的总成本和性能中起着关键作用

让我们来探讨流行的GPU/TPU集群设计,了解互连和它们在LLM训练中的效果如何。

GPU/TPU地图

TPUs(Tensor Processing Units)是由Google开发的AI加速器,用于加速矩阵乘法、向量处理和训练大规模神经网络所需的其他计算。Google不将TPUs销售给其他云服务提供商或个人。这些TPU集群仅供Google使用,用于提供Google云中的ML/AI服务和其他内部应用程序。

2D/3D环形网络。来源:https://www.nextplatform.com/2018/05/10/tearing-apart-googles-tpu-3-0-ai-coprocessor/

Google通过使用2D或3D环形网格网络构建TPU集群。

在2D环形网格中,每个TPU与北/南/东/西方向的四个TPU连接在一起。环形的一面来自于该网格在边缘处的节点连接(圆环或环形形状),以使网格边缘上的TPU仍连接到其他四个TPU。相同的概念可以扩展到3D拓扑结构。这种拓扑结构能够实现相邻GPU之间的快速通信,因为它们在交换结果(张量/流水线并行)时进行通信。

TPU v4架构在3D环形网络中拥有超过4096个TPU。它们在边缘处使用光电电路开关(OCS),可以在3D Torus内部创建不同的拓扑结构。这样可以节省OCS处的光学模块的功率,因为它们无需在切换之前将光学信号转换为电信号。Google在TPU v4 pod中训练了所有的LLM模型LaMDA、MUM和PaLM,并宣称训练过程中TPU的利用率非常高(超过55%)。

当涉及到GPU时,Nvidia是主要的GPU供应商,所有主要的数据中心和HPC都使用Nvidia的GPU系统来训练大型DNN。除了Google创建的模型以外,大多数LLM都使用Nvidia的GPU进行训练。

Nvidia GPU配备了高速的NVLink,用于GPU之间的通信。NVLink相比传统的PCIe接口提供了更高的带宽,并能够在GPU之间实现更快的数据传输,以提高机器学习的训练速度。第四代NVLink在每个方向上提供200Gbps的带宽。Nvidia的最新H100_GPU有18个NVLink,每个方向提供3600Gbps的带宽。

此外,NVLink允许GPU内存池化,多个GPU可以连接在一起,作为一个更大的内存资源。这对于运行需要比本地GPU上可用的内存更多的应用程序很有好处,并允许在GPU之间进行灵活的模型参数分区。

图片来源:Nvidia的Hot Chips 2022演示,上图展示了一个GPU服务器,服务器具有8个GPU。每个NIC在每个方向上可以携带400Gbps的数据,通过OSFP插槽连接到外部以太网/IB交换机。节点中的OSFP插槽连接到每个CX7 NIC,将GPU连接到外部以太网/IB交换机。节点中的GPU可以通过一系列NVLink交换机系统的分层连接与其他GPU进行连接,使用四个NV交换机的OSFP端口。

GPU服务器,也称为_system_或_node_,是一个包含8个GPU的集群,其中集群内的GPU通过使用四个定制的NVLink交换机(NVswitches)之间的NVLink进行通信。可以通过GPU网络将多个GPU服务器连接在一起,形成大规模系统。GPU网络是一组以leaf/spine或3级CLOS拓扑结构排列的交换机。它为连接到网络的GPU服务器之间提供任意的连接。

网络中的leaf/spine交换机通常遵循胖树拓扑结构。在胖树拓扑中,随着从节点到leaf和spine的拓扑结构的上升,链路的带宽增加。这是因为每个上行链路需要处理多个下行链路的带宽。

图示GPU服务器和数据中心网络中的GPU网络。

GPU网络(Fabric)中的交换机数量取决于:

  • 系统的规模(或GPU节点的数量)
  • 交换机的吞吐量。单个交换机提供的吞吐量越高,所需的交换机数量就越少。
  • 网络中的额外带宽(过量供应),以减轻拥塞情况。

对于良好的训练性能:

  • GPU网络应具有低的端到端延迟。由于存在大量的GPU间通信,降低节点之间数据传输的总体延迟有助于减少总体训练时间。
  • 网络应在节点之间实现无丢包的数据传输。无丢包的传输对于AI训练来说是一个重要的标准,因为任何梯度或中间结果的丢失都需要将整个训练回退到内存中存储的前一个检查点并重新开始。这对训练性能产生不利影响。
  • 系统应具有良好的端到端拥塞控制机制。在任何树形拓扑中,当多个节点向单个节点传输数据时,瞬态拥塞是不可避免的。持久性拥塞可能会增加系统的尾延迟。由于GPU之间的顺序依赖关系,即使一个GPU的梯度更新被网络延迟,许多GPU也可能停止运行。一个慢速链路就足以降低训练性能!

此外,还应考虑建造系统的总成本、功耗和冷却成本等因素。

在这个前提下,让我们来看一下 GPU 架构设计的选择以及每种方法的优缺点。

自定义 NVLink 交换系统

用于连接 GPU 服务器中的 8 个 GPU 的 NVLink 交换机也可以用于构建连接 GPU 服务器之间的交换网络。

Nvidia 在 2022 年的 Hot Chips 大会上展示了使用 NVswitch 架构连接 32 个节点(或 256 个 GPU)的拓扑结构。由于 NVLink 是专门设计为连接 GPU 的高速点对点链路,所以它具有比传统网络更高的性能和更低的开销

使用 NVSwitch 系统的 GPU 架构

第三代 NVswitch 支持 64 个 NVLink 端口,具有 12.8Tbps 的交换容量。它还支持多播网络内聚合

通过网络内聚合,所有工作GPU产生的梯度会在 NVswitches 内部进行聚合,并将更新后的梯度发送回 GPU,以开始下一次迭代。这可能减少了训练迭代之间的 GPU 之间的数据流量

Nvidia 声称使用 NVswitch 架构训练 GPT-3 模型,可以比使用 InfiniBand 交换网络快 2 倍。这种性能令人印象深刻,但是该交换机的带宽比高端交换机供应商提供的 51.2Tbps 交换机少 4 倍!

使用 NVswitches 构建超过 1000 个 GPU 的大规模系统在经济上是不可行的,而且该协议本身可能有限制,无法支持更大规模的系统。

此外,Nvidia 不单独销售这些 NVswitches。如果数据中心想要通过混搭不同供应商的 GPU 来扩展现有的 GPU 集群,它们无法使用 NVswitches,因为其他供应商的 GPU 不支持这些接口。

InfiniBand(IB)Fabric

InfiniBand 是一种于 1999 年推出的高速替代 PCI 和 PCI-X 总线技术以连接服务器、存储和网络的技术。尽管由于经济因素,它最初的宏伟目标被缩小,但 InfiniBand 在高性能计算、人工智能/机器学习集群和数据中心方面得到了广泛应用,这是由于它具有出色的速度、低延迟、无丢失传输和远程直接内存访问(RDMA)功能

InfiniBand(IB)协议旨在高效且轻量化设计,避免了以太网协议中常见的开销。它支持基于通道和基于内存的通信,可以高效处理各种数据传输场景。

IB 通过发/收设备之间的基于信用的流量控制实现无丢包传输(队列或虚拟通道级别)。这种逐跳的流量控制确保不会由于缓冲区溢出而造成数据丢失。此外,它支持端点之间的拥塞通知(类似于 TCP/IP 协议栈中的 ECN)。它提供卓越的服务质量,允许优先处理某些类型的流量以降低延迟和防止丢包。

此外,所有的 IB 交换机都支持 RDMA 协议,允许直接从一个 GPU 的内存传输数据到另一个 GPU 的内存,而不涉及 CPU 的操作系统。这种直接传输提高了吞吐量,显著降低了端到端的延迟。

尽管具有以上优点,InfiniBand 交换系统不如以太网交换系统流行,因为它们配置、维护和扩展起来更加困难。InfiniBand 的控制平面通常通过一个单一的子网管理器集中控制。它可以在小型集群中运行,但对于拥有 32K 或更多 GPU 的网络,扩展性可能成为挑战。IB 网络还需要专门的硬件,如主机通道适配器和 InfiniBand 电缆,扩展性的成本也比以太网网络更高。

目前,Nvidia 是唯一提供高端 IB 交换机供 HPC 和 AI GPU 集群使用的供应商。OpenAI 在 Microsoft Azure 云中使用 10,000 个 Nvidia A100 GPU 和 IB 交换网络训练了他们的 GPT-3 模型。Meta 最近构建了一个使用 Nvidia A100 GPU 服务器和 Quantum-2 IB 交换机(具有 25.6Tbps 的交换容量和 400Gbps 端口)的 16K GPU 集群。这个集群被用于训练他们的生成式人工智能模型,包括 LLaMA。
需要注意的是,当连接 10,000 个以上的 GPU 时,服务器内部 GPU 之间的切换是通过服务器内的 NVswitches 完成的。IB/以太网网络将服务器连接在一起。

No alt text provided for this image

GPU结构概念图,连接了128个GPU(未显示所有连接)。GPU-叶子节点连接速率为400Gbps,spine连接速率为800Gbps。

为了应对更大参数量的训练需求,超大规模云服务提供商正在寻求构建具有32K甚至64K GPU的GPU集群。

在这种规模上,使用以太网网络,从经济角度来看更有意义,因为以太网已经在许多硅/系统和光模块供应商中形成了强大的生态系统,并且以开放标准为目标,实现了供应商之间的互操作性。

以太网Fabric

以太网无处不在,从数据中心到骨干网络,使用情况各不相同,速度从1Gbps到800Gbps不等,未来有望到达1.6Tbps。

Infiniband在互连端口速度和总交换容量方面落后于以太网。以太网交换机的价格比起InfiniBand对应的交换机更低,每单位带宽的价格更具竞争力,由于高端网络芯片供应商之间的激烈竞争,厂商将更多的带宽封装到ASIC中,从而实现了更好的每千兆位成本。

主要厂商的高端以太网交换机ASIC可以提供51.2Tbps的交换容量,带有800Gbps端口,性能是Quantum-2的两倍。如果每个交换机的吞吐量加倍,使用一定数量的GPU构建GPU网络只需要一半数量的交换机!

  • 无丢包传输:以太网还可以提供具有优先流量控制(PFC)的无丢包网络。PFC允许有8个服务类,每个类都支持流量控制。其中一些可以被指定为启用了PFC的无丢包类别。无丢包流量在处理和通过交换机时优先级高于有丢包流量。在拥塞期间,交换机/网卡可以通过流量控制来控制上行设备,而不是丢弃数据包。
  • RDMA支持:以太网还可以通过RoCEv2(RDMA over Converged Ethernet)来支持RDMA,其中RDMA帧被封装在IP/UDP内。当发送到GPU的RoCEv2数据包到达GPU服务器中的网络适配器(NIC)时,NIC将RDMA数据直接传输到GPU的内存中,绕过了CPU。此外,还可以部署功能强大的端到端拥塞控制方案,例如DCQCN,以降低RDMA的端到端拥塞和丢包。
  • 负载均衡增强:BGP等路由协议使用等价路径多路径路由(ECMP)来在源和目标之间有多条具有相等“代价”的路径时将数据包分发到多条路径上。代价可以简单地表示为跳数。ECMP的目标是分发网络流量以提高链路利用率并防止拥塞。
    当数据包到达具有多条到达目标的等价路径的交换机时,交换机使用哈希函数来决定将数据包发送到哪条路径。这个哈希函数可以使用源IP地址、目标IP地址、源端口、目标端口和协议字段等来映射数据包到流。然而,哈希不总是完美的,可能会导致某些链路过度订阅。

例如,在下面的图示中,假设单播流量的模式是G0->G19,G9->G2和G18->G11。理想情况下,网络不应该出现拥塞,因为leaf/spine交换机中的带宽足以支持这种流量模式。然而,由于信息不足(哈希冲突),所有流都可能选择spine_switch_0。当发生这种情况时,该交换机的输出端口被过度订阅,1200Gbps的流量试图通过800Gbps的端口出去。

No alt text provided for this image

在像这样的场景中,端到端的拥塞方案如ECN/DCQCN,可以在交换机内部拥塞时对发送者流量进行有效的限制(尽管在发送者限制流量之前仍可能出现瞬态拥塞情况)。当然,还有其他减少拥塞的方法:

  1. 预留带宽:在spine/leaf交换机之间预留轻微过量带宽
  2. 自适应负载均衡:当有多条到达目标的路径时,如果某条路径拥塞,交换机可以将新流的数据包路由到其他端口,直到解决拥塞。为了实现这一点,交换机硬件监视出口队列深度和排队速率,并定期将信息发送回上游交换机中的负载均衡器。许多交换机已经支持此功能。
  3. 包级负载均衡:RoCEv2的数据包级负载均衡可以将这些数据包均匀地分散在所有可用链路上,以保持链路平衡。通过这样做,数据包可能无序地到达目的地。然而,网卡可以在RoCE传输层上转换任何无序数据,将有序数据透明地传输到GPU。这需要网卡和以太网交换机的额外硬件支持。

除了上述功能外,网络内聚合还可以在交换机内部聚合来自GPU的梯度,有助于减少训练过程中的GPU间流量。Nvidia在其高端以太网交换机中支持此功能,并提供集成软件支持。

因此,高端以太网交换机/网卡具有强大的拥塞控制/负载均衡功能和RDMA支持。它们可以扩展到比IB交换机更大的设计。一些云服务提供商和超大规模集群的公司已经开始构建基于以太网的GPU网络,以连接超过32K的GPU。

完全调度Fabric(VOQ Fabric)

最近,几家交换机/路由器芯片供应商宣布支持完全调度Fabric或AI Fabric的芯片。完全调度的网络实际上就是常常在许多模块化机箱设计中使用了十多年的VOQ(虚拟出口队列)网络,包括Juniper的PTX系列路由器。

在VOQ架构中,数据包只在入口叶子交换机中缓冲一次,缓存在与最终出口叶子交换机/WAN端口/输出队列对应的队列中。这些队列在入口交换机中称为虚拟出口队列(Virtual Output Queues, VOQs)。因此,每个入口叶子交换机都为整个系统中的每个输出队列提供缓冲空间。该缓冲区的大小通常足以容纳每个VOQ的40-70微秒的拥塞数据包。当VOQ浅时,它保留在片上缓冲区中,并在队列开始增长时转移到外部存储器中的深度缓冲区。

  • 在入口叶子交换机上,一旦一个VOQ累积了几个数据包,它就会向出口交换机发送请求,请求在网络中发送这些数据包。这些请求通过网络到达出口叶子交换机。
  • 出口叶子交换机中的调度器根据严格的调度层级以及其浅输出缓冲区中的空间来授权该请求。这些授权速率受限,以避免从网络过度订阅出口交换机链路。
  • 一旦授权到达入口叶子交换机,它就会将所收到授权的一组数据包发送到出口,通过所有可用的上行链路发送。
  • 发送到特定VOQ的数据包可以均匀地分散在所有可用的输出链路上,以实现完美的负载均衡。这可能导致数据包重排序。然而,出口交换机具有将这些数据包按顺序放回的逻辑,然后将它们传输到GPU节点。

No alt text provided for this image

VOQ FABRIC(可变量输出队列数据面网络)

由于出口调度器在数据进入交换机之前,对授予的数据进行了控制,以避免出现链路带宽超额使用的情况,从而消除了以太网数据面(在许多端口尝试向单个输出端口发送流量时)中99%由incast引起的拥塞问题,并且完全消除了头阻塞(HOL blocking)。需要注意的是,数据(包括请求和授予)在这种架构中仍然是通过以太网传输的。

一些架构,包括Juniper的Express和Broadcom的Jericho系列,通过它们的专有分段化(cellified)数据面实现了虚拟输出队(VOQ)。

在这种情况下,叶子交换机将数据包分割为固定大小的分段,并在所有可用的输出链路上均匀分布它们。与在数据包级别上均匀分布相比,这可以提高链路利用率,因为使用大型和小型数据包的混合很难将所有链路完全利用起来。通过分段转发,我们还避免了输出链路上的另一个存储/转发延迟(出口以太网接口)。在分段数据面中,用于转发分段的spine交换机被定制交换机所替代,这些定制交换机能够高效地进行分段转发。这些分段数据面交换机在功耗和延迟方面优于以太网交换机,因为它们不需要支持L2交换的开销。因此,基于分段的数据面不仅可以提高链路利用率,还可以减少VOQ数据面的总体延迟。

No alt text provided for this image

基于分段数据面的leaf交换机和分段交换机之间的连接(用于分段VOQ架构)

VOQ架构确实具有一些限制:

  • 每个叶子交换机的入口端应具有合理的缓冲区,以供系统中所有VOQ在拥塞期间缓冲数据包。缓冲区大小与GPU数量乘以每个GPU的优先级队列数量成正比。较大的GPU规模直接转化为更大的入口缓冲区。
  • 出口队列缓冲区应具备足够的空间,以覆盖通过数据面的往返延迟,以防这些缓冲区在请求-授予握手期间耗尽。在较大的GPU群集中,使用3级数据面时,由于光缆延迟和额外交换机的存在,此往返延迟可能会增加。如果出口队列缓冲区未正确调整以适应增加的往返延迟,输出链路将无法达到100%的利用率,从而降低系统的性能。
  • 尽管VOQ系统通过出口调度减少了由于头阻塞而引起的尾延迟,但是由于入口叶交换机必须在传输数据包之前进行请求-授予握手,因此一个数据包的最小延迟会增加额外的往返延迟。

尽管存在这些瓶颈,完全调度的VOQ(fabric)在减少尾延迟方面的性能要比典型的以太网流量好得多。如果通过增加缓冲区而使链路利用率达到90%以上,则在GPU规模扩大时带来的额外开销可能是值得投资的。

另外,供应商锁定,是VOQ(fabric)的一个问题。因为每个供应商都有自己的专有协议,很难在同一fabric中混合使用和匹配交换机。

推理/微调工作负载的说明

在LLM中,推理是使用训练好的模型对用户提示生成响应的过程,通常通过API或网络服务进行。例如,在一个a_chatGPT_session中输入问题时,会在云端的训练好的GPT-3.5_model的副本上运行推理过程,从而得到响应。推理需要的GPU资源比训练要少得多。

然而,鉴于训练好的LLM模型中有数十亿的参数,推理仍然需要多个GPU(用于分布参数和计算)。例如,Meta的LLaMA模型通常需要16 A100_GPUs进行推理(而训练时使用的是2000个)。

类似地,使用领域特定数据集对已经训练好的模型进行微调需要的资源较少,通常少于100+ H100_scale GPU。在这些规模下,推理和微调都不需要在同一fabric上的大型GPU集群上。

虽然单个推理工作负载的计算强度不高,但随着越来越多的人和组织开始采用chatGPT,推理工作负载将在不久的将来呈指数增长。这些工作负载可以分布在托管训练模型副本的不同GPU集群/服务器上。

学术界和工业界正在进行研究,以优化训练和推理:

  • Quantization是其中一种技术,它在训练和/或推理过程中使用更小精度的浮点数或整数,
  • 参数修剪则是将对性能贡献不大的权重/层修剪掉,以减小模型大小。

Meta的LLaMA模型表明,比GPT-3小3倍的模型,当使用比例为其4倍的数据集进行训练时,可以获得更好的性能。如果这种趋势在将来的LLM模型中继续下去,我们可以预期训练后的模型会随着时间的推移而变得更小,从而减轻推理工作负载的压力。

总结/未来展望

开发和训练LLMs需要一个高度专业化的AI/ML研究员/工程师团队、数据科学家以及大量的云计算资源投资。缺乏广泛机器学习专业知识的企业很可能不会独立承担这样的挑战。相反,更多的企业会寻求用他们的专有数据集微调商业可用的训练模型。云服务提供商可能向企业提供这些服务。

因此,模型训练工作负载主要预计来自学术机构、云服务提供商和人工智能研究实验室。

与人们预期的相反,预计未来几年训练工作负载不会减少或保持不变。为了生成准确和最新的结果,而不是“幻想”,模型必须频繁进行训练。这将极大地增加训练工作负载。

以太网fabric可能是用于构建大型训练GPU集群的一个好的选择。所有现有的高端以太网交换机(模块化/独立式)目前都已经为这一大型集群挑战做好准备。

通过一些额外的增强措施,如启用RoCEv2数据包的重新排序和数据包级别的喷射、网内聚合和剪切支持,这些交换机可以实现令人印象深刻的性能,优于IB(fabric)可以提供的性能。然而,在这些大型以太网fabric集群被部署和广泛使用之前,IB(fabric)将继续被使用。

VOQ(fabric)这种分布式交换机的方法看起来很有前途,为解决方案提供了另一种潜在的选择!

每两年GPU/网络交换机的性能/规模增加大约一倍。如果模型继续以每个新版本翻番或翻三倍的速度增长,它们很快就会遇到硬件上的瓶颈!AI社区必须在研究中大力投资,使LLMs更加优化、环境友好和可持续。

参考文献

  1. 各种供应商的开源文章/演讲,包括但不限于Nvidia/BRCM/Cisco/openAI/Microsoft...

原文链接