Cloud TPU-VMs debuggen

In diesem Dokument wird beschrieben, wie Sie mit dem PyPI-Paket cloud-tpu-diagnostics Stacktraces für Prozesse generieren, die in TPU-VMs ausgeführt werden. Dieses Paket gibt die Python-Traces aus, wenn ein Fehler auftritt, z. B. bei Segmentierungsfehlern, Gleitkommaausnahmen oder Ausnahmen von unzulässigen Vorgängen. Außerdem werden regelmäßig Stacktraces erfasst, um Ihnen bei der Fehlerbehebung zu helfen, wenn das Programm nicht reagiert.

Wenn Sie das PyPI-Paket cloud-tpu-diagnostics verwenden möchten, müssen Sie es durch Ausführen von pip install cloud-tpu-diagnostics auf allen TPU-VMs installieren. Dazu können Sie nur einen gcloud compute tpus tpu-vm ssh-Befehl verwenden. Beispiel:

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

Außerdem müssen Sie den Skripts, die auf allen TPU-VMs ausgeführt werden, den folgenden Code hinzufügen.

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)

Standardmäßig werden Stacktraces alle 10 Minuten erfasst. Sie können die Dauer zwischen zwei Stacktrace-Erfassungsereignissen auf 5 Minuten ändern. Beispiel:

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

Umschließen Sie Ihre Hauptmethode mit diagnose(), um die Stacktraces regelmäßig zu erfassen:

with diagnostic.diagnose(diagnostic_config):
    run_main()

Diese Konfiguration beginnt mit dem Erfassen von Stacktraces im Verzeichnis /tmp/debugging auf jeder TPU-VM. Auf allen TPU-VMs wird ein Agent ausgeführt, der die Traces aus einem temporären Verzeichnis in Cloud Logging hochlädt.