Debug delle VM Cloud TPU

Questo documento descrive come utilizzare il pacchetto PyPI cloud-tpu-diagnostics per generare analisi dello stack per i processi in esecuzione nelle VM TPU. Questo pacchetto esegue il dump delle tracce Python quando si verifica un errore, ad esempio errori di segmentazione, eccezioni in virgola mobile o eccezioni di operazioni illegali. Inoltre, raccoglie periodicamente analisi dello stack per aiutarti a eseguire il debug delle situazioni in cui il programma non risponde.

Per utilizzare il pacchetto PyPI cloud-tpu-diagnostics, devi installarlo eseguendo pip install cloud-tpu-diagnostics su tutte le VM TPU. Puoi farlo con un solo comando gcloud compute tpus tpu-vm ssh. Ad esempio:

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

Devi anche aggiungere il seguente codice agli script in esecuzione su tutte le 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)

Per impostazione predefinita, le analisi dello stack vengono raccolte ogni 10 minuti. Puoi modificare la durata tra due eventi di raccolta dell'analisi dello stack e impostarla su 5 minuti, ad esempio:

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

Esegui il wrapping del metodo principale con diagnose() per raccogliere periodicamente le analisi dello stack:

with diagnostic.diagnose(diagnostic_config):
    run_main()

Questa configurazione inizia a raccogliere analisi dello stack all'interno della directory /tmp/debugging su ogni VM TPU. Un agente in esecuzione su tutte le VM TPU che carica le tracce da una directory temporanea in Cloud Logging.