GPU ワークロード向けの Amazon ECS タスク定義 - Amazon Elastic Container Service

GPU ワークロード向けの Amazon ECS タスク定義

GPU 対応コンテナインスタンスを使用してクラスターを作成することで、GPU を使用するワークロードが Amazon ECS でサポートされます。p2、p3、p5、g3、g4、g5 のインスタンスタイプを使用する、Amazon EC2 GPU ベースのコンテナインスタンスでは、NVIDIA GPU へのアクセスが可能です。詳細については、「Amazon EC2 ユーザーガイド」の「Linux Accelerated Computing Instances」を参照してください。

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

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

以下の Amazon EC2 GPU ベースのインスタンスタイプがサポートされています。詳細については、「Amazon EC2 P2 インスタンス」、「Amazon EC2 P3 インスタンス」、「Amazon EC2 P4d インスタンス」、「Amazon EC2 P5 インスタンス」、「Amazon EC2 G3 インスタンス」、「Amazon EC2 G4 インスタンス」、「Amazon EC2 G5 インスタンス」、「Amazon EC2 G6 インスタンス」を参照してください。

インスタンスタイプ

GPU

GPU メモリ (GiB)

vCPUs

メモリ (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 48 192
g6.48xlarge 8 192 192 768
g6.metal 8 192 192 768
gr6.4xlarge 1 24 16 128
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 を参照してください。使用するユーザーには、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

考慮事項

注記

g2 インスタンスファミリータイプのサポートは廃止されました。

p2 インスタンスファミリータイプは、バージョン 20230912 より前の Amazon ECS GPU 最適化 AMI でのみサポートされています。引き続き p2 インスタンスを使用する必要がある場合は、P2 インスタンスが必要な場合の対処方法 を参照してください。

これら両方のインスタンスファミリータイプで NVIDIA/CUDA ドライバーをインプレース更新すると、GPU ワークロードに障害が発生する可能性があります。

Amazon ECS で GPU の使用を開始する前に、以下について検討することをお勧めします。

  • クラスターには、GPU 対応コンテナインスタンスと GPU 非対応コンテナインスタンスを混在させることができます。

  • GPU ワークロードは外部インスタンスでの実行が可能です。外部インスタンスをクラスターに登録するときは、--enable-gpu フラグがインストールスクリプトに含まれていることを確認してください。詳細については、「Amazon ECS クラスターに外部インスタンスを登録する」を参照してください。

  • エージェント設定ファイルで ECS_ENABLE_GPU_SUPPORTtrue に設定する必要があります。詳細については、「Amazon ECS コンテナエージェントの設定」を参照してください。

  • タスクの実行時またはサービスの作成時に、インスタンスタイプ属性を使用してタスク配置制約を設定することで、タスクが起動されるコンテナインスタンスを指定できます。これにより、リソースをより効果的に使用できます。詳細については、「Amazon ECS がタスクをコンテナインスタンスに配置する方法」を参照してください。

    以下の例では、デフォルトクラスター内の 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 を使用した特殊設定」を参照してください。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」を参照してください。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 コンテナランタイムの制御」を参照してください。

  • Windows コンテナでは、GPU はサポートされません。

P2 インスタンスが必要な場合の対処方法

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

どちらのオプションでも、インスタンスユーザーデータを変更する必要があります。詳細については、「Amazon EC2 ユーザーガイド」の「インスタンスユーザーデータの使用」を参照してください。

サポートされている最新の 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
  2. 必要な Amazon ECS エージェントとソースの Amazon Linux AMI バージョンを release.auto.pkrvars.hcl または overrides.auto.pkrvars.hcl に設定します。

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

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

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

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

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