Amazon ECS での GPU の使用 - Amazon Elastic Container Service

Amazon ECS での GPU の使用

Amazon ECS は、GPU 対応コンテナインスタンスを使用してクラスターを作成できるようにすることで、GPU を利用するワークロードをサポートしています。p2、p3、g3、g4 インスタンスタイプを使用する Amazon EC2 GPU ベースのコンテナインスタンスにより、NVIDIA GPU にアクセスできます。詳細については、Linux インスタンス用 Amazon EC2 ユーザーガイド の「Linux 高速コンピューティングインスタンス」を参照してください。

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

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

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

重要

g4 インスタンスタイプファミリーは、バージョン 20190913 以降の Amazon ECS GPU 最適化 AMI でサポートされています。詳細については、「Linux Amazon ECS 最適化 AMI バージョン」を参照してください。現在、Amazon ECS コンソールの [クラスターの作成] ワークフローではサポートされていません。これらのインスタンスタイプを使用するには、Amazon EC2 コンソール、AWS CLI、または API を使用して、手動でインスタンスをクラスターに登録する必要があります。

インスタンスタイプ

GPU

GPU メモリ (GiB)

vCPU

メモリ (GiB)

p2.xlarge

1

12

4

61

p2.8xlarge

8

96

32

488

p2.16xlarge

16

192

64

732

p3.2xlarge

1

16

8

61

p3.8xlarge

4

64

32

244

p3.16xlarge

8

128

64

488

p3dn.24xlarge

8

256

96

768

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

考慮事項

Amazon ECS で GPU を使用し始める前に、以下の考慮事項に注意してください。

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

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

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

    aws ecs run-task --cluster default --task-definition ecs-gpu-task-def \ --placement-constraints type=memberOf,expression="attribute:ecs.instance-type == p2.xlarge" --region us-east-2
  • Amazon ECS は、コンテナ定義で指定された GPU リソース要件を持つコンテナごとに、コンテナランタイムを NVIDIA コンテナランタイムに設定します。

  • NVIDIA コンテナランタイムが機能するためには、コンテナにいくつかの環境変数を設定する必要があります。これらの環境変数のリストについては、nvidia-container-runtime を参照してください。Amazon ECS は、NVIDIA_VISIBLE_DEVICES 環境変数の値を、Amazon ECS がコンテナに割り当てる GPU デバイス ID のリストに設定します。その他の必須環境変数については、Amazon ECS は設定しません。コンテナイメージでそれらが設定されていることを確認するか、コンテナ定義で設定する必要があります。

タスク定義での GPU の指定

コンテナインスタンス上の GPU と Docker GPU ランタイムを利用するには、タスク定義でコンテナに必要な GPU の数を必ず指定してください。GPU 対応コンテナが配置されると、Amazon ECS コンテナエージェントは必要な数の物理 GPU を適切なコンテナに固定します。タスク内のすべてのコンテナ用に予約されている GPU の数は、タスクが起動されたコンテナインスタンスで使用できる GPU の数を超えないようにしてください。詳細については、「タスク定義の作成」を参照してください。

重要

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:9.0-base", "resourceRequirements": [ { "type":"GPU", "value": "2" } ], "command": [ "sh", "-c", "nvidia-smi" ], "cpu": 100 } ], "family": "example-ecs-gpu" }