Cloud TPU-VMs debuggen

In diesem Dokument wird beschrieben, wie Sie mit dem PyPI-Paket cloud-tpu-diagnostics Stack-Traces für Prozesse generieren, die in TPU-VMs ausgeführt werden. Dieses Paket erstellt einen Dump der Python-Traces, wenn ein Fehler auftritt, z. B. Segmentierungsfehler, Gleitkommaausnahmen oder Ausnahmen für unzulässige Vorgänge. Außerdem werden regelmäßig Stack-Traces 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 installieren, indem Sie pip install cloud-tpu-diagnostics auf allen TPU-VMs ausführen. Dazu können Sie einen einzigen 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 folgenden Code in Ihre Scripts einfügen, die auf allen TPU-VMs ausgeführt werden.

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 Stack-Traces alle 10 Minuten erfasst. Sie können die Dauer zwischen zwei Ereignissen zur Erfassung von Stack-Traces beispielsweise auf 5 Minuten festlegen:

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

Um die Stack-Traces regelmäßig zu erfassen, müssen Sie Ihre Hauptmethode in diagnose() einschließen:

with diagnostic.diagnose(diagnostic_config):
    run_main()

Mit dieser Konfiguration werden auf jeder TPU-VM Stack-Traces im Verzeichnis /tmp/debugging erfasst. Auf allen TPU-VMs wird ein Agent ausgeführt, der die Traces aus einem temporären Verzeichnis in Cloud Logging hochlädt.