无性能损失,不用更改代码,Lightning 1.1版本发布(lightning系统)

机器之心报道

作者:杜伟、陈萍

继1.0.0 版本推出不到两个月的时间,grid.ai CEO、纽约大学博士 William Falcon 创建的 PyTorch Lightning 于近日宣布推出 1.1 版本。新版本新增了 sharded training 功能,在多 GPU 上训练深度学习(DL)模型时可以节省 50% 以上的内存,并且没有性能损失,也不需要更改代码。

无性能损失,不用更改代码,Lightning 1.1版本发布(lightning系统)

与 Facebook Research 的 FairScale 团队一道,PyTorch Lightning 团队在 1.1 版本中推出了 Sharded Training beta 版。在下面的博客文章中,PyTorch Lightning 团队的研究工程师 Sean Narenthiran 展示了只需要在 Lightning 训练器中增加单一的 flag,则在多 GPU 上训练 DL 模型时就会实现内存的大幅度降低。

此外,作者还介绍了如何使用 NeMo 来预训练 Transformer LM,并实现 55% 的内存提升,以及训练其他 PyTorch Lightning 赋能模型时进一步的内存降低。除了给出使用 NeMO Transformer LM 时 NLP 中的结果之外,作者还分别展示了语音识别中使用 DeepSpeech 2 以及计算机视觉中训练 SwAV ResNet 和 iGPT 的结果。

PyTorch Lightning 团队正努力增添新的模型并行化技术并保证鲁棒性,并且与 FairScale 团队展开合作提升所有 PyTorch Lightning 研究中的模型扩展性能。

更多使用技巧参考:https://pytorch-lightning.readthedocs.io/en/stable/multi_gpu.html#multi-gpu-training

更大的模型,更高的准确率

语言建模趋向于更大的预训练模型,这种模型在下游任务中表现得更好。OpenAI 的 GPT-3 就是一个很好的例子,该模型有 1750 亿个参数,在训练时需要大量的计算与优化技巧。

无性能损失,不用更改代码,Lightning 1.1版本发布(lightning系统)

比较了语言模型参数随时间变化的曲线,GPT-3 继续在规模上超越。(图源:Microsoft)

训练大型模型时,内存很宝贵。当扩展模型大小时,GPU 的内存会被耗尽,而这又限制了训练模型的大小。这使得团队不断尝试更智能的内存管理技术。

Lightning 的 Sharded Training

无性能损失,不用更改代码,Lightning 1.1版本发布(lightning系统)

传统分布式训练 VS Sharded Training。参数(P)在 GPU 之间拆分,以减少每个 GPU 的内存开销。Sharded Training 则拆分了优化器状态和梯度。

受微软 Zero Redundancy Optimizer (ZeRO) 的启发,Sharded Training 可以减少在多个 GPU 上训练大型模型所需的内存,训练过程中在 GPU 之间「切分」模型。Sharding 包括将参数分割到不同的设备上,减少每个设备所需的内存。特别地,优化器状态和梯度可以独立于模型进行切分,并且可以减少所有架构所需的内存。

Sharded Training 是在 FairScale 基础上构建的,与 PyTorch 兼容并得到优化。FairScale 是一个 PyTorch 扩展库,用于高性能以及大规模训练模型和数据并行。除了切分技术之外,它具有层间和层内并行性以及跨多个 GPU 和主机拆分模型。

通过在 GPU 上进行智能梯度和优化器状态 sharding,可以分别将内存成本(基于微软论文《ZeRO: Memory Optimizations Toward Training Trillion Parameter Models》的数据)降低大约 4 倍和 8 倍。这有利于所有模型,在所有模型架构以及训练过程中提供较低的内存使用率。需要注意的是,由于节点之间所需通信量的增加以及缺乏并行性,「naive implementations」导致运行速度急剧下降。

通过与 FairScale 的紧密合作,现在可以在所有 lightning 模块上实现 55% 以上的内存减少,只需通过一个单一的 flag,这意味着更大的机型可以适应内存有限的多张 GPU。

在不更改代码的情况下启用 Sharded Training

为了展示在 Lightning 中使用 Sharded Training 有多简单,使用 NVIDIA 的一个流行库 NeMo 来训练 Lightning 支持的对话 AI 模型。使用 NeMo 中提供的 vanilla Transformer LM 模型,有 12 亿个参数,该模型对训练内存要求很高。在训练大型语言模型时,内存是提高模型大小或提升 GPU 饱和度的宝贵资源。此外使用 WikiText 数据集训练模型。

首先下载数据集并使用 NVIDIA NeMo 提供的处理脚本进行提取,然后在 NeMo 中找到预配置文件定义模型配置,修改数据输入指向自定义数据集。为了进行基准测试,还构建了一个简单的基于单词的词汇表。

在设置模型参数之后,用户只需要将 Sharded 插件 flag 传递给支持 Sharded Traing 的训练器就可以了。用户还可以通过增加 GPU 数量和启用本地混合精度(native mixed precision)来实现内存和速度的进一步提升。分区优化器和 GPU 之间的通信可以在后台自动处理。

下面介绍了使用 Lightning 内置 Sharding 与普通 GPU 扩展时每台设备的内存提升情况,每台设备的内存分配保持不变。不仅如此,Lightning 团队还给出了 SwAW、DeepSpeech 2 和 iGPT 等其他 PyTorch Lightning 支持模型的测试结果。

结果表明,每个 GPU 上最高节省内存 15GiB,从而可以增加模型能力。例如,在硬件一样的情况下,训练 Transformer LM 时模型参数量可以从 12 亿增至 20 亿。

无性能损失,不用更改代码,Lightning 1.1版本发布(lightning系统)

使用 8 个 A100s 时训练 Transformer LM、SwAV Wide ResNet、DeepSpeech2 和 iGPT 时的平均峰值内存比较。

随着 GPU 之间通信的优化,与标准分布式加速器相比,节点内性能的扩展效果更好。请注意,随着向很多节点的扩展,内存降低的效果开始减弱,这是因为其他因素成为了瓶颈。但是,Sharded training 依然带来良好的 throughout 扩展。

无性能损失,不用更改代码,Lightning 1.1版本发布(lightning系统)

在 8 个具有相同超参数和批大小的 A100s 上的平均 Epoch time 比较,越低越好。

博客地址:https://seannaren.medium.com/introducing-pytorch-lightning-sharded-train-sota-models-with-half-the-memory-7bcc8b4484f

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年5月17日 上午8:23
下一篇 2024年5月17日 上午8:35

相关推荐

  • 作为科研项目负责人

    作为科研项目负责人,我深知自己的责任和使命。我们团队的工作不仅仅是为了完成一项任务,更是为了推动科学技术的发展,为人类的进步做出贡献。 作为科研项目的负责人,我们需要对项目进行全面…

    科研百科 2025年5月1日
    2
  • 保研夏令营、考研复试个人升学简历制作模板(研究生升学简历)

      本文介绍在保研夏令营、考研复试时,个人简历的制作模板与撰写注意事项。   这里就将当初我自己的简历分享一下,供大家参考。其实我的简历是那种比较简单、质朴的,通篇就一个颜色,没有…

    科研百科 2024年4月6日
    104
  • 美容会员管理软件多少钱一套(美容会员管理软件多少钱一套啊)

    美容会员管理软件多少钱一套(美容会员管理软件多少钱一套啊) 在如今这个追求美丽的时代,美容行业正如日中天,成为了众多消费者日常生活中不可或缺的一部分。为了满足顾客多元化的需求,并提…

    科研百科 2024年3月27日
    116
  • 人事总结怎么和党建相关联

    人事总结和党建关联的重要性 人事总结是指对公司内部员工的表现、业绩、能力等进行总结和分析的过程,是评估员工绩效、激励员工、提高公司整体效率的重要手段。而党建则是中国共产党在公司内部…

    科研百科 2024年10月8日
    4
  • 卫健委科研项目申报书怎么写卫健委科研项目申报书怎么写

    卫健委科研项目申报书怎么写 随着医疗技术的不断进步和人口老龄化的加剧,卫健委科研项目越来越受到关注。作为国家卫健委的重要组成部分,卫健委科研项目是推动医疗事业发展的重要力量。那么,…

    科研百科 2024年9月13日
    4
  • 项目管理情况

    项目管理情况 项目管理是组织实现目标的重要手段之一。一个好的项目管理能够帮助组织提高生产效率,降低成本,并增强组织的声誉。然而,有效的项目管理并不容易,它需要组织中的各个部门之间的…

    科研百科 2024年12月9日
    4
  • c++ 开发桌面程序

    C++开发桌面程序是一项广泛应用于软件开发领域的技术。C++作为一种高级编程语言,具有强大的功能和灵活性,使得它成为开发桌面应用程序的首选语言之一。本文将介绍C++开发桌面程序的优…

    科研百科 2024年2月23日
    141
  • 项目管理筛选系统有哪些

    项目管理筛选系统是一种能够协助项目管理人员对项目数据进行筛选、分析和管理的软件工具。随着项目管理在现代商业中的越来越重要,越来越多的公司开始使用项目管理筛选系统来提高工作效率和项目…

    科研百科 2025年1月22日
    4
  • 开源工单系统

    开源工单系统:让工作流程更加高效和透明 随着企业数字化转型的不断推进,开源工单系统已经成为了许多企业使用的重要工具之一。开源工单系统不仅能够帮助企业有效地管理业务流程,还能够提高员…

    科研百科 2024年11月5日
    10
  • 商品管理系统的项目内容

    商品管理系统的项目概述 商品管理系统是一种用于管理企业商品库存和销售的软件系统,能够帮助企业高效地管理商品信息,提高销售效率和管理水平。本文将介绍商品管理系统的项目概述,包括系统的…

    科研百科 2025年1月16日
    5