Page 214 - 《软件学报》2026年第1期
P. 214

高彦杰 等: 大语言模型预训练系统关键技术综述                                                          211


                 间隔消费激活张量, 使得其内存占用相比基本流水线方式进一步降低. 为了降低气泡占比, Narayanan                          等人  [51] 提出
                 了交错调度方法      (interleaved schedule) , 与基础的流水并行相比, 每个卡只能分配连续的模型计算阶段进行计算,
                 而交错调度方式可以分配两个以上不连续的阶段进行前向和反向传播计算, 进一步降低气泡占比. Li 等人                               [52]  提出
                 了双向流水线技术       Chimera, 进一步降低气泡. EnvPipe  [53]  针对使用多卡进行大语言模型训练的场景, 利用流水并
                 行训练大语言模型中的不可去掉的气泡, 选择性地降低                  GPU  流式多处理器频率, 从而降低能耗. PipeFisher     [54]  巧妙
                 地利用气泡空闲时间执行资源装箱            K-FAC  优化算法计算, 利用闲置资源加速整体训练的收敛.
                  3.2.1.4    全切片数据并行
                    数据并行在计算和通信效率上表现良好, 但其内存效率较低, 相比之下, 模型并行具有较高的内存效率, 但计
                 算和通信效率可能较差. 具体来说, 数据并行通过复制整个模型状态来实现, 从而导致冗余的内存消耗, 而模型并
                 行通过将这些状态划分以提高内存效率, 但通常会导致过于细粒度的计算和昂贵的通信, 从而降低扩展效率. 此
                 外, 所有这些方法在整个训练过程中静态地维护所有模型状态, 即使在训练期间并非始终需要所有模型状态. 基于
                 这些观察, DeepSpeed  提出了   ZeRO  来缓解数据并行中的权重数据冗余问题, 进一步提高内存使用效率, 扩展训练
                 模型的规模. 其核心思想是在逻辑上仍然采用数据并行方案, 但在实际部署时, 每个                        GPU  仅部署部分模型切片. 当
                 每个  GPU  需要计算该部分模型切片时, 它会按需从含有该切片的                 GPU  显存中读取, 从而消除了多       GPU  之间的数
                 据冗余.
                    ZeRO  提供不同的切片和数据恢复方式, 内存消耗越低, 所需恢复的数据量越大. 以                      Adam  优化器的混合精度
                 训练为例, 需要    Float16  类型的权重和梯度, 各为     2  ψ, 其中  ψ 为参数量. 另外需要   Kψ 个优化器乘数, 包括      Float32
                 的权重副本    4  ψ, 动量  4  ψ 和方差  4  ψ, 总和  K = 12. 这  4  种不同方案的内存开销预估如下.
                    (1) 基线  (不使用  ZeRO) [40] : 内存开销为  (2+2+ K)×ψ, 其中  ψ =7.5B  代表模型权重参数量,  K = 12 代表优化器
                 状态占用的内存乘数,       N d  =64  代表数据并行度.
                                                                K ×ψ
                    (2) 阶段  1  优化器状态分区   [40] :  P os  内存开销为  2ψ+2ψ+  , 其节省了原本的   4  倍内存开销, 通信开销与数
                                                                 N d
                 据并行开销一致.
                                                              (2+ K)×ψ
                    (3) 阶段  2  增加梯度分区   [40] :   P os+g  的内存开销为  2ψ+  , 节省  8  倍的内存开销, 通信开销和数据并行
                                                                 N d
                 一致.
                                                          (2+2+ K)×ψ
                    (4) 阶段  3  增加参数分区   [40] :   P os+g+p  内存开销为     , 通信开销和数据并行呈线性关系, 如果有            64
                                                              N d
                 个  GPU, 则相对于基线模型会节省        64  倍内存.
                    ZeRO  不仅在数据并行和模型并行训练中消除了内存冗余, 还通过将梯度聚合转换为                         Reduce-Scatter 操作, 并
                 通过分桶化减少通信次数, 保持低通信成本, 同时重叠计算和通信, 使其能够根据设备数量按比例扩展模型大小,
                 并保持持续高效. PyTorch    和  FairScale 等系统中的全切片数据并行        (fully sharded data parallel, FSDP) 并行策略,
                 FairScale 称其等价于  ZeRO  阶段  3  方案, 并应用于  Llama 2  进行训练. 修改后的版本已与      PyTorch  的其他组件对
                 齐. FSDP  将模型实例分解为更小的单元, 然后展平并在每个单元内分割所有参数. 分片参数在需要时传递, 并在
                 计算后立即丢弃. 其设计基于以下观察, 尽管各种并行方案已被提出, 但在分布式训练中仍然存在两个挑战. 首先,
                 其中一些方法与特定模型结构紧密集成              (例如张量并行), 这阻碍了它们成为通用的训练大型模型的解决方案. 其
                 次, 其中一些技术是建立在快速发展的内部接口之上的, 底层机器学习框架容易受到框架实现变化的影响. 因此,
                 FSDP  更加稳健且高效, 具有与框架核心功能兼容的设计. 此外, 采用可组合和可定制的方式构建这样的解决方案,
                 将促进社区的创新.
                  3.2.1.5    序列并行
                    除了上述维度的大语言模型切片和并行外, 研究人员根据大语言模型序列不断增长的特点, 设计了                                LightSeq、
                 Colossal-AI 等序列并行方案. 其设计动机是, 由于张量并行的切片方式会并行计算不同的注意力头, 造成较大的通
                 信数据量和开销, 且很难扩展到超出注意力头数量的并行度, 从而阻碍其进一步应用. LightSeq                        则在序列维度上进
   209   210   211   212   213   214   215   216   217   218   219