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 sur des VM TPU. Ce package vide les traces Python en cas de défaillance, par exemple en cas de segmentation, d'exception à virgule flottante ou d'exception d'opération illégale. De plus, il collecte régulièrement les traces de la pile pour vous aider à déboguer les situations lorsque 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, vous pouvez utiliser 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 la pile sont collectées toutes les 10 minutes. Vous pouvez définir la durée entre deux événements de collecte des traces de pile de 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 régulièrement les traces de la pile:

with diagnostic.diagnose(diagnostic_config):
    run_main()

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