0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一个GPU训练一个130亿参数的模型

工程师邓生 来源:机器之心Pro 作者:蛋酱、张倩 2021-02-11 09:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

现在的模型动辄数百、数千亿参数,普通人训不动怎么办?

前不久,谷歌发布了参数量为 1.6 万亿的语言模型Swith Transformer,将 GPT-3 创下的参数量记录(1750 亿)推至新高。这些大模型的出现让普通研究者越发绝望:没有「钞能力」、没有一大堆 GPU 就做不了 AI 研究了吗?

在此背景下,部分研究者开始思考:如何让这些大模型的训练变得更加接地气?也就是说,怎么用更少的卡训练更大的模型?

为了解决这个问题,来自微软、加州大学默塞德分校的研究者提出了一种名为「 ZeRO-Offload 」的异构深度学习训练技术,可以在单个 GPU 上训练拥有 130 亿参数的深度学习模型,让普通研究者也能着手大模型的训练。与 Pytorch 等流行框架相比,ZeRO-Offload 将可训练的模型规模提升了 10 倍,而且不需要数据科学家对模型做出任何改变,也不会牺牲计算效率。

论文链接:https://arxiv.org/pdf/2101.06840.pdf

ZeRO-Offload 通过将数据和计算卸载(offload)至 CPU 来实现大规模模型训练。为了不降低计算效率,它被设计为最小化与 GPU 之间的数据往来,并在尽可能节省 GPU 内存的同时降低 CPU 的计算时间。因此,对于一个参数量为 100 亿的模型,ZeRO-Offload 可以在单个 NVIDIA V100 GPU 上实现 40 TFlops/GPU。相比之下,使用 PyTorch 训练一个参数量为 14 亿的模型仅能达到 30TFlops,这是在不耗尽内存的情况下所能训练的最大模型。ZeRO-Offload 还可以扩展至多 GPU 设置并实现线性加速,最多可在 128 个 GPU 上实现近似线性加速。

此外,ZeRO-Offload 还可以和模型并行一起使用,在一个 DGX-2 box AI 服务器上训练参数量超 700 亿的模型。与单独使用模型并行相比,这一参数量实现了 4.5 倍的规模提升。

在下文中,我们将结合 Medium 博主 LORENZ KUHN 的一篇博客来详细了解这篇论文。

ZeRO-Offload 是什么?

ZeRO-Offload 是一种通过将数据和计算从 GPU 卸载到 CPU,以此减少神经网络训练期间 GPU 内存占用的方法,该方法提供了更高的训练吞吐量,并避免了移动数据和在 CPU 上执行计算导致的减速问题。

借助 ZeRO-offload,使用相同的硬件能训练以往 10 倍大的模型,即使在单个 GPU 上也是如此。比如在一个 32GB RAM 的 V100 GPU 上训练百亿参数的 GPT-2。

此外,ZeRO-offload 还能实现在多 GPU 设置中的近似线性扩展。

对于研究者来说,ZeRO-offload 适用的情况包括:

想训练更大的模型,或者想更快地训练现在的模型,因为 ZeRO-offload 允许训练更大的 batch size;

你正在使用 PyTorch,并且愿意 / 能够使用微软的 DeepSpeed 库(ZeRO-offload 的其他实现形式暂未推出),你也可以尝试根据官方实现自行调整;

愿意接受一些建模时的限制,比如当前版本的 ZeRO-Offload 需要搭配使用 Adam 的混合精度训练。

如何使用?

ZeRO-Offload 在微软的 DeepSpeed 库中实现,官方实现地址:https://github.com/microsoft/DeepSpeed/blob/6e65c2cc084ecfc393c67a2f64639e8d08d325f6/deepspeed/runtime/zero/stage2.py。

在 DeepSpeed 中设置完毕后,使用 ZeRO-Offload 就不需要太多额外的工作了,只需要修改一些标志和配置文件。

目前,Hugging Face 的 transformers 库与 DeepSpeed 进行了实验性集成,使用方法和基准测试结果参见:https://huggingface.co/blog/zero-deepspeed-fairscale。

dfe6624efd1148a7b571982c796e7e36.png

Facebook 研究院的 fairscale 有 ZeRO 的部分实现,ZeRO-Offload 正是基于 ZeRO 这一多 GPU 内存优化方法构建的。目前还不支持 CPU 卸载。

ZeRO-Offload 的工作原理

ZeRO-Offload 是基于 Zero Redundancy Optimizer (ZeRO) 构建的。ZeRO 是微软在 2020 年 2 月提出的一种万亿级模型参数训练方法,用于数据并行和模型并行训练中的内存优化,其中梯度、参数和优化器状态分布在多 GPU 内存中,没有任何冗余。这使得 GPU 之间的通信开销保持在比较低的状态。

25f1777e01a6434bbe47b894c9556628.jpeg

与标准数据并行基准相比,ZeRO 在三个阶段中节省的内存和通信用量。

让我们来回顾一下 ZeRO:

为了解决数据并行和模型并行存在的问题,ZeRO 提供了三阶段的优化方法,分别为优化器状态分割、梯度分割、参数分割,三个阶段按顺序实施。

在优化器分割状态:ZeRO 降低了 3/4 的内存,通信量和数据并行相同;

加入梯度分割:降低了 7/8 的内存,通信量和数据并行相同;

加入参数分割:内存减少与数据并行度呈线性关系。例如,在 64 个 GPU 上进行分割的时候,可以将内存降至 1/64。在通信量上有 50% 的提升。

在去年 9 月份的博客中,微软这么介绍 ZeRO-Offload:

ZeRO-Offload 继承了 ZeRO-2 的优化器状态和梯度分割。但与 ZeRO-2 不同的是,ZeRO-Offload 不在每块 GPU 上保持优化器状态和梯度的分割,而是将二者卸载至主机 CPU 内存。在整个训练阶段,优化器状态都保存在 CPU 内存中;而梯度则在反向传播过程中在 GPU 上利用 reduce-scatter 进行计算和求均值,然后每个数据并行线程将属于其分割的梯度平均值卸载到 CPU 内存中(参见下图 g offload),将其余的抛弃。一旦梯度到达 CPU,则每个数据并行线程直接在 CPU 上并行更新优化器状态分割(参见下图 p update)。

之后,将参数分割移回 GPU,再在 GPU 上执行 all-gather 操作,收集所有更新后的参数(参见下图 g swap)。ZeRO-Offload 还利用单独的 CUDA 流来穷尽通信与计算中的重叠,从而最大化训练效率。

6caa771fed244038ae13d21e6a536154.jpeg

ZeRO-Offload 概览。

值得注意的是,ZeRO-Offload 专为使用 Adam 的混合精度训练而设计。也就是说,当前版本的 ZeRO-Offload 使用 Adam 的优化版本 DeepCPUAdam。其主要原因是避免 CPU 计算成为整个过程中的瓶颈。DeepCPUAdam 的速度是 Adam PyTorch 实现的 6 倍。

实验结果

最后来看一下 ZeRO-Offload 论文中提供的一些实验结果。

下图 7 展示了利用 ZeRO-Offload 技术在 1 个、4 个或 16 个 GPU(一个 DGX-2)上可以训练的最大模型情况。

e1f97bcaae694e619797ef17897d3849.jpeg

下图 11 展示了每个 GPU 的吞吐量随 GPU 数量增加而呈现的变化情况。可以看出,在 GPU 数量逐渐增加至 128 个的过程中,ZeRO-Offload 几乎可以实现吞吐量的线性加速。

f4aa51269d0344e1b8bf675e716f208e.jpeg

下图 8 展示了使用 PyTorch、L2L 和 ZeRO-Offload 实现的每个 GPU 吞吐量差异。从中可以看出,利用 ZeRO-Offload 实现的每个 GPU 吞吐量比 L2L 平均高出 14%(最多高出 22%)。

99478603f46d497ab241fbb1abe9d3c3.jpeg

责任编辑:PSY

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • gpu
    gpu
    +关注

    关注

    28

    文章

    5099

    浏览量

    134419
  • 模型
    +关注

    关注

    1

    文章

    3648

    浏览量

    51692
  • 模拟训练系统

    关注

    0

    文章

    7

    浏览量

    10166
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    AI模型是如何训练的?训练模型花费多大?

    电子发烧友网报道(文/李弯弯)在深度学习中,经常听到一个词“模型训练”,但是模型是什么?又是怎么训练的?在人工智能中,面对大量的数据,要在杂
    的头像 发表于 10-23 00:19 2.8w次阅读

    模型训练为什么不能用4090显卡,GPU训练性能和成本对比

    为什么?般有 tensor parallelism、pipeline parallelism、data parallelism 几种并行方式,分别在模型的层内、模型的层间、训练数据三
    发表于 09-15 11:16 3.4w次阅读
    大<b class='flag-5'>模型</b><b class='flag-5'>训练</b>为什么不能用4090显卡,<b class='flag-5'>GPU</b><b class='flag-5'>训练</b>性能和成本对比

    在Ubuntu上使用Nvidia GPU训练模型

    问题最近在Ubuntu上使用Nvidia GPU训练模型的时候,没有问题,过会再训练出现非常卡顿,使用nvidia-smi查看发现,显示
    发表于 01-03 08:24

    探索种降低ViT模型训练成本的方法

    (1 GPU)和时间(24小时)资源下从头开始训练ViT模型。首先,提出了种向ViT架构添加局部性的有效方法。其次,开发了种新的图像大小
    发表于 11-24 14:56

    GPU如何训练大批量模型?方法在这里

    内存时,在单个或多个 GPU 服务器上训练模型。 分布式计算 2018 年的大部分时间我都在试图训练神经网络时克服 GPU 极限。无论是在
    发表于 12-03 17:24 1147次阅读

    OpenAI发布了“逆天”的AI模型——GPT2整个模型包含15亿参数

    能有这样出色的表现,不是没有原因的,GPT-2各种特定领域的语言建模任务中都取得了很好的分数。作为没有经过任何领域数据专门训练模型,它的表现,比那些专为特定领域数据集(例如维基百
    的头像 发表于 03-07 14:45 9221次阅读

    谷歌训练开发万亿参数的AI语言模型

    参数是机器学习算法的关键。它们是从历史训练数据中学到的模型部分。般来说,在语言领域,参数
    的头像 发表于 01-18 16:19 2183次阅读

    NVIDIA GPU助力提升模型训练和推理性价比

    ,其中的模型数量达数千,日均调用服务达到千亿级别。无量推荐系统,在模型训练和推理都能够进行海量Embedding和DNN模型
    的头像 发表于 08-23 17:09 5250次阅读

    AI模型是如何训练的?训练模型花费多大?

    电子发烧友网报道(文/李弯弯)在深度学习中,经常听到一个词“模型训练”,但是模型是什么?又是怎么训练的?在人工智能中,面对大量的数据,要在杂
    的头像 发表于 10-23 00:20 1w次阅读

    推特并入X公司 马斯克还买了10000GPU训练模型

    。 另外,还有特别有意思的是,马斯克才呼吁暂停 ChatGPT 的训练,马上就转身就下场买了10000GPU
    的头像 发表于 04-12 14:19 1339次阅读

    基于完整的 LLM 训练流程

        在这篇文章中,我们将尽可能详细地梳理完整的 LLM 训练流程。包括模型训练(Pretrain)、Tokenizer
    的头像 发表于 06-29 10:08 3434次阅读
    基于<b class='flag-5'>一</b><b class='flag-5'>个</b>完整的 LLM <b class='flag-5'>训练</b>流程

    微软宣布推出27亿参数的语言模型Phi-2

    Phi-2 是微软 “小语言模型(SLM)” 系列中的最新版本。第一个版本是拥有 13 亿参数的 Phi-1,针对基本的 Python 编码任务进行了微调。
    发表于 12-15 09:46 497次阅读
    微软宣布推出<b class='flag-5'>一</b><b class='flag-5'>个</b>27<b class='flag-5'>亿</b><b class='flag-5'>参数</b>的语言<b class='flag-5'>模型</b>Phi-2

    PyTorch GPU 加速训练模型方法

    在深度学习领域,GPU加速训练模型已经成为提高训练效率和缩短训练时间的重要手段。PyTorch作为
    的头像 发表于 11-05 17:43 2113次阅读

    从零开始训练大语言模型需要投资多少钱?

    ,前言   在AI领域,训练大型语言模型(LLM)是
    的头像 发表于 11-08 14:15 1380次阅读
    从零开始<b class='flag-5'>训练</b><b class='flag-5'>一</b><b class='flag-5'>个</b>大语言<b class='flag-5'>模型</b>需要投资多少钱?

    GPU是如何训练AI大模型

    在AI模型训练过程中,大量的计算工作集中在矩阵乘法、向量加法和激活函数等运算上。这些运算正是GPU所擅长的。接下来,AI部落小编带您了解GPU是如何
    的头像 发表于 12-19 17:54 1308次阅读