View a markdown version of this page

Spécification des GPU dans une définition de tâche Amazon ECS - Amazon Elastic Container Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Spécification des GPU dans une définition de tâche Amazon ECS

Pour utiliser plusieurs GPU sur une instance de conteneur et l'exécution du GPU de Docker, assurez-vous de désigner le nombre de GPU nécessaires à votre conteneur dans la définition de tâche. Vous pouvez spécifier une valeur entière, une valeur décimale pour les GPU fractionnaires ou. ALL Lorsque vous spécifiezALL, tous les GPU de l'instance de conteneur sont alloués au conteneur. Lorsque vous spécifiez une valeur décimale telle que0.25, Amazon ECS place la tâche sur une instance GPU fractionnée qui fournit la capacité GPU requise. Une fois les conteneurs supportant les GPU placés, l'agent de conteneur Amazon ECS épinglera le nombre souhaité de GPU physiques au bon conteneur. Le nombre de GPU réservés pour tous les conteneurs dans une tâche ne peut pas dépasser le nombre de GPU disponibles sur l'instance de conteneur sur laquelle la tâche est lancée. Pour de plus amples informations, veuillez consulter Création d’une définition de tâche Amazon ECS à l’aide de la console.

Important

Si vos exigences en matière de GPU ne sont pas spécifiées dans la définition de tâche, la tâche utilise l'exécution par défaut du Docker.

L'exemple suivant illustre le format JSON pour les exigences de GPU dans une définition de tâche :

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

Vous pouvez également spécifier ALL comme valeur au lieu d'un nombre pour allouer tous les GPU de l'instance de conteneur au conteneur.

L'exemple suivant illustre la syntaxe d'un conteneur Docker qui spécifie une exigence GPU. Ce conteneur utilise 2 GPU, exécute l'utilitaire nvidia-smi, puis se ferme.

{ "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" }

L’exemple de définition de tâche suivant montre un conteneur TensorFlow qui affiche le nombre de GPU disponibles. La tâche s’exécute sur des instances gérées Amazon ECS, nécessite un GPU et utilise une instance 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", }

Spécification de GPU fractionnaires

Amazon ECS prend en charge la planification fractionnée des GPU avec les instances Amazon EC2 G6f. Les instances G6f fournissent des fractions partitionnées matériellement d'un NVIDIA L4 GPU, chaque instance exposant une tranche de GPU fixe (1/8 1/4, ou 1/2) avec une mémoire GPU et un calcul dédiés. Pour utiliser un GPU fractionnaire, spécifiez une valeur décimale dans la définition de resourceRequirements votre conteneur :

"resourceRequirements": [ { "type": "GPU", "value": "0.25" } ]

Les valeurs fractionnaires prises en charge et les types d'instances G6f correspondants sont les suivants :

Valeur du GPU Fraction GPU Mémoire GPU Types d’instances
0.125 1/8 GPU 3 Go g6f.large, g6f.xlarge
0.25 1/4 GPU 6 GO g6f.2xlarge
0.5 1/2 GPU 12 GO g 6 x 4 x grand, g 6 x 4 x grand

L'exemple de définition de tâche suivant exécute un conteneur d'inférence léger sur un GPU fractionnaire équipé 1/4 d'un NVIDIA L4 GPU (6 Go de mémoire 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" }
Considérations relatives au GPU fractionnel
  • Un seul conteneur par tâche peut demander une valeur GPU fractionnaire. Si un conteneur spécifie un GPU fractionnaire, aucun autre conteneur de cette définition de tâche ne peut avoir besoin de ressources GPU.

  • Les valeurs entières (1,2, etc.) sont traitées comme des requêtes GPU complètes et ne sont placées que sur des instances dotées d'une capacité GPU complète. Les valeurs décimales (0.1250.25,,0.5) sont traitées comme des requêtes GPU fractionnaires et placées sur des instances avec la partition GPU fractionnaire correspondante.

  • Vous pouvez inclure à la fois des instances GPU fractionnées (G6f) et des instances GPU complètes (telles que g5 ou g6) dans le même fournisseur de capacité. Amazon ECS achemine les tâches vers le type d'instance approprié en fonction de la valeur GPU déclarée. Vous n'avez pas besoin de fournisseurs de capacité distincts par famille de GPU.

  • Vous pouvez utiliser la planification fractionnée du GPU avec Amazon ECS Managed Instances et Amazon ECS sur Amazon EC2. Fargate et Amazon ECS Anywhere ne prennent pas en charge la planification fractionnée des GPU.

  • Pour les charges de travail GPU complètes, continuez à utiliser des valeurs entières comme précédemment :"value": "1".