Beobachtbarkeit - Amazon EKS

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.

Beobachtbarkeit

Tipp

Informieren Sie sich in Amazon EKS-Workshops über bewährte Verfahren.

Überwachung und Beobachtbarkeit

GPU-Metriken erklärt

Die Metrik zur GPU-Auslastung zeigt, ob die GPU während des Beispielfensters irgendwelche Arbeiten ausgeführt hat. Diese Metrik erfasst den Prozentsatz der Zeit, in der die GPU mindestens eine Anweisung ausgeführt hat. Sie gibt jedoch nicht Aufschluss darüber, wie effizient die GPU ihre Hardware genutzt hat. Eine GPU enthält mehrere Streaming-Multiprozessoren (SMs), d. h. parallel Verarbeitungseinheiten, die Befehle ausführen. Eine 100-prozentige Auslastung kann bedeuten, dass die GPU über all ihre Funktionen hinweg umfangreiche parallel Workloads ausgeführt hat SMs, oder es kann bedeuten, dass ein einziger kleiner Befehl die GPU während des Testzeitraums aktiviert hat. Um die tatsächliche Auslastung zu verstehen, müssen Sie die GPU-Metriken auf mehreren Ebenen der Hardwarearchitektur untersuchen. Jeder Streaming-Multiprozessor besteht aus unterschiedlichen Kerntypen, und jede Schicht weist unterschiedliche Leistungsmerkmale auf. Metriken der obersten Ebene (GPU-Auslastung, Speicherauslastung, GPU-Leistung und GPU-Temperatur, sichtbar über nvidia-smi) zeigen, ob das Gerät aktiv ist. Tiefere Messwerte (SM-Auslastung, SM-Aktivität und Tensorkernnutzung) zeigen, wie effizient die GPU ihre Ressourcen nutzt.

Zielen Sie auf einen hohen GPU-Stromverbrauch ab

Zu wenig genutzte Rechenkapazität wird GPUs verschwendet und die Kosten steigen, da Workloads nicht alle GPU-Komponenten gleichzeitig beanspruchen. Verfolgen Sie für AI/ML Workloads auf Amazon EKS den GPU-Stromverbrauch als Proxy, um die tatsächliche GPU-Aktivität zu ermitteln. Die GPU-Auslastung gibt an, wie viel Zeit die GPU einen beliebigen Kernel ausführt. Es wird jedoch nicht angegeben, ob die Streaming-Multiprozessoren, Speichercontroller und Tensorkerne alle gleichzeitig aktiv sind. Durch den Stromverbrauch wird diese Lücke aufgedeckt, da voll ausgelastete Hardware deutlich mehr Energie verbraucht als Hardware, die schlanke Kernel ausführt oder zwischen Aufgaben ungenutzt bleibt. Vergleichen Sie den Stromverbrauch mit der Thermal Design Power (TDP) der GPU, um eine Unterauslastung zu erkennen, und untersuchen Sie dann, ob Ihre Arbeitslast durch CPU-Vorverarbeitung, Netzwerk-I/O oder ineffiziente Batchgrößen behindert wird.

Richten Sie CloudWatch Container Insights auf Amazon EKS ein, um Pods, Knoten oder Workloads mit geringem GPU-Stromverbrauch zu identifizieren. Dieses Tool lässt sich direkt in Amazon EKS integrieren und ermöglicht es Ihnen, den GPU-Stromverbrauch zu überwachen und Pod-Scheduling oder Instance-Typen anzupassen, wenn der Stromverbrauch unter Ihre Zielwerte fällt. Wenn Sie erweiterte Visualisierungen oder benutzerdefinierte Dashboards benötigen, verwenden Sie den DCGM-Exporter von NVIDIA mit Prometheus und Grafana für die Kubernetes-native Überwachung. Beide Ansätze liefern wichtige NVIDIA-Metriken wie (GPU-Stromverbrauch) und (GPU-Temperatur). nvidia_smi_power_draw nvidia_smi_temperature_gpu Eine Liste der Metriken finden Sie unter https://docs.aws.amazon.com/AmazonCloudWatch/ latest/monitoring/CloudWatch -Agent-NVIDIA-GPU.htm. Achten Sie auf Muster wie z. B. einen konstant niedrigen Stromverbrauch zu bestimmten Zeiten oder für bestimmte Aufgaben. Anhand dieser Trends können Sie ermitteln, wo Workloads konsolidiert oder die Ressourcenzuweisung angepasst werden müssen.

Statische Ressourcenbeschränkungen in Kubernetes (wie CPU-, Arbeitsspeicher- und GPU-Anzahl) führen häufig zu einer Über- oder Unterauslastung, insbesondere bei dynamischen AI/ML Workloads wie Inferenz, bei denen der Bedarf schwankt. Analysieren Sie Ihre Nutzungstrends und konsolidieren Sie Workloads auf weniger. GPUs Stellen Sie sicher, dass jede GPU voll ausgelastet ist, bevor Sie weitere GPUs zuweisen. Dieser Ansatz reduziert Verschwendung und senkt die Kosten. Detaillierte Anleitungen zur Optimierung von Planungs- und Sharing-Strategien finden Sie in den Best Practices von EKS Compute and Autoscaling

Beobachtbarkeit und Metriken

Verwenden Sie Überwachungs- und Beobachtungstools für Ihre Workloads AI/ML

Moderne AI/ML Dienste erfordern eine Koordination zwischen Infrastruktur, Modellierung und Anwendungslogik. Plattformingenieure verwalten die Infrastruktur und den Observability-Stack. Sie sammeln, speichern und visualisieren Metriken. AI/ML Ingenieure definieren modellspezifische Metriken und überwachen die Leistung bei variierender Last und Datenverteilung. Anwendungsentwickler nutzen APIs, leiten Anfragen weiter und verfolgen Service-Level-Metriken und Benutzerinteraktionen. Ohne einheitliche Beobachtungspraktiken arbeiten diese Teams isoliert und übersehen wichtige Signale über den Zustand und die Leistung des Systems. Die Schaffung einer gemeinsamen Transparenz in allen Umgebungen stellt sicher, dass alle Beteiligten Probleme frühzeitig erkennen und einen zuverlässigen Service aufrechterhalten können.

Die Optimierung von Amazon EKS-Clustern für AI/ML Workloads stellt die Überwachung vor besondere Herausforderungen, insbesondere im Zusammenhang mit der GPU-Speicherverwaltung. Ohne angemessene Überwachung sehen sich Unternehmen mit out-of-memory (OOM-) Fehlern, Ressourcenineffizienzen und unnötigen Kosten konfrontiert. Eine effektive Überwachung sorgt für eine bessere Leistung, Ausfallsicherheit und geringere Kosten für EKS-Kunden. Verwenden Sie einen ganzheitlichen Ansatz, der drei Überwachungsebenen kombiniert. Überwachen Sie zunächst detaillierte GPU-Metriken mit dem NVIDIA DCGM Exporter, um den GPU-Stromverbrauch, die GPU-Temperatur, die SM-Aktivität, die SM-Belegung und XID-Fehler zu verfolgen. Zweitens sollten Sie Frameworks für Inferenzdienste wie Ray und vLLM überwachen, um anhand ihrer nativen Metriken Einblicke in verteilte Workloads zu gewinnen. Drittens: Sammeln Sie Erkenntnisse auf Anwendungsebene, um benutzerdefinierte Metriken zu verfolgen, die für Ihren Workload spezifisch sind. Dieser mehrschichtige Ansatz bietet Ihnen einen Überblick über die Hardwarenutzung bis hin zur Anwendungsleistung.

Tools und Frameworks

Verschiedene Tools und Frameworks bieten native out-of-the-box Metriken für die Überwachung von AI/ML Workloads. Diese integrierten Metriken machen eine benutzerdefinierte Instrumentierung überflüssig und reduzieren die Einrichtungszeit. Die Metriken konzentrieren sich auf Leistungsaspekte wie Latenz, Durchsatz und Token-Generierung, die für die Bereitstellung von Inferenzen und das Benchmarking von entscheidender Bedeutung sind. Durch die Verwendung nativer Metriken können Sie sofort mit der Überwachung beginnen, ohne benutzerdefinierte Erfassungspipelines erstellen zu müssen.

  • vLLM: Eine Serving-Engine mit hohem Durchsatz für umfangreiche Sprachmodelle (LLMs), die native Metriken wie Anforderungslatenz und Speichernutzung bereitstellt.

  • Ray: Ein Framework für verteilte Datenverarbeitung, das Metriken für skalierbare KI-Workloads ausgibt, einschließlich der Ausführungszeiten von Aufgaben und der Ressourcennutzung.

  • Hugging Face Text Generation Inference (TGI): Ein Toolkit für die Bereitstellung und Bereitstellung LLMs mit integrierten Metriken für die Inferenzleistung.

  • NVIDIA genai-perf: Ein Befehlszeilentool zum Benchmarking generativer KI-Modelle, zur Messung von Durchsatz, Latenz und LLM-spezifischen Metriken, wie z. B. Anfragen, die in bestimmten Zeitintervallen abgeschlossen wurden.

Methoden zur Beobachtbarkeit

Wir empfehlen, alle zusätzlichen Beobachtbarkeitsmechanismen auf eine der folgenden Arten zu implementieren.

CloudWatch Container Insights Wenn Ihr Unternehmen AWS-native Tools mit minimalem Einrichtungsaufwand bevorzugt, empfehlen wir CloudWatch Container Insights. Es ist in den NVIDIA DCGM Exporter integriert, um GPU-Metriken zu sammeln, und bietet vorgefertigte Dashboards für schnelle Einblicke. Container Insights wird durch die Installation des CloudWatch Observability-Add-ons auf Ihrem Cluster aktiviert und implementiert und verwaltet den Lebenszyklus des NVIDIA DCGM Exporter, der GPU-Metriken von den Treibern von Nvidia sammelt und sie für sie bereitstellt. CloudWatch

Nach der Installation von Container Insights erkennt Container Insights CloudWatch automatisch NVIDIA GPUs in Ihrer Umgebung und sammelt wichtige Integritäts- und Leistungskennzahlen. Diese Metriken werden auf kuratierten out-of-the-box Dashboards angezeigt. Sie können Ray und vLLM auch integrieren, indem Sie den Unified CloudWatch Agent CloudWatch verwenden, um ihre systemeigenen Metriken zu senden. Dieser einheitliche Ansatz vereinfacht die Beobachtbarkeit in EKS-Umgebungen und ermöglicht es Teams, sich auf die Leistungsoptimierung und Kostenoptimierung zu konzentrieren, anstatt eine Überwachungsinfrastruktur aufzubauen.

Eine vollständige Liste der verfügbaren Metriken finden Sie unter Amazon EKS- und Kubernetes Container Insights-Metriken. step-by-stepAnleitungen zur Implementierung der GPU-Überwachung finden Sie unter Gain operational insights for NVIDIA GPU-Workloads using Amazon CloudWatch Container Insights. Praktische Beispiele für die Optimierung der Inferenzlatenz finden Sie unter Optimizing AI Responsiveness: A practical guide to Amazon Bedrock latency-optimized inference.

Managed Prometheus und Grafana Wenn Ihr Unternehmen maßgeschneiderte Dashboards und erweiterte Visualisierungsfunktionen benötigt, setzen Sie Prometheus mit dem NVIDIA DCGM-Exporter und Grafana für Kubernetes-natives Monitoring ein. Prometheus scannt und speichert GPU-Metriken aus dem DCGM-Exporter, während Grafana flexible Visualisierungs- und Warnfunktionen bietet. Dieser Ansatz bietet Ihnen im Vergleich zu Container Insights mehr Kontrolle über das Dashboard-Design und die Aufbewahrung von Kennzahlen. CloudWatch

Sie können diesen Monitoring-Stack erweitern, indem Sie Open-Source-Frameworks wie Ray und vLLM Ray und vLLM integrieren, um ihre nativen Metriken nach Prometheus zu exportieren. Sie können Grafana auch mit einer AWS X-Ray X-Ray-Datenquelle verbinden, um verteilte Traces zu visualisieren und Leistungsengpässe in Ihrer Inferenzpipeline zu identifizieren. Diese Kombination bietet end-to-end Transparenz von Metriken auf GPU-Ebene bis hin zu Anforderungsabläufen auf Anwendungsebene.

step-by-stepAnleitungen zur Bereitstellung dieses Monitoring-Stacks finden Sie unter Überwachen von GPU-Workloads auf Amazon EKS mithilfe von AWS-verwalteten Open-Source-Services.

Erwägen Sie die Überwachung von Kernschulungen und die Feinabstimmung von Kennzahlen

Überwachen Sie die wichtigsten Trainingsmetriken, um den Zustand und die Leistung Ihres Amazon EKS-Clusters und der darauf ausgeführten Machine-Learning-Workloads zu verfolgen. Trainingsworkloads haben andere Überwachungsanforderungen als Inferenz-Workloads, da sie über längere Zeiträume laufen, Ressourcen unterschiedlich beanspruchen und Einblicke in die Modellkonvergenz und die Effizienz der Datenpipeline erfordern. Die folgenden Kennzahlen helfen Ihnen dabei, Engpässe zu identifizieren, die Ressourcenzuweisung zu optimieren und sicherzustellen, dass Schulungsaufgaben erfolgreich abgeschlossen werden. step-by-stepAnleitungen zur Implementierung dieses Überwachungsansatzes finden Sie unter Einführung in die Beobachtung von Workloads für maschinelles Lernen auf Amazon EKS.

Metriken zur Ressourcennutzung

Überwachen Sie die Kennzahlen zur Ressourcennutzung, um zu überprüfen, ob Ihre Ressourcen ordnungsgemäß genutzt werden. Diese Kennzahlen helfen Ihnen dabei, Engpässe und die Hauptursachen für Leistungsprobleme zu identifizieren.

  • CPU, Arbeitsspeicher, Netzwerk, GPU-Leistung und GPU-Temperatur — Überwachen Sie diese Messwerte, um sicherzustellen, dass die zugewiesenen Ressourcen den Workload-Anforderungen entsprechen, und um Optimierungsmöglichkeiten zu identifizieren. Verfolgen Sie Metriken wie gpu_memory_usage_bytes, um Speicherverbrauchsmuster zu identifizieren und Spitzenauslastungen zu erkennen. Berechne Perzentile wie das 95. Perzentil (P95), um die höchsten Speicheranforderungen während des Trainings zu ermitteln. Diese Analyse hilft Ihnen, Modelle und Infrastruktur zu optimieren, um OOM-Fehler zu vermeiden und Kosten zu senken.

  • SM-Belegung, SM-Aktivität, FPxx Aktivität — Überwachen Sie diese Kennzahlen, um zu verstehen, wie die zugrunde liegende Ressource auf der GPU genutzt wird. Als Faustregel gilt das Ziel 0,8 für SM-Aktivität.

  • Nutzung von Knoten- und Pod-Ressourcen — Verfolgen Sie die Ressourcennutzung auf Knoten- und Pod-Ebene, um Ressourcenkonflikte und potenzielle Engpässe zu identifizieren. Überwachen Sie, ob Knoten an Kapazitätsgrenzen stoßen, was die Pod-Planung verzögern und Trainingsaufgaben verlangsamen kann.

  • Ressourcennutzung im Vergleich zu Anfragen und Grenzwerten — Vergleichen Sie die tatsächliche Ressourcennutzung mit konfigurierten Anfragen und Grenzwerten, um festzustellen, ob Ihr Cluster aktuelle und future Workloads bewältigen kann. Dieser Vergleich zeigt, ob Sie die Ressourcenzuweisungen anpassen müssen, um OOM-Fehler oder Ressourcenverschwendung zu vermeiden.

  • Interne Kennzahlen aus ML-Frameworks — Erfassen Sie interne Schulungs- und Konvergenzkennzahlen aus ML-Frameworks wie TensorFlow und PyTorch. Zu diesen Kennzahlen gehören Verlustkurven, Lernrate, Batch-Verarbeitungszeit und Dauer der Trainingsschritte. Visualisieren Sie diese Metriken mit TensorBoard oder ähnlichen Tools, um die Modellkonvergenz zu verfolgen und Ineffizienzen im Training zu identifizieren.

Modellieren Sie Leistungskennzahlen

Überwachen Sie die Modellleistungskennzahlen, um zu überprüfen, ob Ihr Trainingsprozess Modelle hervorbringt, die den Genauigkeits- und Geschäftsanforderungen entsprechen. Anhand dieser Metriken können Sie feststellen, wann das Training beendet werden muss, Modellversionen vergleichen und Leistungseinbußen feststellen.

  • Genauigkeit, Präzision, Rückruf und F1-Score — Verfolgen Sie diese Metriken, um zu verstehen, wie gut Ihr Modell bei Validierungsdaten abschneidet. Berechnen Sie den F1-Score eines Validierungssatzes nach jeder Trainingsepoche, um zu beurteilen, ob sich das Modell verbessert und wann es akzeptable Leistungsniveaus erreicht.

  • Geschäftsspezifische Kennzahlen und KPIs — Definieren und verfolgen Sie Kennzahlen, mit denen der Geschäftswert Ihrer Initiativen direkt gemessen wird. AI/ML Für ein Empfehlungssystem sollten Sie Kennzahlen wie die Klickrate oder die Konversionsrate verfolgen, um sicherzustellen, dass das Modell die angestrebten Geschäftsergebnisse fördert.

  • Leistung im Zeitverlauf — Vergleichen Sie Leistungskennzahlen verschiedener Modellversionen und Trainingsläufe, um Trends zu erkennen und Leistungseinbußen zu erkennen. Verfolgen Sie, ob neuere Modellversionen die Leistung im Vergleich zu Basismodellen beibehalten oder verbessern. Dieser historische Vergleich hilft Ihnen bei der Entscheidung, ob Sie neue Modelle einsetzen oder Schulungsprobleme untersuchen möchten.

Datenqualität und Drift-Metriken

Überwachen Sie die Datenqualität und die Drift-Metriken, um sicherzustellen, dass Ihre Trainingsdaten konsistent und repräsentativ bleiben. Datendrift kann dazu führen, dass sich die Modellleistung im Laufe der Zeit verschlechtert, während Datenqualitätsprobleme verhindern können, dass Modelle konvergieren oder zu unzuverlässigen Ergebnissen führen.

  • Statistische Eigenschaften von Eingabedaten — Verfolgen Sie statistische Eigenschaften wie Mittelwert, Standardabweichung und Verteilung der Eingabemerkmale im Laufe der Zeit, um Datenabweichungen oder Anomalien zu erkennen. Überwachen Sie, ob sich die Merkmalsverteilungen signifikant von Ihren Basis-Trainingsdaten unterscheiden. Wenn sich beispielsweise der Mittelwert eines kritischen Merkmals um mehr als zwei Standardabweichungen ändert, untersuchen Sie, ob sich Ihre Datenpipeline geändert hat oder ob sich die zugrunde liegende Datenquelle verschoben hat.

  • Erkennung von Datenabweichungen und Warnmeldungen — Implementieren Sie automatisierte Mechanismen, um Datenqualitätsprobleme zu erkennen und darauf hinzuweisen, bevor sie sich auf das Training auswirken. Verwende statistische Tests wie den Kolmogorov-Smirnov-Test oder den Chi-Quadrat-Test, um aktuelle Datenverteilungen mit deinen ursprünglichen Trainingsdaten zu vergleichen. Richten Sie Warnmeldungen ein, wenn Tests signifikante Abweichungen feststellen, sodass Sie Modelle mit aktualisierten Daten erneut trainieren oder Probleme mit der Datenpipeline untersuchen können.

Metriken für Latenz und Durchsatz

Überwachen Sie die Latenz- und Durchsatzkennzahlen, um Engpässe in Ihrer Trainingspipeline zu identifizieren und die Ressourcennutzung zu optimieren. Diese Kennzahlen helfen Ihnen zu verstehen, wo während der Schulung Zeit aufgewendet wird und worauf Sie sich bei der Optimierung konzentrieren sollten.

  • End-to-End Latenz von ML-Trainingspipelines — Messen Sie die Gesamtzeit, in der Daten Ihre gesamte Trainingspipeline durchlaufen, von der Datenaufnahme bis zur Modellaktualisierung. Verfolgen Sie diese Metrik über alle Trainingsläufe hinweg, um festzustellen, ob Änderungen an der Pipeline die Leistung verbessern oder verschlechtern. Eine hohe Latenz weist häufig auf Engpässe beim Laden von Daten, bei der Vorverarbeitung oder bei der Netzwerkkommunikation zwischen Knoten hin.

  • Trainingsdurchsatz und Verarbeitungsrate — Verfolgen Sie die Datenmenge, die Ihre Trainingspipeline pro Zeiteinheit verarbeitet, um eine effiziente Nutzung der Ressourcen sicherzustellen. Überwachen Sie Messwerte wie z. B. pro Sekunde verarbeitete Proben oder abgeschlossene Chargen pro Minute. Ein niedriger Durchsatz im Verhältnis zu Ihrer Hardwarekapazität deutet auf Ineffizienzen beim Laden, bei der Vorverarbeitung oder bei der Modellberechnung hin, wodurch GPU-Zyklen verschwendet werden.

  • Latenz beim Speichern und Wiederherstellen von Checkpoints — Überwachen Sie die Zeit, die erforderlich ist, um Modell-Checkpoints im Speicher (S3, EFS FSx) zu speichern und sie im GPU- oder CPU-Speicher wiederherzustellen, wenn Jobs wieder aufgenommen oder nach Ausfällen wiederhergestellt werden. Langsame Checkpoint-Operationen verlängern die Wiederherstellungszeit von Jobs und erhöhen die Kosten. Verfolgen Sie die Größe der Checkpoints, die Speicherdauer, die Wiederherstellungsdauer und die Anzahl der Fehler, um Optimierungsmöglichkeiten wie Komprimierung oder schnellere Speicherstufen zu identifizieren.

  • Zeit zum Laden und Vorverarbeiten von Daten — Messen Sie die Zeit, die für das Laden von Daten aus dem Speicher und das Anwenden von Transformationen zur Vorverarbeitung aufgewendet wurde. Vergleichen Sie diese Zeit mit der Berechnungszeit des Modells, um festzustellen, ob Ihr Training daten- oder rechengebunden ist. Wenn das Laden von Daten mehr als 20% der gesamten Trainingszeit in Anspruch nimmt, sollten Sie erwägen, Ihre Datenpipeline durch Zwischenspeichern, Prefetching oder schnelleren Speicher zu optimieren.

Fehlerraten und Ausfälle

Überwachen Sie die Fehlerraten und Ausfälle in Ihrer gesamten Schulungspipeline, um die Zuverlässigkeit aufrechtzuerhalten und eine Verschwendung von Rechenressourcen zu verhindern. Unentdeckte Fehler können dazu führen, dass Trainingsaufgaben unbemerkt fehlschlagen, ungültige Modelle produzieren oder Stunden an GPU-Zeit verschwenden, bevor Sie Probleme bemerken.

  • Überwachung von Pipeline-Fehlern — Verfolgen Sie Fehler in allen Phasen Ihrer ML-Pipeline, einschließlich Datenvorverarbeitung, Modelltraining und Checkpoint-Operationen. Protokollieren Sie Fehlertypen, -häufigkeiten und betroffene Komponenten, um Probleme schnell zu identifizieren. Zu den häufigsten Fehlern gehören nicht übereinstimmende Datenformate, out-of-memory Fehler bei der Vorverarbeitung und Fehler beim Speichern von Checkpoints aufgrund von Speicherbeschränkungen. Richten Sie Warnmeldungen ein, wenn die Fehlerraten die Ausgangsschwellenwerte überschreiten, damit Sie diese untersuchen können, bevor sich Fehler häufen.

  • Analyse wiederkehrender Fehler — Identifizieren und untersuchen Sie Muster bei wiederkehrenden Fehlern, um future Ausfälle zu verhindern und die Zuverlässigkeit der Pipeline zu verbessern. Analysieren Sie Protokolle, um herauszufinden, ob bestimmte Datenproben, Chargengrößen oder Trainingskonfigurationen durchweg zu Ausfällen führen. Wenn beispielsweise bestimmte Eingabedatentypen Fehler bei der Vorverarbeitung auslösen, fügen Sie früher in der Pipeline Validierungsprüfungen hinzu oder aktualisieren Sie Ihre Datenbereinigungslogik. Verfolgen Sie die mittlere Betriebsdauer zwischen Ausfällen (MTBF), um zu messen, ob sich die Zuverlässigkeit Ihrer Pipeline im Laufe der Zeit verbessert. “

Spezifische Kennzahlen für Kubernetes und EKS

Überwachen Sie Kubernetes- und EKS-Metriken, um sicherzustellen, dass Ihre Cluster-Infrastruktur funktionsfähig bleibt und Ihre Trainingsworkloads unterstützen kann. Diese Metriken helfen Ihnen dabei, Infrastrukturprobleme zu erkennen, bevor sie zu Fehlschlägen oder Leistungseinbußen bei der Schulung führen.

  • Kubernetes Cluster State Metrics — Überwachen Sie den Zustand und den Status von Kubernetes-Objekten, einschließlich Pods, Knoten, Bereitstellungen und Diensten. Verfolgen Sie den Pod-Status, um Pods zu identifizieren, die im Status „Ausstehend“, „Fehlgeschlagen“ oder „Absturzschleife“ hängen Überwachen Sie den Zustand der Knoten, um Probleme wie Festplattenüberlastung, Speicherauslastung oder Netzwerkausfälle zu erkennen. Verwenden Sie kubectl oder Überwachungstools, um diese Messwerte kontinuierlich zu überprüfen und Warnmeldungen einzurichten, wenn Pods nicht gestartet werden können oder Knoten nicht mehr planbar sind.

  • Kennzahlen zur Ausführung von Trainings-Pipelines — Verfolgen Sie erfolgreiche und fehlgeschlagene Pipeline-Läufe, Job-Dauern, Bearbeitungszeiten von Schritten und Orchestrierungsfehler. Überwachen Sie, ob Trainingsaufgaben innerhalb der erwarteten Zeitfenster abgeschlossen werden und ob die Ausfallraten im Laufe der Zeit zunehmen. Verfolgen Sie Kennzahlen wie die Erfolgsquote von Aufträgen, die durchschnittliche Jobdauer und die Zeit bis zum Scheitern. Anhand dieser Kennzahlen können Sie feststellen, ob Infrastrukturprobleme, Konfigurationsprobleme oder Datenqualitätsprobleme zu Trainingsausfällen führen.

  • AWS-Servicemetriken — Verfolgen Sie Metriken für AWS-Services, die Ihre EKS-Infrastruktur und Ihre Schulungs-Workloads unterstützen. Überwachen Sie S3-Metriken wie Anforderungslatenz, Fehlerraten und Durchsatz, um sicherzustellen, dass die Leistung beim Laden von Daten konsistent bleibt. Verfolgen Sie EBS-Volumenmetriken wie IOPS, Durchsatz und Warteschlangenlänge, um Speicherengpässe zu erkennen. Überwachen Sie VPC-Flussprotokolle und Netzwerkmetriken, um Verbindungsprobleme zwischen Knoten oder externen Diensten zu identifizieren.

  • Kubernetes Control Plane Metrics — Überwachen Sie den API-Server, den Scheduler, den Controller-Manager und die etcd-Datenbank, um Leistungsprobleme oder Ausfälle zu erkennen, die sich auf den Clusterbetrieb auswirken. Verfolgen Sie die Latenz, die Anforderungsrate und die Fehlerrate von API-Serveranfragen, um sicherzustellen, dass die Kontrollebene schnell auf Planungsanfragen reagiert. Überwachen Sie die Größe der etcd-Datenbank, die Commit-Dauer und die Änderungen am Leader, um Stabilitätsprobleme zu erkennen. Eine hohe API-Serverlatenz oder häufige Änderungen des ETCD-Leiters können die Pod-Planung verzögern und die Startzeiten von Trainingsaufträgen verlängern.

Anwendungs- und Instanzprotokolle

Sammeln und analysieren Sie Anwendungs- und Instanzprotokolle, um Probleme zu diagnostizieren, die mit Metriken allein nicht erklärt werden können. Protokolle bieten detaillierten Kontext zu Fehlern, Statusänderungen und Systemereignissen, sodass Sie nachvollziehen können, warum Schulungsaufgaben fehlschlagen oder schlecht abschneiden. Durch die Korrelation von Protokollen mit Metriken können Sie die Hauptursachen schneller ermitteln.

  • Anwendungsprotokolle — Sammeln Sie Anwendungsprotokolle von Ihren Trainingsaufträgen, Daten-Pipelines und ML-Frameworks, um Engpässe zu identifizieren und Fehler zu diagnostizieren. In diesen Protokollen werden detaillierte Informationen zur Auftragsausführung erfasst, darunter Fehler beim Laden von Daten, Fehler bei der Modellinitialisierung, Fehler beim Speichern von Checkpoints und Framework-spezifische Warnungen. Korrelieren Sie Protokollzeitstempel mit Messspitzen, um zu verstehen, was zu Leistungseinbußen oder Ausfällen geführt hat. Wenn beispielsweise die GPU-Auslastung plötzlich abnimmt, überprüfen Sie die Anwendungsprotokolle auf Fehler, die auf Daten-Pipeline-Stopps oder Ausfälle bei der Vorverarbeitung hinweisen. Verwenden Sie zentralisierte Protokollierungstools wie CloudWatch Logs oder Fluent Bit, um Protokolle aus allen Pods zu aggregieren und sie durchsuchbar zu machen.

  • Instanzprotokolle — Sammeln Sie Protokolle auf Instanzebene wie Systemjournalprotokolle und dmesg-Ausgaben, um Hardwareprobleme und Probleme auf Kernelebene zu erkennen. Diese Protokolle decken Probleme wie GPU-Treiberfehler, Fehler bei der Speicherzuweisung, I/O Festplattenfehler und Probleme mit der Netzwerkschnittstelle auf, die möglicherweise nicht in Anwendungsprotokollen auftauchen. Korrelieren Sie Instanzprotokolle mit Anwendungsprotokollen und Messdaten, um festzustellen, ob Trainingsfehler auf Hardware- oder Anwendungsprobleme zurückzuführen sind. Wenn beispielsweise ein Trainingsjob mit einem out-of-memory Fehler fehlschlägt, suchen Sie in den dmesg-Protokollen nach Kernel-OOM-Killermeldungen, die angeben, ob dem System der Arbeitsspeicher ausgegangen ist oder ob die Anwendung ihre Container-Limits überschritten hat. Richten Sie Warnmeldungen für kritische Hardwarefehler wie GPU-XID-Fehler oder Festplattenausfälle ein, sodass Sie ausfallende Instanzen ersetzen können, bevor sie zu weitreichenden Trainingsunterbrechungen führen.

In den folgenden Abschnitten wird gezeigt, wie die oben beschriebenen Metriken mithilfe von zwei von AWS empfohlenen Ansätzen erfasst werden: CloudWatch Container Insights und Amazon Managed Prometheus Amazon Managed Prometheus with Amazon Managed Grafana. Wählen Sie CloudWatch Container Insights, wenn Sie AWS-native Tools mit minimalem Einrichtungsaufwand und vorgefertigten Dashboards bevorzugen. Entscheiden Sie sich für Amazon Managed Prometheus mit Amazon Managed Grafana, wenn Sie maßgeschneiderte Dashboards und erweiterte Visualisierungsfunktionen benötigen oder eine Integration in eine bestehende Prometheus basierte Überwachungsinfrastruktur wünschen. Eine vollständige Liste der verfügbaren Container Insights-Metriken finden Sie unter Amazon EKS- und Kubernetes Container Insights-Metriken.

Erwägen Sie die Überwachung von Online-Inferenzmetriken in Echtzeit

In Echtzeitsystemen ist eine geringe Latenz entscheidend, um Benutzern oder anderen abhängigen Systemen zeitnahe Antworten zu geben. Eine hohe Latenz kann die Benutzererfahrung beeinträchtigen oder Leistungsanforderungen verletzen. Zu den Komponenten, die die Inferenzlatenz beeinflussen, gehören die Ladezeit des Modells, die Vorverarbeitungszeit, die tatsächliche Prognosezeit, die Nachverarbeitungszeit und die Netzwerkübertragungszeit. Wir empfehlen, die Inferenzlatenz zu überwachen, um sicherzustellen, dass Antworten mit niedriger Latenz und Service Level Agreements (SLAs) eingehalten werden, und benutzerdefinierte Metriken für Folgendes zu entwickeln. Testen Sie unter erwarteter Last, berücksichtigen Sie die Netzwerklatenz, berücksichtigen Sie gleichzeitige Anfragen und testen Sie mit unterschiedlichen Batchgrößen.

  • Time to First Token (TTFT) — Zeitspanne zwischen dem Senden einer Anfrage durch einen Benutzer und dem Erhalt der ersten Antwort (erstes Wort, Token oder Abschnitt). In Chatbots würden Sie beispielsweise überprüfen, wie lange es dauert, bis die erste Ausgabe (Token) generiert ist, nachdem der Benutzer eine Frage gestellt hat.

  • End-to-End Latenz — Dies ist die Gesamtzeit vom Eingang einer Anfrage bis zum Zurücksenden der Antwort. Messen Sie beispielsweise die Zeit von der Anfrage bis zur Antwort.

  • Output Tokens Per Second (TPS) — Gibt an, wie schnell Ihr Modell neue Token generiert, nachdem es reagiert hat. In Chatbots würden Sie beispielsweise die Generierungsgeschwindigkeit für Sprachmodelle für einen Basistext verfolgen.

  • Fehlerrate — Verfolgt fehlgeschlagene Anfragen, die auf Leistungsprobleme hinweisen können. Überwachen Sie beispielsweise fehlgeschlagene Anfragen für große Dokumente oder bestimmte Zeichen.

  • Durchsatz — Messen Sie die Anzahl der Anfragen oder Operationen, die das System pro Zeiteinheit verarbeiten kann. Verfolgen Sie beispielsweise Anfragen pro Sekunde, um Spitzenlasten zu bewältigen.

K/V (Key/Value) cache can be a powerful optimization technique for inference latency, particularly relevant for transformer-based models. K/V cache stores the key and value tensors from previous transformer layer computations, reducing redundant computations during autoregressive inference, particularly in large language models (LLMs). Cache Efficiency Metrics (specifically for K/Voder eine Sitzung (Cache verwenden):

  • hit/miss Cache-Verhältnis — Messen Sie bei Inferenz-Setups, die Caching nutzen (K/V oder eingebettete Caches), wie oft der Cache hilfreich ist. Niedrige Trefferquoten können auf suboptimale Änderungen der Cache-Konfiguration oder der Arbeitslast hindeuten, die beide die Latenz erhöhen können.

In den nachfolgenden Themen wird das Sammeln von Daten für einige der oben genannten Metriken demonstriert. Wir werden Beispiele mit den beiden von AWS empfohlenen Ansätzen bereitstellen: AWS-native CloudWatch Container Insights und Amazon Managed Prometheus als Open-Source-Lösung mit Amazon Managed Grafana. Sie würden sich je nach Ihren allgemeinen Anforderungen an die Beobachtbarkeit für eine dieser Lösungen entscheiden. Eine vollständige Liste der Container Insights-Metriken finden Sie unter Amazon EKS- und Kubernetes Container Insights-Metriken.

Nachverfolgung der GPU-Speichernutzung

Wie im Erwägen Sie die Überwachung von Kernschulungen und die Feinabstimmung von Kennzahlen Thema erörtert, ist die GPU-Speichernutzung unerlässlich, um out-of-memory (OOM-) Fehler zu vermeiden und eine effiziente Ressourcennutzung sicherzustellen. Die folgenden Beispiele zeigen, wie Sie Ihre Trainingsanwendung so instrumentieren, dass eine benutzerdefinierte Histogrammmetrik angezeigt wirdgpu_memory_usage_bytes, und wie die P95-Speicherauslastung berechnet wird, um den Spitzenverbrauch zu ermitteln. Stellen Sie sicher, dass Sie den Test anhand eines Beispiel-Trainingsjobs (z. B. der Feinabstimmung eines Transformatormodells) in einer Staging-Umgebung durchführen.

Beispiel für AWS-native CloudWatch Container Insights

Dieses Beispiel zeigt, wie Sie Ihre Trainingsanwendung mithilfe des AWS-nativen Ansatzes gpu_memory_usage_bytes so instrumentieren, dass sie als Histogramm angezeigt wird. Beachten Sie, dass Ihr AI/ML Container so konfiguriert sein muss, dass er strukturierte Logs im EMF-Format ( CloudWatch Embedded Metrics Format) ausgibt. CloudWatch logs analysiert EMF und veröffentlicht die Metriken. Verwenden Sie aws_embedded_metrics in Ihrer Trainingsanwendung, um strukturierte Logs im EMF-Format an Logs zu senden, das GPU-Metriken extrahiert. CloudWatch

from aws_embedded_metrics import metric_scope import torch import numpy as np memory_usage = [] @metric_scope def log_gpu_memory(metrics): # Record current GPU memory usage mem = torch.cuda.memory_allocated() memory_usage.append(mem) # Log as histogram metric metrics.set_namespace("MLTraining/GPUMemory") metrics.put_metric("gpu_memory_usage_bytes", mem, "Bytes", "Histogram") # Calculate and log P95 if we have enough data points if len(memory_usage) >= 10: p95 = np.percentile(memory_usage, 95) metrics.put_metric("gpu_memory_p95_bytes", p95, "Bytes") print(f"Current memory: {mem} bytes, P95: {p95} bytes") # Example usage in training loop for epoch in range(20): # Your model training code would go here log_gpu_memory()

Beispiel Prometheus und Grafana

Dieses Beispiel zeigt, wie Sie Ihre Trainingsanwendung mithilfe der Prometheus-Clientbibliothek in Python gpu_memory_usage_bytes` so instrumentieren, dass sie als Histogramm angezeigt wird.

from prometheus_client import Histogram from prometheus_client import start_http_server import pynvml start_http_server(8080) memory_usage = Histogram( 'gpu_memory_usage_bytes', 'GPU memory usage during training', ['gpu_index'], buckets=[1e9, 2e9, 4e9, 8e9, 16e9, 32e9] ) # Function to get GPU memory usage def get_gpu_memory_usage(): if torch.cuda.is_available(): # Get the current GPU device device = torch.cuda.current_device() # Get memory usage in bytes memory_allocated = torch.cuda.memory_allocated(device) memory_reserved = torch.cuda.memory_reserved(device) # Total memory usage (allocated + reserved) total_memory = memory_allocated + memory_reserved return device, total_memory else: return None, 0 # Get GPU memory usage gpu_index, memory_used = get_gpu_memory_usage()

Verfolgen Sie die Dauer von Inferenzanfragen für Online-Inferenzen in Echtzeit

Wie bereits im Erwägen Sie die Überwachung von Kernschulungen und die Feinabstimmung von Kennzahlen Thema erörtert, ist eine geringe Latenz entscheidend, um Benutzern oder anderen abhängigen Systemen zeitnahe Antworten zu bieten. Die folgenden Beispiele zeigen, wie Sie eine benutzerdefinierte Histogramm-Metrik verfolgen könneninference_request_duration_seconds, die von Ihrer Inferenzanwendung bereitgestellt wird. Berechnen Sie die Latenz im 95. Perzentil (P95), um sich auf Worst-Case-Szenarien zu konzentrieren, testen Sie mit synthetischen Inferenzanforderungen (z. B. über Locust) in einer Staging-Umgebung und legen Sie Warnschwellenwerte (z. B. > 500 ms) fest, um SLA-Verstöße zu erkennen.

Beispiel für AWS-native CloudWatch Container Insights

Dieses Beispiel zeigt, wie Sie eine benutzerdefinierte Histogramm-Metrik in Ihrer Inferenzanwendung für inference_request_duration_seconds mithilfe des AWS Embedded Metric Format erstellen. CloudWatch

import boto3 import time from aws_embedded_metrics import metric_scope, MetricsLogger cloudwatch = boto3.client('cloudwatch') @metric_scope def log_inference_duration(metrics: MetricsLogger, duration: float): metrics.set_namespace("ML/Inference") metrics.put_metric("inference_request_duration_seconds", duration, "Seconds", "Histogram") metrics.set_property("Buckets", [0.1, 0.5, 1, 2, 5]) @metric_scope def process_inference_request(metrics: MetricsLogger): start_time = time.time() # Your inference processing code here # For example: # result = model.predict(input_data) duration = time.time() - start_time log_inference_duration(metrics, duration) print(f"Inference request processed in {duration} seconds") # Example usage process_inference_request()

Beispiel Prometheus und Grafana

Dieses Beispiel zeigt, wie Sie eine benutzerdefinierte Histogrammmetrik in Ihrer Inferenzanwendung für inference_request_duration_seconds mithilfe der Prometheus-Clientbibliothek in Python erstellen:

from prometheus_client import Histogram from prometheus_client import start_http_server import time start_http_server(8080) request_duration = Histogram( 'inference_request_duration_seconds', 'Inference request latency', buckets=[0.1, 0.5, 1, 2, 5] ) start_time = time.time() # Process inference request request_duration.observe(time.time() - start_time)

Verwenden Sie in Grafana die Abfrage, um P95-Latenztrends histogram_quantile(0.95, sum(rate(inference_request_duration_seconds_bucket[5m])) by (le, pod)) zu visualisieren. Weitere Informationen finden Sie unter Prometheus-Histogramm-Dokumentation und Prometheus-Client-Dokumentation.

Verfolgen Sie den Token-Durchsatz für Online-Inferenz in Echtzeit

Wie im Erwägen Sie die Überwachung von Kernschulungen und die Feinabstimmung von Kennzahlen Thema besprochen, empfehlen wir, die Token-Verarbeitungszeit zu überwachen, um die Modellleistung zu messen und Skalierungsentscheidungen zu optimieren. Die folgenden Beispiele zeigen, wie Sie eine benutzerdefinierte Histogramm-Metrik verfolgen könnentoken_processing_duration_seconds, die von Ihrer Inferenzanwendung bereitgestellt wird. Berechnen Sie die Dauer des 95. Perzentils (P95), um die Verarbeitungseffizienz zu analysieren, Tests mit simulierten Anforderungslasten (z. B. 100 bis 1000 Anforderungen/Sekunde) in einem Cluster außerhalb der Produktion durchzuführen und KEDA-Trigger anzupassen, um die Skalierung zu optimieren.

Beispiel für AWS-native CloudWatch Container Insights

Dieses Beispiel zeigt, wie Sie eine benutzerdefinierte Histogramm-Metrik in Ihrer Inferenzanwendung für token_processing_duration_seconds mithilfe des AWS Embedded Metric Format erstellen. CloudWatch Es verwendet die ) with a custom `get_duration_bucket Funktion dimensions (`set_dimension), um die Dauer in Bereiche einzuteilen (z. B. „0,01", „>1").

import boto3 import time from aws_embedded_metrics import metric_scope, MetricsLogger cloudwatch = boto3.client('cloudwatch') @metric_scope def log_token_processing(metrics: MetricsLogger, duration: float, token_count: int): metrics.set_namespace("ML/TokenProcessing") metrics.put_metric("token_processing_duration_seconds", duration, "Seconds") metrics.set_dimension("ProcessingBucket", get_duration_bucket(duration)) metrics.set_property("TokenCount", token_count) def get_duration_bucket(duration): buckets = [0.01, 0.05, 0.1, 0.5, 1] for bucket in buckets: if duration <= bucket: return f"<={bucket}" return f">{buckets[-1]}" @metric_scope def process_tokens(input_text: str, model, tokenizer, metrics: MetricsLogger): tokens = tokenizer.encode(input_text) token_count = len(tokens) start_time = time.time() # Process tokens (replace with your actual processing logic) output = model(tokens) duration = time.time() - start_time log_token_processing(metrics, duration, token_count) print(f"Processed {token_count} tokens in {duration} seconds") return output

Beispiel Prometheus und Grafana

Dieses Beispiel zeigt, wie Sie eine benutzerdefinierte Histogrammmetrik in Ihrer Inferenzanwendung für token_processing_duration_seconds mithilfe der Prometheus-Clientbibliothek in Python erstellen.

from prometheus_client import Histogram from prometheus_client import start_http_server import time start_http_server(8080) token_duration = Histogram( 'token_processing_duration_seconds', 'Token processing time per request', buckets=[0.01, 0.05, 0.1, 0.5, 1] ) start_time = time.time() # Process tokens token_duration.observe(time.time() - start_time)

Verwenden Sie in Grafana die Abfrage, histogram_quantile(0.95, sum(rate(token_processing_duration_seconds_bucket[5m])) by (le, pod))` um Trends der P95-Verarbeitungszeit zu visualisieren. Weitere Informationen finden Sie unter Prometheus-Histogramm-Dokumentation und Prometheus-Client-Dokumentation.

Messen Sie die Latenz bei der Checkpoint-Wiederherstellung

Wie im Erwägen Sie die Überwachung von Kernschulungen und die Feinabstimmung von Kennzahlen Thema erörtert, ist die Checkpoint-Latenz eine wichtige Kennzahl in mehreren Phasen des Modelllebenszyklus. Die folgenden Beispiele zeigen, wie Sie eine benutzerdefinierte Histogramm-Metrik verfolgen könnencheckpoint_restore_duration_seconds`, die von Ihrer Anwendung bereitgestellt wird. Berechnen Sie die Dauer des 95. Perzentils (P95), um die Wiederherstellungsleistung zu überwachen, Tests mit Spot-Unterbrechungen in einem Cluster außerhalb der Produktion durchzuführen und Schwellenwerte für Warnmeldungen festzulegen (z. B. <30 Sekunden), um Verzögerungen zu erkennen.

Beispiel für AWS-native CloudWatch Container Insights

Dieses Beispiel zeigt, wie Sie Ihre Batch-Anwendung instrumentieren, um checkpoint_restore_duration_seconds mithilfe von Insights als Histogramm verfügbar zu machen: CloudWatch

import boto3 import time import torch from aws_embedded_metrics import metric_scope, MetricsLogger @metric_scope def log_checkpoint_restore(metrics: MetricsLogger, duration: float): metrics.set_namespace("ML/ModelOperations") metrics.put_metric("checkpoint_restore_duration_seconds", duration, "Seconds", "Histogram") metrics.set_property("Buckets", [1, 5, 10, 30, 60]) metrics.set_property("CheckpointSource", "s3://my-bucket/checkpoint.pt") @metric_scope def load_checkpoint(model, checkpoint_path: str, metrics: MetricsLogger): start_time = time.time() # Load model checkpoint model.load_state_dict(torch.load(checkpoint_path)) duration = time.time() - start_time log_checkpoint_restore(metrics, duration) print(f"Checkpoint restored in {duration} seconds")

Beispiel Prometheus und Grafana

Dieses Beispiel zeigt, wie Sie Ihre Batch-Anwendung mithilfe der Prometheus-Clientbibliothek in Python checkpoint_restore_duration_seconds so instrumentieren, dass sie als Histogramm angezeigt wird:

from prometheus_client import Histogram from prometheus_client import start_http_server import torch start_http_server(8080) restore_duration = Histogram( 'checkpoint_restore_duration_seconds', 'Time to restore checkpoint', buckets=[1, 5, 10, 30, 60] ) with restore_duration.time(): model.load_state_dict(torch.load("s3://my-bucket/checkpoint.pt"))

Verwenden Sie in Grafana die Abfrage, histogram_quantile(0.95, sum(rate(checkpoint_restore_duration_seconds_bucket[5m]) by (le)) um Latenztrends bei der P95-Wiederherstellung zu visualisieren. Weitere Informationen finden Sie unter Prometheus-Histogramm-Dokumentation und Prometheus-Client-Dokumentation.