技术指南

ZeRO 和分片优化器

ZeRO(零冗余优化器)通过跨 GPU 分片优化器状态、梯度和权重,消除了数据并行性中浪费的内存重复。

概述

ZeRO(零冗余优化器)通过跨 GPU 分片优化器状态、梯度和权重,消除了数据并行性中浪费的内存重复。它可以让您通过简单的数据并行性来训练巨大的模型,但只需要一小部分 GPU 内存。

ZeRO 和分片优化器是一个技术构建块,会大规模影响模型质量、基础设施成本、延迟和可靠性。

深入探讨

在普通数据并行中,每个 GPU 都会存储优化器状态、梯度和参数的冗余完整副本,这是极大的浪费,特别是对于 Adam 来说,其中优化器状态可能是模型本身大小的几倍。 DeepSpeed 中的 Microsoft 引入的 ZeRO 通过在 GPU 上对这些张量进行分区来消除这种冗余,这样每个设备只拥有一个切片。 ZeRO 分为三个渐进阶段:第 1 阶段对优化器状态进行分片,第 2 阶段添加梯度分片,第 3 阶段对参数本身进行分片。根据需要,GPU 通过通信、计算收集丢失的切片,然后释放它们。其结果是每个 GPU 的内存显着降低,支持数十亿到万亿参数的训练,同时保持数据并行的简单编程模型。

技术洞察

ZeRO 用额外的通信来节省内存。在第 3 阶段,在某个层的前向传递之前,全收集将该层的完整参数收集到每个 GPU 上;之后,非拥有的切片将被丢弃以回收内存。梯度是减少分散的,因此每个 GPU 仅保留与其拥有的参数相匹配的梯度切片。 PyTorch 的 FSDP(完全分片数据并行)原生实现了相同的想法,将模块包装为动态分片和重新分片。

掌握 ZeRO 和分片优化器

ZeRO(零冗余优化器)通过跨 GPU 分片优化器状态、梯度和权重,消除了数据并行性中浪费的内存重复。它可以让您通过简单的数据并行性来训练巨大的模型,但只需要一小部分 GPU 内存。 ZeRO 和分片优化器是一个技术构建块,会大规模影响模型质量、基础设施成本、延迟和可靠性。为了建立深入的理解,请将 ZeRO 和分片优化器视为一种操作模型,而不是单一功能:定义期望的结果,澄清假设,并将系统可以可靠地完成的任务与仍需要专家判断的任务分开。

在实践中,强大的团队使用 ZeRO 和分片优化器根据可靠性和成本优化架构、数据和基础设施选择。他们记录明确的成功标准,根据实际数据和工作流程进行测试,并根据观察到的失败模式而不是一次性基准测试胜利进行迭代。这就是理论理解转变为跨产品、政策和运营的持久能力的地方。

多年来,架构决策决定着性能和运营成本。与此同时,优化一个基准测试可以隐藏更广泛的系统弱点。最具弹性的方法是将实验速度与治理规则结合起来:运行试点、捕获证据、发布决策日志,并随着模型行为、用户期望和监管要求的发展不断更新保障措施。

战略影响

多年来,架构决策决定着性能和运营成本。

多年来,架构决策决定着性能和运营成本。在高质量部署中,这会转化为可衡量的操作规则、所有权边界和定期审查仪式,以便团队可以增强信心,而不是扩大模糊性。

技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。

技术教育帮助团队选择正确的堆栈,而不仅仅是最新的堆栈。在高质量部署中,这会转化为可衡量的操作规则、所有权边界和定期审查仪式,以便团队可以增强信心,而不是扩大模糊性。

更好的工程选择可以减少生产中的可靠性事故。

更好的工程选择可以减少生产中的可靠性事故。在高质量部署中,这会转化为可衡量的操作规则、所有权边界和定期审查仪式,以便团队可以增强信心,而不是扩大模糊性。

ZeRO 和分片优化器的未来

分片正在成为大规模训练的默认选择,而不是一种奇特的选择。期望与卸载进行更深入的集成(通过 ZeRO-Infinity 将切片推送到 CPU 或 NVMe),通过计算更好地重叠全收集和减少分散以隐藏其成本,以及与张量和管道并行性的组合。随着模型不断增长,内存高效的分片优化器对于将模型适应实际的硬件预算至关重要。

现实世界的实施

使用 DeepSpeed ZeRO Stage 2 微调数十亿参数的语言模型,否则该模型会溢出 GPU 内存。

使用 PyTorch FSDP 进行训练,跨 GPU 分片参数、梯度和优化器状态,​​并根据需要每层收集它们。

应用 ZeRO-Offload 将优化器状态推送到 CPU 内存,让单个 GPU 训练比其 VRAM 大很多倍的模型。

当 GPU 和 CPU 内存耗尽时,通过从 NVMe 存储流式传输参数分片,使用 ZeRO-Infinity 扩展万亿参数模型。

实施模式

ZeRO 和分片优化器的实践

使用 DeepSpeed ZeRO Stage 2 微调数十亿参数的语言模型,否则该模型会溢出 GPU 内存。

使用 DeepSpeed ZeRO Stage 2 微调数十亿参数的语言模型,否则会溢出 GPU 内存。当团队预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。

ZeRO 和分片优化器的实践

使用 PyTorch FSDP 进行训练,跨 GPU 分片参数、梯度和优化器状态,​​并根据需要每层收集它们。

使用 PyTorch FSDP 进行训练,它跨 GPU 分片参数、梯度和优化器状态,​​并按需按层收集它们。当团队预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。

ZeRO 和分片优化器的实践

应用 ZeRO-Offload 将优化器状态推送到 CPU 内存,让单个 GPU 训练比其 VRAM 大很多倍的模型。

应用 ZeRO-Offload 将优化器状态推送到 CPU 内存,让单个 GPU 训练比其 VRAM 大很多倍的模型。当团队预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。

ZeRO 和分片优化器的实践

当 GPU 和 CPU 内存耗尽时,通过从 NVMe 存储流式传输参数分片,使用 ZeRO-Infinity 扩展万亿参数模型。

当 GPU 和 CPU 内存耗尽时,通过从 NVMe 存储流式传输参数分片,使用 ZeRO-Infinity 扩展万亿参数模型 团队在预先定义质量阈值、为边缘情况保留人工升级路径并随着时间的推移跟踪生产力增益和错误成本时,通常会获得更好的结果。

风险与防护栏

!

优化一项基准测试可以隐藏更广泛的系统弱点。

!

基础设施和维护成本常常被低估。

!

随着系统变得更加复杂,安全性和可观察性差距可能会扩大。

实施路线图

1

在实施之前定义延迟、质量和成本目标。

在实施之前定义延迟、质量和成本目标。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。

2

在实际负载和数据条件下进行基准测试。

在实际负载和数据条件下进行基准测试。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。

3

仪器监控错误、漂移和用户影响。

仪器监控错误、漂移和用户影响。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。

4

在扩展之前准备回滚和事件响应路径。

在扩展之前准备回滚和事件响应路径。将每个步骤视为证据门:如果不满足标准,则暂停推出,缩小差距,然后再扩大使用。

不断探索