PyTorch 分布式概述

这篇具有很好参考价值的文章主要介绍了PyTorch 分布式概述。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

PyTorch 分布式概述

这是torch.distributed包的概述页面。 由于在不同位置添加了越来越多的文档,示例和教程,因此不清楚要针对特定​​问题咨询哪个文档或教程,或者阅读这些内容的最佳顺序是什么。 该页面的目的是通过将文档分类为不同的主题并简要描述每个主题来解决此问题。 如果这是您第一次使用 PyTorch 构建分布式训练应用,建议使用本文档导航至最适合您的用例的技术。

简介

从 PyTorch v1.6.0 开始,torch.distributed中的功能可以分为三个主要组件:

  • 分布式数据并行训练(DDP)是一种广泛采用的单程序多数据训练范例。 使用 DDP,可以在每个流程上复制模型,并且每个模型副本都将获得一组不同的输入数据样本。 DDP 负责梯度通信,以保持模型副本同步,并使其与梯度计算重叠,以加快训练速度。
  • 基于 RPC 的分布式训练(RPC)开发来支持无法适应数据并行训练的常规训练结构,例如分布式管道并行性,参数服务器范式以及 DDP 与其他训练范式的组合。 它有助于管理远程对象的生命周期,并将自动微分引擎扩展到机器范围之外。
  • 集体通信(c10d)库支持跨组内的进程发送张量。 它提供了集体通信 API(例如all_reduceall_gather)和 P2P 通信 API(例如sendisend)。 从 v1.6.0 开始,DDP 和 RPC(ProcessGroup 后端)建立在 c10d 上,其中前者使用集体通信,而后者使用 P2P 通信。 通常,开发人员无需直接使用此原始通信 API,因为上述 DDP 和 RPC 功能可以满足许多分布式训练方案的需求。 但是,在某些情况下,此 API 仍然很有帮助。 一个示例是分布式参数平均,其中应用希望在反向传播之后计算所有模型参数的平均值,而不是使用 DDP 来传递梯度。 这可以使通信与计算脱钩,并允许对通信内容进行更细粒度的控制,但另一方面,它也放弃了 DDP 提供的性能优化。 用 PyTorch 编写分布式应用显示了使用 c10d 通信 API 的示例。

现有的大多数文档都是为 DDP 或 RPC 编写的,本页面的其余部分将详细介绍这两个组件的材料。

数据并行训练

PyTorch 为数据并行训练提供了几种选择。 对于从简单到复杂以及从原型到生产逐渐增长的应用,共同的发展轨迹将是:

  1. 如果数据和模型可以放在一个 GPU 中,并且不关心训练速度,请使用单设备训练。
  2. 如果服务器上有多个 GPU,请使用单机多 GPU DataParallel,并且您希望以最少的代码更改来加快训练速度。
  3. 如果您想进一步加快训练速度并愿意编写更多代码来设置它,请使用单机多 GPU DistributedDataParallel
  4. 如果应用需要跨计算机边界扩展,请使用多计算机DistributedDataParallel和启动脚本。
  5. 如果预计会出现错误(例如,OOM),或者在训练过程中资源可以动态加入和离开,请使用扭弹性启动分布式训练。

注意

数据并行训练还可以与自动混合精度(AMP)一起使用。

torch.nn.DataParallel

DataParallel包以最低的编码障碍实现了单机多 GPU 并行处理。 它只需要一行更改应用代码。 教程可选:数据并行显示了一个示例。 需要注意的是,尽管DataParallel非常易于使用,但通常无法提供最佳性能。 这是因为DataParallel的实现会在每个正向传播中复制该模型,并且其单进程多线程并行性自然会遭受 GIL 争用。 为了获得更好的性能,请考虑使用DistributedDataParallel

torch.nn.parallel.DistributedDataParallel

DataParallel相比,DistributedDataParallel还需要设置一个步骤,即调用init_process_group。 DDP 使用多进程并行性,因此在模型副本之间没有 GIL 争用。 此外,该模型是在 DDP 构建时而不是在每个正向传播时广播的,这也有助于加快训练速度。 DDP 附带了几种性能优化技术。 有关更深入的说明,请参阅此 DDP 论文(VLDB’20)。

DDP 材料如下:

  1. DDP 注解提供了一个入门示例,并简要介绍了其设计和实现。 如果这是您第一次使用 DDP,请从本文档开始。
  2. 分布式数据并行入门解释了 DDP 训练的一些常见问题,包括不平衡的工作量,检查点和多设备模型。 请注意,DDP 可以轻松与单机模型并行最佳实践教程中描述的单机多设备模型并行性结合。
  3. 启动和配置分布式数据并行应用文档显示了如何使用 DDP 启动脚本。
  4. 使用 Amazon AWS 的 PyTorch 分布式训练器演示了如何在 AWS 上使用 DDP。

TorchElastic

随着应用复杂性和规模的增长,故障恢复成为当务之急。 有时,使用 DDP 时不可避免地会遇到 OOM 之类的错误,但是 DDP 本身无法从这些错误中恢复,基本的try-except块也无法工作。 这是因为 DDP 要求所有进程以紧密同步的方式运行,并且在不同进程中启动的所有AllReduce通信都必须匹配。 如果组中的某个进程抛出 OOM 异常,则很可能导致不同步(AllReduce操作不匹配),从而导致崩溃或挂起。 如果您期望在训练过程中发生故障,或者资源可能会动态离开并加入,请使用 Torrlastic 启动分布式数据并行训练。

通用分布式训练

许多训练范式不适合数据并行性,例如参数服务器范式,分布式管道并行性,具有多个观察者或智能体的强化学习应用等。 torch.distributed.rpc旨在支持一般的分布式训练方案 。

torch.distributed.rpc包具有四个主要支柱:

  • RPC 支持在远程工作器上运行给定函数
  • RRef 帮助管理远程对象的生存期。 引用计数协议在 RRef 注解中提供。
  • 分布式自动微分将自动微分引擎扩展到机器范围之外。 有关更多详细信息,请参考分布式 Autograd 设计。
  • 分布式优化器,它使用分布式 Autograd 引擎计算的梯度自动与所有参与的工作器联系以更新参数。

RPC 教程如下:

  1. 分布式 RPC 框架入门教程首先使用一个简单的强化学习(RL)示例来演示 RPC 和 RRef。 然后,它对 RNN 示例应用了基本的分布式模型并行性,以展示如何使用分布式 Autograd 和分布式优化器。
  2. 使用分布式 RPC 框架实现参数服务器教程借鉴了 HogWild 的训练精神,并将其应用于异步参数服务器(PS)训练应用。
  3. 使用 RPC 的分布式管道并行化教程将单机管道并行示例(在单机模型并行最佳实践中介绍)扩展到了分布式环境,并展示了如何使用 RPC 来实现它 。
  4. 使用异步执行实现批量 RPC 教程演示了如何使用@rpc.functions.async_execution装饰器实现 RPC 批量。这可以帮助加速推理和训练。 它使用了以上教程 1 和 2 中采用的类似 RL 和 PS 示例。
  5. 将分布式DataParallel与分布式 RPC 框架结合教程演示了如何将 DDP 与 RPC 结合使用分布式数据并行性和分布式模型并行性来训练模型。

PyTorch 分布式开发人员

如果您想为 PyTorch 分布式做出贡献,请参阅我们的开发人员指南。文章来源地址https://www.toymoban.com/news/detail-536732.html

到了这里,关于PyTorch 分布式概述的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用 PyTorch 编写分布式应用程序

    在这个简短的教程中,我们将介绍 PyTorch 的分布式软件包。 我们将了解如何设置分布式设置,使用不同的交流策略以及如何仔细查看软件包的内部结构。 PyTorch 中包含的分布式软件包(即 torch.distributed )使研究人员和从业人员可以轻松地并行化他们在跨进程和机器集群的计算

    2024年02月12日
    浏览(34)
  • Pytorch 分布式并行DDP 卡死 挂起

    1 、使用A30显卡,使用分布式并行Distributed Data Parallel,运行程序时显卡显存充满,卡在设置local_rank处,并未启动进程组 2 、如图: 0 、 最新解决方案,针对Supermicro主板:BIOS-Advanced-NB Configuration-IOMMU-Disabled ==其它型号的主板的BIOS可能还需要禁用ACS: https://zhuanlan.zhihu.com/p/60

    2023年04月15日
    浏览(46)
  • 【深入了解PyTorch】PyTorch分布式训练:多GPU、数据并行与模型并行

    在深度学习领域,模型的复杂性和数据集的巨大规模使得训练过程变得极具挑战性。为了加速训练过程,利用多个GPU进行并行计算是一种常见的方法。PyTorch作为一种流行的深度学习框架,提供了强大的分布式训练工具,使得多GPU、数据并行和模型并行等技术变得更加容易实现

    2024年02月12日
    浏览(29)
  • 【VSCode调试技巧】Pytorch分布式训练调试

    最近遇到个头疼的问题,对于单机多卡的训练脚本,不知道如何使用VSCode进行Debug。 解决方案: 1、找到控制分布式训练的启动脚本,在自己的虚拟环境的/lib/python3.9/site-packages/torch/distributed/launch.py中 2、配置launch.josn文件,按照正确的参数顺序,填入args参数,注意区分位置参

    2024年04月27日
    浏览(27)
  • 分布式系统与人工智能高可用性架构设计与实现

    作者:禅与计算机程序设计艺术 随着人工智能、云计算、容器技术等新兴技术的不断涌现和深入应用,越来越多的企业和组织都将重点放在自身的AI系统开发及管理之上,面临分布式环境下的AI系统的高可用性和可靠性问题,如何构建并实施一个可用的分布式AI系统架构,成为

    2024年02月06日
    浏览(39)
  • pytorch中分布式训练DDP教程(新手快速入门!)

    PyTorch是深度学习领域广泛使用的开源深度学习框架之一。随着深度学习模型的不断增大和数据集的不断增长,单机训练往往不能满足我们的需求。为了加速训练过程,我们可以使用分布式训练技术。在PyTorch中,分布式数据并行(Distributed Data Parallel,简称DDP)是一种常见的分

    2024年02月16日
    浏览(33)
  • 【深度学习】【分布式训练】Collective通信操作及Pytorch示例

    相关博客 【Megatron-DeepSpeed】张量并行工具代码mpu详解(一):并行环境初始化 【Megatron-DeepSpeed】张量并行工具代码mpu详解(二):Collective通信操作的封装mappings 【深度学习】【分布式训练】DeepSpeed:AllReduce与ZeRO-DP 【深度学习】混合精度训练与显存分析 【深度学习】【分布式训练

    2023年04月13日
    浏览(28)
  • pytorch 分布式 Node/Worker/Rank等基础概念

    分布式训练相关基本参数的概念如下: Definitions Node  - A physical instance or a container; maps to the unit that the job manager works with. Worker  - A worker in the context of distributed training. WorkerGroup  - The set of workers that execute the same function (e.g. trainers). LocalWorkerGroup  - A subset of the workers in the worker g

    2024年02月02日
    浏览(34)
  • pytorch分布式训练报错RuntimeError: Socket Timeout

    出错背景:在我的训练过程中,因为任务特殊性,用的是多卡训练单卡测试策略。模型测试的时候,由于数据集太大且测试过程指标计算量大,因此测试时间较长。 报错信息: 从报错信息中可以看到是数据加载的时候,创建进程引起的超时,解决方法就是将“进程”的“存

    2024年02月13日
    浏览(31)
  • 人工智能(pytorch)搭建模型12-pytorch搭建BiGRU模型,利用正态分布数据训练该模型

    大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型12-pytorch搭建BiGRU模型,利用正态分布数据训练该模型。本文将介绍一种基于PyTorch的BiGRU模型应用项目。我们将首先解释BiGRU模型的原理,然后使用PyTorch搭建模型,并提供模型代码和数据样例。接下来,我们将

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包