Surveiller Cloud TPU avec Stackdriver

Ce guide explique comment surveiller Cloud TPU à l'aide de Stackdriver. Cloud TPU recueille automatiquement les journaux et les métriques du binaire d'exécution Cloud TPU (par exemple, l'utilisation du processeur d'exécution Cloud TPU et l'utilisation de MXU), et les enregistre dans Stackdriver. Ce guide vous familiarise avec ces journaux et vous explique comment :

  • Interroger ces journaux

  • Créer des métriques basées sur les journaux pour configurer des alertes et visualiser des tableaux de bord

Prérequis

Dans ce document, nous partons du principe que vous disposez des connaissances de base sur Stackdriver Logging. Vous devez disposer d'une VM Compute Engine et de ressources Cloud TPU pour pouvoir commencer à générer des journaux et à les utiliser. Pour en savoir plus, consultez le guide de démarrage rapide.

Ne suivez pas les instructions de nettoyage du guide de démarrage rapide tant que vous n'avez pas terminé l'exécution du modèle et que vous n'avez plus besoin des ressources. L'exécution de l'étape de nettoyage vous permet d'éviter que des frais inutiles ne vous soient facturés.

Logging

Stackdriver Logging est automatiquement exécuté par Cloud TPU et peut entraîner des frais. Pour en savoir plus sur les frais de journalisation, consultez la section Frais de journalisation.

Stackdriver Logging évolue linéairement à mesure que vous ajoutez des pods Cloud TPU. Vous pouvez réduire le nombre de journaux ingérés ou désactiver Stackdriver Logging en excluant des journaux. Pour en savoir plus, consultez la page Exclusions de journaux.

Rechercher les journaux de surveillance dans Stackdriver

Les journaux de surveillance décrits dans ce guide sont situés dans une entité de journal spéciale appelée runtime_monitor. Pour les localiser :

  1. Accédez à la page Logging > Journaux (Visionneuse de journaux) de la suite d'opérations Google Cloud dans Cloud Console :

    Accéder à la page Visionneuse de journaux

  2. Sélectionnez un projet Google Cloud existant en haut de la page.

  3. Le menu de sélection Ressource auditée vous permet de choisir les ressources, les journaux et les niveaux de gravité des journaux à afficher. Cliquez sur le menu de sélection Ressource auditée, puis faites défiler vers le bas et passez la souris sur Nœud de calcul TPU. Sélectionnez la zone, puis le nom (node_id) du Cloud TPU pour lequel vous souhaitez afficher les journaux.

  4. Dans le menu déroulant des journaux, sélectionnez runtime_monitor. Cliquez sur le bouton OK.

image

Utiliser la requête avancée Stackdriver

Vous pouvez utiliser les requêtes avancées Stackdriver pour trouver rapidement les journaux de surveillance demandés.

Pour utiliser les requêtes de journaux avancées dans la visionneuse de journaux :

  1. Accédez à la page Logging > Journaux (Visionneuse de journaux) de la suite d'opérations Google Cloud dans Cloud Console :

    Accéder à la page Visionneuse de journaux

  2. Sélectionnez un projet Google Cloud existant en haut de la page ou créez-en un.

  3. Dans la zone de requête de recherche, cliquez sur le menu déroulant , puis sélectionnez Convertir en filtre avancé.

  4. Dans la zone de requête avancée de journaux, saisissez le script suivant, puis cliquez sur le bouton Envoyer le filtre :

    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

Comprendre la sortie du journal

Cliquez sur une entrée de journal pour la développer, et vous verrez un champ nommé jsonPayload. C'est dans ce champ que se trouvent les journaux de surveillance. Cliquez dessus pour le développer, et plusieurs sous-champs s'afficheront. Vous trouverez ci-dessous un récapitulatif des sous-champs importants.

  • evententry_timestamp : horodatage de la création de l'entrée de journal actuelle.

  • uid : id de votre Cloud TPU.

  • logTime : horodatage du journal brut d'exécution à partir duquel l'entrée de journal est générée.

  • checkpoint_succeeded : indique si le point de contrôle a bien été enregistré.

  • training_completed : indique si le processus d'entraînement a été marqué comme terminé.

  • compilation_succeeded : indique si la compilation a réussi.

  • compilation_timed_out : indique si le délai de compilation est dépassé.

  • execute_succeeded : indique si l'exécution a réussi.

  • execute_timed_out : indique si l'exécution a expiré.

  • eager_started : indique si l'environnement d'exécution applique le mode eager.

  • framework : framework d'exécution, à savoir TensorFlow ou Pytorch.

  • runtime_cpu_perc : taux d'utilisation du processeur d'exécution de Cloud TPU. Il s'agit d'une valeur numérique comprise entre 0 et 5 000.

  • runtime_used_MiB : utilisation de la mémoire d'exécution Cloud TPU en Mio. Il s'agit d'une valeur numérique comprise entre 0 et 350 000.

  • system_available_memory_GiB : mémoire système disponible en Gio. Il s'agit d'une valeur numérique comprise entre 0 et 350.

  • matrix_unit_utilization_percent : taux d'utilisation de la MXU. Il s'agit d'une valeur numérique comprise entre 0 et 100.

Selon l'origine des entrées de journal, tous les sous-champs ne sont pas présents à la fois. Par exemple, les entrées de journal avec le sous-champ system_available_memory_GiB ne comporteront pas de sous-champs tels que matrix_unit_utilization_percent.

Créer des métriques basées sur des journaux

Cette section explique comment créer les métriques basées sur les journaux utilisées pour configurer les tableaux de bord et les alertes de surveillance. Consultez également la section Créer des métriques basées sur les journaux par programmation à l'aide de l'API REST Stackdriver.

Dans l'exemple suivant, le sous-champ matrix_unit_utilization_percent illustre les procédures nécessaires à la création d'une métrique basée sur les journaux pour surveiller l'utilisation de l'unité de multiplication de matrices (MXU, Matrix Multiplication Unit) Cloud TPU.

  1. Dans la zone de requête avancée, saisissez le script de requête suivant pour extraire toutes les entrées de journal où le sous-champ matrix_unit_utilization_percent est défini pour le nœud de calcul Cloud TPU principal :

    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. Cliquez sur le bouton CRÉER UN MÉTRIQUE. Dans la barre latérale Éditeur de métriques qui s'affiche à droite, saisissez "matrix_unit_utilization_percent" et "Utilisation des unités matricielles" dans les champs Nom et Description, respectivement.

  3. Cliquez sur le menu déroulant Type et sélectionnez Distribution. Le type Distribution convient à l'affichage des métriques numériques.

  4. Dans le champ Nom du champ, saisissez "jsonPayload.matrix_unit_utilization_percent".

  5. Cliquez sur Plus. Dans le menu déroulant Type de la section Histogram buckets (Buckets d'histogramme), sélectionnez Linéaire. Saisissez 0 dans Valeur de début, 200 dans Nombre de buckets et 0,5 dans Largeur des buckets. Vous créez ainsi 200 buckets compris entre 0 et 100 avec une largeur de 0,5.

  6. Cliquez sur le bouton Créer la métrique en bas de la barre latérale pour terminer la création de la métrique.

image

Pour afficher des résultats de surveillance justes, vous devez définir une plage de buckets appropriée. Utilisez les valeurs de plage spécifiées pour les champs numériques dans Comprendre la sortie du journal. Une technique consiste à toujours définir le Type sur Linéaire et le Nombre de buckets sur 200, puis à déterminer la Largeur des buckets en fonction de la plage de métriques.

Créer des métriques basées sur des journaux par programmation à l'aide de l'API REST Stackdriver

Vous pouvez créer ces métriques via l'API REST Stackdriver par programmation. Avant de pouvoir utiliser cette API, vous devez créer un fichier JSON contenant la définition de toutes les métriques requises. Pour savoir comment définir une métrique basée sur les journaux à l'aide de JSON, consultez les instructions de la section Créer une métrique de distribution. L'exemple suivant déclare deux métriques dans un fichier JSON :

[
  {
    "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"
    }
  }
]

Pour simplifier la création de métriques, nous fournissons dans ce lien un fichier JSON contenant les métriques prédéfinies suivantes :

  1. matrix_unit_utilization_percent : taux d'utilisation de la MXU.

  2. system_available_memory_GiB : mémoire système disponible en Gio.

  3. runtime_used_MiB : utilisation de la mémoire d'exécution Cloud TPU en Mio.

  4. runtime_cpu_perc : taux d'utilisation du processeur d'exécution de Cloud TPU.

  5. training_completed : nombre d'événements d'entraînement terminés.

  6. compilation_succeeded : nombre d'événements de compilation réussis.

L'API REST Stackdriver n'accepte qu'un seul objet JSON en tant qu'entrée à la fois. Par conséquent, nous avons besoin d'un outil pour décomposer la liste du fichier JSON en objets JSON individuels avant de les transmettre à l'API REST. Nous vous recommandons d'utiliser l'outil Open Source jq.

Si vous avez déjà créé des métriques portant les mêmes noms, vous devez modifier les noms des définitions de métriques dans le fichier JSON ou supprimer les métriques existantes avant d'exécuter l'API REST Stackdriver. Pour supprimer les métriques existantes, vous devez d'abord supprimer toutes les alertes qui leur sont associées. Vous pouvez suivre les instructions de ce guide pour savoir comment supprimer des règles d'alertes existantes. Pour supprimer des métriques et en créer automatiquement, procédez comme suit :

  1. Ouvrez le fichier JSON téléchargé, puis remplacez your-project par votre projet.

  2. Supprimez toutes les métriques existantes :

    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. Créez des métriques :

    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 %
    

Créer des tableaux de bord et des alertes à l'aide de métriques basées sur les journaux

Une fois que vous avez créé des métriques basées sur les journaux, vous pouvez créer des tableaux de bord et des alertes dans Stackdriver Monitoring. Les tableaux de bord sont utiles pour visualiser les métriques (prévoir un délai d'environ deux minutes), et les alertes pour signaler un problème.

Créer des tableaux de bord

Les étapes de cette section montrent un exemple de création d'un tableau de bord dans Stackdriver Monitoring pour la métrique matrix_unit_utilization_percent.

  1. Accédez à la console Stackdriver Monitoring.

    Accéder à Stackdriver Monitoring

  2. Déplacez le curseur sur Tableaux de bord, puis cliquez sur Create Dashboard (Créer un tableau de bord) dans le menu qui s'affiche.

  3. Cliquez sur le bouton Add Chart (Ajouter un graphique) dans l'angle supérieur droit.

  4. Dans la nouvelle page qui s'affiche, saisissez "utilisation de la MXU d'exécution du TPU" dans la zone de texte Chart Title (Titre du graphique).

  5. Dans le champ Find resource type and metric (Rechercher un type de ressource et une métrique), saisissez "matrix_unit_utilization_percent". Stackdriver charge automatiquement la métrique créée (logging.googleapis.com/user/aticrix_unit_utilization_percent). Sélectionnez la métrique trouvée. Notez que le champ Resource type (Type de ressource) doit être renseigné automatiquement par le travailleur TPU.

  6. Dans le champ Filter (Filtre), définissez project_id sur votre projet, zone sur votre zone TPU et node_id sur le nom de votre TPU.

  7. Définissez Agrégateur sur aucun. Ensuite, cliquez sur le bouton ENREGISTRER en bas de la page.

Créer des alertes

Les étapes de cette section présentent un exemple d'ajout d'une règle d'alerte pour la métrique matrix_unit_utilization_percent. Cet exemple crée une règle d'alerte liée à l'utilisation de la MXU Cloud TPU. Chaque fois que cette variable est inférieure à 5 % pendant plus d'une heure, Stackdriver envoie un e-mail à l'adresse e-mail enregistrée. Si l'utilisation de la MXU Cloud TPU dépasse de nouveau 5 %, Stackdriver envoie une notification indiquant que l'alerte a été supprimée.

  1. Accédez à la console Stackdriver Monitoring.

    Accéder à Stackdriver Monitoring

  2. Déplacez le curseur sur Alertes et cliquez sur Create a Policy (Créer une règle) dans le menu qui s'affiche.

  3. Sur la page Créer une règle d'alerte, cliquez sur le bouton Add condition (Ajouter une condition).

  4. Saisissez "Alert sur l'utilisation de la MXU d'exécution TPU" dans le champ Condition.

  5. Dans le champ Find resource type and metric (Rechercher un type de ressource et une métrique), saisissez "matrix_unit_utilization_percent". Stackdriver charge automatiquement la métrique créée (logging.googleapis.com/user/aticrix_unit_utilization_percent). Sélectionnez la métrique trouvée. Notez que le champ Resource type (Type de ressource) doit être renseigné automatiquement par le travailleur TPU.

  6. Dans la section Configuration, changez la sélection de Condition pour is below (est en dessous de). Ensuite, saisissez "5" dans le champ Threshold (Seuil) et sélectionnez 1 heure dans le menu déroulant For (Pour). Cliquez sur le bouton Save (Enregistrer).

  7. Dans le menu déroulant Notification Channel Type (Type de canal de notification), sélectionnez E-mail et saisissez votre adresse e-mail dans la zone de texte Adresse e-mail. Cliquez sur le bouton Add Notification Channel (Ajouter un canal de notification).

  8. Dans le champ Documentation, vous pouvez saisir des informations qui facilitent l'identification du problème lorsque les alertes se déclenchent.

  9. Dans la zone de saisie de texte du champ Name this policy (Nom de cette règle), saisissez "Alerte de faible utilisation de la MXU d'exécution TPU". Cliquez sur le bouton Save (Enregistrer) en bas de l'écran.