概述
它让人们能够训练远超GPU内存容量的模型。
深入探讨
当您使用 Adam 这样的优化器训练神经网络时,每个参数都会带来额外的负担:两个运行统计数据(动量和方差),加上权重的全精度副本及其梯度。在混合精度训练中,每个参数总计大约 16 个字节,使权重本身的 2 个字节相形见绌。卸载将这些负担从 GPU 上移走。 CPU 卸载通过 PCIe 总线将优化器状态流式传输到普通系统 RAM,而 NVMe 卸载将它们一直推送到快速固态磁盘。该技术因 DeepSpeed 的 ZeRO-Infinity 和 ZeRO-Offload 而流行,以原始速度换取容量,让单个 GPU 或小型集群能够微调具有数十亿个参数的模型。
现实世界的实施
DeepSpeed 的 ZeRO-Offload 教程在 32 GB V100 上训练了具有十亿参数规模的 GPT-2 配置,并使用了 CPU 优化器卸载和激活检查点技术。
一个研究团队评估了 ZeRO-Infinity,针对超出仅 GPU 容量的模型,使用了 CPU 和 NVMe 层级。
一个微调团队配置了 CPU 优化器卸载,并测量了主机内存使用量和更新时间。
一个团队比较了使用卸载功能的大容量 GPU,并考虑了 CPU、存储和传输成本。
优化器状态卸载到 CPU 和 NVMe 的未来
随着模型的 GPU 内存不断增长,分层卸载正在成为标准而不是奇特的。预计与更快的互连(例如模糊 CPU-GPU 边界的 NVLink-C2C 和 CXL 内存池)以及更智能的调度程序(可以预测要预取的状态)的更紧密集成。 Grace Hopper 等统一内存架构减少了 PCIe 损失,并且框架正在推动多层卸载几乎透明,以便爱好者可以在适度的硬件上微调大型模型。
付诸实践
为什么这很重要
- 成本与预算. 多年来,架构决策决定着性能和运营成本。
- 更清晰的判决. 技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。
- 质量控制. 更好的工程选择可以减少生产中的可靠性事故。
留意
- 优化一项基准测试可以隐藏更广泛的系统弱点。
- 基础设施和维护成本常常被低估。
- 随着系统变得更加复杂,安全性和可观察性差距可能会扩大。
后续步骤
- 在实施之前定义延迟、质量和成本目标。
- 在实际负载和数据条件下进行基准测试。
- 仪器监控错误、漂移和用户影响。
- 在扩展之前准备回滚和事件响应路径。
不断探索
常见问题
什么是向CPU和NVMe进行优化器状态卸载?
一种节省内存的技巧,可将繁重的训练记录(优化器状态、梯度,有时是权重)存放在 CPU RAM 或 NVMe SSD 上,而不是稀缺的 GPU 内存中。它可以让人们训练比 GPU 内存允许的更大的模型。
将优化器状态卸载到 CPU 或 NVMe 的主要目标是什么?
卸载将繁重的优化器状态从 GPU 移至 CPU RAM 或 NVMe,从而释放 GPU 内存,以便可以在同一硬件上训练更大的模型。
对于一个具有两个 FP32 矩和一个 FP32 主权重的 Adam 配置,这三个值每个参数占用多少内存?
每个 FP32 值占用四个字节:两个矩加上一个主权重总共十二个字节。十六字节的混合精度估算还包括其他张量。
哪个框架功能普及了大规模优化器卸载?
DeepSpeed 的 ZeRO-Offload 和 ZeRO-Infinity 大规模引入并推广了 CPU 和 NVMe 的卸载优化器状态。
卸载到 CPU 或 NVMe 的主要性能成本是什么?
将状态移出 GPU 意味着通过 PCIe 或 NVMe 传输数据,这比 GPU 内存上的速度慢,因此除非与计算重叠,否则吞吐量会下降。
卸载系统如何隐藏大部分传输延迟?
当 GPU 仍在计算时,调度程序通过 PCIe 预取所需的分区,将通信与计算重叠以掩盖延迟。