调试 Cloud TPU 虚拟机

本文档介绍如何使用 cloud-tpu-diagnostics PyPI 软件包为 TPU 虚拟机中运行的进程生成堆栈轨迹。当故障(例如分段错误、浮点异常或非法操作异常)发生时,此软件包会转储 Python 跟踪记录。此外,它还会定期收集堆栈轨迹,以便在程序无响应时帮助您调试问题。

如需使用 cloud-tpu-diagnostics PyPI 软件包,必须通过在所有 TPU 虚拟机上运行 pip install cloud-tpu-diagnostics 来安装该软件包。您可以使用一个 gcloud compute tpus tpu-vm ssh 命令执行此操作。例如:

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

您还必须将以下代码添加到在所有 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)

默认情况下,系统每 10 分钟收集一次堆栈轨迹。您可以将两个堆栈轨迹收集事件之间的时长更改为 5 分钟,例如:

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

使用 diagnose() 封装主方法,以定期收集堆栈轨迹:

with diagnostic.diagnose(diagnostic_config):
    run_main()

此配置开始在每个 TPU 虚拟机上的 /tmp/debugging 目录内收集堆栈轨迹。有一个代理在所有 TPU 虚拟机上运行,该代理可将跟踪记录从临时目录上传到 Cloud Logging。