Cloud TPU-VMs debuggen

In diesem Dokument wird die Verwendung von cloud-tpu-diagnostics beschrieben. PyPI-Paket zum Generieren von Stacktraces für Prozesse, 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 Stacktraces erfasst, um Sie bei der Fehlerbehebung zu unterstützen. 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)

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

with diagnostic.diagnose(diagnostic_config):
    run_main()

Mit dieser Konfiguration werden auf jeder TPU-VM Stack-Traces im Verzeichnis /tmp/debugging erfasst. Es wird ein Agent auf allen TPU-VMs ausgeführt, die Inhalte hochladen die Traces aus einem temporären Verzeichnis zu Cloud Logging übertragen.