您可以在 GitHub 上查看完整代码示例:
Amazon Sagemaker Examples
更准确的模型分布式训练
众所周知,模型越大,那么预测结果的准确度越高。
那么在面对庞大模型的时候如何进行模型并行?我们推荐开发者使用以下方式:
自动模型拆分
主要的优化策略基于内存使用和计算负载,从而更好地实现大模型的兼容。
-
平衡内存使用:平衡每台设备上存储的可训练参数和激活次数的总数。
-
平衡计算负载:平衡每台设备中执行的操作次数。
流水线执行计划
Amazon Sagemaker PyTorch SDK 中可以选择两种方式实现:
- 简单流水线:需要等前项全部计算完之后才能进行后项的计算。
- 交错流水线:通过更高效利用 GPU 来实现更好的性能,包括模型并行等方式。
Amazon SageMaker 分布式模型并行库的核心功能是流水线执行 (Pipeline Execution Schedule) ,它决定了模型训练期间跨设备进行计算和数据处理的顺序。流水线是一种通过让 GPU 在不同的数据样本上同时进行计算,从而在模型并行度中实现真正的并行化技术,并克服顺序计算造成的性能损失。
流水线基于将一个小批次拆分为微批次,然后逐个输入到训练管道中,并遵循库运行时定义的执行计划。微批次是给定训练微型批次的较小子集。管道调度决定了在每个时隙由哪个设备执行哪个微批次。例如,根据流水线计划和模型分区,GPU i 可能会在微批处理 b 上执行(向前或向后)计算,而 GPU i+1 对微批处理 b+1 执行计算,从而使两个 GPU 同时处于活动状态。
该库提供了两种不同的流水线计划,简单式和交错式,可以使用 SageMaker Python SDK 中的工作流参数进行配置。在大多数情况下,交错流水线可以通过更高效地利用 GPU 来实现更好的性能。
更多相关信息可参考:
PyTorch 模型并行的分布式训练的关键步骤如下(以PyTorch SageMaker Distributed Model Parallel GPT2 代码为例):
- 更新训练脚本
a. Import 模型并行模块
b. 带入参数的模型并行的初始化 smp.int (smp_config)
- 提交训练任务
a. 消息传递接口 (MPI) 是编程并行计算机程序的基本通信协议,这里可描述每台机器上的 GPU 数量等参数
b. 激活模型分布式训练框架和相关配置等
实例:Amazon SageMaker 分布式训练
训练医疗计算机视觉 (CV) 模型需要可扩展的计算和存储基础架构。下图案例向您展示如何将医疗语义分割训练工作负载从 90 小时减少到 4 小时。
图片来源:官方博客《使用 Amazon SageMaker 训练大规模医疗计算机视觉模型》
解决方案中使用了 Amazon SageMaker 处理进行分布式数据处理,使用 SageMaker 分布式训练库来加快模型训练。数据 I/O、转换和网络架构是使用 PyTorch 和面向人工智能的医疗开放网络 (MONAI) 库构建的。
在下篇文章中,我们将继续关注无服务器推理,请持续关注 Build On Cloud 微信公众号。
往期推荐