

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

# 运行 GPU 作业
<a name="gpu-jobs"></a>

GPU 作业可帮助您运行使用实例的作业 GPUs。

支持以下基于 GPU 的 Amazon EC2 实例类型。有关更多信息，请参阅 [Amazon EC2 G3 实例](https://aws.amazon.com/ec2/instance-types/g3/)、[Amazon EC2 G4 实例](https://aws.amazon.com/ec2/instance-types/g4/)、[Amazon EC2 G5 实例](https://aws.amazon.com/ec2/instance-types/g5/)、[Amazon EC2 G6 实例](https://aws.amazon.com/ec2/instance-types/g6/)、[Amazon EC2 P2 实例](https://aws.amazon.com/ec2/instance-types/p2/)、[Amazon EC2 P3 实例](https://aws.amazon.com/ec2/instance-types/p3/)、[Amazon EC2 P4d 实例](https://aws.amazon.com/ec2/instance-types/p4/)、[Amazon EC2 P5 实例](https://aws.amazon.com/ec2/instance-types/p5/)、[Amazon EC2 P6 实例](https://aws.amazon.com/ec2/instance-types/p6/)、[Amazon EC2 Trn1 实例](https://aws.amazon.com/ec2/instance-types/trn1/)、[Amazon EC2 Trn2 实例](https://aws.amazon.com/ec2/instance-types/trn2/)、[Amazon EC2 Inf1 实例](https://aws.amazon.com/ec2/instance-types/inf1/)、[Amazon EC2 Inf2 实例](https://aws.amazon.com/ec2/instance-types/inf2/)、[Amazon EC2 Dl1 实例](https://aws.amazon.com/ec2/instance-types/dl1/) 和 [Amazon EC2 Dl2 实例](https://aws.amazon.com/ec2/instance-types/dl2q/)。


|  实例类型  |  GPUs  |  GPU 内存  |  v CPUs  |  内存  |  网络带宽  | 
| --- | --- | --- | --- | --- | --- | 
|  g3s.xlarge  |  1  |  8 GiB  |  4  |  30.5 GiB  |  10 Gbps  | 
|  g3.4xlarge  |  1  |  8 GiB  |  16  |  122 GiB  |  最高 10 Gbps  | 
|  g3.8xlarge  |  2  |  16 GiB  |  32  |  244 GiB  |  10 Gbps  | 
|  g3.16xlarge  |  4  |  32 GiB  |  64  |  488 GiB  |  25 Gbps  | 
|  g4dn.xlarge  |  1  |  16 GiB  |  4  |  16 GiB  |  最高 25 Gbps  | 
|  g4dn.2xlarge  |  1  |  16 GiB  |  8  |  32 GiB  |  最高 25 Gbps  | 
|  g4dn.4xlarge  |  1  |  16 GiB  |  16  |  64 GiB  |  最高 25 Gbps  | 
|  g4dn.8xlarge  |  1  |  16 GiB  |  32  |  128 GiB  |  50 Gbps  | 
|  g4dn.12xlarge  |  4  |  64 GiB  |  48  |  192 GiB  |  50 Gbps  | 
|  g4dn.16xlarge  |  1  |  16 GiB  |  64  |  256 GiB  |  50 Gbps  | 
|  g5.xlarge  |  1  |  24 GiB  |  4  |  16 GiB  |  最高 10 Gbps  | 
|  g5.2xlarge  |  1  |  24 GiB  |  8  |  32 GiB  |  最高 10 Gbps  | 
|  g5.4xlarge  |  1  |  24 GiB  |  16  |  64 GiB  |  最高 25 Gbps  | 
|  g5.8xlarge  |  1  |  24 GiB  |  32  |  128 GiB  |  25 Gbps  | 
|  g5.16xlarge  |  1  |  24 GiB  |  64  |  256 GiB  |  25 Gbps  | 
|  g5.12xlarge  |  4  |  96 GiB  |  48  |  192 GiB  |  40Gbps  | 
|  g5.24xlarge  |  4  |  96 GiB  |  96  |  384 GiB  |  50 Gbps  | 
|  g5.48xlarge  |  8  |  192 GiB  |  192  |  768 GiB  |  100 Gbps  | 
|  g5g.xlarge  |  1  |  16 GiB  |  4  |  8 GiB  |  最高 10 Gbps  | 
|  g5g.2xlarge  |  1  |  16 GiB  |  8  |  16 GiB  |  最高 10 Gbps  | 
|  g5g.4xlarge  |  1  |  16 GiB  |  16  |  32 GiB  |  最高 10 Gbps  | 
|  g5g.8xlarge  |  1  |  16 GiB  |  32  |  64 GiB  |  12 Gbps  | 
|  g5g.16xlarge  |  2  |  32 GiB  |  64  |  128 GiB  |  25 Gbps  | 
|  g5g.metal  |  2  |  32 GiB  |  64  |  128 GiB  |  25 Gbps  | 
|  g6.xlarge  |  1  |  24 GiB  |  4  |  16 GiB  |  最高 10 Gbps  | 
|  g6.2xlarge  |  1  |  24 GiB  |  8  |  32 GiB  |  最高 10 Gbps  | 
|  g6.4xlarge  |  1  |  24 GiB  |  16  |  64 GiB  |  最高 25 Gbps  | 
|  g6.8xlarge  |  1  |  24 GiB  |  32  |  128 GiB  |  25 Gbps  | 
|  g6.16xlarge  |  1  |  24 GiB  |  64  |  256 GiB  |  25 Gbps  | 
|  g6.12xlarge  |  4  |  96 GiB  |  48  |  192 GiB  |  40Gbps  | 
|  g6.24xlarge  |  4  |  96 GiB  |  96  |  384 GiB  |  50 Gbps  | 
|  g6.48xlarge  |  8  |  192 GiB  |  192  |  768 GiB  |  100 Gbps  | 
|  g6e.xlarge  |  1  |  48 GiB  |  4  |  32 GiB  |  高达 20 Gbps  | 
|  g6e.2xlarge  |  1  |  48 GiB  |  8  |  64 GiB  |  高达 20 Gbps  | 
|  g6e.4xlarge  |  1  |  48 GiB  |  16  |  128 GiB  |  20 Gbps  | 
|  g6e.8xlarge  |  1  |  48 GiB  |  32  |  256 GiB  |  25 Gbps  | 
|  g6e.16xlarge  |  1  |  48 GiB  |  64  |  512 GiB  |  35 Gbps  | 
|  g6e.12xlarge  |  4  |  192 GiB  |  48  |  384 GiB  |  100 Gbps  | 
|  g6e.24xlarge  |  4  |  192 GiB  |  96  |  768 GiB  |  200 Gbps  | 
|  g6e.48xlarge  |  8  |  384 GiB  |  192  |  1536 GiB  |  400 Gbps  | 
|  gr6.4xlarge  |  1  |  24 GiB  |  16  |  128 GiB  |  最高 25 Gbps  | 
|  gr6.8xlarge  |  1  |  24 GiB  |  32  |  256 GiB  |  25 Gbps  | 
|  p2.xlarge  |  1  |  12 GiB  |  4  |  61 GiB  |  高  | 
|  p2.8xlarge  |  8  |  96 GiB  |  32  |  488 GiB  |  10 Gbps  | 
|  p2.16xlarge  |  16  |  192 GiB  |  64  |  732 GiB  |  20 Gbps  | 
|  p3.2xlarge  |  1  |  16 GiB  |  8  |  61 GiB  |  最高 10 Gbps  | 
|  p3.8xlarge  |  4  |  64 GiB  |  32  |  244 GiB  |  10 Gbps  | 
|  p3.16xlarge  |  8  |  128 GiB  |  64  |  488 GiB  |  25 Gbps  | 
|  p3dn.24xlarge  |  8  |  256 GiB  |  96  |  768 GiB  |  100 Gbps  | 
|  p4d.24xlarge  |  8  |  320 GiB  |  96  |  1152 GiB  |  400 Gbps  | 
|  p4de.24xlarge  |  8  |  640 GiB  |  96  |  1152 GiB  |  400 Gbps  | 
|  p5.48xlarge  |  8  |  640 GiB  |  192  |  2 TiB  |  3200 Gbps  | 
|  p5e.48xlarge  |  8  |  1128 GiB  |  192  |  2 TiB  |  3200 Gbps  | 
|  p5en.48xlarge  |  8  |  1128 GiB  |  192  |  2 TiB  |  3200 Gbps  | 
|  p6-b200.48xlarge  |  8  |  1440 GiB  |  192  |  2 TiB  |  100 Gbps  | 
|  trn1.2xlarge  |  1  |  32 GiB  |  8  |  32 GiB  |  最高 12.5Gbps  | 
|  trn1.32xlarge  |  16  |  512 GiB  |  128  |  512 GiB  |  800 Gbps  | 
|  trn1n.32xlarge  |  16   |  512 GiB  |  128  |  512 GiB  |  1600 Gbps  | 
|  trn2.48xlarge  |  16  |  1.5 TiB  |  192  |  2 TiB  |  3.2 Tbps  | 
|  inf1.xlarge  |  1  |  8 GiB  |  4  |  8 GiB  |  最高 25 Gbps  | 
|  inf1.2xlarge  |  1  |  8 GiB  |  8  |  16 GiB  |  最高 25 Gbps  | 
|  inf1.6xlarge  |  4  |  32 GiB  |  24  |  48 GiB  |  25 Gbps  | 
|  inf1.24xlarge  |  16  |  128 GiB  |  96  |  192 GiB  |  100 Gbps  | 
|  inf2.xlarge  |  1  |  32 GiB  |  4  |  16 GiB  |  最高 15 Gbps  | 
|  inf2.8xlarge  |  1  |  32 GiB  |  32  |  128 GiB  |  最高 25 Gbps  | 
|  inf2.24xlarge  |  6  |  192 GiB  |  96  |  384 GiB  |  50 Gbps  | 
|  inf2.48xlarge  |  12  |  384 GiB  |  192  |  768 GiB  |  100 Gbps  | 
|  dl1.24xlarge  |  8  |  256 GiB  |  96  |  768 GiB  |  400 Gbps  | 
|  dl2q.24xlarge  |  8  |  128 GiB  |  96  |  768 GiB  |  100 Gbps  | 

**注意**  
对于 GPU 任务， AWS Batch 仅支持采用 NVIDIA 的实例类型 GPUs。例如，[https://aws.amazon.com/ec2/instance-types/g4/#Amazon_EC2_G4ad_instances](https://aws.amazon.com/ec2/instance-types/g4/#Amazon_EC2_G4ad_instances) 系列不支持 GPU 调度。您仍然可以在[https://aws.amazon.com/ec2/instance-types/g4/#Amazon_EC2_G4ad_instances](https://aws.amazon.com/ec2/instance-types/g4/#Amazon_EC2_G4ad_instances)上使用， AWS Batch 方法是在任务定义中仅定义 vCPU 和内存要求，然后使用亚马逊 ECS 或 Amazon EKS 计算优化的 AMI，或者使用自定义 AMD 的自定义 AMI，通过在 Amazon EC2 [启动模板用户数据](launch-templates.md#lt-user-data.title)中进行自定义，直接访问主机 GPU。 GPUs  
自定义 AMIs提供给的 GPU 任务支持使用 ARM64 架构的实例类型， AWS Batch 或者 GPUs 通过自定义代码和配置访问 Amazon EC2 用户数据。例如，[https://aws.amazon.com/ec2/instance-types/g5g/](https://aws.amazon.com/ec2/instance-types/g5g/) 实例系列。

任务定义的 [resource](job_definition_parameters.md#ContainerProperties-resourceRequirements) Requirements 参数指定 GPUs 要固定到容器的数量。在作业持续时间内，在该实例上运行的任何其他作业都 GPUs 无法使用此数字。计算环境中将运行 GPU 作业的所有实例类型都必须来自 `p6`、`p3`、`p4`、`p5`、`g3`、`g3s`、`g4`、`g5` 或 `g6` 实例系列。如果不这么做，GPU 作业可能会停滞于 `RUNNABLE` 状态。

不使用的作业 GPUs 可以在 GPU 实例上运行。但是，在 GPU 实例上运行它们的成本可能高于在类似的非 GPU 实例上运行的成本。根据具体的 vCPU、内存和所需时间，这些非 GPU 作业可能会阻止 GPU 作业运行。

**Topics**
+ [在 Amazon EKS 上创建基于 GPU 的 Kubernetes 集群](create-gpu-cluster-eks.md)
+ [创建 Amazon EKS GPU 作业定义](create-eks-gpu-job-definition.md)
+ [在您的 Amazon EKS 集群中运行 GPU 作业](run-gpu-job-eks-cluster.md)

# 在 Amazon EKS 上创建基于 GPU 的 Kubernetes 集群
<a name="create-gpu-cluster-eks"></a>

在 Amazon EKS 上创建基于 GPU 的 Kubernetes 集群之前，您必须已完成 [亚马逊 EK AWS Batch S 入门](getting-started-eks.md) 中的步骤。此外，请考虑以下操作：
+ AWS Batch 支持 NVIDIA 的实例类型 GPUs。
+ 默认情况下， AWS Batch 选择版本与您的 Amazon EKS 集群控制平面Kubernetes版本匹配的 Amazon EKS 加速 AMI。

```
$ cat <<EOF > ./batch-eks-gpu-ce.json
{
  "computeEnvironmentName": "My-Eks-GPU-CE1",
  "type": "MANAGED",
  "state": "ENABLED",
  "eksConfiguration": {
    "eksClusterArn": "arn:aws:eks:<region>:<account>:cluster/<cluster-name>",
    "kubernetesNamespace": "my-aws-batch-namespace"
  },
  "computeResources": {
    "type": "EC2",
    "allocationStrategy": "BEST_FIT_PROGRESSIVE",
    "minvCpus": 0,
    "maxvCpus": 1024,
    "instanceTypes": [
      "p3dn.24xlarge",
      "p4d.24xlarge"
    ],
    "subnets": [
        "<eks-cluster-subnets-with-access-to-internet-for-image-pull>"
    ],
    "securityGroupIds": [
        "<eks-cluster-sg>"
    ],
    "instanceRole": "<eks-instance-profile>"
  }
}
EOF

$ aws batch create-compute-environment --cli-input-json file://./batch-eks-gpu-ce.json
```

AWS Batch 不代表您管理 NVIDIA GPU 设备插件。您必须将此插件安装到您的 Amazon EKS 集群中，并允许它以 AWS Batch 节点为目标。有关更多信息，请参阅上的 “[启用 GPU Suppor Kubernetes](https://github.com/NVIDIA/k8s-device-plugin#enabling-gpu-support-in-kubernetes) t” GitHub。

要将NVIDIA设备插件 (`DaemonSet`) 配置为以 AWS Batch 节点为目标，请运行以下命令。

```
# pull nvidia daemonset spec
$ curl -O https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.12.2/nvidia-device-plugin.yml
# using your favorite editor, add Batch node toleration
# this will allow the DaemonSet to run on Batch nodes
- key: "batch.amazonaws.com/batch-node"
  operator: "Exists"

$ kubectl apply -f nvidia-device-plugin.yml
```

我们不建议您将基于计算（CPU 和内存）的工作负载与基于 GPU 的工作负载混合在计算环境和作业队列的相同配对中。这是因为计算作业可能会耗尽 GPU 容量。

要连接作业队列，请运行以下命令。

```
$ cat <<EOF > ./batch-eks-gpu-jq.json
 {
    "jobQueueName": "My-Eks-GPU-JQ1",
    "priority": 10,
    "computeEnvironmentOrder": [
      {
        "order": 1,
        "computeEnvironment": "My-Eks-GPU-CE1"
      }
    ]
  }
EOF

$ aws batch create-job-queue --cli-input-json file://./batch-eks-gpu-jq.json
```

# 创建 Amazon EKS GPU 作业定义
<a name="create-eks-gpu-job-definition"></a>

目前仅支持 `nvidia.com/gpu`，并且您设置的资源值必须为整数。不能使用 GPU 片段。有关更多信息，请参阅*Kubernetes文档 GPUs*中的[日程安排](https://kubernetes.io/docs/tasks/manage-gpus/scheduling-gpus/)。

要为 Amazon EKS 注册 GPU 作业定义，请运行以下命令。

```
$ cat <<EOF > ./batch-eks-gpu-jd.json
{
    "jobDefinitionName": "MyGPUJobOnEks_Smi",
    "type": "container",
    "eksProperties": {
        "podProperties": {
            "hostNetwork": true,
            "containers": [
                {
                    "image": "nvcr.io/nvidia/cuda:10.2-runtime-centos7",
                    "command": ["nvidia-smi"],
                    "resources": {
                        "limits": {
                            "cpu": "1",
                            "memory": "1024Mi",
                            "nvidia.com/gpu": "1"
                        }
                    }
                }
            ]
        }
    }
}
EOF

$ aws batch register-job-definition --cli-input-json file://./batch-eks-gpu-jd.json
```

# 在您的 Amazon EKS 集群中运行 GPU 作业
<a name="run-gpu-job-eks-cluster"></a>

GPU 资源不可压缩。 AWS Batch 为**请求**值等于**限制**值的 GPU 作业创建 Pod 规范。这是一项Kubernetes要求。

要提交 GPU 作业，请运行以下命令。

```
$ aws batch submit-job --job-queue My-Eks-GPU-JQ1 --job-definition MyGPUJobOnEks_Smi --job-name My-Eks-GPU-Job

# locate information that can help debug or find logs (if using Amazon CloudWatch Logs with Fluent Bit)
$ aws batch describe-jobs --job <job-id> | jq '.jobs[].eksProperties.podProperties | {podName, nodeName}'
{
  "podName": "aws-batch.f3d697c4-3bb5-3955-aa6c-977fcf1cb0ca",
  "nodeName": "ip-192-168-59-101.ec2.internal"
}
```