

# GPU ワークロード向けの Amazon ECS タスク定義
<a name="ecs-gpu"></a>

GPU 対応コンテナインスタンスを使用してクラスターを作成することで、GPU を使用するワークロードが Amazon ECS でサポートされます。p2、p3、p5、g3、g4、g5 のインスタンスタイプを使用する、Amazon EC2 GPU ベースのコンテナインスタンスでは、NVIDIA GPU へのアクセスが可能です。詳細については、「*Amazon EC2 インスタンスタイプガイド*」の「[Linux Accelerated Computing Instances](https://docs.aws.amazon.com/ec2/latest/instancetypes/ac.html)」を参照してください。

Amazon ECS には、事前設定された NVIDIA カーネルドライバーと Docker GPU ランタイムが付属する、GPU 最適化 AMI が用意されています。詳細については、「[Amazon ECS に最適化された Linux AMI](ecs-optimized_AMI.md)」を参照してください。

コンテナレベルのタスク配置のために、タスク定義でいくつかの GPU を指定できます。Amazon ECS は、使用が可能で GPU をサポートしているコンテナインスタンスをスケジュールし、物理的 GPU を適切なコンテナに固定して最適なパフォーマンスを実現します。

以下の Amazon EC2 GPU ベースのインスタンスタイプがサポートされています。詳細については、「[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 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 G6e Instances](https://aws.amazon.com/ec2/instance-types/g6e/)」を参照してください。


|  インスタンスタイプ  |  GPU  |  GPU メモリ (GiB)  |  vCPU  |  メモリ (GiB)  | 
| --- | --- | --- | --- | --- | 
|  p3.2xlarge  |  1  |  16  |  8  |  61  | 
|  p3.8xlarge  |  4  |  64  |  32  |  244  | 
|  p3.16xlarge  |  8  |  128  |  64  |  488  | 
|  p3dn.24xlarge  |  8  |  256  |  96  |  768  | 
|  p4d.24xlarge  | 8 | 320 | 96 | 1152 | 
| p5.48xlarge | 8 | 640 | 192 | 2048 | 
|  g3s.xlarge  |  1  |  8  |  4  |  30.5  | 
|  g3.4xlarge  |  1  |  8  |  16  |  122  | 
|  g3.8xlarge  |  2  |  16  |  32  |  244  | 
|  g3.16xlarge  |  4  |  32  |  64  |  488  | 
|  g4dn.xlarge  |  1  |  16  |  4  |  16  | 
|  g4dn.2xlarge  |  1  |  16  |  8  |  32  | 
|  g4dn.4xlarge  |  1  |  16  |  16  |  64  | 
|  g4dn.8xlarge  |  1  |  16  |  32  |  128  | 
|  g4dn.12xlarge  |  4  |  64  |  48  |  192  | 
|  g4dn.16xlarge  |  1  |  16  |  64  |  256  | 
|  g5.xlarge  |  1  |  24  |  4  |  16  | 
|  g5.2xlarge  |  1  |  24  |  8  |  32  | 
|  g5.4xlarge  |  1  |  24  |  16  |  64  | 
|  g5.8xlarge  |  1  |  24  |  32  |  128  | 
|  g5.16xlarge  |  1  |  24  |  64  |  256  | 
|  g5.12xlarge  |  4  |  96  |  48  |  192  | 
|  g5.24xlarge  |  4  |  96  |  96  |  384  | 
|  g5.48xlarge  |  8  |  192  |  192  |  768  | 
| g6.xlarge | 1 | 24 | 4 | 16 | 
| g6.2xlarge | 1 | 24 | 8 | 32 | 
| g6.4xlarge | 1 | 24 | 16 | 64 | 
| g6.8xlarge | 1 | 24 | 32 | 128 | 
| g6.16.xlarge | 1 | 24 | 64 | 256 | 
| g6.12xlarge | 4 | 96 | 48 | 192 | 
| g6.24xlarge | 4 | 96 | 96 | 384 | 
| g6.48xlarge | 8 | 192 | 192 | 768 | 
| g6.metal | 8 | 192 | 192 | 768 | 
| gr6.4xlarge | 1 | 24 | 16 | 128 | 
| g6e.xlarge | 1 | 48 | 4 | 32 | 
| g6e.2xlarge | 1 | 48 | 8 | 64 | 
| g6e.4xlarge | 1 | 48 | 16 | 128 | 
| g6e.8xlarge | 1 | 48 | 32 | 256 | 
| g6e16.xlarge | 1 | 48 | 64 | 512 | 
| g6e12.xlarge | 4 | 192 | 48 | 384 | 
| g6e24.xlarge | 4 | 192 | 96 | 768 | 
| g6e48.xlarge | 8 | 384 | 192 | 1536 | 
| gr6.8xlarge | 1 | 24 | 32 | 256 | 

AWS Systems Manager パラメータストア API をクエリすることで、Amazon ECS に最適化された AMI の Amazon マシンイメージ (AMI) ID を取得できます。このパラメータを使用することで、Amazon ECS 最適化 AMI ID を手動で検索する必要がなくなります。Systems Manager Parameter Store API の詳細については、[GetParameter](https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html) を参照してください。使用するユーザーには、Amazon ECS 最適化 AMI メタデータを取得するための `ssm:GetParameter` IAM 許可が必要です。

```
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended --region us-east-1
```

# Amazon ECS マネージドインスタンスで GPU を使用する
<a name="managed-instances-gpu"></a>

Amazon ECS マネージドインスタンスは、次の Amazon EC2 インスタンスタイプを通じて、機械学習、高性能コンピューティング、ビデオ処理などのワークロードに対して GPU アクセラレーションコンピューティングをサポートしています。Amazon ECS マネージドインスタンスが対応するインスタンスタイプについて、詳しくは「[Amazon ECS マネージドインスタンスのインスタンスタイプ](managed-instances-instance-types.md)」を参照してください。

以下は、Amazon ECS マネージドインスタンスでサポートされている GPU ベースのインスタンスタイプのサブセットです。
+ `g4dn`: NVIDIA T4 GPUs を利用し、機械学習の推論、コンピュータビジョン、グラフィックを多用するアプリケーションに適しています。
+ `g5`: NVIDIA A10G GPUs を利用し、グラフィックスを多用するアプリケーションや機械学習ワークロードでより高いパフォーマンスを提供します。
+ `p3`: NVIDIA V100 GPUs を利用し、高性能コンピューティングと深層学習トレーニングに適しています。
+ `p4d`: NVIDIA A100 GPUs を利用し、機械学習トレーニングとハイパフォーマンスコンピューティングを支援します。

Amazon ECS マネージドインスタンスで GPU 対応インスタンスタイプを使用すると、NVIDIA ドライバーと CUDA ツールキットがインスタンスに事前にインストールされるため、GPU 対応ワークロードの実行が容易になります。

## GPU 対応インスタンスの選択
<a name="managed-instances-gpu-instance-selection"></a>

Amazon ECS マネージドインスタンスワークロードの GPU 対応インスタンスタイプを選択するには、キャパシティプロバイダーの起動テンプレートで `instanceRequirements` オブジェクトを使用します。次のスニペットは、GPU 対応インスタンスの選択に使用できる属性を示しています。

```
{
  "instanceRequirements": {
    "acceleratorTypes": "gpu",
    "acceleratorCount": 1,
    "acceleratorManufacturers": ["nvidia"]
  }
}
```

次のスニペットは、起動テンプレートで GPU 対応インスタンスタイプを指定するために使用できる属性を示しています。

```
{
  "instanceRequirements": {
    "allowedInstanceTypes": ["g4dn.xlarge", "p4de.24xlarge"]
  }
}
```

## GPU 対応コンテナイメージ
<a name="managed-instances-gpu-container-images"></a>

コンテナで GPUs を使用するには、必要な GPU ライブラリとツールを含むコンテナイメージを使用する必要があります。NVIDIA には、GPU ワークロードのベースとして使用できるいくつかの構築済みコンテナイメージが用意されています。
+ `nvidia:cuda`: GPU コンピューティング用の CUDA ツールキットを使用したベースイメージ。
+ `tensorflow/tensorflow:latest-gpu`: GPU 対応の TensorFlow。
+ `pytorch/pytorch:latest-cuda`: GPU 対応の PyTorch。

GPU を使用した Amazon ECS マネージドインスタンスのタスク定義サンプルは「[Amazon ECS タスク定義での GPU の指定](ecs-gpu-specifying.md)」を参照してください。

## 考慮事項
<a name="gpu-considerations"></a>

**注記**  
g2 インスタンスファミリータイプのサポートは廃止されました。  
p2 インスタンスファミリータイプは、バージョン `20230912` より前の Amazon ECS GPU 最適化 AMI でのみサポートされています。引き続き p2 インスタンスを使用する必要がある場合は、[P2 インスタンスが必要な場合の対処方法](#p2-instance) を参照してください。  
これら両方のインスタンスファミリータイプで NVIDIA/CUDA ドライバーをインプレース更新すると、GPU ワークロードに障害が発生する可能性があります。

Amazon ECS で GPU の使用を開始する前に、以下について検討することをお勧めします。
+ クラスターには、GPU 対応コンテナインスタンスと GPU 非対応コンテナインスタンスを混在させることができます。
+ GPU ワークロードは外部インスタンスでの実行が可能です。外部インスタンスをクラスターに登録するときは、`--enable-gpu` フラグがインストールスクリプトに含まれていることを確認してください。詳細については、「[Amazon ECS クラスターに外部インスタンスを登録する](ecs-anywhere-registration.md)」を参照してください。
+ エージェント設定ファイルで `ECS_ENABLE_GPU_SUPPORT` を `true` に設定する必要があります。詳細については、「[Amazon ECS コンテナエージェントの設定](ecs-agent-config.md)」を参照してください。
+ タスクの実行時またはサービスの作成時に、インスタンスタイプ属性を使用してタスク配置制約を設定することで、タスクが起動されるコンテナインスタンスを指定できます。これにより、リソースをより効果的に使用できます。詳細については、「[Amazon ECS がタスクをコンテナインスタンスに配置する方法](task-placement.md)」を参照してください。

  以下の例では、デフォルトクラスター内の `g4dn.xlarge` コンテナインスタンスでタスクを起動しています。

  ```
  aws ecs run-task --cluster default --task-definition ecs-gpu-task-def \
       --placement-constraints type=memberOf,expression="attribute:ecs.instance-type ==  g4dn.xlarge" --region us-east-2
  ```
+ Amazon ECS は、コンテナ定義で指定された GPU リソース要件が適用されるコンテナごとに、コンテナランタイムとして NVIDIA のコンテナランタイムが使用されるように設定します。
+ NVIDIA コンテナランタイムが適切に機能するためには、コンテナにいくつかの環境変数を設定する必要があります。これらの環境変数のリストについては、「[Docker を使用した特殊設定](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/docker-specialized.html?highlight=environment%20variable)」を参照してください。Amazon ECS は、`NVIDIA_VISIBLE_DEVICES`環境変数の値を Amazon ECS がコンテナに割り当てる GPU デバイス ID のリストに設定します。Amazon ECS は、これら以外の必須環境変数の設定は行いません。そのため、これらの必須変数がコンテナイメージで設定されていること、あるいはコンテナ定義内で設定されていることを確認する必要があります。
+ p5 インスタンスタイプファミリーは、バージョン `20230929` 以降の Amazon ECS GPU 最適化 AMI でサポートされています。
+ g4 インスタンスタイプファミリーは、バージョン `20230913` 以降の Amazon ECS GPU 最適化 AMI でサポートされています。詳細については、「[Amazon ECS に最適化された Linux AMI](ecs-optimized_AMI.md)」を参照してください。Amazon ECS コンソールのクラスター作成ワークフローではサポートされていません。これらのインスタンスタイプを使用するには、Amazon EC2 コンソール、AWS CLI、または API を使用して、手動でインスタンスをクラスターに登録する必要があります。
+ p4d.24xlarge インスタンスタイプは、CUDA 11 以降でのみ動作します。
+ Amazon ECS GPU 最適化 AMI は IPv6 が有効になっているため、`yum` を使用するとき問題が生じます。これは、以下のコマンドで IPv4 を使用するように `yum` を構成することで解決できます。

  ```
  echo "ip_resolve=4" >> /etc/yum.conf
  ```
+  NVIDIA/CUDA ベースのイメージを使用しないコンテナイメージをビルドする場合は、`NVIDIA_DRIVER_CAPABILITIES` コンテナランタイム変数に以下のいずれかの値を設定します。
  + `utility,compute`
  + `all`

  変数の設定方法については、NVIDIA の Web サイトの「[NVIDIA コンテナランタイムの制御](https://sarus.readthedocs.io/en/stable/user/custom-cuda-images.html#controlling-the-nvidia-container-runtime)」を参照してください。
+ Windows コンテナでは、GPU はサポートされません。

# Amazon ECS 向け GPU コンテナインスタンスの起動
<a name="gpu-launch"></a>

Amazon EC2 上で Amazon ECS の GPU インスタンスを使用するには、起動テンプレートとユーザーデータファイルを作成し、インスタンスを起動する必要があります。

これにより、GPU 用に設定されたタスク定義を使用するタスクを実行できます。

## 起動テンプレートを使用する
<a name="gpu-launch-template"></a>

起動テンプレートを作成します。
+ Amazon ECS に最適化された AMI 用の GPU AMI ID を使用する起動テンプレートを作成してください。起動テンプレートの作成方法について、詳しくは「*Amazon EC2 ユーザーガイド*」の「[Create a new launch template using parameters you define](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#create-launch-template-define-parameters)」を参照してください。

  **[Amazon マシンイメージ]** には、前のステップの AMI ID を使用します。Systems Manager パラメータで AMI ID を指定する方法については、「*Amazon EC2 ユーザーガイド*」の「[Specify a Systems Manager parameter in a launch template](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/create-launch-template.html#use-an-ssm-parameter-instead-of-an-ami-id)」を参照してください。

  起動テンプレートの **[ユーザーデータ]** に以下を追加します。*cluster-name* をクラスターの名前に置き換えます。

  ```
  #!/bin/bash
  echo ECS_CLUSTER=cluster-name >> /etc/ecs/ecs.config;
  echo ECS_ENABLE_GPU_SUPPORT=true >> /etc/ecs/ecs.config
  ```

## AWS CLI の使用
<a name="gpu-launch-cli"></a>

AWS CLI を使用して、コンテナインスタンスを起動できます。

1. `userdata.toml` というファイルを作成します。このファイルは、インスタンスのユーザーデータに使用されます。*cluster-name* をクラスターの名前に置き換えます。

   ```
   #!/bin/bash
   echo ECS_CLUSTER=cluster-name >> /etc/ecs/ecs.config;
   echo ECS_ENABLE_GPU_SUPPORT=true >> /etc/ecs/ecs.config
   ```

1. 次のコマンドを実行して、GPU AMI ID を取得します。これは次のステップで使用します。

   ```
   aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended --region us-east-1
   ```

1. 次のコマンドを実行して、GPU インスタンスを起動します。次のパラメータを必ず置き換えてください。
   + *subnet* を、インスタンスを起動するプライベートまたはパブリックサブネットの ID に置き換えます。
   + *gpu\$1ami* を、前のステップの AMI ID に置き換えます。
   + *t3.large* を、使用するインスタンスタイプに置き換えます。
   + *region* を、リージョンコードに置き換えます。

   ```
   aws ec2 run-instances --key-name ecs-gpu-example \
      --subnet-id subnet \
      --image-id gpu_ami \
      --instance-type t3.large \
      --region region \
      --tag-specifications 'ResourceType=instance,Tags=[{Key=GPU,Value=example}]' \
      --user-data file://userdata.toml \
      --iam-instance-profile Name=ecsInstanceRole
   ```

1. 次のコマンドを実行して、コンテナインスタンスがクラスターに登録されていることを検証します。このコマンドを実行するときは、次のパラメータを必ず置き換えてください。
   + *cluster* を、自分のクラスター名に置き換えます。
   + *region* を、リージョンコードに置き換えます。

   ```
   aws ecs list-container-instances --cluster cluster-name --region region
   ```

# Amazon ECS タスク定義での GPU の指定
<a name="ecs-gpu-specifying"></a>

コンテナインスタンス上の GPU と Docker GPU ランタイムを利用するには、コンテナに必要な GPU の数をタスク定義内で必ず指定します。GPU をサポートするコンテナが配置されると、Amazon ECS コンテナエージェントは必要な数の物理 GPU を適切なコンテナに固定します。タスク内でコンテナ用に予約されている、すべての GPU の数は、タスクが起動されたコンテナインスタンスで使用できる GPU の数を超えることはできません。詳細については、「[コンソールを使用した Amazon ECS タスク定義の作成](create-task-definition.md)」を参照してください。

**重要**  
GPU 要件をタスク定義で指定していない場合、タスクではデフォルトの Docker ランタイムが使用されます。

タスク定義での GPU 要件の JSON 形式は以下のとおりです。

```
{
  "containerDefinitions": [
     {
        ...
        "resourceRequirements" : [
            {
               "type" : "GPU", 
               "value" : "2"
            }
        ],
     },
...
}
```

以下の例では、GPU 要件を指定する Docker コンテナの構文を示しています。このコンテナは 2 つの GPU を使用しており、`nvidia-smi` ユーティリティを実行した後に終了します。

```
{
  "containerDefinitions": [
    {
      "memory": 80,
      "essential": true,
      "name": "gpu",
      "image": "nvidia/cuda:11.0.3-base",
      "resourceRequirements": [
         {
           "type":"GPU",
           "value": "2"
         }
      ],
      "command": [
        "sh",
        "-c",
        "nvidia-smi"
      ],
      "cpu": 100
    }
  ],
  "family": "example-ecs-gpu"
}
```

次のタスク定義の例は、使用可能な GPU 数を出力する TensorFlow コンテナを示しています。タスクは Amazon ECS マネージドインスタンスで実行され、1 つの GPU が必要で、`g4dn.xlarge` インスタンスを使用します。

```
{
  "family": "tensorflow-gpu",
  "networkMode": "awsvpc",
  "executionRoleArn": "arn:aws:iam::account-id:role/ecsTaskExecutionRole",
  "containerDefinitions": [
    {
      "name": "tensorflow",
      "image": "tensorflow/tensorflow:latest-gpu",
      "essential": true,
      "command": [
        "python",
        "-c",
        "import tensorflow as tf; print('Num GPUs Available: ', len(tf.config.list_physical_devices('GPU')))"
      ],
      "resourceRequirements": [
        {
          "type": "GPU",
          "value": "1"
        }
      ],
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/tensorflow-gpu",
          "awslogs-region": "region",
          "awslogs-stream-prefix": "ecs"
        }
      }
    }
  ],
  "requiresCompatibilities": [
    "MANAGED_INSTANCES"
  ],
  "cpu": "4096",
  "memory": "8192",
}
```

## GPU の共有
<a name="share-gpu"></a>

GPU を共有する場合は、以下を設定する必要があります。

1. タスク定義から GPU リソース要件を削除して、Amazon ECS が共有する必要がある GPU を予約しないようにします。

1. GPU を共有する場合は、次のユーザーデータをインスタンスに追加します。これにより、NVIDIA がコンテナインスタンスのデフォルトの Docker コンテナランタイムになり、すべての Amazon ECS コンテナが GPU を使用できるようになります。詳細については、「*Amazon EC2 ユーザーガイド*」の「[ユーザーデータ入力を使用して EC2 インスタンスを起動するときにコマンドを実行する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html)」を参照してください。

   ```
   const userData = ec2.UserData.forLinux();
    userData.addCommands(
    'sudo rm /etc/sysconfig/docker',
    'echo DAEMON_MAXFILES=1048576 | sudo tee -a /etc/sysconfig/docker',
    'echo OPTIONS="--default-ulimit nofile=32768:65536 --default-runtime nvidia" | sudo tee -a /etc/sysconfig/docker',
    'echo DAEMON_PIDFILE_TIMEOUT=10 | sudo tee -a /etc/sysconfig/docker',
    'sudo systemctl restart docker',
   );
   ```

1. コンテナに `NVIDIA_VISIBLE_DEVICES` 環境変数を設定します。これを行うには、タスク定義内で環境変数を設定します。有効な値の詳細については、NVIDIA ドキュメントサイトの「[GPU 列挙](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/docker-specialized.html#gpu-enumeration)」を参照してください。

## P2 インスタンスが必要な場合の対処方法
<a name="p2-instance"></a>

P2 インスタンスを使用する必要がある場合、次のいずれかのオプションを使用してインスタンスを使用し続けることができます。

どちらのオプションでも、インスタンスユーザーデータを変更する必要があります。詳細については、「*Amazon EC2 ユーザーガイド*」の「[ユーザーデータ入力を使用して EC2 インスタンスを起動するときにコマンドを実行する](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/user-data.html)」を参照してください。

**サポートされている最新の GPU 最適化 AMI を使用する**

GPU に最適化された AMI の `20230906` バージョンを使用して、インスタンスのユーザーデータに以下を追加できます。

cluster-name をクラスターの名前に置き換えます。

```
#!/bin/bash
echo "exclude=*nvidia* *cuda*" >> /etc/yum.conf
echo "ECS_CLUSTER=cluster-name" >> /etc/ecs/ecs.config
```

**GPU に最適化された最新の AMI を使用し、ユーザーデータを更新する**

以下をインスタンスのユーザーデータに追加します。これにより Nvidia 535/Cuda12.2 ドライバーがアンインストールされ、次に Nvidia 470/Cuda11.4 ドライバーがインストールされ、バージョンが修正されます。

```
#!/bin/bash
yum remove -y cuda-toolkit* nvidia-driver-latest-dkms*
tmpfile=$(mktemp)
cat >$tmpfile <<EOF
[amzn2-nvidia]
name=Amazon Linux 2 Nvidia repository
mirrorlist=\$awsproto://\$amazonlinux.\$awsregion.\$awsdomain/\$releasever/amzn2-nvidia/latest/\$basearch/mirror.list
priority=20
gpgcheck=1
gpgkey=https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/7fa2af80.pub
enabled=1
exclude=libglvnd-*
EOF

mv $tmpfile /etc/yum.repos.d/amzn2-nvidia-tmp.repo
yum install -y system-release-nvidia cuda-toolkit-11-4 nvidia-driver-latest-dkms-470.182.03
yum install -y libnvidia-container-1.4.0 libnvidia-container-tools-1.4.0 nvidia-container-runtime-hook-1.4.0 docker-runtime-nvidia-1

echo "exclude=*nvidia* *cuda*" >> /etc/yum.conf
nvidia-smi
```

**P2 と互換性のある GPU に最適化された独自の AMI を作成する**

P2 インスタンスと互換性のある独自の Amazon ECS GPU 最適化 AMI を作成し、その AMI を使用して P2 インスタンスを起動できます。

1. 次のコマンドを実行して `amazon-ecs-ami repo` をクローンします。

   ```
   git clone https://github.com/aws/amazon-ecs-ami
   ```

1. 必要な Amazon ECS エージェントとソースの Amazon Linux AMI バージョンを `release.auto.pkrvars.hcl` または `overrides.auto.pkrvars.hcl` に設定します。

1. P2 と互換性のあるプライベート EC2 AMI を構築するには、次のコマンドを実行します。

   リージョンをインスタンスリージョンがあるリージョンに置き換えます。

   ```
   REGION=region make al2keplergpu
   ```

1. 以下のインスタンスユーザーデータを含む AMI を使用して Amazon ECS クラスターに接続します。

   cluster-name をクラスターの名前に置き換えます。

   ```
   #!/bin/bash
   echo "ECS_CLUSTER=cluster-name" >> /etc/ecs/ecs.config
   ```