Cómo depurar VMs de Cloud TPU

En este documento, se describe cómo usar el paquete cloud-tpu-diagnostics de PyPI 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, también recopila seguimientos de pila de forma periódica para ayudarte a depurar situaciones en las que el programa no responde.

Para usar el paquete cloud-tpu-diagnostics de PyPI, debes instalarlo ejecutando pip install cloud-tpu-diagnostics en todas las VMs 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 VM 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)

De forma 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 periódicamente los seguimientos de pila:

with diagnostic.diagnose(diagnostic_config):
    run_main()

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