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.
Partagez des GPU sur Amazon ECS
De nombreuses charges de travail GPU, telles que l'inférence et la diffusion de petits modèles, n'utilisent qu'une fraction du calcul et de la mémoire d'un GPU. Sans partage, le reste de cette capacité reste inactif. Avec Amazon ECS, vous pouvez partager un seul document physique NVIDIA GPU sur plusieurs conteneurs, ce qui vous permet de regrouper davantage de charges de travail sur le même matériel et de réduire le gaspillage de GPU.
Avec Amazon ECS, vous pouvez utiliser NVIDIA Multi-Process Service (MPS) pour le partage de GPU. MPS est un NVIDIA CUDA fonctionnalité qui exécute plusieurs processus simultanément sur le même GPU, ce qui améliore l'utilisation du GPU et réduit les frais liés au changement de contexte. MPS fournit un partitionnement de la mémoire et du calcul, de sorte que chaque conteneur bénéficie d'une limite de mémoire configurable et d'un plafond de calcul optionnel.
Amazon ECS gère MPS pour toi. Il démarre le MPS démon sur les instances GPU, place les conteneurs sur les GPU en fonction de la mémoire disponible et applique des limites par conteneur.
MPS fournit un partage au niveau logiciel plutôt qu'un partitionnement au niveau matériel. Pour plus d'informations sur MPS, voir Multi-Process Service
Amazon ECS prend en charge le partage de GPU avec MPS sur les instances gérées Amazon ECS et Amazon ECS sur Amazon EC2.
Quand utiliser le partage GPU
Partage de GPU avec MPS convient parfaitement pour :
-
Charges de travail d'inférence, génération d'intégration et serveurs de petits modèles qui n'utilisent pas pleinement un GPU
-
Multi-model serveur où plusieurs modèles peuvent partager un seul GPU
-
les environnements de développement et de test,
-
Exécution de plusieurs charges de travail GPU légères sur le même matériel pour réduire les coûts
Le partage de GPU n'est pas recommandé pour :
-
Entraînement sur grands modèles nécessitant toute la mémoire du GPU
-
Charges de travail sensibles aux défaillances du processeur graphique provenant de conteneurs voisins, car MPS est un partage au niveau logiciel et tous les conteneurs d'un GPU partagent la même chose CUDA contexte
-
Charges de travail nécessitant une isolation matérielle entre les processus
Comment fonctionne le partage de GPU
Vous configurez le partage GPU dans la définition du conteneur d'une définition de tâche. Dans chaque contenant resourceRequirements, vous fournissez un sharingStrategy avec une valeur de mémoire GPU au lieu de spécifier un entier dans value pour un GPU dédié.
Lorsqu'Amazon ECS place une tâche qui utilise le partage GPU, il additionne la mémoire GPU demandée par tous les conteneurs GPU de la tâche et recherche un GPU disposant de suffisamment de mémoire libre. Tous les conteneurs GPU d'une même tâche sont placés sur le même GPU physique. Si la tâche demande 4 000 Mo sur deux conteneurs, Amazon ECS trouve un seul GPU avec au moins 4 000 Mo de mémoire restante et y place les deux conteneurs.
Plusieurs tâches peuvent également partager le même GPU physique. Tant qu'il reste suffisamment de mémoire sur un GPU, Amazon ECS peut lui confier des tâches supplémentaires, même si ces tâches proviennent de différents services. Une tâche qui partage un GPU et une tâche qui utilise un GPU dédié peuvent être exécutées sur la même instance, sur des GPU différents.
Sur les instances gérées Amazon ECS, Amazon ECS surveille l'état des GPU et MPS démon sur chaque instance. Si Amazon ECS détecte une défaillance matérielle du processeur graphique ou MPS en cas de défaillance du démon, il vide l'instance et la remplace. Pour plus d'informations sur la réparation automatique des GPU, consultez Réparation automatique du processeur graphique pour les instances gérées par Amazon ECS.
Configurer le partage du GPU
Pour partager un GPU, ajoutez sharingStrategy s'opposer à resourceRequirements de chaque conteneur GPU dans votre définition de tâche. Le sharingStrategy l'objet contient un nvidiaMps objet avec les champs suivants. Pour plus d’informations sur resourceRequirements, consultez Besoins en ressources.
memory-
Obligatoire : oui
Limite de mémoire GPU pour le conteneur, en MiB. Cette valeur représente un plafond strict de la mémoire GPU que le conteneur peut utiliser. La valeur doit être supérieure à
0.Pour connaître la mémoire GPU totale disponible sur une instance, utilisez le
DescribeContainerInstancesAPI (latotalMemoryInMiBchamp) ou vérifiez les spécifications du GPU pour votre type d'instance. maxComputePercent-
Obligatoire : non
Le pourcentage maximum de calcul GPU que le conteneur peut utiliser, sous la forme d'un entier de
1pour100. Cela limite l'utilisation du processeur graphique du conteneur, et non une réservation. Lorsqu'un conteneur est inactif, son calcul inutilisé est disponible pour d'autres conteneurs sur le même GPU, chacun d'entre eux pouvant utiliser le sienmaxComputePercentvaleurs. Si vous ne spécifiez pas ce paramètre, le conteneur peut utiliser jusqu'à100pour cent.
Amazon ECS place les tâches uniquement en fonction de la mémoire du GPU, de sorte qu'il ne prend pas en compte le calcul lors de la prise de décisions de placement.
Vous pouvez définir la stratégie de partage dans l'éditeur de définition des tâches de la console Amazon ECS, ou avec JSON, AWS CLI, ou l'API.
Amazon ECS définit les variables d'environnement réservées suivantes dans chaque conteneur qui partage un GPU. Ne définissez pas ces variables dans la définition de votre conteneur.
-
CUDA_MPS_PINNED_DEVICE_MEM_LIMITpour la limite de mémoire -
CUDA_MPS_ACTIVE_THREAD_PERCENTAGEpour le plafond de calcul
L'exemple de définition de tâche suivant exécute deux conteneurs d'inférence qui partagent un GPU avec MPS, ainsi qu'un conteneur sidecar non GPU. Chaque conteneur GPU demande une quantité différente de mémoire GPU et de calcul.
Dans l'exemple suivant, remplacez account-id avec votre AWS ID de compte.
{ "family": "mps-inference", "networkMode": "awsvpc", "executionRoleArn": "arn:aws:iam::account-id:role/ecsTaskExecutionRole", "containerDefinitions": [ { "name": "model-a", "image": "nvidia/cuda:12.0.0-base-ubuntu22.04", "essential": true, "resourceRequirements": [ { "type": "GPU", "sharingStrategy": { "nvidiaMps": { "memory": 12288, "maxComputePercent": 50 } } } ] }, { "name": "model-b", "image": "nvidia/cuda:12.0.0-base-ubuntu22.04", "essential": true, "resourceRequirements": [ { "type": "GPU", "sharingStrategy": { "nvidiaMps": { "memory": 8192, "maxComputePercent": 25 } } } ] }, { "name": "log-router", "image": "public.ecr.aws/aws-observability/aws-for-fluent-bit:stable", "essential": false } ], "requiresCompatibilities": [ "MANAGED_INSTANCES" ], "cpu": "4096", "memory": "8192" }
Règles de validation
Amazon ECS applique les règles suivantes aux configurations de partage de GPU :
-
Un besoin en ressources GPU utilise soit
value(un GPU dédié) ousharingStrategy(un GPU partagé), mais pas les deux. Lorsque vous spécifiezsharingStrategy, vous devez omettrevalue. -
Tous les conteneurs GPU d'une tâche doivent utiliser la même stratégie de partage. Si un contenant utilise
sharingStrategy, aucun autre conteneur de cette tâche ne peut demander un GPU dédié avecvalue. -
Le
memoryla valeur est requise et doit être supérieure à0. -
La valeur
maxComputePercentest facultative. Si vous le spécifiez, la valeur doit être un entier compris entre1pour100. -
Pour les instances gérées Amazon ECS, la tâche
requiresCompatibilitiesdoit inclureMANAGED_INSTANCES. Pour Amazon ECS sur Amazon EC2, utilisezEC2type de lancement. -
Le partage GPU n'est pas pris en charge pour les définitions de tâches qui nécessitent
EXTERNALcompatibilité (Amazon ECS Anywhere). -
Vous ne pouvez pas spécifier
sharingStrategydans une dérogation de conteneur. Dérogations de conteneurs dans leRunTasketStartTaskles requêtes ne prennent pas en charge la configuration de partage du GPU, alors définissezsharingStrategydans la définition de la tâche à la place. Les services exécutent la définition de tâche telle qu'elle est enregistrée et ne sont pas affectés.
Configurer le partage GPU par type de lancement
Avec Amazon ECS Managed Instances, Amazon ECS sélectionne et gère les instances GPU pour vous. Vous n'avez besoin d'aucune configuration au-delà de la définition de la tâche.
Avec Amazon ECS sur Amazon EC2, lancez un NVIDIA Instance GPU avec Amazon ECS AL2023 GPU-optimized AMI. Partage de GPU avec MPS sur Amazon ECS sur Amazon EC2 nécessite la version agent de conteneur Amazon ECS 1.107.0 ou version ultérieure et Amazon ECS AL2023 GPU-optimized Version AMI 20261019 ou plus tard. Une fois l'instance enregistrée auprès de votre cluster, la configuration de définition des tâches est la même que pour les instances gérées Amazon ECS.
Considérations
-
Partage de GPU avec MPS est compatible avec les modèles G4dn, G5, G6, G6e, G7, G7e, P3, P4d, P5, P5e, P5en et P6-B200 familles d'instances. Le partage de GPU n'est pas pris en charge sur AWS Fargate, Amazon ECS Express Mode ou tâches de démon gérées par Amazon ECS.
-
Partage de GPU avec MPS sur Amazon ECS sur Amazon EC2 nécessite la version agent de conteneur Amazon ECS
1.107.0ou version ultérieure et Amazon ECS AL2023 GPU-optimized Version AMI20261019ou plus tard. -
Exécutez un seul processus GPU par conteneur lorsque vous utilisez NVIDIA MPS pour le partage de GPU. Pour les applications qui nécessitent plusieurs processus GPU, configurez la mémoire GPU requise en fonction de l'utilisation maximale combinée de la mémoire de tous les processus. Utilisez les contrôles au niveau de l'application pour maintenir la consommation totale dans les limites de la valeur configurée. Amazon ECS utilise cette valeur pour déterminer l'emplacement des conteneurs sur les GPU partagés. Par conséquent, les applications multiprocessus peuvent consommer plus de mémoire GPU que ce qui est configuré, ce qui peut entraîner des problèmes de mémoire.
-
Si un conteneur déclenche une erreur GPU fatale, telle qu'un accès illégal à la mémoire depuis un noyau GPU défectueux, les conteneurs partageant ce GPU physique peuvent être affectés. Les conteneurs des autres GPU de la même instance ne sont pas affectés.
-
Le
maxComputePercentLa valeur est un plafond et non une réservation garantie. Lorsqu'un conteneur est inactif, son calcul inutilisé est disponible pour d'autres conteneurs sur le même GPU, chacun d'entre eux pouvant utiliser le sienmaxComputePercentvaleurs. -
Le partage GPU n'est pas pris en charge pour les définitions de tâches qui nécessitent
EXTERNALcompatibilité (Amazon ECS Anywhere). -
Les tâches provenant de différents services utilisant le même fournisseur de capacité peuvent être placées sur le même GPU. Pour empêcher les tâches de différents services de partager un GPU, utilisez des fournisseurs de capacité distincts ou des clusters distincts pour ces services.
-
Pour les GPU partagés avec MPS, Amazon ECS n'émet pas les métriques GPU suivantes par tâche et par conteneur :
Le
TaskGPUUtilizationetContainerGPUUtilizationmétriques.Le
TaskGPUMemoryUtilizationetContainerGPUMemoryUtilizationmétriques.Le
TaskGPUMemoryTotaletContainerGPUMemoryTotalmétriques.Le
TaskGPUMemoryUsedetContainerGPUMemoryUsedmétriques.
-
Les métriques GPU par tâche et par conteneur suivantes restent disponibles pour les GPU partagés avec MPS:
Le
TaskGPUPowerDrawetContainerGPUPowerDrawmétriques.Le
TaskGPUTemperatureetContainerGPUTemperaturemétriques.Le
TaskGPURestartAppXidCountetContainerGPURestartAppXidCountmétriques.
-
Instance-level Les métriques du GPU restent disponibles, notamment
InstanceGPUUsageTotaletInstanceGPULimit.
Surveillez le partage du GPU
Vous pouvez confirmer qu'un GPU est partagé et suivre son utilisation à l'aide de l'API Amazon ECS et d'Amazon CloudWatch métriques.
Confirmez qu'un GPU est partagé
Pour confirmer qu'un GPU est partagé, appelez le DescribeContainerInstances API. La réponse inclut gpuDevices champ avec le mode de partage, le nombre de conteneurs et la mémoire restante pour chaque GPU. Voici un exemple de réponse.
{ "containerInstances": [ { "ec2InstanceId": "i-0c74b75400ab4228d", "runningTasksCount": 1, "gpuDevices": [ { "gpuId": "GPU-70d3bdaf-8635-81e0-8e44-446248a92c83", "sharingMode": "NVIDIA_MPS", "totalMemoryInMiB": 22587, "remainingMemoryInMiB": 16587, "containerCount": 2 } ] } ] }
Afficher la configuration par tâche
Pour afficher la configuration de partage pour chaque tâche, appelez le DescribeTasks API. Chaque contenant gpuSharingStrategy affiche ses limites de mémoire et de calcul, et les conteneurs qui partagent un GPU répertorient la même valeur dans gpuIds. Voici un exemple de réponse.
{ "tasks": [ { "lastStatus": "RUNNING", "launchType": "MANAGED_INSTANCES", "containers": [ { "name": "mps-a", "gpuIds": ["GPU-70d3bdaf-8635-81e0-8e44-446248a92c83"], "gpuSharingStrategy": { "nvidiaMps": { "memory": 4000, "maxComputePercent": 50 } } }, { "name": "mps-b", "gpuIds": ["GPU-70d3bdaf-8635-81e0-8e44-446248a92c83"], "gpuSharingStrategy": { "nvidiaMps": { "memory": 2000, "maxComputePercent": 50 } } } ] } ] }
Suivez l'utilisation du GPU
-
Densité de tâches plus élevée: avec le partage de GPU, davantage de tâches sont exécutées sur la même instance. Utilisez le
RunningTaskCountmétrique permettant de comparer le nombre de tâches par service avant et après l'activation du partage. Pour la densité de tâches par instance, utilisez leinstance_number_of_running_tasksmétrique, qui CloudWatch Container Insights collecte pour chaque instance EC2 lorsque vous déployez CloudWatch agent pour collecter des métriques au niveau de l'instance EC2. -
Moins de GPU pour une charge de travail identique: Les
InstanceGPUUsageTotalmétrique en CloudWatch Container Insights indique le nombre de GPU physiques utilisés. Avec MPS, la même charge de travail utilise moins de GPU. -
Hauteur du processeur graphique de l'instance: Comparez
InstanceGPUUsageTotalavecInstanceGPULimitpour voir le niveau de remplissage d'une instance. Avec MPS, davantage de tâches peuvent être effectuées avant qu'une instance ne soit à court de GPU.