Déboguer des VM Cloud TPU

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

Pour utiliser le package PyPI cloud-tpu-diagnostics, vous devez l'installer en exécutant pip install cloud-tpu-diagnostics sur toutes les VM TPU. Pour ce faire, utilisez la commande 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 pile sont collectées toutes les 10 minutes. Vous pouvez définir la durée entre deux événements de collecte de trace de pile, par exemple toutes les 5 minutes :

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 pile :

with diagnostic.diagnose(diagnostic_config):
    run_main()

Cette configuration commence à collecter les traces de pile dans le répertoire /tmp/debugging de chaque VM TPU. Un agent s'exécute sur toutes les VM TPU et importe les traces depuis un répertoire temporaire vers Cloud Logging.