Cloud TPU-Monitoring mit Stackdriver

In diesem Leitfaden wird erläutert, wie Sie mit Stackdriver Ihre Cloud TPU überwachen. Ihre Cloud TPU erfasst automatisch Logs und Messwerte des Cloud TPU-Laufzeit-Binärprogramms (z. B. Cloud TPU-Laufzeit-CPU-Nutzung und MXU-Auslastung) und speichert sie in Stackdriver. Die erfassten Logs und Messwerte können verwendet werden, um Probleme bei der Ressourcennutzung zu beheben. Sie können Benachrichtigungen einrichten, wenn die TPU-Auslastung unter einen gleitenden Durchschnitt fällt, um Leistungsprobleme sofort zu erkennen. Sie können auch einstellen, dass Sie benachrichtigt werden, wenn das Training angehalten wird.

In diesem Leitfaden werden Sie mit Stackdriver-Logs informiert und erfahren, wie Sie:

  • Logs abfragen

  • protokollbasierte Messwerte zum Einrichten von Benachrichtigungen und zur Darstellung von Dashboards erstellen.

Vorbereitung

In diesem Dokument werden Grundkenntnisse in Stackdriver Logging vorausgesetzt. Sie müssen eine Compute Engine-VM und Cloud TPU-Ressourcen erstellt haben, bevor Sie Logs erstellen und damit arbeiten können. Weitere Informationen finden Sie unter Schnellstart für weitere Details.

Führen Sie die Schritte im Abschnitt zur Bereinigung in der Kurzanleitung für Ihr Framework erst aus, wenn Sie das Modell ausgeführt haben und die Ressourcen nicht mehr benötigen. Wenn Sie den Bereinigungsschritt ausführen, werden keine unerwünschten Kosten verursacht.

Logging

Stackdriver Logging wird automatisch von Cloud TPU ausgeführt und kann Gebühren verursachen. Weitere Informationen zu Logging-Gebühren finden Sie unter Logging-Gebühren.

Stackdriver Logging wird linear skaliert, wenn Sie Cloud TPU-Pods hinzufügen. Sie können die Anzahl der aufgenommenen Logs reduzieren oder Stackdriver Logging deaktivieren, indem Sie Logs ausschließen. Weitere Informationen finden Sie unter Logausschlüsse.

Monitoringlogs in Stackdriver suchen

Die Überwachungslogs, die in diesem Handbuch erläutert werden, sind in einer speziellen Log-Entität mit dem Namen runtime_monitor vorhanden. So finden Sie sie:

  1. Rufen Sie in der Cloud Console die Seite Logging > Logs (Log-Explorer) der Operations Suite von Google Cloud auf:

    Zur Seite „Log-Explorer“

  2. Wählen Sie oben auf der Seite ein vorhandenes Google Cloud-Projekt aus.

  3. Über das Auswahlmenü Geprüfte Ressource können Sie auswählen, welche Ressourcen, Logs und Logebenen-Schweregrade angezeigt werden sollen. Klicken Sie auf das Auswahlmenü Geprüfte Ressource, scrollen Sie nach unten und bewegen Sie den Mauszeiger auf TPU Worker. Wählen Sie die Zone und dann den Namen (node_id) der Cloud TPU aus, für die Sie Logs ansehen möchten.

  4. Wählen Sie im Drop-down-Menü "Log" die Option runtime_monitor aus. Klicken Sie auf OK.

Image

Stackdriver Advanced Query verwenden

Sie können erweiterte Stackdriver-Abfragen verwenden, um die angeforderten Monitoring-Logs schnell zu identifizieren.

So verwenden Sie erweiterte Logabfragen im Log-Explorer:

  1. Rufen Sie in der Cloud Console die Seite Logging > Logs (Log-Explorer) der Operations Suite von Google Cloud auf:

    Zur Seite „Log-Explorer“

  2. Wählen Sie oben auf der Seite ein vorhandenes Google Cloud-Projekt aus oder erstellen Sie ein neues Projekt.

  3. Klicken Sie im Suchfeld auf das Drop-down-Menü und wählen Sie In erweiterten Filter umwandeln aus.

  4. Geben Sie im Abfragefeld für erweiterte Logs das folgende Skript ein und klicken Sie dann auf die Schaltfläche Filter senden:

    resource.type=tpu_worker
    resource.labels.project_id=your-project
    resource.labels.zone=your-tpu-zone
    resource.labels.node_id=your-tpu-name
    logName=projects/your-project/logs/tpu.googleapis.com%2Fruntime_monitor
    

Image

Informationen zur Log-Ausgabe

Klicken Sie auf einen Logeintrag, um ihn zu maximieren. Daraufhin wird ein Feld namens jsonPayload angezeigt. Hier befinden sich die Monitoringlogs. Klicken Sie darauf, um es zu maximieren. Daraufhin werden mehrere Unterfelder angezeigt. Im Folgenden werden die wichtigen Teilfelder zusammengefasst.

  • evententry_timestamp: Der Zeitstempel, zu dem der aktuelle Logeintrag erstellt wurde.

  • uid: die id Ihrer Cloud TPU.

  • logTime: Der Zeitstempel des unbearbeiteten Laufzeitlogs, aus dem der Logeintrag generiert wird.

  • checkpoint_succeeded: Gibt an, ob der Prüfpunkt erfolgreich gespeichert wurde.

  • training_completed: Gibt an, ob der Trainingsprozess als abgeschlossen markiert wurde.

  • compulation_succeeded: Gibt an, ob die Kompilierung erfolgreich war.

  • compilation_timed_out: Gibt an, ob das Zeitlimit der Kompilierung überschritten wurde.

  • execute_succeeded: Gibt an, ob die Ausführung erfolgreich war.

  • execute_timed_out: ob das Zeitlimit der Ausführung überschritten wurde.

  • eager_started: ob die Laufzeit den Eager-Modus übernimmt oder nicht.

  • Framework: Das Laufzeit-Framework, z.B. TensorFlow oder Pytorch.

  • runtime_cpu_perc: der Prozentsatz der Cloud TPU-Laufzeit-CPU-Auslastung. Dies ist ein numerischer Wert im Bereich von 0 bis 5.000.

  • runtime_ us_MiB: Die Cloud TPU-Laufzeitspeicherauslastung in MiB. Dies ist ein numerischer Wert mit einem Bereich von 0 bis 350.000.

  • system_available_memory_GiB: Der verbleibende verfügbare Systemspeicher in GiB. Dies ist ein numerischer Wert mit einem Bereich von 0 bis 350.

  • matrix_unit_utilization_percent: der Cloud TPU MXU-Auslastungsprozentsatz. Dies ist ein numerischer Wert mit einem Bereich von 0 bis 100.

Je nach Ursprung der Logeinträge sind nicht alle Teilfelder gleichzeitig vorhanden. Beispielsweise sind in Logeinträgen mit dem Unterfeld system_available_memory_GiB keine Unterfelder wie Matrix_Unit_utilization_percent vorhanden.

Logbasierte Messwerte erstellen

In diesem Abschnitt wird beschrieben, wie logbasierte Messwerte erstellt werden, die für die Einrichtung von Dashboards und Benachrichtigungen zur Überwachung verwendet werden. Siehe auch Logbasierte Messwerte programmatisch mit der Stackdriver REST API erstellen.

Im folgenden Beispiel wird mithilfe des Unterfelds Matrix_Unit_utilization_percent die Vorgehensweise zum Erstellen eines logbasierten Messwerts zur Überwachung der Cloud TPU Matrix Multiplication Unit (MXU) -Auslastung veranschaulicht.

  1. Geben Sie im Feld für die erweiterte Abfrage folgendes Abfrageskript ein, um alle Logeinträge zu extrahieren, für die matrix_unit_utilization_percent für den primären Cloud TPU-Worker definiert ist:

    resource.type=tpu_worker
    resource.labels.project_id=your-project
    resource.labels.zone=your-tpu-zone
    resource.labels.node_id=your-tpu-name
    resource.labels.worker_id=0
    logName=projects/your-project/logs/tpu.googleapis.com%2Fruntime_monitor
    jsonPayload.matrix_unit_utilization_percent:*
    
  2. Klicken Sie auf die Schaltfläche METRIC ERSTELLEN. In der Eingabeaufforderung Messwert-Editor Sidebar auf der rechten Seite, geben Sie "Matrix_Unit_utilization_percent" und "MXU-Auslastung" in den ein Name und Beschreibung Feld ein.

  3. Klicken Sie auf das Drop-down-Menü Typ und wählen Sie Verteilung aus. Der Typ Verteilung eignet sich für die Anzeige numerischer Messwerte.

  4. Geben Sie im Feld Feldname "jsonPayload.matrix_unit_utilization_percent" ein.

  5. Klicken Sie auf Mehr. Ändern Sie im Abschnitt Histogramm-Buckets das Drop-down-Menü Typ in Linear. Geben Sie 0 in Startwert, 200 in Anzahl der Buckets und 0,5 in Bucketbreite ein. Dadurch werden 200 Buckets im Bereich von 0 bis 100 mit einer Bucket-Breite von 0,5 erstellt.

  6. Klicken Sie auf Erstellen Sie einen Messwert unten auf der Seitenleiste, um die Erstellung des Messwerts abzuschließen.

Image

Damit die Monitoring-Ergebnisse korrekt angezeigt werden, muss Ihre Bucket-Bereichsdefinition geeignet sein. Verwenden Sie die für die numerischen Felder unter Log-Ausgabe angegebenen Bereichswerte. Eine Methode besteht darin, immer Linear als Typ und 200 als Anzahl der Buckets zu verwenden und dann die Bucket-Breite zu ermitteln. basierend auf dem Messwertbereich.

Logbasierte Messwerte programmatisch mit der Stackdriver REST API erstellen

Sie können diese Messwerte programmgesteuert über die Stackdriver REST API erstellen. Voraussetzung für die Verwendung dieser API ist eine JSON-Datei, die die Definition aller erforderlichen Messwerte enthält. In der Anleitung zum Erstellen eines Verteilungsmesswerts erfahren Sie, wie Sie einen logbasierten Messwert mit JSON definieren. Im folgenden Beispiel werden zwei Messwerte in einer JSON-Datei deklariert:

[
  {
    "name": "system_available_memory_GiB",
    "description": "System available memory.",
    "filter": "resource.type=tpu_worker AND resource.labels.project_id=your-project AND jsonPayload.system_available_memory_GiB:*",
    "valueExtractor": "EXTRACT(jsonPayload.system_available_memory_GiB)",
    "bucketOptions": {
      "linearBuckets": {
        "numFiniteBuckets": 200,
        "width": 1.75,
        "offset": 0
      }
    },
    "metricDescriptor": {
      "metricKind": "DELTA",
      "valueType": "DISTRIBUTION"
    }
  },
  {
    "name": "matrix_unit_utilization_percent",
    "description": "MXU utilization.",
    "filter": "resource.type=tpu_worker AND resource.labels.project_id=your-project AND jsonPayload.matrix_unit_utilization_percent:*",
    "valueExtractor": "EXTRACT(jsonPayload.matrix_unit_utilization_percent)",
    "bucketOptions": {
      "linearBuckets": {
        "numFiniteBuckets": 200,
        "width": 0.5,
        "offset": 0
      }
    },
    "metricDescriptor": {
      "metricKind": "DELTA",
      "valueType": "DISTRIBUTION"
    }
  }
]

Um die Erstellung von Messwerten zu vereinfachen, stellen wir in diesem Link eine JSON-Datei mit einigen vordefinierten Messwerten bereit, die Folgendes enthält:

  1. matrix_unit_utilization_percent: MXU-Auslastungsprozentsatz.

  2. system_available_memory_GiB: verfügbarer Systemspeicher in GiB

  3. runtime_ us_MiB: Die Cloud TPU-Laufzeitspeicherauslastung in MiB.

  4. runtime_cpu_perc: der Prozentsatz der Cloud TPU-Laufzeit-CPU-Auslastung.

  5. training abgeschlossen: Anzahl der abgeschlossenen Trainingsereignisse

  6. compulation_succeeded: Anzahl der erfolgreichen Kompilierungsereignisse

Die Stackdriver REST API akzeptiert jeweils nur ein JSON-Objekt als Eingabe. Daher benötigen wir ein Tool, das die Liste in der JSON-Datei auf einzelne JSON-Objekte aufschlüsselt, bevor sie an die REST API übergeben werden. Wir empfehlen die Verwendung des Open-Source-Tools jq.

Wenn Sie bereits Messwerte mit denselben Namen erstellt haben, müssen Sie entweder die Namen der Messwertdefinitionen in der JSON-Datei ändern oder die vorhandenen Messwerte entfernen, bevor Sie die Stackdriver REST API ausführen. Um die vorhandenen Messwerte zu entfernen, müssen Sie zuerst alle für sie festgelegten Benachrichtigungen löschen. Folgen Sie der Anleitung in dieser Anleitung zum Entfernen vorhandener Benachrichtigungsrichtlinien. Das Entfernen von Messwerten und das Erstellen neuer Messdaten kann automatisch erfolgen. Führen Sie dazu folgende Schritte aus:

  1. Öffnen Sie die heruntergeladene JSON-Datei und ersetzen Sie your-project durch Ihr Projekt.

  2. Entfernen Sie alle vorhandenen Messwerte:

    jq -c '.[] | .name' your-json-file-name | \
    xargs -I % curl -X DELETE "https://logging.googleapis.com/v2/projects/your-project/metrics/%" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Accept: application/json"
    
  3. Neue Messwerte erstellen:

    jq -c .[] your-json-file-name | \
    xargs -0 -d '\n' -I % curl -X POST "https://logging.googleapis.com/v2/projects/your-project/metrics" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" -H "Content-Type: application/json" -d %
    

Dashboards und Benachrichtigungen mit protokollbasierten Messwerten erstellen

Sobald Sie logbasierte Messwerte erstellt haben, können Sie Dashboards und Benachrichtigungen in Stackdriver Monitoring erstellen. Dashboards eignen sich zur Visualisierung von Messwerten (mit einer Verzögerung von etwa 2 Minuten). Warnungen sind hilfreich, wenn etwas passiert.

Dashboards erstellen

Die Schritte in diesem Abschnitt zeigen ein Beispiel für das Erstellen eines Dashboards in Stackdriver Monitoring für den Messwert Matrix-Einheit -utilization_percent.

  1. Gehen Sie zur Stackdriver Monitoring-Konsole.

    Zu Stackdriver Monitoring

  2. Bewegen Sie den Cursor zu Dashboards und klicken Sie auf Dashboard erstellen im eingeblendeten Menü.

  3. Klicken Sie rechts oben auf die Schaltfläche Diagramm hinzufügen.

  4. Geben Sie auf der neuen Seite mit der Eingabeaufforderung "TPU-Laufzeit-MXU-Auslastung" in das Texteingabefeld Diagrammtitel ein.

  5. Geben Sie in das Feld Find resource type and metric (Ressourcentyp und Messwert suchen) den Wert "Matrix_Unit_utilization_percent" ein. Stackdriver lädt den erstellten Messwert logging.googleapis.com/user/matrix_unit_utilization_percent automatisch. Wählen Sie den gefundenen Messwert aus. Hinweis: Das Feld Ressourcentyp sollte automatisch von TPU Worker ausgefüllt werden.

  6. In der Filter Feld, festlegen project_id zu Ihrem Projekt, zone zu Ihrer TPU-Zone und node_id zu Ihrem TPU-Namen.

  7. Ändern Sie die Aggregator an keine. Klicken Sie dann unten auf der Seite auf "Speichern".

Alerts erstellen

Die Schritte in diesem Abschnitt zeigen ein Beispiel für das Hinzufügen einer Benachrichtigungsrichtlinie für den Messwert Matrix_Unit_Utilization_Percent. Sie erstellt eine Benachrichtigungsrichtlinie, die mit der Cloud TPU-MXU-Auslastung verknüpft ist. Wenn diese Variable länger als eine Stunde unter 5% fällt, sendet Stackdriver eine E-Mail an die registrierte E-Mail-Adresse. Wenn die MXU-Auslastung der Cloud TPU wieder auf über 5% steigt, sendet Stackdriver eine Benachrichtigung, dass die Benachrichtigung entfernt wurde.

  1. Gehen Sie zur Stackdriver Monitoring-Konsole.

    Zu Stackdriver Monitoring

  2. Bewegen Sie den Cursor zu Alerting (Benachrichtigungen) und klicken Sie im angezeigten Menü auf Create a Policy (Richtlinie erstellen).

  3. Klicken Sie auf der Seite Neue Benachrichtigungsrichtlinie erstellen auf die Schaltfläche Bedingung hinzufügen.

  4. Geben Sie in das Feld Bedingung "TPU-Laufzeitbenachrichtigung für niedrige MXU-Auslastung" ein.

  5. Geben Sie in das Feld Find resource type and metric (Ressourcentyp und Messwert suchen) den Wert "Matrix_Unit_utilization_percent" ein. Stackdriver lädt den erstellten Messwert logging.googleapis.com/user/matrix_unit_utilization_percent automatisch. Wählen Sie den gefundenen Messwert aus. Hinweis: Das Feld Ressourcentyp sollte automatisch von TPU Worker ausgefüllt werden.

  6. Ändern Sie im Abschnitt Konfiguration die Bedingung Bedingung in ist niedriger; Geben Sie 5 in das Feld Schwellenwert ein und wählen Sie 1 Stunde im Drop-Menü Für aus. Klicken Sie auf die Schaltfläche Speichern.

  7. Wählen Sie im Drop-Menü Benachrichtigungskanaltyp E-Mail aus und geben Sie Ihre E-Mail-Adresse in das Textfeld E-Mail-Adresse ein. Klicken Sie auf Benachrichtigungskanal hinzufügen angezeigt.

  8. Im Feld Dokumentation können Sie beliebige Informationen eingeben, um das Problem beim Auslösen der Benachrichtigungen zu identifizieren.

  9. Geben Sie im Texteingabefeld unter Name this policy (Diese Richtlinie benennen) "TPU runtime niedrigen MXU-Nutzungsbenachrichtigung" ein. Klicken Sie auf Speichern unten auf der Schaltfläche.