Cloud TPU VM 디버깅

이 문서에서는 cloud-tpu-diagnostics PyPI 패키지를 사용하여 TPU VM에서 실행되는 프로세스의 스택 트레이스를 생성하는 방법을 설명합니다. 이 패키지는 오류가 발생할 때 Python 추적을 덤프합니다(예: 세분화 오류, 부동 소수점 예외, 잘못된 작업 예외). 또한 프로그램이 응답하지 않는 경우 상황을 디버깅하는 데 도움이 되도록 스택 트레이스를 주기적으로 수집합니다.

cloud-tpu-diagnostics PyPI 패키지를 사용하려면 모든 TPU VM에서 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 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분마다 수집됩니다. 다음과 같이 두 스택 트레이스 수집 이벤트 사이의 기간을 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으로 trace를 업로드하는 에이전트가 실행됩니다.