关键词

中文 英文 缩写 解释
零冗余优化器 Zero Redundancy Optimizer ZeRO 通过跨数据并行进程划分模型状态(参数,梯度和优化器状态),而不是复制它们,从而消除了数据并行进程之间的内存冗余。它在训练期间使用动态通信方式,以在分布式设备之间共享必要的状态,以保持数据粒度的计算粒度和通信量。ZeRO 支持的数据并行性可以适应任意大小的模型,只要聚合的设备内存(the aggregated device memory)足够共享模型状态即可。
完全分片数据并行 Fully Sharded Data Parallel FSDP 通过对优化器状态、梯度和参数进行分片来拟合更多数据和更大的模型。
分片/分区 sharding (FSDP) / partitioning (DeepSpeed) 模型张量被分成不同的 GPU,以尝试扩大模型大小

相关阅读

https://mp.weixin.qq.com/s/zUKm34-iTQY1u18MLwEq7A

本文作者做了一些实验比较这两个框架

  1. FSDP 和 DeepSpeed 可以互换吗?

    作者使用的是 Mistral-7B 基础模型,实测 FSDP 需要根据 GPU 数量缩放学习率(下图是4个GPU)可以和 DeepSpeed 对齐。

    image.png

  2. 精度很重要

    DeepSpeed 采用混合精度训练(除了加载模型和训练步,其他情况下低精度会自动 upcast 到全精度),FSDP 需要相应的配置才能与 DeepSpeed 的这一行为对齐。 (见附录3.3.d)

    作者猜测低精度如果不 upcasting,优化器可能不收敛。

  3. 吞吐量

    作者的实验参数:

    实验结果:

    框架 每 GPU 每秒词元数 每步耗时 (s) 浮点算力利用率 (MFU)
    FSDP (混合精度模式) 3158.7 10.4 0.41
    DeepSpeed 3094.5 10.6 0.40

    作者有计划对结合各种提高吞吐量的方法 (如,序列组装 + 4D 掩码、torch.compile、选择性 checkpointing) 进行全面的吞吐量对比基准测试 (方法:诸如 https://github.com/instructlabhttps://arxiv.org/abs/2402.13064)

  4. 介绍了一份指南(附录3.3)

https://blog.csdn.net/qq_56591814/article/details/133189752

作者对这两个框架都做了详细的介绍。

本文作者还总结了这两个框架的使用场景。

FSDP(Fully Sharded Data Parallel)和ZeRO(Zero Redundancy Optimizer)都是用于大规模深度学习模型训练的优化策略,都采用了内存优化,用于解决大型深度学习模型训练中的内存和计算瓶颈,以便在有限的硬件资源上训练更大规模的模型;但它们的焦点和目标略有不同:

附录1:DeepSpeed 相关

https://arxiv.org/abs/1910.02054

https://www.deepspeed.ai/tutorials/accelerator-abstraction-interface/

附录2:FSDP 相关

https://arxiv.org/abs/2004.13336

https://pytorch.org/blog/introducing-pytorch-fully-sharded-data-parallel-api/

image.png

FSDP 有借鉴 DeepSpeed Stage 3 的部分:https://pytorch.org/docs/stable/fsdp.html