本人项目地址大全:Victor94-king/NLP__ManVictor: 优快云 of ManVictor
写在前面: 笔者更新不易,希望走过路过点个关注和赞,笔芯!!!
写在前面: 笔者更新不易,希望走过路过点个关注和赞,笔芯!!!
写在前面: 笔者更新不易,希望走过路过点个关注和赞,笔芯!!!
简单介绍
DeepSpeed是由微软基于PyTorch研发的开源深度学习优化库,主要目的是降低大模型训练的门槛,提升训练效率,并帮助开发者更有效地管理和优化大模型的训练和部署任务。它支持多种训练优化策略,包括:
- 3D并行 :数据并行、模型并行、流水线并行以及三者的混合使用。
- Zero Redundancy Optimizer(零冗余优化器) :包括ZeRO-0、ZeRO-1、ZeRO-2、ZeRO-3、ZeRO-Infinity等不同级别的优化。
- ZeRO-Offload :支持将数据、梯度、优化器状态等下沉到CPU和NVMe,以减少GPU内存压力。
- 自定义混合精度训练 :包括动态精度缩放(Dynamic Loss Scaling)和混合精度优化器(Mixed Precision Optimizer)。
此外,DeepSpeed还提供了许多大模型相关的工具,如分布式训练管理、内存优化和模型压缩等,以帮助开发者更好地管理和优化大规模深度学习训练任务。DeepSpeed在自然语言处理(NLP)和多模态等领域有许多成功的应用案例,可以极大提升大模型的训练速度、降低训练门槛以及训练成本,并因具备完整健康的社区生态,提升大模型的可用性。
特点和优势
DeepSpeed的主要特点和优势包括:
- 高效的并行化策略 :支持多种并行化方法,能够显著提高训练速度和可扩展性。
- 内存优化技术 :通过ZeRO技术减少内存占用,使得在有限的内存资源下训练更大的模型成为可能。
- 混合精度训练支持 :减少内存占用和计算时间,降低能耗。
- 易用性和兼容性 :与PyTorch等主流深度学习框架紧密集成,提供了易用的API和丰富的文档支持。
DeepSpeed的架构主要分为四个板块:Training、Inference、Compression、Science,每个板块都提供了相应的API和工具来支持深度学习的不同阶段和需求。通过使用DeepSpeed,开发者可以更加专注于模型的研究与改进,而将训练效率和性能的提升交给DeepSpeed来实现。
ZeRO-1~ZeRO-Infinity
DeepSpeed的ZeRO技术通过在多个GPU之间分片模型的状态(包括优化器状态、梯度和参数),来消除数据并行进程中的内存冗余,从而提升训练效率和显存利用率。以下是ZeRO技术的工作机制:
- ZeRO-1(Stage 1) :在这个阶段,优化器状态被分片存储在不同的GPU上,每个GPU只更新它自己的那部分优化器状态。这减少了内存使用量,因为每个GPU不再需要存储完整的优化器状态。更新后的参数通过All-gather操作同步到所有GPU。
- ZeRO-2(Stage 2) :在ZeRO-1的基础上,ZeRO-2进一步将梯度也进行分片处理。每个GPU只保留与其优化器状态相对应的梯度部分。这样,每个GPU在反向传播后只需要合并自己的那部分梯度,然后更新模型参数,其余的梯度会被释放。
- ZeRO-3(Stage 3) :ZeRO-3在ZeRO-2的基础上进一步将模型参数也进行分片。在前向传播和反向传播过程中,每个GPU只保存部分参数。在需要时,通过All-Gather操作收集分布在其他GPU上的参数,以获得完整的模型参数进行计算。计算完成后,非本地维护的参数会被释放。
- ZeRO-Infinity :ZeRO-3的扩展,允许将模型状态卸载到CPU和NVMe内存中,以进一步减少GPU内存的使用。
ZeRO技术的核心思想是“万物皆可切,万物皆可抛”,即通过分片和卸载操作,减少每个GPU上的内存占用,同时保持计算和通信效率。这种方法使得在有限的硬件资源下训练更大的模型成为可能,并且可以显著提高显存效率和计算效率。通过这种方式,ZeRO技术能够在保持数据并行的计算粒度和通信效率的同时,显著降低内存占用,使得训练更大模型成为可能。以下是DeepSpeed的ZeRO-1、ZeRO-2、ZeRO-3以及ZeRO-Infinity的配置文件示例:
ZeRO-1 配置文件示例
DeepSpeed ZeRO-1 是一种分布式训练优化技术,旨在减少分布式训练中的内存占用和通信开销。下面是一个DeepSpeed ZeRO-1的json文件配置样例,以及各个配置参数的含义:
{
"train_batch_size": 8,
"gradient_accumulation_steps": 4,
"optimizer": {
"type": "Adam",
"params": {
"lr": 0.0001,
"weight_decay": 0.01
}
},
"fp16": {
"enabled": true
},
"zero_optimization": {
"stage": 1,
"reduce_bucket_size": 500000000,
"allgather_bucket_size": 500000000,
"overl