Déboguer des VM Cloud TPU

Ce document explique comment utiliser le package PyPI cloud-tpu-diagnostics 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 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 une seule 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 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 s'exécute sur toutes les VM TPU et importe les traces d'un répertoire temporaire vers Cloud Logging.