Como depurar VMs do Cloud TPU

Este documento descreve como usar o pacote PyPI cloud-tpu-diagnostics para gerar rastros de pilha de processos em execução em VMs do TPU. Esse pacote salva os rastros do Python quando ocorre uma falha, por exemplo, falhas de segmentação, exceções de ponto flutuante ou exceções de operação ilegal. Além disso, ele também coleta periodicamente stack traces para ajudar a depurar situações em que o programa não responde.

Para usar o pacote PyPI cloud-tpu-diagnostics, é necessário instalá-lo executando pip install cloud-tpu-diagnostics em todas as VMs da TPU. É possível fazer isso com um comando gcloud compute tpus tpu-vm ssh. Exemplo:

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

Você também precisa adicionar o seguinte código aos scripts executados em todas as 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)

Por padrão, os rastros de pilha são coletados a cada 10 minutos. É possível mudar a duração entre dois eventos de coleta de stack trace para 5 minutos, por exemplo:

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

Encapsule seu método principal com diagnose() para coletar periodicamente os rastros de pilha:

with diagnostic.diagnose(diagnostic_config):
    run_main()

Essa configuração começa a coletar rastros de pilha no diretório /tmp/debugging em cada VM de TPU. Há um agente em execução em todas as VMs de TPU que faz o upload dos rastros de um diretório temporário para o Cloud Logging.