机器学习能够根据数据发现一般化规律的优势日益突显,咱们看到有越来越多的开发者重视怎么练习出更快速、更精确的机器学习模型,而分布式练习 (Distributed Training) 则能够大幅加速这一进程。
亚马逊云科技开发者社区为开发者们供给全球的开发技能资源。这儿有技能文档、开发事例、技能专栏、练习视频、活动与竞赛等。帮助我国开发者对接国际最前沿技能,观点,和项目,并将我国优秀开发者或技能引荐给全球云社区。假如你还没有重视/保藏,看到这儿请一定不要匆匆划过,点这儿让它成为你的技能宝库! |
---|
关于在亚马逊云科技上进行分布式练习的话题,在各种场合和论坛咱们评论了很多。跟着 PyTorch 这一开源机器学习结构被越来越多的开发者在出产环境中运用,咱们也将围绕它展开话题。本文咱们将分别讨论在 PyTorch 上的两种分布式练习:数据分布式练习,以及模型分布式练习。
首要咱们来看看当今机器学习模型练习的演进趋势中,开发者对模型练习结果的两种火急需求:
- 更快速
- 更精确
更快速的数据分布式练习
关于机器学习模型练习来说,将巨大的练习数据有用拆分,有助于加速练习速度。
常见的数据分布式练习办法有两种:
根据参数服务器的数据分布式练习
(异步)参数服务器 (Parameter Server) : 如 TensorFlow Parameter Server Strategy
关于参数服务器 (Parameter Server) 来说,核算节点被分成两种:
- Workers:保留一部分的练习数据,并且履行核算;
- Servers:一起维持大局同享的模型参数。
而 Workers 只和 Servers 有通讯,Workers 相互之间没有通讯。
参数服务器办法的长处开发者都很了解就不赘述了,而参数服务器的一个主要问题是它们对可用网络带宽的运用不行理想,Servers 常常成为通讯瓶颈。
由于梯度在反向传递期间按次序可用,因此在任何给定的时刻,从不同服务器发送和接纳的数据量都存在不平衡。有些服务器正在接纳和发送更多的数据,有些很少乃至没有。跟着参数服务器数量的增加,这个问题变得更加严重。
根据 Ring ALL-Reduce 的数据分布式练习
(同步)Ring All-Reduce: 如 Horovod 和 PyTorch DDP
Ring All-Reduce的网络连接是一个环形,这样就不需求单独的 GPU 做 Server。6 个 GPU 独立做核算,用各自的数据核算出各自的随机梯度,然后拿 6 个随机梯度的相加之和来更新模型参数。为了求 6 个随机梯度之和,咱们需求做 All-Reduce。在全部的 GPU 都完成核算之后,经过 Ring All-Reduce 转 2 圈(第 1 圈加和,第 2 圈广播这个加和),每个 GPU 就有了 6 个梯度的相加之和。留意算法有必要是同步算法,由于 All-Reduce 需求同步(即等候一切的 GPU 核算出它们的梯度)。
Ring All-Reduce的主要问题是:
- 经过 Ring All-Reduce 转圈传递信息时,例如:G0 传递给 G1 时,其它 GPU 都在搁置状况;因此,这种步进时刻越长,GPU 搁置时刻就越长;而 GPU 越多这种通讯代价就越大;
- All-Reduce 的资源会占用名贵的 GPU 资源,所以会在扩展的时分,面临功率应战。
实例:Amazon SageMaker 数据并行的分布式办法
那么怎么尽或许消除上述坏处?咱们经过亚马逊云科技在 Amazon SageMaker 上的数据并行实例来演示怎么解决这一问题。
SageMaker 从头开始构建新的All-Reduce 算法,以充分运用亚马逊云科技网络和实例拓扑,运用 EC2 实例之间的节点到节点通讯。
这样做的优势在于:
- 引入了一种名为平衡融合缓冲区的新技能,以充分运用带宽。GPU 中的缓冲区将梯度保持到阈值大小,然后复制到 CPU 内存,分片成 N 个部分,然后将第 i 个部分发送到第 i 个服务器。平衡服务器发送和接纳的数据,有用运用带宽。
- 能够有用地将 All-Reduce 从 GPU 转移到 CPU。
咱们能够堆叠向后传递和 All-Reduce,然后缩短步进时刻,开释 GPU 资源用于核算。
在这儿分享要害的 PyTorch 代码过程:
- 更新练习脚本
与非分布式练习不同的是,在这儿咱们输入 mdistributed.dataparallel.torch.torch_smdbp 的模型:
# Import SMDataParallel PyTorch Modules
import smdistributed.dataparallel.torch.torch_smddp
- 提交练习任务
在这儿指定一个开关,打开数据并行即可。这样能够十分方便地调试,而不用在底层装备上花费时刻。
# Training using SMDataParallel Distributed Training Framework
distribution={"smdistributed":
{"dataparallel":
{"enabled": True
}
}
},
debugger_hook_config=False,
您能够在 GitHub 上检查完整代码示例:
Amazon Sagemaker Examples
- github.com/aws/amazon-…
- github.com/aws/amazon-…
更精确的模型分布式练习
众所周知,模型越大,那么预测结果的精确度越高。
那么在面对巨大模型的时分怎么进行模型并行?咱们引荐开发者运用以下办法:
主动模型拆分
主要的优化策略根据内存运用和核算负载,然后更好地完成大模型的兼容。
- 平衡内存运用:平衡每台设备上存储的可练习参数和激活次数的总数。
- 平衡核算负载:平衡每台设备中履行的操作次数。
流水线履行方案
Amazon Sagemaker PyTorch SDK 中能够选择两种办法完成:
- 简略流水线:需求等前项全部核算完之后才干进行后项的核算。
- 交织流水线:经过更高效运用 GPU 来完成更好的功能,包括模型并行等办法。
Amazon SageMaker 分布式模型并行库的核心功能是流水线履行 (Pipeline Execution Schedule) ,它决议了模型练习期间跨设备进行核算和数据处理的次序。流水线是一种经过让 GPU 在不同的数据样本上一起进行核算,然后在模型并行度中完成真实的并行化技能,并战胜次序核算形成的功能损失。
流水线根据将一个小批次拆分为微批次,然后逐一输入到练习管道中,并遵循库运行时定义的履行方案。微批次是给定练习微型批次的较小子集。管道调度决议了在每个时隙由哪个设备履行哪个微批次。例如,根据流水线方案和模型分区,GPU i 或许会在微批处理 b 上履行(向前或向后)核算,而 GPU i+1 对微批处理 b+1 履行核算,然后使两个 GPU 一起处于活动状况。
该库供给了两种不同的流水线方案,简略式和交织式,能够运用 SageMaker Python SDK 中的工作流参数进行装备。在大多数情况下,交织流水线能够经过更高效地运用 GPU 来完成更好的功能。
更多相关信息可参阅:
docs.aws.amazon.com/zh_cn/sagem…
PyTorch 模型并行的分布式练习的要害过程如下(以PyTorch SageMaker Distributed Model Parallel GPT2 代码为例):
- 更新练习脚本
a. Import 模型并行模块
b. 带入参数的模型并行的初始化 smp.int (smp_config)
详细代码请参阅:github.com/aws/amazon-…
- 提交练习任务
a.音讯传递接口 (MPI)是编程并行核算机程序的根本通讯协议,这儿可描绘每台机器上的 GPU 数量等参数
b. 激活模型分布式练习结构和相关装备等
详细代码请参阅:github.com/aws/amazon-…
实例:Amazon SageMaker 分布式练习
练习医疗核算机视觉 (CV) 模型需求可扩展的核算和存储基础架构。下图事例向您展现怎么将医疗语义切割练习工作负载从 90 小时削减到 4 小时。
图片来历:官方博客《运用 Amazon SageMaker 练习大规模医疗核算机视觉模型》
解决方案中运用了 Amazon SageMaker 处理进行分布式数据处理,运用 SageMaker 分布式练习库来加速模型练习。数据 I/O、转化和网络架构是运用 PyTorch 和面向人工智能的医疗开放网络 (MONAI) 库构建的。
作者黄浩文
亚马逊云科技资深开发者布道师,专注于 AI/ML、Data Science 等。具有 20 多年电信、移动互联网以及云核算等职业架构规划、技能及创业办理等丰厚经历,曾就职于 Microsoft、Sun Microsystems、我国电信等企业,专注为游戏、电商、媒体和广告等企业客户供给 AI/ML、数据分析和企业数字化转型等解决方案咨询服务。
文章来历:dev.amazoncloud.cn/column/arti…