调试 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。