Déboguer des VM Cloud TPU

Ce document explique comment utiliser cloud-tpu-diagnostics. Package PyPI pour générer des traces de pile pour les processus exécutés dans des VM TPU. Ce package vide les traces Python lorsqu'une erreur se produit, par exemple des erreurs de segmentation, des exceptions à virgule flottante ou des exceptions d'opération illégale. De plus, il collecte régulièrement des traces de pile pour vous aider à déboguer les situations où le programme ne répond pas.

Pour utiliser cloud-tpu-diagnostics, package PyPI, vous devez l'installer en exécutant pip install cloud-tpu-diagnostics sur toutes les VM TPU. Vous pouvez le faire avec un seul gcloud compute tpus tpu-vm ssh . Exemple :

  gcloud compute tpus tpu-vm ssh you-tpu-name \
  --zone=your-zone \
  --project=your-project-name \
  --worker=all \
  --command="pip install cloud-tpu-diagnostics"

Vous devez également ajouter le code suivant à vos scripts exécutés sur toutes les VM TPU.

from cloud_tpu_diagnostics import diagnostic
from cloud_tpu_diagnostics.configuration import debug_configuration
from cloud_tpu_diagnostics.configuration import diagnostic_configuration
from cloud_tpu_diagnostics.configuration import stack_trace_configuration

stack_trace_config = stack_trace_configuration.StackTraceConfig(
                      collect_stack_trace = True,
                      stack_trace_to_cloud = True)
debug_config = debug_configuration.DebugConfig(
                stack_trace_config = stack_trace_config)
diagnostic_config = diagnostic_configuration.DiagnosticConfig(
                      debug_config = debug_config)

Par défaut, les traces de la pile sont collectées toutes les 10 minutes. Vous pouvez modifier la durée entre deux événements de collecte de la trace de la pile sur cinq minutes, par exemple :

stack_trace_config = stack_trace_configuration.StackTraceConfig(
                      collect_stack_trace = True,
                      stack_trace_to_cloud = True,
                      stack_trace_interval_seconds = 300)

Encapsulez votre méthode principale avec diagnose() pour collecter périodiquement les traces de la pile :

with diagnostic.diagnose(diagnostic_config):
    run_main()

Cette configuration commence à collecter des traces de pile dans le répertoire /tmp/debugging sur chaque VM TPU. Un agent est en cours d'exécution sur toutes les VM TPU qui importe les traces depuis un répertoire temporaire vers Cloud Logging.