导入
尽管 PyTorch 是一个非常流行的深度学习框架,它在动态计算图、易用性、灵活性和强大的社区支持方面具有许多优点,但在大模型训练方面,我们需要更专业的框架来满足特定的需求,最主要的原因是:分布式训练支持
分布式训练支持:大型模型通常需要在多个 GPU 或 TPU 上进行分布式训练。虽然 PyTorch 支持分布式训练,但大模型训练框架可能提供了更优化的分布式训练策略,如模型并行性和数据并行性
并行策略详见
训练框架
当前,有许多大型模型训练框架可以帮助我们加速训练大型模型,这些框架通常提供了更优化的分布式训练策略,如模型并行性和数据并行性。我选取了最具影响力的四个主流框架,分别是:
Fully Sharded Data Parallel (FSDP) 是一种数据并行方法,最早是在 2021 年由 FairScale-FSDP 提出的,并在后续被集成到了 PyTorch 1.11 版本中
FSDP 可以看作是微软 Deepspeed 框架中提出的三种级别的 ZERO 算法中的 ZERO-3
的实现。它通过将模型的梯度、优化器状态和参数进行分片操作,使得每个 GPU 只存储部分参数信息,从而优化了资源的利用和提高了训练效率。此外,FSDP 也与包括 Tensor 实现、调度器系统和 CUDA 内存缓存分配器在内的几个关键 PyTorch 核心组件紧密协同设计,以提供非侵入式用户体验和高训练效率
DeepSpeed 是由微软研究团队开发的一个深度学习优化库,旨在提供高效、可扩展的大规模模型训练能力。它通过采用先进的并行化策略、内存优化技术(如 ZeRO 内存优化器)和混合精度训练来显著提高训练效率和减少资源需求
Megatron-LM 是由 NVIDIA 推出的一个用于训练大型语言模型的分布式训练框架,它支持在多节点、多 GPU 环境下进行模型训练。Megatron-LM 通过模型并行(Model Parallelism)的方式,允许训练具有数千亿参数的模型。该框架综合应用了数据并行(Data Parallelism)、张量并行(Tensor Parallelism)和流水线并行(Pipeline Parallelism)来训练像 GPT-3 这样的大型模型
Hugging Face 的 Accelerate 是一个用于简化和加速深度学习模型训练的库,它支持在多种硬件配置上进行分布式训练,包括 CPU、GPU、TPU 等。Accelerate 允许用户轻松切换不同的并行策略,同时它还支持混合精度训练,可以进一步提升训练效率
以下是各种框架对并行策略(截至 2024/10/12)的支持情况:
框架 | DP | PP | TP | 3D 并行 |
---|---|---|---|---|
Pytorch(FSDP) | ✅ | ❌ | ❌ | ❌ |
DeepSpeed | ✅ | ✅ | ✅ | ✅ |
Megatron-LM | ✅ | ✅ | ✅ | ✅ |
Accelerate | ✅ | ❌ | ❌ | ❌ |