Définitions de tâches Amazon ECS pour les charges de travail du GPU - 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.

Définitions de tâches Amazon ECS pour les charges de travail du GPU

Amazon ECS supporte les charges de travail utilisant des GPU lorsque vous créez des clusters avec des instances de conteneurs prenant en charge les GPU. Les instances de conteneur GPU Amazon EC2 utilisant les types d'instances p2, p3, p5, g3, g4 et g5 fournissent un accès aux GPU NVIDIA. Pour plus d'informations, consultez la section Instances de calcul accéléré Linux dans le guide de l'utilisateur Amazon EC2.

Amazon ECS fournit une AMI optimisée pour le GPU qui est fournie avec des pilotes de noyau NVIDIA préconfigurés et une exécution du GPU du Docker. Pour plus d’informations, consultez AMI Linux optimisées pour Amazon ECS.

Vous pouvez désigner plusieurs GPU dans votre définition de tâche pour le placement des tâches au niveau d'un conteneur. Amazon ECS planifie les instances de conteneurs disponibles qui prennent en charge les GPU et associe les GPU physiques aux conteneurs appropriés pour des performances optimales.

Les types d'instances GPU Amazon EC2 suivants sont pris en charge. Pour plus d'informations, consultez les instances Amazon EC2 P2, les instances Amazon EC2 P3, les instances Amazon EC2 P4d, les instancesAmazon EC2 P5, les instances Amazon EC2 G3, les instances Amazon EC2 G4,les instances Amazon EC2 G5 et les instancesAmazon EC2 G6.

Type d’instance

GPU

Mémoire GPU (Gio)

vCPU

Mémoire (Gio)

p3.2xlarge

1

16

8

61

p3.8xlarge

4

64

32

244

p3.16xlarge

8

128

64

488

p3dn.24xlarge

8

256

96

768

p4d.24xlarge

8 320 96 1 152
p5.48xlarge 8 640 192 2048

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

g5.xlarge

1

24

4

16

g5.2xlarge

1

24

8

32

g5.4xlarge

1

24

16

64

g5.8xlarge

1

24

32

128

g5.16xlarge

1

24

64

256

g5.12xlarge

4

96

48

192

g5.24xlarge

4

96

96

384

g5.48xlarge

8

192

192

768

g6.xlarge 1 24 4 16
g 6,2 x large 1 24 8 32
g 6,4 x large 1 24 16 64
g 6,8 x large 1 24 32 128
g6.16.x large 1 24 64 256
g 6,12 x large 4 96 48 192
g 6,24 x large 4 96 48 192
g 6,48 x large 8 192 192 768
g6.metal 8 192 192 768
gr6,4 x large 1 24 16 128
gr6,8 x large 1 24 32 256

Vous pouvez récupérer l'identifiant Amazon Machine Image (AMI) pour les AMI optimisées pour Amazon ECS en interrogeant l'API AWS Systems Manager Parameter Store. Grâce à ce paramètre, vous n'avez pas besoin de rechercher manuellement les ID d'AMI optimisées pour Amazon ECS. Pour plus d'informations sur l'API Systems Manager Parameter Store, consultez GetParameter. L'utilisateur que vous utilisez doit disposer de l'autorisation IAM ssm:GetParameter pour récupérer les métadonnées de l'AMI optimisée pour Amazon ECS.

aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/gpu/recommended --region us-east-1

Considérations

Note

La prise en charge du type de famille d'instances g2 est obsolète.

Le type de famille d'instances p2 n'est pris en charge que sur les versions antérieures à la version 20230912 des AMI optimisées pour le GPU Amazon ECS. Si vous devez continuer à utiliser des instances p2, veuillez consulter Que faire si vous avez besoin d'une instance P2.

Les mises à jour sur place des pilotes NVIDIA/CUDA sur ces deux types de familles d'instances peuvent entraîner des défaillances de la charge de travail du GPU.

Nous vous recommandons de prendre en compte ce qui suit avant de commencer à utiliser des GPU sur Amazon ECS.

  • Vos clusters peuvent contenir une combinaison d'instances de conteneur GPU et non GPU.

  • Vous pouvez exécuter des charges de travail GPU sur des instances externes. Lorsque vous enregistrez une instance externe auprès de votre cluster, assurez-vous que l'indicateur --enable-gpu est inclus dans le script d'installation. Pour plus d’informations, consultez Enregistrement d'une instance externe dans un cluster Amazon ECS.

  • Vous devez définir ECS_ENABLE_GPU_SUPPORT sur true dans votre fichier de configuration d'agent. Pour plus d’informations, consultez Configuration de l'agent de conteneur Amazon ECS.

  • Lorsque vous exécutez une tâche ou créez un service, vous pouvez utiliser des attributs de type d'instance lors de la configuration des contraintes de placement des tâches afin de déterminer sur quelles instances de conteneur la tâche est lancée. Ainsi, vous pouvez utiliser plus efficacement vos ressources. Pour plus d’informations, consultez Comment Amazon ECS place les tâches sur les instances de conteneur.

    L'exemple suivant lance une tâche sur une instance de conteneur g4dn.xlarge dans votre cluster par défaut.

    aws ecs run-task --cluster default --task-definition ecs-gpu-task-def \ --placement-constraints type=memberOf,expression="attribute:ecs.instance-type == g4dn.xlarge" --region us-east-2
  • Pour chaque conteneur dont les besoins en ressources GPU sont spécifiés dans la définition du conteneur, Amazon ECS définit l'exécution du conteneur comme étant celle du conteneur NVIDIA.

  • L'exécution du conteneur NVIDIA nécessite que certaines variables d'environnement soient définies dans le conteneur pour fonctionner correctement. Pour obtenir la liste de ces variables d'environnement, consultez Configurations spécialisées avec Docker. Amazon ECS définit la valeur de variable d'environnement NVIDIA_VISIBLE_DEVICES en tant que liste des ID de périphérique GPU assignés au conteneur par Amazon ECS. Pour les autres variables d'environnement requises, Amazon ECS ne les définit pas. Assurez-vous que votre image de conteneur les définit ou qu'elles sont définies dans la définition du conteneur.

  • La famille de types d'instances p5 est prise en charge sur la version 20230929 et les versions ultérieures des AMI optimisées pour le GPU Amazon ECS.

  • La famille de types d'instance g4 est prise en charge sur la version 20230913 et les versions ultérieures des AMI optimisées pour le GPU Amazon ECS. Pour plus d’informations, consultez AMI Linux optimisées pour Amazon ECS. Elle n'est pas prise en charge dans le flux de travail Create Cluster (Créer un cluster) dans la console Amazon ECS. Pour utiliser ces types d'instances, vous devez soit utiliser la console Amazon EC2 AWS CLI, soit l'API et enregistrer manuellement les instances dans votre cluster.

  • Le type d'instance p4d.24xlarge ne fonctionne qu'avec CUDA 11 ou version ultérieure.

  • L'AMI optimisée pour le GPU Amazon ECS a IPv6 activé, ce qui provoque des problèmes lors de l'utilisation de yum. Cela peut être résolu en configurant yum pour utiliser IPv4 avec la commande suivante :

    echo "ip_resolve=4" >> /etc/yum.conf
  • Lorsque vous créez une image de conteneur qui n'utilise pas les images de base NVIDIA/CUDA, vous devez définir la variable d'exécution de conteneur NVIDIA_DRIVER_CAPABILITIES sur l'une des valeurs suivantes :

    • utility,compute

    • all

    Pour savoir comment définir la variable, veuillez consulter Contrôle de l'exécution du conteneur NVIDIA sur le site Web de NVIDIA.

  • Les GPU ne sont pas pris en charge sur les conteneurs Windows.

Que faire si vous avez besoin d'une instance P2

Si vous avez besoin d'utiliser une instance P2, vous pouvez utiliser l'une des options suivantes pour continuer à utiliser ces instances.

Vous devez modifier les données utilisateur de l'instance pour les deux options. Pour plus d'informations, consultez la section Travailler avec les données utilisateur d'une instance dans le guide de l'utilisateur Amazon EC2.

Utiliser la dernière AMI optimisée pour le GPU prise en charge

Vous pouvez utiliser la version 20230906 de l'AMI optimisée pour le GPU et ajouter les éléments suivants aux données utilisateur de l'instance.

Remplacez cluster-name par le nom de votre cluster.

#!/bin/bash echo "exclude=*nvidia* *cuda*" >> /etc/yum.conf echo "ECS_CLUSTER=cluster-name" >> /etc/ecs/ecs.config

Utiliser la dernière AMI optimisée pour le GPU et mettre à jour les données utilisateur

Vous pouvez ajouter ce qui suit aux données utilisateur de l'instance. Cela désinstalle les pilotes Nvidia 535/Cuda12.2, puis installe les pilotes Nvidia 470/Cuda11.4 et corrige la version.

#!/bin/bash yum remove -y cuda-toolkit* nvidia-driver-latest-dkms* tmpfile=$(mktemp) cat >$tmpfile <<EOF [amzn2-nvidia] name=Amazon Linux 2 Nvidia repository mirrorlist=\$awsproto://\$amazonlinux.\$awsregion.\$awsdomain/\$releasever/amzn2-nvidia/latest/\$basearch/mirror.list priority=20 gpgcheck=1 gpgkey=https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/7fa2af80.pub enabled=1 exclude=libglvnd-* EOF mv $tmpfile /etc/yum.repos.d/amzn2-nvidia-tmp.repo yum install -y system-release-nvidia cuda-toolkit-11-4 nvidia-driver-latest-dkms-470.182.03 yum install -y libnvidia-container-1.4.0 libnvidia-container-tools-1.4.0 nvidia-container-runtime-hook-1.4.0 docker-runtime-nvidia-1 echo "exclude=*nvidia* *cuda*" >> /etc/yum.conf nvidia-smi

Créer votre propre AMI optimisée pour le GPU compatible avec P2

Vous pouvez créer votre propre AMI Amazon ECS personnalisée optimisée pour le GPU et compatible avec les instances P2, puis lancer des instances P2 à l'aide de l'AMI.

  1. Exécutez la commande suivante pour cloner le amazon-ecs-ami repo.

    git clone https://github.com/aws/amazon-ecs-ami
  2. Définissez l'agent Amazon ECS requis et les versions de l'AMI Amazon Linux source dans release.auto.pkrvars.hcl ou overrides.auto.pkrvars.hcl.

  3. Exécutez la commande suivante pour créer une AMI EC2 privée compatible avec P2.

    Remplacez la région par la région de l'instance.

    REGION=region make al2keplergpu
  4. Utilisez l'AMI avec les données utilisateur de l'instance suivantes pour vous connecter au cluster Amazon ECS.

    Remplacez cluster-name par le nom de votre cluster.

    #!/bin/bash echo "ECS_CLUSTER=cluster-name" >> /etc/ecs/ecs.config