Tableaux de bord de surveillance et de journalisation Cloud TPU

Le dépôt des tableaux de bord de surveillance et de débogage de Cloud TPU contient toute l'infrastructure et la logique requises pour surveiller et déboguer les workflows exécutés sur des VM TPU. Il nécessite Terraform, un outil Open Source qui utilise des fichiers de configuration pour définir et gérer l'infrastructure Google Cloud.

Tableau de bord Monitoring

Le tableau de bord de surveillance affiche les métriques Cloud TPU suivantes:

  • Utilisation du processeur sur le travailleur TPU: cpu/utilization
  • Utilisation de la mémoire par VM TPU: memory/usage
  • Octets réseau reçus par un pod sur le réseau: network/received_bytes_count
  • Octets réseau envoyés par un pod sur le réseau: network/sent_bytes_count
  • Durée d'inactivité TensorCore de la puce TPU: tpu/tensorcore/idle_duration

Cloud Monitoring génère automatiquement des données de métriques. Pour afficher le tableau de bord de surveillance, accédez à la console Google Cloud. Sélectionnez Monitoring, puis Tableaux de bord. Sélectionnez GCE - TPU Monitoring Dashboard (GCE - Tableau de bord de surveillance TPU) dans la liste des tableaux de bord. Le tableau de bord de surveillance Cloud TPU est composé de plusieurs volets, chacun affichant les données de métriques. Pour chaque métrique Cloud TPU, le tableau de bord affiche les valeurs actuelles des métriques, la moyenne et les valeurs maximales dans des volets distincts. Les volets moyenne et maximale vous permettent d'identifier les VM TPU aberrantes afin de procéder à un examen plus approfondi.

Vous pouvez également afficher les métriques TPU à l'aide de l'Explorateur de métriques de la console Google Cloud Cloud Monitoring. Pour en savoir plus, consultez la page Surveiller des VM Cloud TPU.

Tableau de bord Logging

Le tableau de bord de journalisation affiche deux sections:

  1. Métriques de journal: affiche le nombre d'entrées de trace de la pile collectées pour chaque nœud de calcul de VM TPU.
  2. Panneau "Journaux" : affiche toutes les entrées de trace de la pile, avec des colonnes pour la gravité, l'horodatage et un résumé de l'entrée. Vous pouvez filtrer ce panneau de journaux par chaîne ou par étiquette de nœud de calcul TPU comme node_id ou worker_id. Par exemple, l'ajout d'un filtre resource.labels.node_id:"testing" affiche toutes les entrées de trace collectées pour le nœud de calcul de VM TPU dont l'ID est défini sur "test".

Cloud Logging collecte les entrées de journal générées par les services Google Cloud, les services tiers, les frameworks de ML et votre code. Vous pouvez installer le package PyPi cloud-tpu-diagnostics pour écrire les traces de la pile Python en cas de défaillance ou d'exception, ou lorsque votre charge de travail ne répond pas. Pour en savoir plus, consultez la page Déboguer des VM Cloud TPU.

Pour afficher le tableau de bord de journalisation, accédez à la console Google Cloud, sélectionnez Monitoring, puis Tableaux de bord. Sélectionnez GCE - TPU Logging Dashboard (GCE - Tableau de bord de journalisation TPU) dans la liste des tableaux de bord.

Configurer les métriques et les tableaux de bord de journalisation

Suivez ces instructions pour configurer les métriques et les tableaux de bord de journalisation.

Cloner le dépôt du tableau de bord

Vous pouvez cloner le dépôt directement à partir du dépôt GitHub de surveillance et de débogage Cloud TPU ou à partir de la ligne de commande:

git clone https://github.com/google/cloud-tpu-monitoring-debugging.git

Installer Terraform

  1. Installez Terraform sur votre machine locale.
  2. Exécutez terraform init pour ajouter les plug-ins nécessaires et créer le répertoire .terraform.
  3. Exécutez terraform init –upgrade pour installer les mises à jour disponibles.

Configurer les autorisations de surveillance et de journalisation

Les rôles "Administrateur Monitoring", "Éditeur de configuration du tableau de bord Monitoring" et "Administrateur Logging" sont requis pour déployer des ressources Monitoring dans votre projet Google Cloud. Pour en savoir plus sur les rôles de surveillance, consultez Accorder l'accès à Cloud Monitoring.

Créer un bucket Cloud Storage

Créer un bucket Cloud Storage pour stocker les fichiers d'état Terraform Vous pouvez également utiliser un bucket Cloud Storage existant. L'utilisation d'un bucket Cloud Storage garantit que plusieurs utilisateurs peuvent exécuter Terraform en même temps et accéder à la même infrastructure.

  1. Dans Cloud Shell, créez le bucket Cloud Storage:

    gsutil mb gs://${GCS_BUCKET_NAME}
    
  2. Activez la gestion des versions des objets pour conserver l'historique de vos déploiements. L'activation de la gestion des versions des objets augmente les coûts de stockage. Vous pouvez les limiter en configurant la gestion du cycle de vie des objets de façon à supprimer les anciennes versions d'état.

    gsutil versioning set on gs://${GCS_BUCKET_NAME}
    

Initialiser Terraform

Exécutez terraform init dans le répertoire gcp_resources/gce du dépôt. La commande vous invite à saisir le nom d'un bucket Cloud Storage dans lequel stocker les fichiers d'état Terraform.

Déployer les tableaux de bord de surveillance et de journalisation

Exécutez terraform apply dans le répertoire gcp_resources/gce pour déployer les tableaux de bord de surveillance et de journalisation dans votre projet Google Cloud. La commande vous invite à fournir des valeurs pour les variables suivantes:

  • var.monitoring_dashboard_config
  • var.project_name
  • var.stack_trace_bucket_config

Si vous souhaitez déployer uniquement le tableau de bord de surveillance, exécutez terraform init et terraform apply dans le répertoire gcp_resources/gce/dashboard/monitoring_dashboard. De même, exécutez ces commandes dans le répertoire gcp_resources/gce/dashboard/logging_dashboard pour ne déployer que le tableau de bord de journalisation.

Exemples de configurations

Lorsque vous exécutez terraform apply, Terraform vous invite à saisir certaines valeurs de variables de configuration. Cette section fournit quelques exemples de configuration que vous pouvez utiliser. Chaque exemple montre le résultat affiché par la commande "terraform apply", ainsi que les valeurs suggérées pour chaque variable de configuration en caractères gras. L'entrée doit être au format JSON et être entourée d'accolades ("{}").

Exemple 1

Cet exemple spécifie le nom du projet Google Cloud et utilise les valeurs par défaut pour le reste de la configuration.

var.project_name
  Name of gcp project

  Enter a value: <gcp_project_name>

var.stack_trace_bucket_config
    Configuration to create a log bucket to store stack traces:
    {
      "bucket_name": "name of log bucket to create",
      "retention_days": &lt;number of days to retain stack traces, default to 30 days if not set&gt;
    }
    Enter {} to not create separate bucket for stack traces.

  Enter a value: {}

var.monitoring_dashboard_config
    Configuration for monitoring dashboard:
    {
      "node_prefix": "prefix used to generate the node name in multislice node provision, default to empty string",
      "outlier_count": &lt;the number of outliers to show on dashboard, default to 10 if not set&gt;
    }
    Enter {} to set default configuration for monitoring dashboard.

  Enter a value: {}

Exemple 2

Dans cet exemple, le tableau de bord est configuré pour afficher cinq VM TPU aberrantes.

var.project_name
  Name of gcp project

  Enter a value: <gcp_project_name>

var.stack_trace_bucket_config
    Configuration to create a log bucket to store stack traces:
    {
      "bucket_name": "name of log bucket to create",
      "retention_days": &lt;number of days to retain stack traces, default to 30 days if not set&gt;
    }
    Enter {} to not create separate bucket for stack traces.

  Enter a value: {}

var.monitoring_dashboard_config
    Configuration for monitoring dashboard:
    {
    "node_prefix": "prefix used to generate the node name in multislice node provision, default to empty string",
      "outlier_count": &lt;number of outliers to show on dashboard, default to 10 if not set&gt;
    }
    Enter {} to set default configuration for monitoring dashboard.

  Enter a value: {"outlier_count":5}

Exemple 3

Cette configuration crée un tableau de bord qui affiche 10 VM TPU présentant des anomalies en utilisant "test" comme préfixe pour les noms de nœuds générés par le tableau de bord:

var.project_name
  Name of gcp project

  Enter a value: <gcp_project_name>

var.stack_trace_bucket_config
    Configuration to create a log bucket to store stack traces:
    {
      "bucket_name": "name of log bucket to create",
      "retention_days": &lt;number of days to retain stack traces, default to 30 days if not set&gt;
    }
    Enter {} to not create separate bucket for stack traces.

  Enter a value: {}

var.monitoring_dashboard_config
    Configuration for monitoring dashboard:
    {
      "node_prefix": "prefix used to generate the node name in multislice node provision, default to empty string",
      "outlier_count": &ltnumber of outliers to show on dashboard, default to 10 if not set&gt;
    }
    Enter {} to set default configuration for monitoring dashboard.

  Enter a value: {"node_prefix":"test"}

Exemple 4

Cette configuration crée un tableau de bord qui affiche cinq VM présentant des anomalies en utilisant "test" comme préfixe pour les noms de nœuds générés par le tableau de bord.

var.project_name
  Name of gcp project

  Enter a value: <gcp_project_name>

var.stack_trace_bucket_config
    Configuration to create a log bucket to store stack traces:
    {
      "bucket_name": "name of log bucket to create",
      "retention_days": &lt;number of days to retain stack traces, default to 30 days if not set&gt;
    }
    Enter {} to not create separate bucket for stack traces.

  Enter a value: {}

var.monitoring_dashboard_config
    Configuration for monitoring dashboard:
    {
    "node_prefix": "prefix used to generate the node name in multislice node provision, default to empty string",
      "outlier_count": "number of outliers to show on dashboard, default to 10 if not set"
    }
    Enter {} to set default configuration for monitoring dashboard.

  Enter a value: {"node_prefix":"test", "outlier_count":5}

Exemple 5

Cet exemple configure un bucket Cloud Storage pour stocker les traces de la pile. Les traces de la pile sont soumises à une règle de conservation par défaut de 30 jours.

var.project_name
  Name of gcp project

  Enter a value: <gcp_project_name>

var.stack_trace_bucket_config
    Configuration to create a log bucket to store stack traces:
    {
      "bucket_name": "name of log bucket to create",
      "retention_days": &lt;number of days to retain stack traces, default to 30 days if not set&gt;
    }
    Enter {} to not create separate bucket for stack traces.

  Enter a value: {"bucket_name":"stack_trace_log_bucket"}

var.monitoring_dashboard_config
    Configuration for monitoring dashboard:
    {
    "node_prefix": "prefix used to generate the node name in multislice node provision, default to empty string",
      "outlier_count": "number of outliers to show on dashboard, default to 10 if not set"
    }
    Enter {} to set default configuration for monitoring dashboard.

  Enter a value: {}

Exemple 6

Cet exemple configure un bucket Cloud Storage avec une durée de conservation de 20 jours.

var.project_name
  Name of gcp project

  Enter a value: <gcp_project_name>

var.stack_trace_bucket_config
    Configuration to create a log bucket to store stack traces:
    {
      "bucket_name": "name of log bucket to create",
      "retention_days": &lt;number of days to retain stack traces, default to 30 days if not set&gt;
    }
    Enter {} to not create separate bucket for stack traces.

  Enter a value: {"bucket_name":"stack_trace_log_bucket", "retention_days":20}

var.monitoring_dashboard_config
    Configuration for monitoring dashboard:
    {
    "node_prefix": "prefix used to generate the node name in multislice node provision, default to empty string",
      "outlier_count": "number of outliers to show on dashboard, default to 10 if not set"
    }
    Enter {} to set default configuration for monitoring dashboard.

  Enter a value: {}