Como depurar VMs do Cloud TPU

Neste documento, descrevemos como usar o cloud-tpu-diagnostics. Pacote PyPI para gerar stack traces de processos em execução em VMs da TPU. Isso despeja os traces do Python quando ocorre uma falha, por exemplo, segmentação de serviç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 comando cloud-tpu-diagnostics PyPI, é preciso instalá-lo executando pip install cloud-tpu-diagnostics em todas as VMs da TPU. Você pode fazer isso com um gcloud compute tpus tpu-vm ssh kubectl. 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"

Também é preciso adicionar o código a seguir aos scripts em execução em todas as VMs da 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. Você pode 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 da TPU que fazem upload os traces de um diretório temporário para o Cloud Logging.