Arbeiten mit GPUs auf Amazon ECS - Amazon Elastic Container Service

Arbeiten mit GPUs auf Amazon ECS

Amazon ECS unterstützt Workloads, die GPUs nutzen, indem Sie Cluster mit GPU-fähigen Container-Instances erstellen können. GPU-basierte Amazon EC2-Container-Instances, die die Instance-Typen p2, p3, g3 und g4 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 G3-Instances und Amazon EC2 G4-Instances.

Wichtig

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

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

Considerations

Beachten Sie die folgenden Einschränkungen, bevor Sie damit beginnen, in Amazon ECS mit GPUs zu arbeiten:

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

  • 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 Containerdefinition 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. 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 werden von Amazon ECS nicht festgelegt, daher sollten Sie sicherstellen, dass Ihr Container-Image diese festlegt oder dass sie in der Containerdefinition festgelegt werden.

  • 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 derzeit 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 Instanztyp 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 NVIDIA_DRIVER_CAPABILITIES-Container-Laufzeit-Variable 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 Vorteile der GPUs für eine Container-Instance und die Docker-GPU-Laufzeitumgebung nutzen zu können, 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.

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