Cloud TPU VM のデバッグ

このドキュメントでは、cloud-tpu-diagnostics PyPI パッケージを使用して、TPU VM で実行されているプロセスのスタック トレースを生成する方法について説明します。このパッケージは、セグメンテーション違反、浮動小数点の例外、不正なオペレーションの例外などの障害が発生したときに Python トレースをダンプします。また、プログラムが応答しない状況のデバッグに役立つように、スタック トレースを定期的に収集します。

cloud-tpu-diagnostics PyPI パッケージを使用するには、すべての TPU VM で pip install cloud-tpu-diagnostics を実行してインストールする必要があります。これは 1 つの 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 VM で実行されるスクリプトに次のコードを追加する必要があります。

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 分ごとに収集されます。2 つのスタックトレース収集イベント間の時間を 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 VM の /tmp/debugging ディレクトリ内でスタック トレースの収集が開始されます。すべての TPU VM で実行されており、一時ディレクトリから Cloud Logging にトレースをアップロードするエージェントが存在します。