Depurar máquinas virtuales de TPUs de Cloud

En este documento se describe cómo usar el paquete cloud-tpu-diagnostics de PyPI para generar seguimientos de pila de los procesos que se ejecutan en las VMs de TPU. Este paquete muestra los rastreos de Python cuando se produce un error, como errores de segmentación, excepciones de coma flotante o excepciones de operaciones no permitidas. Además, también recoge periódicamente los rastreos de pila 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 gcloud compute tpus tpu-vm ssh comando. 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 debe añadir 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)

De forma predeterminada, las trazas de pila se recogen cada 10 minutos. Por ejemplo, puedes cambiar la duración entre dos eventos de recogida de seguimiento de pila a 5 minutos:

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

Encapsula tu método principal con diagnose() para recoger periódicamente los seguimientos de pila:

with diagnostic.diagnose(diagnostic_config):
    run_main()

Esta configuración empieza a recoger los seguimientos de pila en el directorio /tmp/debugging de cada VM de TPU. Hay un agente que se ejecuta en todas las VMs de TPU y que sube las trazas de un directorio temporal a Cloud Logging.