Depura las VMs de Cloud TPU

En este documento, se describe cómo usar el paquete de PyPI cloud-tpu-diagnostics para generar seguimientos de pila para procesos que se ejecutan en VMs de TPU. Este paquete vuelca los seguimientos de Python cuando se produce una falla, por ejemplo, fallas de segmentación, excepciones de punto flotante o excepciones de operaciones ilegales. Además, recopila periódicamente seguimientos de pila para ayudarte a depurar situaciones en las que el programa no responde.

Para usar el paquete de PyPI cloud-tpu-diagnostics, debes instalarlo. Para ello, ejecuta pip install cloud-tpu-diagnostics en todas las VM de TPU. Puedes hacerlo con un comando gcloud compute tpus tpu-vm ssh. Por ejemplo:

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

También debes agregar el siguiente código a las secuencias de comandos que se ejecutan en todas las VMs de 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)

Según la configuración predeterminada, los seguimientos de pila se recopilan cada 10 minutos. Puedes cambiar la duración entre dos eventos de recopilación de seguimiento de pila a 5 minutos, por ejemplo:

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

Une tu método principal con diagnose() para recopilar los seguimientos de pila de forma periódica:

with diagnostic.diagnose(diagnostic_config):
    run_main()

Esta configuración comienza a recopilar seguimientos de pila dentro del directorio /tmp/debugging en cada VM de TPU. Hay un agente en ejecución en todas las VM de TPU que sube los seguimientos desde un directorio temporal a Cloud Logging.