技术指南

优化器状态卸载到 CPU 和 NVMe

一种节省内存的技巧,可将繁重的训练记录(优化器状态、梯度,有时是权重)存放在 CPU RAM 或 NVMe SSD 上,而不是稀缺的 GPU 内存中。

听听这个指南AI叙述 · ~2 min

在本页阅读时间:2分钟
  1. 概述
  2. 深入探讨
  3. 现实世界的实施
  4. 优化器状态卸载到 CPU 和 NVMe 的未来
  5. 付诸实践
  6. 不断探索
  7. 常见问题

概述

它让人们能够训练远超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 损失,并且框架正在推动多层卸载几乎透明,以便爱好者可以在适度的硬件上微调大型模型。

付诸实践

为什么这很重要

  • 成本与预算. 多年来,架构决策决定着性能和运营成本。
  • 更清晰的判决. 技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。
  • 质量控制. 更好的工程选择可以减少生产中的可靠性事故。

留意

  • 优化一项基准测试可以隐藏更广泛的系统弱点。
  • 基础设施和维护成本常常被低估。
  • 随着系统变得更加复杂,安全性和可观察性差距可能会扩大。

后续步骤

  1. 在实施之前定义延迟、质量和成本目标。
  2. 在实际负载和数据条件下进行基准测试。
  3. 仪器监控错误、漂移和用户影响。
  4. 在扩展之前准备回滚和事件响应路径。

不断探索

免费通讯

获取每日AI简报

每个工作日早晨提供三条经过验证的AI故事,使用简明英文撰写。永久免费,无广告。

每个工作日发送一封邮件。一键退订。我们永不出售或分享您的地址。

测试一下自己

参加关于将优化器状态卸载到 CPU 和 NVMe 的测验

每个答案即时反馈,课程通过后可获得可验证ID的可分享证书。

开始测验

支持免费AI教育。AI Understanding是一家501(c)(3)非营利组织——无广告,无付费墙,永不收费。 捐款

常见问题

什么是向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 预取所需的分区,将通信与计算重叠以掩盖延迟。