本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon ECS 任務定義中指定 GPU
若要使用容器執行個體的 GPU 和 Docker GPU 執行時間,確保您在任務定義中指定容器所需的 GPU 數量。您可以指定整數值、分數 GPUs 的十進位值,或 ALL。當您指定 時ALL,容器執行個體上的所有 GPUs 都會配置給容器。當您指定十進位值,例如 時0.25,Amazon ECS 會將任務放置在提供請求 GPU 容量的小數 GPU 執行個體上。放置支援 GPU 的容器後,Amazon ECS 容器代理程式會將所需數量的實體 GPU 固定至適當的容器。為任務中所有容器保留的 GPU 數量不可超過任務啟動所在之容器執行個體上可用的 GPU 數量。如需詳細資訊,請參閱使用主控台建立 Amazon ECS 任務定義。
重要
如果未在任務定義中指定 GPU 要求,該任務會使用預設 Docker 執行時間。
下列顯示任務定義中 GPU 要求的 JSON 格式:
{ "containerDefinitions": [ { ... "resourceRequirements" : [ { "type" : "GPU", "value" : "2" } ], }, ... }
您也可以將 指定ALL為 值,而不是將容器執行個體上的所有 GPUs 配置給容器的數字。
以下範例會示範指定 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 受管執行個體上執行的任務,需要一個 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", }
指定分數 GPUs
Amazon ECS 支援使用 Amazon EC2 G6f 執行個體進行小數 GPU 排程。G6f 執行個體提供 NVIDIA L4 GPU 的硬體分割部分,其中每個執行個體都會公開具有專用 GPU 記憶體和運算的固定 GPU 配量 (1/8、1/4 或 1/2)。若要使用小數 GPU,請在容器定義的 中指定小數值resourceRequirements:
"resourceRequirements": [ { "type": "GPU", "value": "0.25" } ]
支援的分數及其對應的 G6f 執行個體類型為:
| GPU 值 | GPU 分數 | 記憶體 | 執行個體類型 |
|---|---|---|---|
0.125 |
1/8 GPU | 3 GB | g6f.large、g6f.xlarge |
0.25 |
1/4 GPU | 6 GB | g6f.2xlarge |
0.5 |
1/2 GPU | 12 GB | g6f.4xlarge、gr6f.4xlarge |
下列範例任務定義會在具有 1/4 GPU (6 GB GPU 記憶體) 的分數 NVIDIA L4 GPU 上執行輕量型推論容器:
{ "family": "fractional-gpu-inference", "networkMode": "awsvpc", "executionRoleArn": "arn:aws:iam::account-id:role/ecsTaskExecutionRole", "containerDefinitions": [ { "name": "inference", "image": "nvidia/cuda:12.0.0-base-ubuntu22.04", "essential": true, "command": ["nvidia-smi"], "resourceRequirements": [ { "type": "GPU", "value": "0.25" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/fractional-gpu-inference", "awslogs-region": "region", "awslogs-stream-prefix": "ecs" } } } ], "requiresCompatibilities": [ "MANAGED_INSTANCES" ], "cpu": "2048", "memory": "4096" }
分數 GPU 考量事項
-
每個任務只有一個容器可以請求小數 GPU 值。如果容器指定小數 GPU,則該任務定義中沒有其他容器可以有 GPU 資源需求。
-
整數值 (
1、 等) 視為完整的 GPU 請求2,且僅放置在具有完整 GPU 容量的執行個體上。小數值 (0.125、0.25、0.5) 視為小數 GPU 請求,並放置在具有對應小數 GPU 分割區的執行個體上。 -
您可以在相同的容量提供者中同時包含分數 GPU 執行個體 (G6f) 和完整 GPU 執行個體 (例如 g5 或 g6)。Amazon ECS 會根據宣告的 GPU 值,將任務路由至正確的執行個體類型。每個 GPU 系列不需要個別的容量提供者。
-
您可以將小數 GPU 排程與 Amazon ECS 受管執行個體和 Amazon EC2 上的 Amazon ECS 搭配使用。Fargate 和 Amazon ECS Anywhere 不支援小數 GPU 排程。
-
對於完整的 GPU 工作負載,請如之前一樣繼續使用整數值:
"value": "1"。