Amazon Elastic Container Service
開発者ガイド (API バージョン 2014-11-13)

Amazon ECS での GPU の使用

Amazon ECS は、GPU 対応コンテナインスタンスを使用してクラスターを作成できるようにすることで、GPU を利用するワークロードをサポートしています。p2 および p3 インスタンスタイプを使用する 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 でサポートされています。詳細については、「Amazon ECS GPU-optimized 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

GPU の使用に関する考慮事項

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
  • Docker CLI でコンテナを実行するときに、--runtime パラメータを使用して NVIDIA ランタイムを指定できます。例:

    docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi

タスク定義での 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" }