分布式并行基础#
Author by:杨涵智
在 AI 的快速发展中,大模型展现出强大的能力,不断拓展机器认知的边界,推动多个领域实现技术突破。然而,大模型的成功离不开底层复杂而精密的技术体系。分布式并行技术作为大模型的重要基础,支撑着大模型的训练与优化,使其能够高效处理海量数据和复杂计算任务。本节将介绍分布式并行的基本概念、关键作用及其在大模型训练中的意义。
分布式并行的出现#
随着 AI 技术的快速发展,数据规模呈爆炸式增长,模型复杂度不断提高,这给传统的单机训练模式带来了严峻挑战。单机训练计算资源有限、训练速度缓慢、难以处理大规模数据等问题,严重制约了大模型性能的提升与应用拓展。为解决这些瓶颈,分布式并行技术成为大模型训练的关键方案。
分布式并行技术的核心思想是将大规模计算任务分解为多个子任务,分配到多个计算节点上并行处理,并通过高效的通信与协调机制整合各节点的计算结果,从而快速完成整体任务。在大模型训练中,数据规模庞大、参数众多,单机难以承载如此巨大的计算量,分布式并行提供了有效的解决路径。
为理解分布式并行在大模型训练中的意义,我们首先需要了解深度学习中的训练耗时公式:
其中,
从公式可以看出,训练耗时与训练数据规模、单步计算量和计算速率密切相关。在实际应用中,训练数据规模往往是固定的,模型结构也已确定,因此单步计算量相对不变。可调节的主要是计算速率,提高计算速率可显著减少训练时间。计算速率取决于单设备计算速率、设备数量和多设备并行效率(即加速比)。
单设备计算速率受 Moore 定律、制程工艺、封装工艺等因素影响,相对固定,但仍可通过算法优化进行提升。因此,在提高计算速率方面,我们主要可控制以下三个因素:
通过混合精度训练、算子融合、梯度累积等方法优化单设备计算速率;
由于单设备无法容纳整个大模型,需扩展设备数量,构建计算集群;
引入集群后,需提升并行效率,常用的并行方式包括数据并行、模型并行、流水并行等,这些将在后续章节详细展开。
硬件体系的支持#
分布式并行训练需要底层硬件体系提供基础支撑,核心包括以下模块(如图所示):
硬件接口抽象:支持 GPU、TPU、NPU 及各种领域专用架构(DSA)。统一的硬件接口抽象有助于复用编译优化策略,使优化与底层设备适当解耦。
可扩展网络:如 RDMA、InfiniBand、NVLink 等。这些技术提供高效的 NPU 之间的互联,具备高带宽、灵活的通信原语和高效的通信聚合算法。
集群硬件体系结构:负责集群的构建,包括存储、网络和任务执行、设备互联与加速。
作业调度和资源管理:在系统层面,平台需提供作业调度、运行时资源分配与环境隔离、异构资源集群管理等功能。通过将服务器资源池化,并利用高效的调度器结合深度学习作业特性与硬件拓扑,实现资源的高效利用。
大模型使能层#
本节将介绍构建在 AI 框架之上的分布式训练使能层,其核心目标是为大模型的训练和部署提供多维并行能力和资源整合机制,从而突破单点硬件的性能瓶颈。
在 AI 框架之上,通常还需构建一层使能层,用于支持大模型的分布式训练。本文中,"使能层"主要指分布式训练框架。尽管推理过程因对速度的极致追求通常不采用分布式方案,但随着模型规模持续增大,分布式推理也逐渐成为必要选择。
大模型分布式训练主要解决以下三个问题:
内存问题:单个GPU的现存优先,显然无法容纳整个大模型及其优化器状态等,分布式框架将模型的不同部分切分到多个设备上,支持部署和训练 Transformer 类结构的大模型;
计算问题:训练大模型需要海量的计算操作,耗时极长。分布式训练提供多种分布式并行模式,包括数据并行、模型并行和流水并行,即所谓的多维并行模式;
通信问题:在分布式环境下,设备间的频繁通信(如梯度同步、激活值传递)会成为新的瓶颈。使能层通过集合通信(Collective Communication)或参数服务器(Parameter Server)方式来优化数据传输,进行资源整合。
分布式加速库#
分布式加速库是分布式训练使能层的核心工具载体,它们提供了一系列封装好的并行策略和优化工具,帮助用户在多个 GPU 或跨多台机器上高效训练大模型,特别是 Transformer 类模型。
随着模型规模不断增大,并行技术成为在有限硬件资源上训练大型模型、提升训练速度的关键策略。HuggingFace 推出的 Accelerate 库等工具,使用户能够轻松在单机多卡或多机多卡环境下训练 Transformers 模型。下面简要介绍几种常见的加速库。
Huggingface Accelerate#
Huggingface Accelerate是一个主打轻量级、易用性的分布式训练加速库,专为Transformer类模型设计,旨在让开发者以最少的代码改动,将其 PyTorch 脚本从单机扩展到任意分布式环境。其核心能力包括:
自动适配硬件环境:Huggingface Accelerate可以自动检测并适配单机多卡/多机多卡、GPU/TPU等多种环境,使用户无需关注底层细节;
生态兼容性:Huggingface Accelerate提供了多种加速策略和自动检测加速器的功能,支持混合精度训练、梯度累积,兼容Huggingface Transformers/Datasets生态;
极简迁移接口:Huggingface Accelerate的核心理念是“不改变原生 PyTorch 代码逻辑”,其提供了简单的API接口,开发者可以方便地使用深度学习框架,如PyTorch和TensorFlow,并快速地将单机代码迁移至分布式环境。
Huggingface Accelerate适合10亿到千亿参数规模的大模型的快速训练,尤其适合科研与原型开发。
Megatron-LM#
本部分介绍 NVIDIA 开发的 Megatron-LM,强调其并行策略、辅助功能及在实际使用中的注意事项。
Megatron-LM 是 NVIDIA 开发的分布式框架,并利用 Megatron-Core 进行 LLM 训练。Megatron-Core 是 GPU 优化训练技术的库,提供正式的产品级支持。二者组合使用,专注于提升 大模型分布式并行训练的效率和扩展性:
加速训练手段:通过综合运用数据并行、张量并行和流水线并行,成功复现了 GPT-3 等大型模型,显著提升训练效率,加速模型收敛;
辅助工具:提供强大的数据处理和 Tokenizer 功能,高效处理和转换数据,为基于 Transformer 结构的 LLM 和视觉语言模型(VLM)等提供支持,确保模型生成高质量内容。
需要注意的是,Megatron-LM 在工程实现上较为复杂,存在版本管理问题,实际使用中可能带来一定不便。
Colossal-AI & BMTrain#
本部分介绍 Colossal-AI 和 BMTrain 两个框架,分别强调其并行策略、优化案例和适用模型规模。
Colossal-AI 是一个集成的系统,为用户提供一套综合的训练方法,旨在通过多种优化策略显著提升训练效率,降低显存占用:
加速训练手段:提供丰富的张量并行策略,包括 1D、2D、2.5D 及 3D 张量并行等,为大模型训练提供多样化并行计算方案,充分发挥硬件并行计算能力;
丰富案例:Colossal-AI 提供了超过 20 个大模型示例和配置文件,集成最新 MOE(混合专家)技术和 SORA 优化方法,为开发者提供实践参考,助力快速上手。
BMTrain 是一个高效的大模型训练工具包,专注于训练 数百亿参数规模 的大模型:
模型支持:BMTrain 主要支持智源研究院 Aquila 系列模型的分布式训练,为该系列模型的高效训练和优化提供支持;
加速训练手段:支持对 DeepSpeed 中的并行策略进行深度优化,进一步提升训练效率和性能,使大规模模型训练更加高效稳定。
DeepSpeed#
本部分介绍微软开发的 DeepSpeed,重点阐述其加速训练的手段、辅助工具和易用性。 (github上显示今年似乎还在更新) DeepSpeed 是 微软 开发的一款致力于提升 大模型训练效率 和可扩展性的优秀工具。其主要优势包括:
加速训练手段:DeepSpeed 集成了数据并行(尤其是 ZeRO 系列)、模型并行、梯度累积、动态缩放、混合精度等技术,显著加速模型训练,提升训练效率,促进模型快速收敛;
辅助工具:具备分布式训练管理、内存优化和模型压缩等功能,全面满足开发者需求,协助更好地管理和优化大模型训练任务;
无缝迁移:通过简洁的 Python API 与 PyTorch 深度集成。开发者仅需修改少量代码,即可将单机训练脚本“DeepSpeed 化”,轻松实现分布式扩展。
DeepSpeed 在大模型预训练环节及与 HuggingFace Transformers 结合时表现尤为突出,但在其他场景中的应用相对有限。
总结与思考#
分布式加速库和框架在大模型训练与推理中扮演着不可或缺的角色。它们不仅赋予大模型多维分布式并行的能力,使其能够在 AI 集群上高效训练和推理,还显著提升了计算资源的利用率和集群的整体效率。随着大模型技术的持续演进,分布式加速技术将继续推动 AI 领域实现新的突破与创新。
本节视频#
引用与参考#
https://openaitx.github.io/projects/NVIDIA/Megatron-LM/README-zh-CN.html
https://colossalai.org/zh-Hans/docs/concepts/colossalai_overview
https://bmtrain.readthedocs.io/zh-cn/stable/
https://blog.csdn.net/qq_41667743/article/details/130034353
https://github.com/deepspeedai/DeepSpeed