https://www.huaxiaozhuan.com/工具/huggingface_transformer/chapters/7_accelerate.html

https://blog.csdn.net/weixin_43646592/article/details/134713912

https://huggingface.co/docs/transformers/zh/main_classes/deepspeed

Accelerate

Accelerate 是由 Hugging Face 提供的一个高效分布式训练库,旨在简化分布式训练和设备管理流程,使用户能够更方便地在多种硬件配置上运行同一套 PyTorch 代码。通过 Accelerate,用户只需添加少量代码修改,就可以轻松地在多 GPU、多 TPU 或其他分布式环境中进行模型训练,而无需显式处理设备间的数据分片、通信和设备管理。

社区中有两个流行的 零冗余优化器(Zero Redundancy Optimizer,ZeRO) 算法实现,一个来自 DeepSpeed,另一个来自 PyTorch。Hugging Face Accelerate 对这两者都进行了集成并通过接口暴露出来,以供最终用户在训练/微调模型时自主选择其中之一。

deepspeed

ZeRO

ZeRO(Zero Redundancy Optimizer)是一种用于大规模训练优化的技术,主要是用来减少内存占用。在大规模训练中,内存占用可以分为 Model States 和 Activation两部分 (Activation估计是前向传播时保存下来的各神经元的激活值吧,因为反向传播时计算梯度需要用到) ,而 ZeRO 主要是为了解决 Model States 的内存占用问题。

ZeRO 将模型参数分成了三个部分:Optimizer States、Gradient 和 Model Parameter。

不同的 stage

优化器状态 一般包含FP32 Gradient、FP32 Variance、FP32 Momentum、FP32 Parameters。梯度和模型参数 一般会用FP16就够了,所以占用大头一般是优化器相关的。