Amazon ECS-Aufgabendefinitionen für GPU-Workloads - Amazon Elastic Container Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Amazon ECS-Aufgabendefinitionen für GPU-Workloads

Amazon ECS unterstützt Workloads, die verwendet werden GPUs, wenn Sie Cluster mit Container-Instances erstellen, die dies unterstützen GPUs. EC2 GPU-basierte Amazon-Container-Instances, die die Instance-Typen p2, p3, p5, g3, g4 und g5 verwenden, bieten Zugriff auf NVIDIA. GPUs Weitere Informationen finden Sie unter Linux Accelerated Computing Instances im Leitfaden Amazon EC2 Instance Types.

Amazon ECS bietet eine GPU-optimierte AMI, die mit vorkonfigurierten NVIDIA-Kernel-Treibern und einer Docker-GPU-Laufzeitumgebung ausgestattet ist. Weitere Informationen finden Sie unter Amazon ECS-optimiertes Linux AMIs.

Sie können GPUs in Ihrer Aufgabendefinition eine Reihe von angeben, die bei der Platzierung von Aufgaben auf Containerebene berücksichtigt werden sollen. Amazon ECS plant für verfügbare Container-Instances, die für eine optimale Leistung physische Container unterstützen GPUs und GPUs an die richtigen Container anbinden.

Die folgenden EC2 GPU-basierten Amazon-Instance-Typen werden unterstützt. Weitere Informationen finden Sie unter Amazon EC2 P2-Instances, Amazon EC2 P3-Instances, Amazon EC2 P4d-Instances, Amazon EC2 P5-Instances, Amazon EC2 G3-Instances, Amazon EC2 G4-Instances, Amazon EC2 G5-Instances, Amazon G6-Instances und Amazon G6e-Instances. EC2 EC2

Instance-Typ GPUs GPU-Speicher (GiB) v CPUs Arbeitsspeicher (GiB)

p3.2xgroß

1

16

8

61

p3.8xgroß

4

64

32

244

p3.16xgroß

8

128

64

488

p3dn.24xgroß

8

256

96

768

p4d.24xgroß

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

g3s.xgroß

1

8

4

30,5

g3.4xgroß

1

8

16

122

g3.8xgroß

2

16

32

244

g3.16xgroß

4

32

64

488

g4dn.xgroß

1

16

4

16

g4dn.2xgroß

1

16

8

32

g4dn.4xgroß

1

16

16

64

g4dn.8xgroß

1

16

32

128

g4dn.12xgroß

4

64

48

192

g4dn.16xgroß

1

16

64

256

g5.xgroß

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.x groß 1 24 4 16
g 6.2 x groß 1 24 8 32
g 6,4 x groß 1 24 16 64
g 6,8 x groß 1 24 32 128
g 6.16.x groß 1 24 64 256
g 6.12 x groß 4 96 48 192
g 6.24 x groß 4 96 96 384
g 6,48 x groß 8 192 192 768
g6. Metall 8 192 192 768
gr 6.4 x groß 1 24 16 128
g6e.x groß 1 48 4 32
g6e.2 x groß 1 48 8 64
g6e.4 x groß 1 48 16 128
g6e.8 x groß 1 48 32 256
g6e16.x groß 1 48 64 512
g6e12.x groß 4 192 48 384
g6e24.x groß 4 192 96 768
g6e48.x groß 8 384 192 1536
gr 6,8 x groß 1 24 32 256

Sie können die Amazon Machine Image (AMI) -ID für Amazon ECS-Optimized abrufen, AMIs indem Sie die AWS Systems Manager Parameter Store-API abfragen. Mit diesem Parameter müssen Sie Amazon ECS-optimiertes AMI nicht manuell suchen. IDs Weitere Informationen zur Systems Manager Parameter Store-API finden Sie unter GetParameter. Der von Ihnen verwendete Benutzer muss über die ssm:GetParameter-IAM-Berechtigung zum Abrufen der Amazon-EKS-optimierten AMI-Metadaten verfügen.

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

Überlegungen

Anmerkung

Die Unterstützung für den g2-Instance-Familientyp ist veraltet.

Der Instance-Familientyp p2 wird nur von Versionen vor 20230912 des Amazon-ECS-GPU-optimierten AMI unterstützt. Wenn Sie weiterhin P2-Instances verwenden müssen, finden Sie weitere Informationen unter Was tun, wenn Sie eine P2-Instance benötigen.

Direkte Updates der NVIDIA/CUDA-Treiber auf diesen beiden Instance-Familientypen können zu potenziellen Ausfällen bei GPU-Workloads führen.

Wir empfehlen Ihnen, Folgendes zu berücksichtigen, bevor Sie mit der Arbeit GPUs an Amazon ECS beginnen.

  • Ihre Cluster können eine Mischung aus GPU- und Nicht-GPU-Container-Instances enthalten.

  • Sie können GPU-Workloads auf externen Instances ausführen. Stellen Sie beim Anmelden einer externen Instance bei Ihrem Cluster sicher, dass das --enable-gpu-Flag im Installationsskript enthalten ist. Weitere Informationen finden Sie unter Registrierung einer externen Instance in einem Amazon ECS-Cluster.

  • Sie müssen in Ihrer Agenten-Konfigurationsdatei ECS_ENABLE_GPU_SUPPORT auf true setzen. Weitere Informationen finden Sie unter Konfiguration des Amazon-ECS-Container-Agenten.

  • Wenn Sie eine Aufgabe ausführen oder einen Service erstellen, können Sie beim Konfigurieren der Platzierungsbedingungen mithilfe von Attributen des Instance-Typs festlegen, für welche Ihrer Container-Instances die Aufgabe gestartet wird. Auf diese Weise können Sie Ihre Ressourcen effektiver verwenden. Weitere Informationen finden Sie unter Wie Amazon ECS Aufgaben auf Container-Instances platziert.

    Das folgende Beispiel startet eine Aufgabe auf einer g4dn.xlarge-Container-Instance in Ihrem Standard-Cluster.

    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
  • Für jeden Container, der eine in der Container-Definition festgelegte GPU-Ressourcenanforderung hat, legt Amazon ECS fest, dass die Container-Laufzeitumgebung die NVIDIA-Container-Laufzeitumgebung ist.

  • Die NVIDIA Container-Laufzeitumgebung erfordert, dass einige Umgebungsvariablen im Container festgelegt werden, damit sie korrekt funktioniert. Eine Liste dieser Umgebungsvariablen finden Sie unter Spezialisierte Konfigurationen mit Docker. Amazon ECS legt als Wert der NVIDIA_VISIBLE_DEVICES Umgebungsvariablen eine Liste des GPU-Geräts fest IDs , das Amazon ECS dem Container zuweist. Die anderen erforderlichen Umgebungsvariablen legt Amazon ECS nicht fest. Stellen Sie daher sicher, dass Ihr Container-Image sie festlegt oder dass sie in der Container-Definition festgelegt sind.

  • Die p5-Instance-Typ-Familie wird auf Version 20230929 und höher des Amazon-ECS GPU-optimierten AMI unterstützt.

  • Die g4-Instance-Typ-Familie wird auf Version 20230913 und höher des Amazon ECS GPU-optimierten AMI unterstützt. Weitere Informationen finden Sie unter Amazon ECS-optimiertes Linux AMIs. Sie wird im Workflow „Cluster erstellen“ in der Amazon-ECS-Konsole nicht unterstützt. Um diese Instance-Typen zu verwenden, müssen Sie entweder die EC2 Amazon-Konsole oder die API verwenden und die Instances manuell in Ihrem Cluster registrieren. AWS CLI

  • Der Instance-Typ p4d.24xlarge funktioniert nur mit CUDA 11 oder höher.

  • Das GPU-optimierte AMI von Amazon ECS wurde IPv6 aktiviert, was zu Problemen bei der Verwendung führt. yum Dieses Problem kann durch die Konfiguration für die Verwendung IPv4 mit yum dem folgenden Befehl behoben werden.

    echo "ip_resolve=4" >> /etc/yum.conf
  • Wenn Sie ein Container-Image erstellen, das die NVIDIA/CUDA-Basis-Images nicht verwendet, müssen Sie die Container-Laufzeit-Variable NVIDIA_DRIVER_CAPABILITIES auf einen der folgenden Werte festlegen:

    • utility,compute

    • all

    Informationen zum Festlegen der Variablen finden Sie unter Steuern der NVIDIA Container Runtime auf der NVIDIA-Website.

  • GPUs werden auf Windows-Containern nicht unterstützt.

Teilen GPUs

Wenn Sie teilen möchten GPUs, müssen Sie Folgendes konfigurieren.

  1. Entfernen Sie GPU-Ressourcenanforderungen aus Ihren Aufgabendefinitionen, sodass Amazon ECS keine Ressourcen reserviert GPUs , die gemeinsam genutzt werden sollten.

  2. Fügen Sie Ihren Instances die folgenden Benutzerdaten hinzu, wenn Sie sie teilen möchten GPUs. Dadurch wird nvidia zur standardmäßigen Docker-Container-Laufzeit auf der Container-Instance, sodass alle Amazon ECS-Container die GPUs verwenden können. Weitere Informationen finden Sie im Amazon-Benutzerhandbuch unter Befehle ausführen, wenn Sie eine EC2 Instance mit EC2 Benutzerdateneingabe starten.

    const userData = ec2.UserData.forLinux(); userData.addCommands( 'sudo rm /etc/sysconfig/docker', 'echo DAEMON_MAXFILES=1048576 | sudo tee -a /etc/sysconfig/docker', 'echo OPTIONS="--default-ulimit nofile=32768:65536 --default-runtime nvidia" | sudo tee -a /etc/sysconfig/docker', 'echo DAEMON_PIDFILE_TIMEOUT=10 | sudo tee -a /etc/sysconfig/docker', 'sudo systemctl restart docker', );
  3. Legen Sie die NVIDIA_VISIBLE_DEVICES Umgebungsvariable in Ihrem Container fest. Sie können dies tun, indem Sie die Umgebungsvariable in Ihrer Aufgabendefinition angeben. Informationen zu den gültigen Werten finden Sie unter GPU-Enumeration auf der NVIDIA-Dokumentationsseite.

Was tun, wenn Sie eine P2-Instance benötigen

Wenn Sie die P2-Instance verwenden müssen, können Sie eine der folgenden Optionen verwenden, um die Instances weiterhin zu verwenden.

Sie müssen die Benutzerdaten der Instance für beide Optionen ändern. Weitere Informationen finden Sie im Amazon-Benutzerhandbuch unter Befehle ausführen, wenn Sie eine EC2 Instance mit EC2 Benutzerdateneingabe starten.

Verwenden der zuletzt unterstützten GPU-optimierten AMI

Sie können die 20230906-Version des GPU-optimierten AMI verwenden und den Instance-Benutzerdaten Folgendes hinzufügen.

Ersetzen Sie cluster-name durch den Namen Ihres Clusters.

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

Die aktuellsten GPU-optimierten AMI verwenden und die Benutzerdaten aktualisieren

Sie können den Benutzerdaten der Instance Folgendes hinzufügen. Dadurch werden die Nvidia 535/Cuda12.2-Treiber deinstalliert und anschließend die Nvidia 470/Cuda11.4-Treiber installiert und die Version repariert.

#!/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

Ihr eigenes P2-kompatibles und GPU-optimiertes AMI erstellen

Sie können Ihr eigenes benutzerdefiniertes GPU-optimiertes Amazon-ECS-AMI erstellen, das mit P2-Instances kompatibel ist, und dann P2-Instances mithilfe des AMI starten.

  1. Führen Sie den folgenden Befehl aus, um das amazon-ecs-ami repo zu klonen.

    git clone https://github.com/aws/amazon-ecs-ami
  2. Stellen Sie die erforderlichen Amazon-ECS-Agent- und Amazon-Linux-AMI-Quellversionen in release.auto.pkrvars.hcl oder overrides.auto.pkrvars.hcl ein.

  3. Führen Sie den folgenden Befehl aus, um ein privates P2-kompatibles EC2 AMI zu erstellen.

    Ersetzen Sie Region durch die Region mit der Instance-Region.

    REGION=region make al2keplergpu
  4. Verwenden Sie das AMI mit den folgenden Instance-Benutzerdaten, um eine Verbindung zum Amazon-ECS-Cluster herzustellen.

    Ersetzen Sie cluster-name durch den Namen Ihres Clusters.

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