Arbeiten mit GPUs auf Amazon ECS - Amazon Elastic Container Service

Arbeiten mit GPUs auf Amazon ECS

Amazon ECS unterstützt Workloads, die GPUs nutzen, wenn Sie Cluster mit GPU-fähigen Container-Instances erstellen. GPU-basierte Amazon-EC2-Container-Instances, die die Instance-Typen p2, p3, g3, g4 und g5 verwenden, bieten Zugriff auf NVIDIA-GPUs. Weitere Informationen finden Sie unter Linux Accelerated-Computing-Instances im Amazon EC2-Benutzerhandbuch für Linux-Instances.

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 AMI.

Sie können in Ihrer Aufgabendefinition eine Reihe von GPUs für die Platzierung von Aufgaben auf Container-Ebene festlegen. Amazon ECS plant verfügbare GPU-fähige Container-Instances und heftet physische GPUs für eine optimale Leistung an geeignete Container an.

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

Instance-Typ

GPUs

GPU-Speicher (GiB)

vCPUs

Arbeitsspeicher (GiB)

p2.xlarge

1

12

4

61

p2.8xlarge

8

96

32

488

p2.16xlarge

16

192

64

732

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

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.2.xlarge

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

Überlegungen

Wir empfehlen, Folgendes zu beachten, bevor Sie auf Amazon ECS mit GPUs arbeiten.

  • 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 Registrieren einer externen Instance in einem Cluster .

  • Sie müssen in Ihrer Agenten-Konfigurationsdatei ECS_ENABLED_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 Amazon-ECS-Aufgabenplatzierung.

    Das folgende Beispiel startet eine Aufgabe auf einer p2.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 == p2.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 nvidia-Container-Laufzeit. Amazon ECS legt die NVIDIA_VISIBLE_DEVICES-Umgebungsvariablen als Liste der GPU-Geräte-IDs, die Amazon ECS dem Container zuweist, fest. 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 g4-Instance-Typ-Familie wird auf Version 20190913 und höher des Amazon ECS GPU-optimierten AMI unterstützt. Weitere Informationen finden Sie unter Linux Amazon ECS-optimierte AMIs-Versionen. 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 Amazon EC2-Konsole, AWS CLI oder die API verwenden und die Instances manuell im Cluster registrieren.

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

  • Das für Amazon ECS GPU-optimierte AMI ist IPv6 aktiviert, was zu Problemen bei der Verwendung von yum führt. Dies kann durch Konfigurieren von yum zur Verwendung von IPv4 mit dem folgenden Befehl gelöst 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.

Angeben von GPUs in einer Aufgabendefinition

Um die GPUs für eine Container-Instance und die Docker-GPU-Laufzeitumgebung zu nutzen, müssen Sie in der Aufgabendefinition die für Ihren Container erforderliche Anzahl von GPUs angeben. Wenn GPU-fähige Container platziert werden, heftet der Amazon ECS-Container-Agent die gewünschte Anzahl von physischen GPUs an den entsprechenden Container an. Die Anzahl der für alle Container in einer Aufgabe reservierten GPUs darf nicht größer sein als die Anzahl der verfügbaren GPUs für die Container-Instance, für die die Aufgabe gestartet wird. Weitere Informationen finden Sie unter Erstellen einer Aufgabendefinition mit der neuen Konsole.

Wichtig

Wenn Ihre GPU-Anforderungen in der Aufgabendefinition nicht angegeben werden, verwendet die Aufgabe die Standard-Docker-Laufzeit.

Das folgende Beispiel zeigt das JSON-Format für die GPU-Anforderungen in einer Aufgabendefinition:

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

Das folgende Beispiel veranschaulicht die Syntax eines Docker-Containers, der eine GPU-Anforderung angibt. Dieser Container verwendet 2 GPUs, führt das Dienstprogramm nvidia-smi aus und wird dann beendet.

{ "containerDefinitions": [ { "memory": 80, "essential": true, "name": "gpu", "image": "nvidia/cuda:11.0-base", "resourceRequirements": [ { "type":"GPU", "value": "2" } ], "command": [ "sh", "-c", "nvidia-smi" ], "cpu": 100 } ], "family": "example-ecs-gpu" }