在数据驱动时代,人工智能技术飞速发展,大模型以其庞大参数和卓越性能在自然语言处理、图像识别等领域展现出巨大的潜力。但模型规模扩大导致传统计算资源难以满足需求,需优化基础设施。本文提出创新性解决方案,讨论并行计算策略,分析集合通信、数据交换通道,并给出性能优化建议。期望能为对高性能计算、分布式系统优化及大数据处理感兴趣的读者提供一定参考。
近年来,以ChatGPT、Sora为代表的通用生成式大模型的研究取得了显著进展。生成式大模型的参数规模已实现了从千万级别到万亿级别的飞跃,并朝着十万亿级别前进。由于大模型的参数规模巨大,单块GPU无法装在整个模型,需要多块GPU组成集群以数据、流水或张量并行的方式进行分布式计算。这样原本在GPU内部通过总线在各个计算单元之间进行的数据交换,会暴露到GPU外部,加载到GPU间的高速互联网络或者通过PCIe总线,甚至服务器间互联网络上面。这样的架构,是否会导致GPU的计算性能大幅下降?通过哪些优化能够优化GPU的分布式计算性能?
并行化技术是实现大型模型高效训练和推理的核心手段,它不仅解决了单个GPU内存限制导致的无法完整加载大型模型的问题,还显著增强了这些模型的训练和推理性能。主要的并行化策略包括:数据并行、模型并行以及流水线并行。
• 数据并行(DP):数据并行是一种常见的并行化技术,它将大型数据集分割成多个小块,然后在多个处理器或设备上同时进行训练。每个处理器都拥有模型的一个副本,并且使用其分配到的数据子集进行训练。在训练过程中,每个处理器计算出梯度,然后将这些梯度汇总(通常通过平均)来更新模型的参数。这种方法可以显著减少训练时间,但当数据集非常大时,通信开销可能会成为一个问题。
• 流水并行(PP):流水并行是一种将模型的不同部分分配到不同的处理器上的技术。这种方法通常用于处理那些模型非常大,以至于单个处理器无法容纳整个模型的情况。在流水并行中,模型被分解成多个阶段或块,每个阶段在不同的处理器上执行。数据在这些阶段之间流动,类似于工厂流水线。这种方法可以提高内存效率,但设计和实现起来可能比较复杂。
• 张量并行(TP):张量并行是一种将单个张量(即多维数组,是深度学习中的基本数据结构)分割成多个部分,并在不同的处理器上并行计算的技术。这种方法特别适用于那些模型参数非常多,单个处理器无法处理的情况。通过将张量分割,可以使得每个处理器只处理模型的一部分,从而提高计算效率。
图1:并行计算的三种基本类型
通过并行计算,可以将大模型训练和推理的计算过程拆解成多个计算进程,分别部署到不同GPU上面同时运行,一方面可以解决GPU纵向扩展时的容量限制问题,另一方面也可以提高大模型训练、推理的计算效率和处理速度。
集合通信在并行计算中扮演着至关重要的角色,它通过促进不同计算节点间的高效数据交换与同步,确保了分布式系统中各部分的协调运作,进而加速了计算任务的执行。一个高效的通信机制对于提升并行算法的性能、降低延迟以及增强整体计算效率具有决定性的影响。
集合通信是并行计算的主要通信模式,涉及一组进程间的通信,其中所有进程都参与数据的发送和接收。这种通信方式包括了多种操作,如广播(Broadcast)、收集(Gather)、散播(Scatter)、归约(Reduce)和全局归约(Allreduce)等。集合通信的关键在于它允许在多个计算节点之间进行高效的数据交换和同步,这对于数据并行、流水并行和张量并行的计算任务至关重要。
• 采用数据并行(DP)的模型训练中的集合通信操作分析
采用数据并行的模型训练时,每块GPU上都有完整且独立的模型,训练发生在每块GPU内部,每块GPU在完成反向传播之后,都会有自己独立的梯度,需要将所有GPU上的梯度进行汇总并累积,然后再将累积后的梯度分发回各个GPU,用于更新模型的权重参数,如下图所示。
图2:数据并行计算时集合通信操作流程示意图
在数据并行计算过程中,分散在各个GPU上的模型梯度,采用集合通信库的All Reduce原语操作进行汇总和分发。
• 采用流水并行(PP)的模型训练中的集合通信操作分析
采用最基本的流水并行时,每块GPU拥有完整模型中的某一层或某几层,整个训练过程需要跨越相关GPU,将各层前向传播和反向传播的流程串联起来,组成一个环路,如下图所示。
图3:流水并行计算时集合通信操作流程示意图
在流水并行计算过程中,跨GPU的前向和反向传播数据传递,采用集合通信库的MPI.Send和MPI.Recv原语操作。
• 采用张量并行(TP)的模型训练中的集合通信操作分析
以矩阵乘法为例,其中为激活输入,为算子权重。矩阵乘法采用张量并行计算有列切分和行切分两种计算方法。
图4:张量并行计算时权重矩阵按列切分的集合通信操作流程示意图
在采用列切分权重矩阵的矩阵乘法计算时,子矩阵的计算完成后,采用集合通讯库的All Gather原语操作进行结果汇总。
图5:张量并行计算时权重矩阵按行切分的集合通信操作流程示意图
在采用行切分权重矩阵的矩阵乘法计算时,首先要将激活矩阵
在并行计算中,数据并行(DP)在每个 GPU 上拥有完整模型,由于处理不同的数据子集,迭代后各个 GPU 需要通过 AllReduce 进行梯度聚合。为了简化计算,假设每层网络输入和输出维度都是
流水并行(PP)将模型以层为单位进行组合和分割,交由不同 GPU 处理, GPU 之间涉及中间激活值的传递。假设,在一个 batch 计算过程中,每个 PP 层之间发送的中间变量大小和输入的激活值
张量并行(TP)将模型权重分割并分布在不同 GPU 上,每次更新模型权重时 GPU 之间有大量数据交换以同步梯度。权重矩阵的切分有很多方式,将第一个权重矩阵(W1)纵向切分,第二个权重矩阵(W2)横向切分,可以确保每个MLP只进行一次All-Reduce操作,从而优化通信效率。在这种方式下,每个 batch 计算产生的通信量约为
一般而言
集合通信是并行计算中实现数据同步和聚合的关键机制,而其高效实施则依赖于强大的数据交换通道,数据交换通道构成了通信数据传输的物质基础。
GPU计算单元间的数据交换分为片内和片间两种形式。片内交换涉及流处理器间通过共享内存总线和HBM存储单元的数据传递。而片间数据交换则通过PCIe总线、多芯互联网络或RDMA网络等多样化的数据通道实现,如下图所示。
图6:多芯互联、PCIe和RDMA三种数据通道在GPU数据交换时的数据路径示意图
• PCIe总线:同一主机内部多个GPU之间可以通过PCIe总线进行数据交换。PCIe通信有通过CPU中转和不通过CPU中转(Peer-to-Peer)两种通信方式。通过CPU中转,不仅会增加延迟,而且在高负载情况下可能会成为瓶颈。
• 多芯互联网络:通常是由GPU生产厂家开发的一种高速互连技术,允许GPU以极快的速度在共享内存池中发送和接收数据。多芯互联在高性能计算领域尤为重要,它通过简化、高速、点对点的网络连接,减少通信开销,提高了计算性能。
• RDMA网络:是一种高性能网络通信技术,它允许数据直接在两台计算机的内存之间传输,无需双方操作系统内核介入,从而实现高吞吐、低延迟的网络通信,适用于大规模并行计算,通过消除CPU中转延迟和瓶颈,提高GPU跨主机通信效率。
PCIe总线适用于计算机内部硬件设备间的连接,如CPU、GPU和RDMA网卡等,适合成本敏感且对带宽和延迟要求不高的场景。多芯互联网络是为高性能GPU设计的高速互连技术,常用于需要多GPU紧密协作的高性能计算。而RDMA网络则适用于数据中心和云计算环境,为跨服务器部署的GPU提供低延迟和高吞吐的通信,适合大规模并行处理和数据密集型任务。根据不同的应用需求和性能要求,合理选择这些技术可以显著提升系统的整体性能和效率。
接下来,以英伟达的A100 GPU为例,深入分析GPU内存总线、PCIe、多芯互联和RDMA网络的性能。分析将揭示GPU通信链路各环节的性能特点,为网络的规划与设计提供科学的依据。优化这些环节将确保在构建大规模并行计算系统时,数据传输的高效性、稳定性和可靠性,进而提升整体的计算性能,降低延迟,增强系统的可扩展性和适应性,以适应日益增长的高性能计算需求。
A100的最大时钟频率为1.41 GHz,内部有108个流处理器(SM)。每个SM在一个时钟周期能够加载64 Byte的显存数据。根据测算,整个GPU(108个SM)每秒最大请求量 = 64 Byte×108 SM×1.41 GHz = 9.75 TeraByte/sec。然而,A100中HBM2的带宽为1.56 TeraByte/sec。因此,HBM2能够提供的最大带宽,比A100所有计算单元的最大请求速度低了6.25倍。
A100 GPU最高可以支持PCI Express Gen 4总线。PCI Express Gen 4最多支持16个通道,每个通道的速率为16.0 Gb/秒,因此编码后16条通道的总带宽是252 Gb/s,如下表所示。一台服务器最多可以接入8块A100 GPU,但是PCIe 4.0每条通道的速率只有GPU内存总线带宽的1.03%,16条通道的总带宽只有8块GPU内存总线带宽的2.05%。由此可见,PCIe总线承载GPU通信的能力非常薄弱。
第三代 NVLink 主要适配Ampere架构的GPU,每对信号的数据传输速率为 50 Gbit/s。链路总数为12个,总带宽为 600 Gbit/s,如下表所示。对比PCIe总线,NVLink3每对信号的速率是PCIe4每条通道的速率的3倍,而且专网专用,NVLink网络的负荷能力较PCIe总线有了大幅提高。
表2:NVLink1到NVLink5的链路带宽和总带宽列表
注:英伟达未提供转发时延数据,我们估计第三代NVLink的转发时延50~100纳秒(ns)。
英伟达ConnectX-8网卡是InfiniBand网卡中性能最高的,端口速率可达到800 Gb/s,如下表所示。但是,RDMA网卡需要通过PCIe总线与GPU连接,网卡吞吐性能受到PCIe总线通道速率的限制。因此,网卡选型需要与PCIe的处理能力相匹配。网卡选型的性能不能太差,形成GPU通信的堵点。但是,单纯提高RDMA网卡的性能,也并不能大幅提高GPU之间的吞吐性能。
表3:RDMA网卡的端口速率和带宽列表
英伟达Quantum-X800是InfiniBand交换机中吞吐性能最高的交换机,具有115.2Tb/s 的数据交换能力,能够提供114个非阻塞的800Gb/s的网络连接端口,如下表所示。选择交换机时,交换机端口的速率不能低于网卡速率,同时端口组交换容量、接口板交换容量和交换机背板的交换容量不能低于下辖端口带宽总和,否则会形成阻塞结构,导致性能瓶颈。
表4:Infiniband交换机的交换性能列表
在网络设计和优化中,选择了网卡和交换机等的高性能设备只是具备了GPU高性能通信的物质基础。有了高性能的物质基础,还需要通过拓扑设计和资源调度,帮助GPU通信构建出低延迟、高吞吐的数据通道。
在AI计算中,特别是在模型训练过程中,网络表现出的是周期性的行为, 计算、通信和同步连续不断、周而复始。在这个过程中,一个GPU的通信对象数量通常是固定的,只有几个或者几十个。但是一旦开始通信,一个100G的网卡或者PCIe通道会在一瞬间将传输容量用满。为了提高GPU Tensor Core的利用率,减少数据同步的等待时间,要求尽量减少传输通道的时延。
评估GPU可用的多芯互联网络、PCIe总线和RDMA网络三个数据通道的吞吐性能和扩展性能,多芯互联网络可以用于服务器内部各个GPU的高速互连,以避免GPU通信时瞬间巨量数据导致PCIe的拥塞。RDMA网络用于GPU跨服务器通信。
在构建RDMA网络时,多级交换系统可能显著增加转发延迟,不利于实现低延迟目标;多根级联光纤的传输容量通常远低于交换机背板的交换容量,这限制了高吞吐量的需求。因此,推荐采用扁平化的分层网络设计:对于千卡规模的集群,可以通过单层交换机实现互联;而对于万卡规模的集群,则可以通过两层交换机实现互联,以优化性能。
在通过扁平化减少交换机转发时延的同时,还需要优化交换机、服务器以及机架的布局,要使得交换机到服务器的光纤平均长度最短。因为,不仅交换转发会导致通信时延,光传输也会导致通信时延。光在光纤中传输,每0.2米会产生1纳秒的时延。光每传输46米,就会产生230纳秒时延,与一次高性能交换机的转发时延相当。
图7:千卡、万卡集群的扁平化网络架构
当前,构建RDMA网络有三种方式:InfiniBand、ROCE和iWARP,它们可以在高性能计算环境中提供低延迟和高吞吐量的通信。
• InfiniBand是一种为高性能计算设计的专用网络技术,提供最高带宽为800Gbps,具有低延迟和低CPU占用率。InfiniBand需要使用专门的硬件和布线,部署成本较高,但提供了卓越的性能。它支持服务质量(QoS)、多路径和链路聚合。
• ROCE是一种在标准以太网上实现RDMA的协议,有V1和V2两个版本。ROCE可以利用以太网基础设施,部署成本较低。ROCE V1缺乏拥塞控制机制,容易导致丢包和性能下降。ROCE V2是V1的改进版本,提供端到端拥塞控制。
图8:RDMA的四种实现方案
综合三种技术,InfiniBand在带宽和延迟方面具有优势,但成本较高;ROCE V2提供了良好的性价比和易用性,适合需要高性能且成本的场景;iWARP适用于跨越广域网的高效数据传输的场景。每种技术都有其特定的应用场景和优势,选择时可以根据具体需求进行权衡。
网络中,GPU间通信带宽和延迟受其位置影响较大。一些GPU通过NVLink连接,能够提供800Gb/s的高速通信;另一些GPU则只能能依赖100Gb/s的RoCE网络。同机柜服务器可以通过接入交换机直接连接,通信距离最短,转发延迟最低;而位于不同机柜或甚至不同机房的服务器则需经过接入、汇聚甚至核心交换机的多次转发,通信距离增加和转发延迟上升。
如果GPU资源能够以拓扑感知的方式进行资源的优化调度,实现大模型并行计算集群内部集合通信的成本最小,那么可以显著降低通信延迟,提高GPU的计算效率,优化整个计算集群的性能表现,使得大规模的性能得到质的飞跃。
随着大型模型参数数量的激增,单一GPU的计算能力已不足以应对,因此,采用多GPU集群的分布式计算成为了关键解决方案。然而,在这种集群环境中,传统网络的传输效率往往无法与GPU的高性能计算需求相匹配,这导致GPU在等待数据传输上的时间增加,而实际计算的时间减少。
[1] Ronny Krashinsky,Olivier Giroux,Stephen Jones.深度了解NVIDIA Ampere架构 [EB/OL] (2020-05-14). [2024-08-15].