IT 人的时间都去哪儿了?html
既然如今云计算那么普及,企业应用环境中的计算、存储、数据库之类的资源均可以跑在云中,那么对于机器学习项目,可否想办法把最耗费时间的模型训练工做也丢到云端去跑?呐,借助 Amazon SageMaker 运行分布式 TensorFlow 训练,知足你所需。git
TensorFlow 是一个被普遍用于开发大型深度神经网络(DNN)的开源机器学习(ML)库,此类 DNN 须要分布式训练,并在多个主机上使用多个GPU。github
Amazon SageMaker 则是一项托管服务,可经过主动学习、超参数优化、模型分布式训练、监控训练进展,部署培训模型做为自动扩展的 RESTful 服务,以及对并发 ML 实验进行集中式管理,从标签数据开始简化 ML 工做流。算法
下文将重点讨论使用 Amazon SageMaker 进行分布式 TensorFlow 训练。尽管文中许多分布式训练概念一般适用于多种类型的 TensorFlow 模型,但本文着重要介绍的是在 Common Object in Context (COCO) 2017数据集上对Mask R-CNN模型进行的分布式 TensorFlow 训练。docker
Mask R-CNN 模型用于对象实例分割,其中模型生成像素级掩膜(Sigmoid 二进制分类)和以对象类别(SoftMax 分类)注释的目标框(Smooth L1 回归)描绘图像中的每一个对象实例。Mask R-CNN 的一些常见用例包括:自动驾驶汽车的感知、表面缺陷检测和地理空间图像分析。数据库
文中选择 Mask R-CNN 模型的关键缘由有三个:网络
下图为 Mask R-CNN 深层神经网络架构的示意图:架构
分布式 DNN 训练的主要挑战在于:在应用梯度来更新跨多个节点的多个 GPU 上的模型权重以前,须要在同步步骤中对全部 GPU 的反向传播过程当中计算出的梯度进行 Allreduce(平均化)。并发
同步 Allreduce 算法须要实现高效率,不然从分布式数据并行训练中得到的任何训练速度提高,都会因同步 Allreduce 步骤的效率低下而荡然无存。框架
要使同步 Allreduce 算法实现高效率,存在三个主要挑战:
许多 ML 框架(包括 TensorFlow)都支持 Horovod。TensorFlow 分发策略还利用了 NCCL,并提供了使用 Horovod 进行分布式 TensorFlow 训练的替代方法。本文使用的是 Horovod。
训练大型 DNN(如 Mask R-CNN)对每一个 GPU 的内存要求较高,这样才能够将一个或多个高分辨率图像推送通过训练管道。它们还须要 GPU 到 GPU 的高速互连,以及高速网络互连机器,以便高效地对 Allreduce 梯度进行同步。Amazon SageMaker ml.p3.16xlarge 和ml.p3dn.24xlarge 实例类型能够知足全部这些要求。如需更多信息,请参阅Amazon SageMaker ML 实例类型。它们具备八个 Nvidia Tesla V100 GPU、128–256 GB GPU 内存、25–100 Gbs 网络互连及高速 Nvidia NVLink GPU 到 GPU 互连,很是适合 Amazon SageMaker 上的分布式 TensorFlow 训练。
分布式 TensorFlow 训练的下一个挑战是在多个节点上合理布置训练算法进程,以及将每一个进程与惟一全局排名相关联。消息传递接口(MPI)是普遍用于并行计算的聚合通讯协议,在管理跨多个节点的一组训练算法工做进程中很是有用。
MPI 用于在多个节点上布置训练算法进程,并将每一个算法进程与惟一的全局和本地排名相关联。Horovod 用于逻辑地将给定节点上的算法进程固定到特定的 GPU。梯度同步 Allreduce 要求将每一个算法进程逻辑固定到特定的 GPU。
在本文中,要理解的主要 MPI 概念是:MPI 在主节点上使用 mpirun,以便在多个节点上启动并发进程。主节点使用 MPI 管理着在多个节点集中运行的分布式训练进程的生命周期。要经过 MPI 使用 Amazon SageMaker 来进行分布式训练,您必须集成 MPI 和 Amazon SageMaker 的原生分布式训练功能。
要了解如何集成 MPI 和 Amazon SageMaker 分布式训练,须要对如下概念有至关认识:
若是分布式训练使用 MPI,您须要一个在主节点(主机)上运行,并且控制着分布于多个节点(从 algo-1 到 algo-n,其中n为在您的 Amazon SageMaker 训练做业中请求的训练实例的数量)的所有算法进程生命周期的 mpirun 命令。不过,Amazon SageMaker 不会察觉 MPI,或任何您可能用于在多个节点分配算法进程的其余并行处理框架。Amazon SageMaker 将在运行于每一个节点的 Docker 容器上调用入口点脚本。这就意味着,入口点脚本须要知道其节点的全局排名,并根据它在主节点或其余非主节点上是否被调用而执行不一样的逻辑。
具体而言,对于 MPI,在主节点上被调用的入口点脚本须要运行mpirun命令,以开始当前 Amazon SageMaker 训练做业的主机集中所有节点的算法进程。在任何非主节点上被 Amazon SageMaker 调用时,同一个入口点脚本会按期检查由 mpirun 从主节点远程管理的非主节点上的算法进程是否依然在运行,并在不运行时退出。
MPI 中的主节点是一个逻辑概念,它取决于入口点脚本在当前训练做业的所有主机中指定一个主机做为主节点。这项指定必须采用分散式方法完成。简单的作法之一是,将 algo-1 指定为主节点,而其余全部主机为非主节点。因为 Amazon SageMaker 在入口点环境变量中为每一个节点提供其逻辑主机名,所以节点能够直观地肯定其是主节点或非主节点。
包含于随附 GitHub 存储库并在 Tensorpack Mask/Faster-RCNN算法 Docker 映像中打包的 train.py 遵循本部分中概述的逻辑。
具有这样的概念理解背景后,您就能够继续操做分步教程,了解如何使用 Amazon SageMaker 为 Mask R-CNN 运行分布式 TensorFlow 训练了。
本教程有如下关键步骤:
如下为必须知足的先决条件:
第一步是运行 AWS CloudFormation 自动化脚本以建立一个附加于私有 VPC 的 Amazon SageMaker 笔记本实例。要运行此脚本,您须要具备与网络管理员职能相符的 IAM 用户权限。若是没有此类权限,可能须要寻求网络管理员的帮助以运行本教程中的 AWS CloudFormation 自动化脚本。如需更多信息,请参阅工做职能的 AWS 托管策略。
使用 AWS CloudFormation 模板 cfn-sm.yaml 建立一个 AWS CloudFormation 堆栈,而该堆栈将建立一个附加于私有 VPC 的笔记本实例。您可使用 AWS CloudFormation 服务控制台中的 [cfn-sm.yaml]以建立 AWS CloudFormation 堆栈,或也能够自定义 stack-sm.sh 脚本中的变量,并在已安装 AWS CLI 的任何位置运行该脚本。
要使用 AWS CLI 方法,执行如下步骤:
保存 AWS CloudFormation 脚本摘要输出以供稍后使用。您还能够在 AWS 管理控制台的 AWS CloudFormation 堆栈输出选项卡的下方查看输出。
在 Amazon SageMaker 控制台中打开建立的笔记本实例。在此笔记本实例中,有三个可用于训练 Mask R-CNN 的 Jupyter 笔记本:
对于本文选用的 Mask R-CNN 模型和 COCO 2017数据集,全部三个数据源选项的训练时间性能差很少(虽然不彻底同样)。每一个数据源的成本结构各有差别。如下是它们在设置训练数据管道的时间方面的差别:
若是不肯定哪一个数据源选项更适合您,能够首先尝试使用 S3,若是每一个训练做业一开始时的训练数据下载时间不可接受,接着探索并选择 EFS 或 Amazon FSx。不要对任何数据源的训练时间性能进行假设。训练时间性能取决于众多因素,最好的作法是进行试验与测量。
在全部三种情形中,训练期间的日志和模型检查点输出会被写入到附加于每一个训练实例的存储卷,而后在训练完成时上传到您的S3存储桶。日志还会在训练过程当中被注入到 Amazon CloudWatch,您能够在训练期间加以检查。系统和算法训练指标会在训练过程当中被注入到 Amazon CloudWatch 指标,您能够在 Amazon SageMaker 服务控制台中对其进行可视化。
下图为两种算法对 COCO 2017 数据集进行24次训练后的示例结果。
您能够在下方查看 TensorPack Mask/Faster-RCNN 算法的示例结果。下图可被拆分为三个存储桶:
您能够在下方查看优化 AWS Samples Mask R-CNN 算法的示例结果。下图显示的聚合 mAP 指标几乎与以前的算法相同,不过收敛进展各不相同。
Amazon SageMaker 提供基于 Docker 的简化分布式 TensorFlow 训练平台,让您能够专一于 ML 算法而不会被从属的问题干扰,例如,基础设施可用性与可扩展性机制,以及并发实验管理等。在模型训练完成后,您可使用 Amazon SageMaker 的集成模型部署功能为您的模型建立一个自动可扩展的 RESTful 服务终端节点,并开始对其进行测试。
如需更多信息,请参阅在 Amazon SageMaker 托管服务上部署模型。若模型已准备就绪,您能够将模型 RESTful 服务无缝部署到生产。