多节点并行作业 - Amazon Batch
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

多节点并行作业

利用多节点并行作业,您能够跨多个 Amazon EC2 实例运行单个作业。借助 Amazon Batch 多节点并行作业,您可以运行大规模、高性能计算应用程序和分布式 GPU 模型训练,而无需直接启动、配置和管理 Amazon EC2 资源。 Amazon Batch 多节点 parallel 作业与任何支持基于 IP 的节点间通信的框架兼容。示例包括 Apache MxNet TensorFlow、、Caffe2 或消息传递接口 (MPI)。

多节点并行作业可作为单个作业提交。不过,作业定义(或作业提交节点覆盖)指定了要为作业创建的节点数量,以及要创建的节点组。每个多节点并行作业都包含一个主节点,这是最先启动的节点。主节点启动之后,子节点会启动并开始运行。只有当主节点退出时,作业才会完成。然后停止所有子节点。有关更多信息,请参阅 节点组

多节点并行作业节点为单租户。这意味着,在每个 Amazon ECS 实例上只运行一个作业容器。

最终的作业状态(SUCCEEDEDFAILED)由主节点的最终作业状态决定。要获取多节点并行作业的状态,可以使用提交作业时返回的作业 ID 来描述作业。如果需要子节点的详细信息,则必须分别描述每个子节点。您可以使用 #N 表示法(从 0 开头)对节点进行寻址。例如,要访问任务的第二个节点的详细信息,请使用 API 操作描述 aws_batch_job_ id #1。 Amazon Batch DescribeJobs多节点并行作业的 startedstoppedAtstatusReasonexit 信息从主节点进行填充。

如果指定作业重试次数,则主节点故障会导致再次尝试重试。子节点故障不会导致更多的尝试发生。多节点并行作业每次新的尝试都将更新其关联子节点的相应尝试。

要在上运行多节点 parallel 作业 Amazon Batch,您的应用程序代码必须包含分布式通信所需的框架和库。

环境变量

在运行时,每个节点都配置了所有 Amazon Batch 作业都会收到的标准环境变量。此外,还配置了以下环境变量,这些变量特定于多节点并行作业:

AWS_BATCH_JOB_MAIN_NODE_INDEX

此变量设置为作业的主节点的索引号。您的应用程序代码可以将 AWS_BATCH_JOB_MAIN_NODE_INDEX 与单个节点上的 AWS_BATCH_JOB_NODE_INDEX 进行比较,以确定它是否为主节点。

AWS_BATCH_JOB_MAIN_NODE_PRIVATE_IPV4_ADDRESS

此变量仅在多节点并行作业子节点中设置。主节点上不存在此变量。此变量设置为作业的主节点的私有 IPv4 地址。您的子节点的应用程序代码可以使用此地址与主节点进行通信。

AWS_BATCH_JOB_NODE_INDEX

此变量设置为节点的节点索引号。节点索引从 0 开始,并且每个节点接收一个唯一的索引号。例如,包含 10 个子级的多节点并行作业具有索引值 0-9。

AWS_BATCH_JOB_NUM_NODES

此变量设置为您为多节点并行作业请求的节点数。

节点组

节点组即共享相同容器属性的一组完全相同的作业节点。您可以使用 Amazon Batch 为每个作业指定最多五个不同的节点组。

每个组都有自己的容器映像、命令、环境变量等。例如,您可以提交一项作业,要求有一个主节点 c5.xlarge 实例和五个 c5.xlarge 实例子节点。这些不同的节点组中的每一个都可以为每个作业指定不同的容器映像或命令来运行。

或者,作业中的所有节点都可以使用单个节点组。此外,您的应用程序代码可以区分节点角色,例如主节点和子节点。它通过将 AWS_BATCH_JOB_MAIN_NODE_INDEX 环境变量与其自身的 AWS_BATCH_JOB_NODE_INDEX 值进行比较来实现此目的。单个作业中最多可具有 1000 个节点。这是 Amazon ECS 群集中的实例数的默认限制。您可以 请求增加此限制的值

注意

目前,多节点并行作业中的所有节点组必须使用相同的实例类型。

作业生命周期

当您提交多节点并行作业时,该作业会进入 SUBMITTED 状态。然后,该作业会等待任何作业依赖关系完成。作业也会变为 RUNNABLE 状态。最后 Amazon Batch ,配置运行任务所需的实例容量并启动这些实例。

每个多节点并行作业都包含一个主节点。主节点是单个子任务, Amazon Batch 用于监控以确定已提交的多节点作业的结果。主节点将第一个启动,并进入 STARTING 状态。attemptDurationSeconds 参数中指定的超时值适用于整个作业,而不适用于节点。

当主节点达到 RUNNING 状态时(节点的容器运行之后),子节点将启动,也进入 STARTING 状态。子节点的启动顺序是随机的。子节点启动的时机或顺序无法保证。要确保作业的所有节点都处于 RUNNING 状态(节点的容器运行之后),应用程序代码可以查询 Amazon Batch API 来获取主节点和子节点信息。或者,应用程序代码可以等到所有节点都联机后再开始任何分布式处理任务。主节点的私有 IP 地址可作为 AWS_BATCH_JOB_MAIN_NODE_PRIVATE_IPV4_ADDRESS 环境变量,用在每个子节点中。应用程序代码可以使用此信息,在每个任务之间协调和传输数据。

各个节点在退出后,将进入 SUCCEEDEDFAILED 状态,具体取决于其退出代码。如果主节点退出,则作业将视为已完成,并且所有子节点将停止。如果子节点死亡,则 Amazon Batch 不会对任务中的其他节点执行任何操作。如果节点数量减少后不希望作业继续,那么必须在应用程序代码中考虑此因素。这样做会终止或取消作业。

计算环境注意事项

在配置使用 Amazon Batch运行多节点并行作业的计算环境时,需要考虑几个注意事项。

  • UNMANAGED 计算环境不支持多节点并行作业。

  • 如果打算将多节点并行作业提交到计算环境,请在单个可用区中创建集群 置放群组,并将其与计算资源进行关联。这样可保证多节点并行作业位于实例的逻辑分组内,同时保持高的网络流量潜力。有关更多信息,请参阅 《适用于 Linux 实例的 Amazon EC2 用户指南》 中的放置组

  • 使用竞价型实例的计算环境不支持多节点并行作业。

  • Amazon Batch 多节点并行任务使用 Amazon ECS awsvpc 网络模式,该模式为您的多节点并行任务容器提供了与 Amazon EC2 实例相同的联网属性。每个多节点并行作业容器都可获得自己的弹性网络接口、主要私有 IP 地址以及内部 DNS 主机名。在同一 VPC 子网中创建网络接口,作为其主机计算资源。适用于计算资源的任何安全组,也适用于该主机计算资源。有关更多信息,请参阅 《Amazon Elastic Container Service 开发人员指南》 中的 使用 awsvpc Network Mode 的任务联网

  • 与计算环境关联的安全组不得超过 5 个。

  • 对于具有公有 IP 地址的多节点并行作业,awsvpc 网络模式不提供弹性网络接口。要访问 Internet,必须在配置为使用 NAT 网关的私有子网中启动计算资源。有关更多信息,请参阅 Amazon VPC 用户指南中的 NAT 网关。节点间通信必须使用节点的私有 IP 地址或 DNS 主机名。运行于公有子网内计算资源之上的多节点并行作业,无出站网络访问。要创建具有私有子网和 NAT 网关的 VPC,请参阅创建虚拟私有云

  • 创建并附加到计算资源的弹性网络接口,不能由您的账户手动分离或修改。这是为了防止意外删除与正在运行的作业关联的弹性网络接口。要释放任务的弹性网络接口,请终止作业。

  • 计算环境必须具有足够大的 vCPU 才能支持多节点并行作业。

  • 您的 Amazon EC2 实例限额包括运行作业所需的实例数量。例如,如果作业需要 30 个实例,但您的账户在区域内只能运行 20 个实例。则您的工作会卡在 RUNNABLE 状态中。

  • 如果为多节点并行作业中的节点组指定了实例类型,那么计算环境必须能够启动该实例类型。