AI Infra 综述(一)

AI Infra 综述(一)

Efficient Training of Large Language Models on Distributed Infrastructures: A Survey

参考资料

https://arxiv.org/abs/2407.20018

https://github.com/Relaxed-System-Lab/HKUST-COMP6211J-2025fall

1 LLM训练的问题

主要优化这三个问题:可扩展性 Scalablity、效率 Efficiency和可靠性 Reliability

点击图片可查看完整电子表格

2 综述架构

3 大型语言模型训练基础设施 INFRASTRUCTURE FOR LLM TRAINING

调度系统 (Scheduling System) 将训练任务分配到各计算节点 (Compute Node),计算节点 (Compute Node) 通过前端网络 (Frontend Network) 从训练数据集存储 (Training Dataset Storage) 读取数据并执行前向/反向计算与梯度生成,训练阶段的梯度与参数同步等集体通信经由后端网络 (Backend Network) 完成,同时模型状态定期写入检查点存储 (Checkpoint Storage) 以便容错机制 (Fault Tolerance) 的异常检测 (Anomaly Detection) 与故障恢复 (Failure Recover) 在发生故障时用最新检查点快速重启并继续训练。

  • 计算节点 (Compute Node):
  • 作用: 这是执行模型训练计算的核心单元。每个节点通常包含多个高性能AI加速器(如GPU),负责处理分配到的数据批次,执行模型的前向传播和反向传播,并计算梯度。
  • 后端网络 (Backend Network):
  • 作用: 这是一个专用的、高带宽、低延迟的网络,仅用于连接各个计算节点。它主要承载训练过程中产生的高频、密集的训练流量,如在数据并行或张量并行中同步模型梯度和参数的AllReduce等集体通信操作。
  • 前端网络 (Frontend Network):
  • 作用: 这是一个通用的网络,负责处理除高频训练流量之外的所有其他通信。它主要承载两类流量:
  1. 管理流量 (Management Traffic): 用于作业调度、系统监控、节点管理等控制信令。
  2. 存储流量 (Storage Traffic): 用于计算节点从存储系统读取训练数据,以及将模型检查点写入存储系统。
  • 训练数据集存储 (Training Dataset Storage):
  • 作用: 负责存放用于模型预训练的、通常规模高达TB甚至PB级的海量数据集。在训练过程中,计算节点通过前端网络从这里分批读取数据。
  • 检查点存储 (Checkpoint Storage):
  • 作用: 用于在训练过程中定期保存模型的完整状态(包括模型参数、优化器状态等)。这是容错的关键,一旦训练因故中断,可以从最新的检查点恢复,避免从头开始,从而节省大量的计算资源和时间。
  • 调度系统 (Scheduling System):
  • 作用: 作为整个集群的“大脑”,负责管理和分配计算资源。它接收用户的训练任务,决定将任务分配给哪些计算节点,并优化整个集群的资源利用率和任务执行效率。
  • 容错机制 (Fault Tolerance):
  • 作用: 由于大模型训练周期极长(数周甚至数月),硬件或软件故障几乎不可避免。该机制旨在确保训练过程的稳定性和可靠性。
  • 异常检测 (Anomaly Detection): 持续监控系统中的硬件(GPU、网络)、软件和训练指标,以及时发现任何可能导致训练中断或效率下降的异常情况。
  • 故障恢复 (Failure Recover): 在检测到故障后,采取措施恢复训练。最常见的方式是利用“检查点存储”中保存的最新检查点,在修复或替换故障节点后重新启动训练任务。

3.1 AI加速器

训练大型语言模型(LLM)的性能,很大程度上依赖于GPU等AI加速器的发展。

  1. NVIDIA GPU(英伟达图形处理器)

NVIDIA GPU是当前训练大模型最核心的硬件,其关键优势在于强大的并行计算能力。

  • 核心设计:GPU内部集成成千上万个高效的小核心,能同时处理海量任务,这种结构天然适合大模型训练中密集的矩阵运算
  • 关键技术特性
  • 多种数值精度:支持FP16、FP8等不同精度的格式,允许开发者在训练速度与精度之间做权衡,提升效率。
  • CUDA编程环境:让开发者可以方便地调用和管理GPU的并行算力。
  • 高带宽内存(HBM):配备速度极快的专用内存,为GPU核心高速输送数据,避免计算单元“挨饿”。
  • 专用计算单元:最新的GPU架构(如Hopper)内置了Tensor Core(张量核心),特别是其Transformer引擎,可以通过混合使用FP8和FP16等低精度格式,专门加速Transformer架构模型的训练。
  1. 其他AI加速器

除了NVIDIA,AMD GPU等其他AI加速器也逐渐成为分布式训练的可行选择,并已在一些世界顶级的超级计算机上部署使用。

3.2 数据通信

在大型语言模型(LLM)训练中,通信开销是一个巨大的瓶颈,有时甚至超过90%的时间都花在数据传输上。因此,优化网络至关重要。

这部分可以从四个层面来理解:

  1. 服务器内部通信 (Chip-to-Chip)

这指的是一台服务器内部,各个GPU芯片之间如何通信。

  • 传统方式 (PCIe):类似电脑主板上的通用接口,虽然不断升级,但其带宽和延迟已无法满足多GPU间海量数据交换的需求。
  • 专用高速互联 (如 NVLink):由NVIDIA等厂商推出的专用技术,为GPU之间提供极高带宽、极低延迟的“高速公路”。
  • NVIDIA使用NVSwitch芯片,可以实现所有GPU之间的“全连接”,带宽高。
  • Google的TPU则采用Torus (环网)拓扑,将芯片连接成一个环状网格,通信效率也很高。
  1. 服务器之间通信 (Node-to-Node)

这指的是不同服务器(节点)之间如何通信。

  • 核心技术 (RDMA):全称是“远程直接内存访问”。它允许一个节点的GPU直接读写另一个节点GPU的内存,无需经过CPU和操作系统,极大降低了延迟。GPUDirect-RDMA是其在GPU上的专属应用。
  • 两种主流方案
  • InfiniBand (IB):一种专为高性能计算设计的网络技术,速度极快,但需要专用的交换机和网卡,成本高。
  • RoCE:在普通以太网上传输RDMA数据,成本更低,部署更灵活,是目前大型数据中心的主流选择之一。
  1. 网络拓扑结构 (Network Topology)

这指的是整个计算集群中,所有服务器是如何连接的物理“蓝图”。

  • 传统通用结构 (Fat-Tree/Clos):一种像“胖树”一样的分层结构,确保集群中任意两点之间都有充足的带宽,是目前最广泛使用的拓扑。
  • 训练优化结构 (Rail-Optimized):专门为AI训练的通信模式设计的拓扑。它将具有特定通信模式的GPU组连接到一起,减少了不必要的网络拥塞,提升了集体通信的效率。
  • 可重构拓扑 (Reconfigurable Topology):一种更先进的动态网络。它利用光交换机 (OCS) 等技术,可以根据训练任务的需要,实时改变网络的连接方式,实现最优的数据流路径。
  1. 负载均衡与拥塞控制

这指的是如何管理网络流量,避免“堵车”

  • 负载均衡:LLM训练的流量特点是存在少数“大象流”(持续的大流量)。传统的负载均衡方法(ECMP)容易将多个“大象流”分到同一条路径上造成拥堵。新的策略通过将一个大流拆分成多个小流,或更智能地规划路径来解决此问题。
  • 拥塞控制:当网络拥堵发生时,需要有机制来缓解。传统方法(PFC)虽然能保证不丢包,但容易造成“队头阻塞”。新的拥塞控制算法能更智能地感知拥堵并动态调整数据发送速率,有的甚至能识别出训练中更重要的数据(如模型后几层的梯度),在拥堵时优先传输它们

3.3 存储

存储系统是大型语言模型(LLM)训练的基石,主要应对两大挑战:保存模型断点读取训练数据

  1. 模型检查点(Checkpoint)的存储
  • 挑战:大模型的检查点文件非常巨大(例如,一个70B模型的检查点大小接近1TB)。在训练过程中频繁保存检查点,对存储系统的写入带宽要求极高。
  • 解决方案
  • 分布式文件系统:如Meta的Tectonic或常用的HDFS。它们能让成千上万个GPU同时读写检查点。一种常见的优化是:让一个节点先从主存储读取检查点,然后在计算集群内部广播给其他节点,以减轻主存储的压力。
  • 分布式对象存储:如Ceph。由于其架构更简单,没有复杂的目录结构,因此扩展性更好,也成为存储检查点的流行选择。
  1. 训练数据的存储
  • 挑战:训练数据量更加庞大,原始数据在经过清洗、去重等预处理后,总量可达PB级别(1 PB = 1024 TB)。训练时,必须确保数据能被高速读取,以免GPU算力闲置等待。
  • 解决方案(分层存储架构)
  • 底层持久化存储:通常使用专为高性能计算设计的并行文件系统(如Lustre、GPFS)。它们负责海量数据的可靠存放,并提供高吞吐量的读写能力。
  • 上层缓存加速:在训练节点和底层存储之间,增加一个高速缓存层(如使用Alluxio、JuiceFS等系统)。它的作用是预先读取(Prefetch)训练将要用到的数据,并存放在高速缓存中。这样,GPU在训练时可以直接从缓存层极速获取数据,有效避免I/O瓶颈

3.4 调度安排

在大型GPU集群或云平台这种多用户共享的环境中,调度系统扮演着“交通指挥官”的角色,其核心目标是高效地分配和管理计算资源,确保各个训练任务顺利运行。

调度系统可以分为两大类:

  1. 工作负载调度 (Workload Scheduling)

主要负责决定哪个AI训练任务(工作负载)在何时、分配到哪些GPU上运行

  • 传统AI调度器:已有一些通用的AI任务调度器,它们具备一些高级功能,比如:
  1. 能识别并优化利用不同型号的GPU。
  2. 允许在单个GPU上运行多个小任务以提高利用率。
  3. 能动态调整任务使用的GPU数量。
  • 专门针对LLM的调度器:由于LLM训练的独特性,通用调度器效果不佳。因此出现了专门的LLM调度器,它们更加“智能”,例如:
  • 理解LLM并行策略:能根据集群状态,动态调整一个任务是该用数据并行、张量并行还是流水线并行,以达到最高效率(如Crius)。
  • 优化整个开发流程:不仅调度训练任务,还能高效安排超参数搜索、模型评估、故障诊断等一系列相关工作。一个巧妙的技巧是利用流水线并行中的“流水线气泡”(即GPU空闲时间)来穿插运行这些辅助任务(如Hydro, Acme)。
  1. 资源调度 (Resource Scheduling)

除了调度GPU,还需协同调度与训练相关的其他资源,如网络、存储、CPU等。

  • 网络调度:通过错开不同训练任务的通信高峰期,来避免网络拥堵。
  • 存储调度:将数据缓存也视为一种可调度资源,与计算任务协同分配,以提升数据读取效率。
  • CPU和内存调度:更精细化地为训练任务分配CPU核心,而不是简单地按GPU数量分配。
  • 能耗调度:关注能源效率,比如利用“流水线气泡”时间适当降低GPU运行频率来省电,或者自动寻找最节能的训练批次大小(batch size)和GPU功率上限。

4 并行方案 PARALLELISM SCHEMES FOR LLM TRAINING

大语言模型(LLM)的规模越来越大,单台计算机的算力和内存已经无法满足训练需求。因此,必须使用大规模的计算机集群进行分布式训练 (Distributed Training)。本章节的核心就是探讨如何高效地组织这些计算机协同工作,即研究各种不同的并行化方案

文章将这些方案分为了三大类:

  • 混合并行 (Hybrid Parallelism):
  • 是什么: 这是“手动挡”模式。由领域专家根据经验,将多种成熟的并行策略(如数据并行、张量并行、流水线并行等)像搭积木一样组合在一起,以期达到最佳的训练效果。
  • 自动并行 (Auto Parallelism):
  • 是什么: 这是“自动挡”模式。系统会自动分析模型结构和硬件配置,从海量的可能性中找出最优的并行方案,大大降低了人工配置的复杂性。
  • 异构并行 (Heterogeneous Parallelism):
  • 是什么: 这种方案专门处理“不统一”的场景。主要包括两种情况:
  • 硬件异构: 训练集群里混合了不同型号的AI加速器(如新旧两代GPU)。
  • 模型异构: 训练任务本身就需要多个不同的模型协同工作,例如在RLHF(基于人类反馈的强化学习)训练中。

此外,文章还简要提及了实现这些并行方案的两种底层编程模型:SPMD (单程序多数据),即所有处理器运行相同代码处理不同数据(更常见);以及MPMD (多程序多数据),即不同处理器可以运行不同代码(如流水线并行)。

4.1 混合并行 Hybrid Parallelism

混合并行(Hybrid Parallelism)指的是把多种人工设计的并行手段叠加使用,让模型在不同维度上同时切分:

  • 数据并行(Data Parallel)按批次把样本分给不同 GPU;
  • 张量并行(Tensor Parallel)在层内部把大矩阵拆成多块分给多卡计算;
  • 流水并行(Pipeline Parallel)把模型按层切成若干 stage,像产线一样推送微批次;
  • 序列并行(Sequence Parallel)针对超长上下文,再把序列维度切片给多卡;
  • 专家并行(Expert Parallel)针对混合专家(MoE)模型,将不同的专家网络分布到不同设备上,通过All-to-All通信将输入数据路由到指定专家进行计算。

其中“数据+张量+流水”三者组合常被称为 3D 并行,可同时利用这三条维度的并行度,最大化集群算力和显存利用率。

4.1.1 数据并行

数据并行是分布式训练中最基础、最常用的一种方法。它的核心思想可以通俗地理解为:“人手一份完整的模型,分头处理不同的数据”。因为实现简单、效果好,所以非常流行。

核心工作流程

  1. 复制模型: 每个参与训练的GPU都拥有一份完整且相同的模型副本。
  2. 分发数据: 将一大批训练数据切分成多份,每个GPU拿到一小份。
  3. 各自计算: 每个GPU用自己的数据独立计算出模型参数的梯度(更新方向)。
  4. 同步梯度: 所有GPU通过网络通信,将各自计算的梯度进行聚合(通常是求平均值),得到一个统一的全局梯度。
  5. 统一更新: 所有GPU都使用这个全局梯度来更新自己的模型副本,确保大家在下一次计算开始前模型是完全一致的。

关键挑战与技术演进:如何节省内存?

数据并行的最大问题在于内存开销。因为每个GPU都要存一份完整的模型,当模型参数达到百亿甚至千亿时,GPU的显存很快就爆了。

为了解决这个问题,数据并行发展出了不同的分片 (Sharding) 策略,其本质是在 内存占用通信开销 之间做出权衡。主要有以下三种:

  1. 完全复制 (Full Replication / 普通数据并行)
  • 做法: 每个GPU都保存一份完整的模型参数、梯度和优化器状态。
  • 优点: 逻辑最简单。
  • 缺点:内存开销最大,是“内存大户”,不适合训练超大模型。
  • 代表: PyTorch DDP、Horovod。
  1. 完全分片 (Full Sharding)
  • 做法: 将模型参数、梯度、优化器状态全部“切碎”,每个GPU只负责保存和更新其中的一小部分。计算时,动态地从其他GPU那里临时获取所需的参数,用完后立刻丢弃以释放内存。
  • 优点:内存占用最低,是“极致省钱”模式,能用有限的硬件训练超大模型。
  • 缺点: 需要频繁地通过网络通信来获取参数,通信开销最大
  • 代表:ZeRO-3 (DeepSpeed的核心技术)、FSDP (PyTorch的官方实现)。
  1. 混合分片 (Hybrid Sharding)
  • 做法: 前两者的折中方案。将GPU分成若干小组,在小组内部进行参数分片,而在小组之间进行模型复制。
  • 优点:非常灵活,可以根据硬件和模型特点,调整分片和复制的粒度,在内存和通信之间找到最佳平衡点。
  • 缺点: 配置相对复杂。

4.1.2 张量并行

张量并行是一种模型并行技术,它的核心思想是:当模型的某一层太大,单张GPU都放不下时,就把这一层内部的大矩阵(即“张量”)给切开,分给多张GPU协同计算。

可以把它理解为“众人拾柴火焰高”,大家一起合作完成一个原本单个人搬不动的大任务。

核心工作原理

  • 切分对象: 不是切数据,也不是切模型层,而是切层内部的参数矩阵。例如,一个全连接层(Linear Layer)的核心就是一个大的权重矩阵,张量并行会把这个矩阵“横着”或“竖着”切成几块。
  • 协同计算: 每个GPU只持有矩阵的一小块,它们各自完成自己那部分的计算后,需要通过网络通信来合并中间结果,才能得到最终的正确输出。
  • 通信内容: 通信的是计算过程中的中间激活值 (intermediate activation tensors)。在大部分情况下,这些激活值比数据并行中需要同步的梯度要小得多。

特点与应用场景

  • 优点: 能够解决单个GPU无法容纳超大模型层的问题,是训练巨型模型的关键技术之一。
  • 缺点:
  1. 通信频繁: 在每一层的计算过程中都需要通信,对通信要求极高。
  2. 难以重叠: 它的通信和计算是紧密耦合的,很难像数据并行那样将通信延迟隐藏在计算背后。
  • 应用场景: 正因为对通信带宽要求苛刻,张量并行几乎只在单台服务器内部使用,因为服务器内的GPU之间有像NVLink这样的超高速、低延迟的专用通道。

技术演进

随着研究的深入,矩阵的“切法”也越来越复杂和高效,主要目的是为了进一步降低通信量和内存占用:

  • 1D并行 (Megatron-LM): 最早、最经典的方法,只在一个维度上切分矩阵(例如,一个按列切,一个按行切)。
  • 2D/2.5D/3D并行: 受到并行矩阵乘法算法的启发,后续工作提出了更复杂的切分方式,在多个维度上同时对参数矩阵和输入数据进行切分,以在更大规模的GPU集群中获得更好的通信效率和负载均衡。

4.1.3 流水线并行

流水线并行是一种关键的模型并行技术,它的核心思想是:当模型太深、层数太多,以至于单张GPU都装不下时,就将模型按层“纵向”切开,像工厂的流水线一样,让不同的GPU负责不同的“工序”(即模型的不同阶段)。

核心工作原理与应用场景

  • 如何切分: 将模型的连续多层打包成一个阶段 (Stage),并将每个Stage分配给一个(或一组)GPU。
  • 如何工作: GPU 1完成它的Stage后,将计算结果(中间激活值)传递给GPU 2,GPU 2再接着计算,以此类推。在反向传播时,梯度则沿着相反的方向传回来。
  • 通信特点: 与张量并行不同,流水线并行的通信不那么频繁,只发生在各个Stage的“接缝”处。
  • 应用场景: 因为对网络带宽的要求相对较低,它非常适合用于跨多台服务器进行大规模训练,甚至可以用于地理上分散的GPU资源。

两大核心挑战与解决方案

为了让所有GPU能同时工作起来,而不是一个接一个地串行计算,流水线并行通常会将一个大的数据批次(Batch)切分成多个更小的微批次 (Micro-batches),让它们像水流一样依次通过整条流水线。但这样做会带来两个主要问题:

1. 流水线气泡 (Pipeline Bubble)

  • 问题是什么: 在流水线的“启动”和“结束”阶段,很多GPU会处于空闲等待状态,就像流水线上的空隙,这大大降低了硬件的利用率。
  • 如何解决:通过精巧的调度算法
  • GPipe(填充-排空)调度: 一种朴素的方法。先让所有微批次都完成前向计算,然后再统一开始反向计算。这种方法简单,但开头和结尾的“气泡”很大。

  • 1F1B(1个前向,1个后向)调度 (PipeDream): 一种更高效的方法。一旦某个微批次完成了前向计算,就立即开始它的反向计算,而不必等待其他微批次。通过让前向和后向计算交错进行,可以极大地压缩“气泡”,提升效率。

  • 其他高级方法: 还包括双向流水线(Chimera)、波浪式流水线(Hanayo)、零气泡(Zero bubble)等,都是为了用更复杂的方式填满GPU的空闲时间。

2. 内存不均衡 (Memory Imbalance)

  • 问题是什么: 处于流水线前端的GPU需要缓存更多的中间激活值(为后续的反向计算做准备),因此比后端的GPU消耗更多的内存。
  • 如何解决:
  • 动态传输: 在运行时,将前端高负载GPU上的激活值,临时传输到后端空闲的GPU上暂存(BPipe)。
  • 对称分区: 巧妙地设计模型分区,让每张GPU同时持有一个前端Stage和一个后端Stage(例如,GPU 0负责第1和第8段,GPU 1负责第2和第7段),从而自然地平衡内存负载(V-Shape, Hanayo)。
  • 自适应重计算 (AdaPipe): 结合激活重计算技术(一种用计算换内存的方法),为不同内存压力的Stage定制不同的重计算策略,以最低的计算开销来平衡内存。

总结: 流水线并行是训练超大模型的有效武器,但它本质上是一个复杂的权衡与优化问题。开发者需要通过精细的调度来减少“流水线气泡”,提高GPU利用率;同时也要通过巧妙的分区和内存管理策略来解决“内存不均衡”的问题。

4.1.4 序列并行

序列并行是一种专门为了训练和处理超长文本(长上下文)而设计的并行策略。它的核心思想是:当输入的句子太长,导致Attention计算的内存和计算量爆炸时,就把这个长句子切成几段,分给不同的GPU来协同处理。

为什么需要序列并行?—— 问题的根源

随着LLM能够处理的文本越来越长(从几千个token到上百万个token),一个巨大的瓶颈出现了:

  1. 内存爆炸: Attention机制中,需要存储的中间结果(激活值)与序列长度的平方成正比。序列一长,显存立刻就不够用了。
  2. 计算量爆炸: Attention的计算复杂度也是序列长度的平方

虽然“激活重计算”能缓解内存问题,但会增加计算时间。而“张量并行”虽然能分担计算,但通信开销又会变大。因此,需要一种新的并行维度——序列并行。

核心工作原理

  • 如何切分: 将一个输入的长序列(比如10000个token)沿着序列维度切成N段(例如,切成4段,每段2500个token),然后将每一段分配给一个GPU。
  • 如何组合: 序列并行通常不单独使用,而是和张量并行、流水线并行结合,形成更强大的混合并行策略。它在已有的并行维度上,又增加了一个新的切分维度。

挑战与解决方案:如何高效地做分布式Attention?

序列并行的最大挑战在于,Attention的计算是全局的,即每个token都要和序列中的所有其他token进行计算。当你把序列切开后,如何让不同GPU上的token段落高效地交互,就成了核心问题。

主要有两大流派的解决方案:

3. 基于环形通信 (Ring-based) 的方法

  • 核心思想: 像“击鼓传花”一样。GPU们组成一个逻辑环,它们将自己负责的那段序列的Key和Value张量,在环上依次传递。
  • 工作流程 (以Ring Self-Attention为例):
  1. GPU 0 把自己的K/V块传给GPU 1。
  2. GPU 1 收到后,用自己的Q和GPU 0的K/V计算一部分Attention,然后把GPU 0的K/V块再传给GPU 2。
  3. 这个过程在环上持续进行,直到每个GPU都“看”过了所有其他GPU的K/V块,从而完成了全局Attention的计算。
  • 挑战与优化:
  • IO瓶颈: 这种方法需要高效的Attention算子(如FlashAttention)来配合,以减少对GPU内存的读写次数。
  • 负载不均衡: 在因果Attention中(decoder-only模型),靠前的token计算量远小于靠后的token,导致负责前段序列的GPU很空闲。
  • 优化方法: 通过交换数据块 (Context Parallel)、**非连续地分配token (Striped Attention)**等方式来平衡各个GPU的计算负载。

4. 基于All-to-All的方法 (DeepSpeed-Ulysses)

  • 核心思想:先分组,再交换”。这是一种更巧妙的思路,它不直接在序列维度上做复杂的环形通信。
  • 工作流程:
  1. 它利用一次All-to-All全局通信,非常高效地将数据的分区方式从“按序列切分”转换成了“按注意力头(Head)切分”
  2. 转换完成后,每个GPU上都有了完整序列的一部分注意力头。这时,每个GPU就可以独立地、并行地使用像FlashAttention这样的高效算子来完成自己那部分头的计算,计算过程中无需再和其他GPU通信
  3. 最后再通过一次All-to-All通信把结果转换回来。
  • 优点:
  • 负载天然均衡,因为每个头的计算量是一样的。
  • 可以无缝集成现有的高效Attention实现。
  • 缺点:
  • 并行度受限于模型的注意力头数量。对于使用了MQA/GQA(这两种技术会减少Key/Value头的数量)的模型,并行效果会打折扣。

混合方案 (LoongTrain, USP)

最新的研究开始融合上述两种方法的优点,将GPU组织成一个二维网格,同时进行Ring-style和Ulysses-style的通信,以达到更优的性能。

4.1.5 专家并行

专家并行是一种专门为混合专家模型 (Mixture-of-Experts, MoE) 设计的并行策略。MoE模型的核心思想是:“人多不一定力量大,对症下药才高效。”

它不像普通模型那样让所有参数在每次计算时都参与,而是构建一个由多个“专家”(即小型神经网络)和一个“门控网络 (Gate Network)”组成的系统。门控网络会像一个聪明的调度员,根据输入的数据(token),智能地选择激活一到两个最相关的专家来处理,其他专家则“休息”。

这种“稀疏激活 (Sparse Activation)”的方式,使得MoE模型可以在总参数量巨大(例如万亿级别)的情况下,保持相对较低的实际计算成本,因为每次计算只动用了其中一小部分参数。像Mixtral 8x7B这样的热门模型就采用了这种架构。

专家并行:如何训练分布式的MoE模型?

随着专家数量的增多,单张GPU已经无法容纳所有的专家。因此,必须将它们分散到整个GPU集群中,这就引出了专家并行

  • 核心做法 (如图9所示):
  1. 分散专家: 将不同的专家网络部署到不同的GPU上。例如,8个专家分布在8张GPU上,每张卡负责一个。
  2. 路由数据: 当GPU 0上的一个token需要由GPU 5上的专家来处理时,它必须通过网络将这个token的数据发送给GPU 5。
  3. 关键通信: 这个跨GPU路由数据的过程,是通过一次高效的All-to-All集体通信操作来完成的。All-to-All意味着每个GPU都会同时向所有其他GPU发送数据,并从所有其他GPU接收数据。
  • 与3D并行的结合: 专家并行可以被视为一个独立的并行维度,能与数据并行、张量并行、流水线并行无缝集成,形成更复杂的混合并行策略。

三大核心挑战与解决方案

5. 通信瓶颈 (Communication Optimization)

  • 问题是什么:All-to-All通信非常消耗网络带宽,尤其是在网络环境较差的集群中,很容易成为整个训练的瓶颈。
  • 如何解决:
  • 计算与通信重叠: 将大的All-to-All操作拆分成多个小块,然后让这些小块的通信过程与专家的计算过程交错进行,像流水线一样,从而隐藏通信延迟(如Tutel, FasterMoE)。
  • 优化通信调度: 在混合并行中,当All-to-All(专家并行)和All-Reduce(数据并行)冲突时,优先保证All-to-All的带宽,减少其阻塞时间(如Lina)。
  • 数据本地化: 提出新的范式,固定数据不动,而是根据需要,通过网络异步地将远端的专家模型“拉取”到本地进行计算(如Janus)。

6. 负载不均衡 (Load Balance)

  • 问题是什么: 由于门控网络的路由策略或者数据本身的特性,某些“热门”专家可能会被分配到远超其他专家的计算任务,导致这些GPU成为“劳模”,而其他GPU则很空闲,造成“木桶效应”。
  • 如何解决:
  • 动态复制热门专家: 实时监测每个专家的负载。如果发现某个专家过于繁忙,就动态地将它的副本复制到一些空闲的GPU上,让大家一起分担它的工作(如FasterMoE, FlexMoE)。
  • 智能放置与切换: 通过性能模型预测,提前规划好专家的放置方案。在训练过程中,如果检测到负载不均,就动态切换到更优的并行或放置策略(如SmartMoE, Prophet)。
  • 拓扑感知的路由: 从模型和系统协同设计的角度出发,在路由算法中加入一项“辅助损失”,引导模型学会将数据发送给网络拓扑上更近、更优的专家,从而在不牺牲模型精度的前提下,使数据流更适应物理网络结构(如TA-MoE)。

7. 计算浪费 (Token Dropping & Padding)

  • 问题是什么: 为了使用高效的矩阵乘法(GeMM)算子,系统通常要求送入每个专家的数据批次大小都是一致的。如果某个专家收到的token数量不足,就需要用空数据(padding)补齐;如果太多,就需要丢弃一部分(dropping),这都造成了计算资源的浪费。
  • 如何解决:
  • 专用算子: 开发新的、更灵活的稀疏矩阵乘法算子,使其能够支持为不同专家处理不同大小的批次,从而避免不必要的填充和丢弃(如Megablocks)。

总结: 专家并行是训练万亿参数级别稀疏大模型的关键,但它也引入了复杂的系统挑战。优化的核心在于:如何高效地组织All-to-All通信如何动态地平衡各个专家的计算负载,以及如何减少因计算粒度不均导致的资源浪费

4.2 自动并行 Auto Parallelism

前面提到的混合并行(数据、张量、流水线并行等)就像是“手动挡”,需要专家根据丰富的经验,手动设计一套复杂的并行方案。这个过程非常耗时、费力、且技术门槛极高

自动并行 (Auto Parallelism) 就是为了解决这个痛点而生的“自动挡”系统。它的目标是:你只需要把模型和GPU集群信息告诉它,它就能自动分析并找出最高效的并行策略组合。

为什么需要自动并行?—— “手动挡”的痛点

  1. 组合爆炸: 对于一个大模型,有多少种切分方式(数据切几路?模型怎么切?流水线切几段?),可能性多到人脑无法计算。
  2. 知识密集: 找到最优方案需要深入理解模型、硬件和各种并行策略的复杂权衡。
  3. 费时费力: 手动尝试和调优不同的并行方案,本身就是一项巨大的工程。

自动并行系统通过算法来代替专家进行分析决策,极大地降低了分布式训练的门槛,并提升了训练效率

自动并行是如何工作的?—— 核心三步走

一个典型的自动并行框架,通常像一个智能规划师,遵循以下三个步骤:

  1. 定义搜索空间 (列出所有可能性):
  • 系统首先要搞清楚“有哪些选项?”。这包括:一个模型层可以从哪些维度切分?流水线可以在哪里切断?数据并行可以用多少张卡?等等。
  1. 建立性能模型 (做出评估):
  • 为了评价每个选项的好坏,系统需要一个“评估器”。这个性能模型能预测出,在当前硬件上,采用某种并行策略后,训练速度有多快、内存会用多少
  1. 设计搜索算法 (寻找最佳方案):
  • 有了“所有选项”和“评估器”,最后一步就是如何高效地找到最佳选项。因为可能性太多,不可能暴力穷举。系统会使用动态规划强化学习等智能搜索算法,快速在海量方案中定位到那个性能最好的一个。

自动并行的两大流派

  1. 通用框架 (General Framework):
  • 目标: 能够自动并行任何类型的深度学习模型,不局限于Transformer。
  • 特点: 搜索空间更广、更复杂。底层需要强大的系统支持(如GSPMD、OneFlow SBP),用简单的标注就能实现复杂的并行。
  • 代表: Alpa, FlexFlow, Piper。
  1. Transformer专用框架 (Transformer-Specific Framework):
  • 目标: 专门为LLM(其核心是Transformer架构)进行深度优化。
  • 特点: 由于模型架构固定,搜索空间可以被简化,优化目标更明确,效果也往往更好。
  • 代表: Galvatron, Colossal-Auto。

总结: 自动并行将复杂的并行策略选择问题,转化成了一个自动化搜索问题,让开发者可以从繁琐的性能调优中解放出来,更专注于模型本身的研究。

4.3 异构并行 Heterogeneous Parallelism

“异构”就是指“不统一”或“混搭”。异构并行专门解决在不统一的环境下进行高效训练的问题。这种“不统一”主要体现在两个方面:硬件模型

4.3.1 异构硬件并行 (Heterogeneous Hardware)

  • 问题是什么?
    现实中的GPU集群往往不是完美统一的。可能的情况有:
  1. 设备混搭: 集群里同时有新的A100和老的V100,它们的算力、显存各不相同。
  2. 网络混搭: 服务器内部的GPU用高速NVLink连接,但服务器之间的连接用的是普通以太网,带宽差异巨大。
  3. 地理分散: 由于电力或成本原因,GPU分布在不同的数据中心,跨地域网络延迟高、带宽低。

如果在这种“混搭”集群上用标准并行策略,就会出现“木桶效应”:所有快设备都必须等待最慢的那个设备,导致整体效率低下。

  • 如何解决?—— 核心思想:“因材施教,能者多劳” 系统需要足够智能,能够识别出不同硬件的差异,并分配不等的任务,目标是让大家差不多同时完成
  • 对于算力强的GPU: 分配更多的计算任务(例如,在流水线并行中负责更多层)。
  • 对于算力弱的GPU: 分配更少的计算任务。
  • 对于网络差的环境: 优先在内部完成高通信量的任务,并采用压缩、异步等策略减少跨网络的数据传输。

4.3.2 异构模型并行 (Heterogeneous Model)

  • 问题是什么? 有时候,训练任务本身就是由一个“混搭模型团队”来完成的,而不仅仅是训练一个模型。最典型的例子就是RLHF (基于人类反馈的强化学习),它是让大模型学会说“人话”的关键步骤。

在RLHF的PPO阶段,需要 4个不同角色、不同大小的模型 协同工作(如图10):

  1. Actor模型: 负责生成文本。
  2. Critic模型: 负责给Actor的表现打分。
  3. Reward模型: 另一个打分模型。
  4. Reference模型: 一个固定的参考模型。

这4个模型的工作负载和内存需求各不相同。简单地把它们全部打包放在同一组GPU上,会非常低效,并导致内存瓶颈。

  • 如何解决?—— 核心思想:“专业分工,优化协同”
  • 物理隔离与分工 (Separation Strategy):
  • 别把所有人都塞在一个小办公室里。把负责生成文本(推理密集型)的模型团队放在一组GPU上,把负责更新权重(训练密集型)的团队放在另一组GPU上。这样它们可以并行工作,互相不干扰,还能重叠计算和通信。
  • 动态切换策略 (Hybrid Engine):
  • 同一个模型(如Actor)在不同阶段扮演的角色也不同。在生成文本时,它需要高吞吐,适合用张量并行;在更新权重时,它需要省内存,适合用ZeRO/FSDP。系统可以为它动态切换最合适的并行策略。
  • 精细化任务调度 (Fine-grained Scheduling):
  • 像一个超级项目经理一样,重新安排RLHF内部各个子任务的执行顺序,让关联性强的任务能更好地重叠执行,进一步提升效率。
posted @ 2025-12-02 00:18  Orzjh  阅读(0)  评论(0)    收藏  举报