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

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

亚马逊 EKS 上的多节点并行作业

您可以 Amazon Batch 在 Amazon Elastic Kubernetes Service 上使用在托管集群上运行多节点并行 (MNP) 作业。Kubernetes此选项通常用于无法在单个 Amazon Elastic Compute Cloud 实例上运行的大型、紧密耦合、高性能的任务。有关更多信息,请参阅多节点 parallel 作业

您可以使用此功能运行 Amazon EKS 托管Kubernetes特定的高性能计算应用程序、大型语言模型训练和其他人工智能 (AI) /机器学习 (ML) 作业。

正在运行 MNP 职位

Amazon Batch 支持使用亚马逊 EC2 的亚马逊弹性容器服务和亚马逊 EKS 上的 MNP 任务。以下内容提供了有关该功能的实例和容器参数的更多细节。

亚马逊 EKS 上的 MNP 实例配额

  • 单个 MNP 任务最多可使用 1000 个实例。

  • 多达 5000 个实例可以加入单个 Amazon EKS 集群。

  • 最多可以将 5 个计算环境集群化并连接到作业队列。

例如,您可以在一个任务队列中扩展到 5 个集群计算环境,在每个计算环境中最多可扩展 1000 个实例。

除了实例参数外,还需要注意的是,您不能通过任何一种服务使用 Fargate 进行 MNP 任务。

在每个 MNP 作业中,您只能使用一种实例类型。您可以通过更新计算环境或定义新的计算环境来更改实例类型。您还可以指定实例类型,并在创建任务定义时提供 vCPU 和内存要求。

亚马逊 EKS 上的 MNP 的容器配额

  • 多节点 parallel 作业支持每个节点一个 Pod。

  • 最多 10 个容器(或 10 个初始化容器。 有关更多信息,请参阅 Kubernetes 文档中的初始化容器。)在每个 pod 中。

  • 每个 MNP 任务中最多 5 个节点范围。

  • 每个节点范围内最多 10 个不同的容器镜像。

例如,在包含 5 个节点范围和总共 50 个唯一映像的单个 MNP 作业中,您最多可以运行 10,000 个容器。

在私有亚马逊 VPC 和 Amazon EKS 集群中运行 MNP 任务

MNP 任务可以在任何 Amazon EKS 集群上运行,无论该集群是否有公共互联网。使用只能访问私有网络的 Amazon EKS 集群时,请确保该集群 Amazon Batch 可以访问 Amazon EKS 控制平面和托管 Kubernetes API 服务器。您可以通过亚马逊 Virtual Private Cloud 终端节点授予必要的访问权限。有关更多信息,请参阅配置终端节点服务

Amazon EKS 集群 Pod 无法从公共来源下载映像,因为私有 VPC 无法访问互联网。您的 Amazon EKS 集群必须从您的 Amazon VPC 内的容器注册表中提取映像。您可以在您的 Amazon VPC 中创建(Amazon ECR),并将容器映像复制到该镜像以供您的节点访问。

您也可以使用 Amazon ECR 创建直通缓存规则。为外部公共注册表创建了拉取缓存规则后,您只需使用您的 Amazon ECR 私有注册表 URI 从该外部公共注册表中提取映像即可。然后,Amazon ECR 会创建一个存储库并缓存映像。当使用 Amazon ECR 私有注册表 URI 提取缓存镜像时,Amazon ECR 会检查远程注册表以查看是否有新版本的镜像,并且会最多每 24 小时更新一次您的私有注册表。有关更多信息,请参阅在 Amazon ECR 中创建直通缓存规则

有关本主题的更多信息,请参阅 Amaz Amazon Batch on EKS 私有集群入门

错误通知

如果您的 MNP 职位被屏蔽,您可以通过 Amazon Web Services Management Console 和 Amazon EventBridge 收到通知。例如,如果 MNP 任务停留在队列的开头,则可以收到有关该问题的通知以及导致该问题的原因的信息,以便您可以立即采取措施来解除对任务队列的封锁。或者,如果在不同时间段内未采取任何操作,则可以自动终止 MNP 作业,这可以在作业队列模板中定义。有关更多信息,请参阅 Job 队列已阻止的事件

创建 Amazon EKS MNP 任务定义

要在 Amazon EKS 上定义和运行 MNP 任务,RegisterJobDefinitionSubmitJobAPI 操作中有新的参数。

这些操作可以通过 API 操作和 Amazon Web Services Management Console.

注册 Amazon EKS MNP 任务定义请求有效负载

以下示例说明了如何使用两个节点注册 Amazon EKS MNP 任务定义。

{ "jobDefinitionName": "MyEksMnpJobDefinition", "type": "multinode", "nodeProperties": { "numNodes": 2, "mainNode": 0, "nodeRangeProperties": [ { "targetNodes" : "0:", "eksProperties": { "podProperties": { "containers": [ { "name": "test-eks-container-1", "image": "public.ecr.aws/amazonlinux/amazonlinux:2", "command": [ "sleep", "60" ], "resources": { "limits": { "cpu": "1", "memory": "1024Mi" } }, "securityContext":{ "runAsUser":1000, "runAsGroup":3000, "privileged":true, "readOnlyRootFilesystem":true, "runAsNonRoot":true } } ], "initContainers": [ { "name":"init-ekscontainer", "image": "public.ecr.aws/amazonlinux/amazonlinux:2", "command": [ "echo", "helloWorld" ], "resources": { "limits": { "cpu": "1", "memory": "1024Mi" } } } ], "metadata": { "labels": { "environment" : "test" } } } } } ] } }

要使用注册作业定义 Amazon CLI,请将定义复制到名为 MyEksMnpJobDefinition.json 的本地文件中,然后运行以下命令。

aws batch register-job-definition --cli-input-json file://MyEksMnpJobDefinition.json

您将收到以下 JSON 响应。

{ "jobDefinitionName": "MyEksMnpJobDefinition", "jobDefinitionArn": "arn:aws:batch:us-east-1:0123456789:job-definition/MyEksMnpJobDefinition:1", "revision": 1 }

提交 Amazon EKS MNP 职位

要使用已注册的作业定义提交作业,请输入以下命令。将的值替换为<EKS_JOB_QUEUE_NAME>与 Amazon EKS 计算环境关联的预先存在的任务队列的名称或 ARN。

aws batch submit-job --job-queue <EKS_JOB_QUEUE_NAME> \ --job-definition MyEksMnpJobDefinition \ --job-name myFirstEksMnpJob

您将收到以下 JSON 响应。

{ "jobArn": "arn:aws:batch:region:account:job/9b979cce-9da0-446d-90e2-ffa16d52af68", "jobName": "myFirstEksMnpJob", "jobId": "<JOB_ID>" }

您可以使用返回的 jobid 和以下命令检查任务的状态。

aws batch describe-jobs --jobs <JOB_ID>

改写 Amazon EKS MNP 任务定义

或者,您可以改写作业定义详细信息(例如更改 MNP 任务规模或子作业详细信息)。以下提供了提交五节点 MNP 任务的 JSON 请求负载示例,以及对test-eks-container-1容器命令的更改。

{ "numNodes": 5, "nodePropertyOverrides": [ { "targetNodes": "0:", "eksPropertiesOverride": { "podProperties": { "containers": [ { "name": "test-eks-container-1", "command": [ "sleep", "150" ] } ] } } } ] }

提交 Amazon EKS MNP 职位

然后提交包含这些覆盖的作业,将示例保存到本地文件 eks-mnp-job-nodeoverride.json 中,然后使用 Amazon CLI 提交带有替代项的作业。

aws batch submit-job --job-queue <EKS_JOB_QUEUE_NAME> \ --job-definition MyEksMnpJobDefinition \ --node-overrides file://./eks-mnp-job-nodeoverride.json \ --job-name fiveLongSleeps