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

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

多节点parallel 作业

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

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

多节点parallel 作业节点是单租户。这意味着每个 Amazon EC2 实例上仅运行单个任务容器。

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

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

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

环境变量

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

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

此变量仅在多节点parallel 作业子节点中设置。这个变量不存在于主节点上。此变量设置为作业的主节点的私有 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 集群中实例的默认限制。您可以请求提高此限制

注意

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

Job 生命周期

当您提交多节点parallel 作业时,该作业会进入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计算环境不支持多节点parallel 作业。

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

  • 使用 Spot 实例的计算环境不支持多节点parallel 作业。

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

  • 您的计算环境关联的安全组可能不超过五个。

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

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

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

  • 您的 Amazon EC2 实例配额包括运行任务所需的实例数量。例如,假设您的任务需要 30 个实例,但您的账户在一个区域中只能运行 20 个实例。然后,你的工作就会陷入困RUNNABLE境。

  • 如果您在多节点parallel 任务中为节点组指定实例类型,则您的计算环境必须启动该实例类型。