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.
Teilen Sie GPUs auf Amazon ECS
Viele GPU-Workloads, wie Inferenz und Small Model Serving, nutzen nur einen Bruchteil der Rechenleistung und des Speichers einer GPU. Ohne gemeinsame Nutzung bleibt der Rest dieser Kapazität ungenutzt. Mit Amazon ECS können Sie ein einzelnes physisches Gerät gemeinsam nutzen NVIDIA GPU über mehrere Container hinweg, sodass Sie mehr Workloads auf dieselbe Hardware packen und die GPU-Auslastung reduzieren können.
Mit Amazon ECS können Sie NVIDIA Multi-Process Service (MPS) für die gemeinsame Nutzung von GPUs. MPS ist ein NVIDIA CUDA Funktion, die mehrere Prozesse gleichzeitig auf derselben GPU ausführt. Dadurch wird die GPU-Auslastung verbessert und der Aufwand für Kontextwechsel reduziert. MPS bietet Speicher- und Rechenpartitionierung, sodass für jeden Container ein konfigurierbares Speicherlimit und eine optionale Rechenobergrenze gelten.
Amazon ECS verwaltet MPS für dich. Es startet die MPS Daemon auf GPU-Instances, platziert Container je nach verfügbarem Speicher auf GPUs und setzt Grenzwerte pro Container durch.
MPS bietet gemeinsame Nutzung auf Softwareebene statt Partitionierung auf Hardwareebene. Für weitere Informationen über MPS, siehe Multi-Process Bedienung
Amazon ECS unterstützt die gemeinsame Nutzung von Grafikprozessoren mit MPS auf Amazon ECS Managed Instances und Amazon ECS auf Amazon EC2.
Wann sollte GPU-Sharing verwendet werden
GPU-Sharing mit MPS ist gut geeignet für:
-
Inferenz-Workloads, Embedding-Generierung und die Bereitstellung kleiner Modelle, die eine GPU nicht vollständig nutzen
-
Multi-model Serving, bei dem sich mehrere Modelle eine einzige GPU teilen können
-
Entwicklungs- und Testumgebungen
-
Ausführung mehrerer leichter GPU-Workloads auf derselben Hardware, um die Kosten zu senken
GPU-Sharing wird nicht empfohlen für:
-
Training großer Modelle, das den vollen GPU-Speicher benötigt
-
Workloads, die empfindlich auf GPU-Fehler aus benachbarten Containern reagieren, weil MPS ist gemeinsame Nutzung auf Softwareebene und alle Container auf einer GPU teilen sich dasselbe CUDA Kontext
-
Arbeitslasten, die eine Isolierung zwischen Prozessen auf Hardwareebene erfordern
So funktioniert die gemeinsame Nutzung von GPUs
Sie konfigurieren die gemeinsame Nutzung von GPUs in der Container-Definition einer Aufgabendefinition. In jedem Container resourceRequirements, du stellst eine zur Verfügung sharingStrategy mit einem GPU-Speicherwert, anstatt eine Ganzzahl anzugeben in value für eine dedizierte GPU.
Wenn Amazon ECS eine Aufgabe platziert, die GPU-Sharing verwendet, summiert es den von allen GPU-Containern in der Aufgabe angeforderten GPU-Speicher und sucht nach einer GPU mit ausreichend freiem Speicher. Alle GPU-Container innerhalb einer einzelnen Aufgabe werden auf derselben physischen GPU platziert. Wenn die Aufgabe 4.000 MiB in zwei Containern anfordert, findet Amazon ECS eine einzelne GPU mit mindestens 4.000 MiB Restspeicher und platziert beide Container dort.
Mehrere Aufgaben können sich auch dieselbe physische GPU teilen. Solange eine GPU über genügend Restspeicher verfügt, kann Amazon ECS zusätzliche Aufgaben darauf platzieren, auch wenn diese Aufgaben von verschiedenen Diensten stammen. Eine Aufgabe, die sich eine GPU teilt, und eine Aufgabe, die eine dedizierte GPU verwendet, können auf derselben Instance auf verschiedenen GPUs ausgeführt werden.
Auf Amazon ECS Managed Instances überwacht Amazon ECS den Zustand der GPUs und der MPS Daemon auf jeder Instance. Wenn Amazon ECS einen GPU-Hardwarefehler feststellt oder MPS Bei einem Daemon-Ausfall wird die Instance geleert und ersetzt. Weitere Informationen zur automatischen GPU-Reparatur finden Sie unter Automatische GPU-Reparatur für von Amazon ECS verwaltete Instances.
GPU-Sharing konfigurieren
Um eine GPU gemeinsam zu nutzen, fügen Sie eine hinzu sharingStrategy Objekt zum resourceRequirements von jedem GPU-Container in Ihrer Aufgabendefinition. Der sharingStrategy Objekt enthält eine nvidiaMps Objekt mit den folgenden Feldern. Mehr über resourceRequirements erfahren Sie unter Ressourcenanforderungen.
memory-
Erforderlich: Ja
Das GPU-Speicherlimit für den Container in MiB. Dieser Wert ist eine feste Obergrenze für den GPU-Speicher, den der Container verwenden kann. Der Wert muss größer sein als
0.Um den gesamten auf einer Instance verfügbaren GPU-Speicher zu ermitteln, verwenden Sie den
DescribeContainerInstancesAPI (dietotalMemoryInMiBFeld) oder überprüfen Sie die GPU-Spezifikationen für Ihren Instance-Typ. maxComputePercent-
Erforderlich: Nein
Der maximale Prozentsatz der GPU-Rechenleistung, den der Container verwenden kann, als Ganzzahl von
1zu100. Dadurch wird eine Obergrenze für die GPU-Rechenauslastung des Containers festgelegt, keine Reservierung. Wenn ein Container inaktiv ist, steht seine ungenutzte Rechenleistung anderen Containern auf derselben GPU zur Verfügung, bis zu deren eigenenmaxComputePercentWerte. Wenn Sie diesen Parameter nicht angeben, kann der Container bis zu100Prozent.
Amazon ECS platziert Aufgaben ausschließlich auf der Grundlage des GPU-Speichers, sodass bei Platzierungsentscheidungen keine Rechenleistung berücksichtigt wird.
Sie können die Strategie für die gemeinsame Nutzung im Aufgabendefinitionseditor der Amazon ECS-Konsole oder mit JSON, dem AWS CLI, oder die API.
Amazon ECS legt die folgenden reservierten Umgebungsvariablen in jedem Container fest, der sich eine GPU teilt. Legen Sie diese Variablen nicht in Ihrer Container-Definition fest.
-
CUDA_MPS_PINNED_DEVICE_MEM_LIMITfür das Speicherlimit -
CUDA_MPS_ACTIVE_THREAD_PERCENTAGEfür die Rechenobergrenze
In der folgenden Beispielaufgabendefinition werden zwei Inferenzcontainer ausgeführt, die sich eine GPU teilen MPS, zusammen mit einem Nicht-GPU-Sidecar-Container. Jeder GPU-Container benötigt eine andere Menge an GPU-Speicher und Rechenleistung.
Ersetzen Sie im folgenden Beispiel account-id mit deinem AWS Konto-ID.
{ "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" }
Regeln für die Validierung
Amazon ECS wendet die folgenden Regeln auf Konfigurationen zur gemeinsamen Nutzung von GPUs an:
-
Eine GPU-Ressourcenanforderung verwendet entweder
value(eine dedizierte GPU) odersharingStrategy(eine gemeinsam genutzte GPU), aber nicht beides. Wenn Sie angebensharingStrategy, müssen Sie weglassenvalue. -
Alle GPU-Container in einer Aufgabe müssen dieselbe Sharing-Strategie verwenden. Wenn ein Container verwendet
sharingStrategy, kein anderer Container in dieser Aufgabe kann eine dedizierte GPU anfordern mitvalue. -
Das
memoryWert ist erforderlich und muss größer sein als0. -
Der
maxComputePercent-Wert ist optional. Wenn Sie es angeben, muss der Wert eine Ganzzahl von sein1zu100. -
Für von Amazon ECS verwaltete Instances lautet die Aufgabe
requiresCompatibilitiesmuss Folgendes beinhaltenMANAGED_INSTANCES. Verwenden Sie für Amazon ECS auf Amazon EC2 dieEC2Starttyp. -
GPU-Sharing wird für Aufgabendefinitionen, die Folgendes erfordern, nicht unterstützt
EXTERNALKompatibilität (Amazon ECS Anywhere). -
Sie können es nicht angeben
sharingStrategyin einer Container-Override. Container-Überschreibungen in derRunTaskundStartTaskAnfragen unterstützen die GPU-Sharing-Konfiguration nicht, also definieresharingStrategystattdessen in der Aufgabendefinition. Dienste führen die Aufgabendefinition wie registriert aus und sind nicht betroffen.
Richten Sie die GPU-Sharing nach Starttyp ein
Bei Amazon ECS Managed Instances wählt Amazon ECS die GPU-Instances für Sie aus und verwaltet sie. Sie benötigen keine Einrichtung, die über die Aufgabendefinition hinausgeht.
Starten Sie mit Amazon ECS auf Amazon EC2 eine unterstützte NVIDIA GPU-Instanz mit dem Amazon ECS AL2023 GPU-optimized AMI. GPU-Sharing mit MPS auf Amazon ECS auf Amazon EC2 erfordert die Amazon ECS-Container-Agent-Version 1.107.0 oder später und das Amazon ECS AL2023 GPU-optimized AMI-Version 20261019 oder später. Nachdem sich die Instance bei Ihrem Cluster registriert hat, ist die Konfiguration der Aufgabendefinition dieselbe wie für Amazon ECS Managed Instances.
Überlegungen
-
Gemeinsame Nutzung der GPU mit MPS wird auf den G4dn, G5, G6, G6e, G7, G7e, P3, P4d, P5, P5e, P5en unterstützt und P6-B200 Instanzfamilien. GPU-Sharing wird nicht unterstützt auf AWS Von Fargate, Amazon ECS Express Mode oder Amazon ECS verwaltete Daemon-Aufgaben.
-
Gemeinsame Nutzung der GPU mit MPS auf Amazon ECS auf Amazon EC2 erfordert die Amazon ECS-Container-Agent-Version
1.107.0oder später und das Amazon ECS AL2023 GPU-optimized AMI-Version20261019oder später. -
Führen Sie einen einzelnen GPU-Prozess pro Container aus, wenn Sie NVIDIA MPS für die gemeinsame Nutzung von GPUs. Für Anwendungen, die mehrere GPU-Prozesse erfordern, konfigurieren Sie den GPU-Speicherbedarf auf der Grundlage der kombinierten Spitzenspeichernutzung aller Prozesse. Verwenden Sie Steuerelemente auf Anwendungsebene, um den Gesamtverbrauch innerhalb des konfigurierten Werts zu halten. Amazon ECS verwendet diesen Wert, um die Platzierung der Container auf gemeinsam genutzten GPUs zu bestimmen. Daher können Multiprozessanwendungen mehr GPU-Speicher verbrauchen als konfiguriert, was zu Speicherkonflikten führen kann.
-
Wenn ein Container einen schwerwiegenden GPU-Fehler auslöst, z. B. einen illegalen Speicherzugriff von einem fehlerhaften GPU-Kernel, könnten die Container betroffen sein, die sich diese physische GPU teilen. Container auf anderen GPUs auf derselben Instance sind nicht betroffen.
-
Die
maxComputePercentDer Wert ist eine Obergrenze, keine garantierte Reservierung. Wenn ein Container inaktiv ist, steht sein ungenutzter Rechenaufwand anderen Containern auf derselben GPU zur Verfügung, bis zu deren eigenenmaxComputePercentWerte. -
GPU-Sharing wird für Aufgabendefinitionen, die Folgendes erfordern, nicht unterstützt
EXTERNALKompatibilität (Amazon ECS Anywhere). -
Aufgaben von verschiedenen Diensten, die denselben Kapazitätsanbieter verwenden, können auf derselben GPU platziert werden. Um zu verhindern, dass Aufgaben verschiedener Dienste eine GPU gemeinsam nutzen, verwenden Sie separate Kapazitätsanbieter oder separate Cluster für diese Dienste.
-
Für GPUs, die gemeinsam mit MPS, Amazon ECS gibt nicht die folgenden GPU-Metriken pro Aufgabe und pro Container aus:
Das
TaskGPUUtilizationundContainerGPUUtilizationMetriken.Die
TaskGPUMemoryUtilizationundContainerGPUMemoryUtilizationMetriken.Die
TaskGPUMemoryTotalundContainerGPUMemoryTotalMetriken.Die
TaskGPUMemoryUsedundContainerGPUMemoryUsedMetriken.
-
Die folgenden GPU-Metriken pro Task und Container sind weiterhin für GPUs verfügbar, die gemeinsam mit MPS:
Das
TaskGPUPowerDrawundContainerGPUPowerDrawMetriken.Die
TaskGPUTemperatureundContainerGPUTemperatureMetriken.Die
TaskGPURestartAppXidCountundContainerGPURestartAppXidCountMetriken.
-
Instance-level GPU-Metriken bleiben verfügbar, einschließlich
InstanceGPUUsageTotalundInstanceGPULimit.
Überwachen Sie die GPU-Nutzung
Sie können bestätigen, dass eine GPU gemeinsam genutzt wird, und die GPU-Nutzung mit der Amazon ECS-API und Amazon verfolgen CloudWatch Metriken.
Bestätigen Sie, dass eine GPU gemeinsam genutzt wird
Um zu bestätigen, dass eine GPU gemeinsam genutzt wird, rufen Sie den DescribeContainerInstances API. Die Antwort beinhaltet die gpuDevices Feld mit dem Sharing-Modus, der Anzahl der Container und dem verbleibenden Speicher für jede GPU. Nachfolgend finden Sie eine Beispielantwort.
{ "containerInstances": [ { "ec2InstanceId": "i-0c74b75400ab4228d", "runningTasksCount": 1, "gpuDevices": [ { "gpuId": "GPU-70d3bdaf-8635-81e0-8e44-446248a92c83", "sharingMode": "NVIDIA_MPS", "totalMemoryInMiB": 22587, "remainingMemoryInMiB": 16587, "containerCount": 2 } ] } ] }
Konfiguration pro Aufgabe anzeigen
Um die Sharing-Konfiguration für jede Aufgabe einzusehen, rufen Sie den DescribeTasks API. Jeder Container gpuSharingStrategy zeigt seine Speicher- und Rechengrenzen an, und Container, die sich eine GPU teilen, listen denselben Wert in gpuIds. Nachfolgend finden Sie eine Beispielantwort.
{ "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 } } } ] } ] }
Verfolgen Sie die GPU-Nutzung
-
Höhere Aufgabendichte: Bei gemeinsamer Nutzung der GPU werden mehr Aufgaben auf derselben Instanz ausgeführt. Benutze das
RunningTaskCountMetrik, um die Anzahl der Aufgaben pro Dienst vor und nach der Aktivierung des Teilens zu vergleichen. Für die Aufgabendichte pro Instanz verwenden Sie dieinstance_number_of_running_tasksMetrik, welche CloudWatch Container Insights sammelt für jede EC2-Instance, wenn Sie die bereitstellen CloudWatch Agent zum Sammeln von Metriken auf EC2-Instance-Ebene. -
Weniger GPUs für dieselbe Arbeitslast: Die
InstanceGPUUsageTotalmetrisch in CloudWatch Container Insights zeigt, wie viele physische GPUs verwendet werden. Mit MPS, dieselbe Arbeitslast verwendet weniger GPUs. -
Spielraum für Instanz-GPUs: Vergleichen
InstanceGPUUsageTotalmitInstanceGPULimitum zu sehen, wie voll eine Instanz ist. Mit MPS, mehr Aufgaben passen, bevor einer Instanz die GPUs ausgehen.