Stackdriver를 사용한 Cloud TPU 모니터링

이 가이드에서는 Stackdriver를 사용하여 Cloud TPU를 모니터링하는 방법을 설명합니다. Cloud TPU는 Cloud TPU 런타임 바이너리의 로그 및 측정항목(예: Cloud TPU 런타임 CPU 사용량, MXU 사용률)을 자동으로 수집하여 Stackdriver에 저장합니다. 이 가이드에서는 이러한 로그를 설명하고 다음을 수행하는 방법을 보여줍니다.

  • 로그 쿼리

  • 알림 설정 및 대시보드 시각화를 위한 로그 기반 측정항목 만들기

기본 요건

이 문서에서는 Stackdriver Logging에 대한 기본적인 지식이 있다고 가정합니다. 로그를 생성하고 작업하려면 Compute Engine VM 및 Cloud TPU 리소스를 먼저 만들어야 합니다. 자세한 내용은 빠른 시작을 참조하세요.

모델을 실행하고 리소스가 더 이상 필요하지 않을 때까지 빠른 시작에서 삭제 안내 섹션을 수행하지 마세요. 삭제 단계를 실행하면 원치 않는 요금이 발생하지 않습니다.

로깅

Stackdriver Logging은 Cloud TPU에서 자동으로 수행되며 요금이 부과될 수 있습니다. 로깅 요금에 대한 자세한 내용은 Logging 요금을 참조하세요.

Cloud TPU Pod를 추가하면 Stackdriver Logging이 선형으로 확장합니다. 로그를 제외하면 수집되는 로그 수를 줄이거나 Stackdriver Logging을 사용 중지할 수 있습니다. 자세한 내용은 로그 제외를 참조하세요.

Stackdriver에서 모니터링 로그 찾기

이 가이드에서 설명하는 모니터링 로그는 runtime_monitor라는 특수 로그 항목에 있습니다. 모니터링 로그의 위치를 찾으려면 다음 안내를 따르세요.

  1. Cloud Console의 Google Cloud 작업 제품군 로깅 > 로그(로그 뷰어) 페이지로 이동합니다.

    로그 뷰어 페이지로 이동

  2. 페이지 상단에서 기존 Google Cloud 프로젝트를 선택합니다.

  3. 감사를 받은 리소스 선택기 메뉴에서 표시할 리소스, 로그, 로그 수준 심각도를 선택할 수 있습니다. 감사를 받은 리소스 선택기 메뉴를 클릭하고 아래로 스크롤하여 TPU 워커로 마우스를 가져갑니다. 영역을 선택한 다음 로그를 보려는 Cloud TPU의 이름(node_id)을 선택합니다.

  4. 로그 드롭다운 메뉴에서 runtime_monitor를 선택합니다. 확인 버튼을 클릭합니다.

이미지

Stackdriver 고급 쿼리 사용

Stackdriver 고급 쿼리를 사용하여 요청된 모니터링 로그를 빠르게 식별할 수 있습니다.

로그 뷰어에서 고급 로그 쿼리를 사용하려면 다음 안내를 따르세요.

  1. Cloud Console의 Google Cloud의 작업 제품군 로깅 > 로그(로그 뷰어) 페이지로 이동합니다.

    로그 뷰어 페이지로 이동

  2. 페이지 상단에서 기존 Google Cloud 프로젝트를 선택하거나 새 프로젝트를 만듭니다.

  3. 검색어 상자에서 드롭다운 메뉴 를 클릭하고 고급 필터로 전환을 선택합니다.

  4. 고급 로그 쿼리 상자에 다음 스크립트를 입력한 다음 필터 제출 버튼을 클릭합니다.

    resource.type=tpu_worker
    resource.labels.project_id=your-project
    resource.labels.zone=your-tpu-zone
    resource.labels.node_id=your-tpu-name
    logName=projects/your-project/logs/tpu.googleapis.com%2Fruntime_monitor
    

이미지

로그 출력 이해

로그 항목을 클릭하여 펼치면 jsonPayload라는 필드가 표시됩니다. 여기에서 모니터링 로그가 상주합니다. 클릭하면 여러 하위 필드가 표시됩니다. 다음은 중요한 하위 필드를 요약한 것입니다.

  • evententry_timestamp: 현재 로그 항목이 생성된 타임스탬프입니다.

  • uid: Cloud TPU의 id입니다.

  • logTime: 로그 항목이 생성된 원시 런타임 로그의 타임스탬프입니다.

  • checkpoint_succeeded: 체크포인트가 성공적으로 저장되었는지 여부입니다.

  • training_completed: 학습 프로세스가 완료로 표시되었는지 여부입니다.

  • compilation_succeeded: 컴파일이 성공했는지 여부입니다.

  • compilation_timed_out: 컴파일이 타임아웃되었는지 여부입니다.

  • execute_succeeded: 실행이 성공했는지 여부입니다.

  • execute_timed_out: 실행이 타임아웃되었는지 여부입니다.

  • eager_started: 런타임에서 즉시 실행(eager) 모드를 채택하고 있는지 여부입니다.

  • framework: 런타임 프레임워크(예: tensorflow 또는 pytorch)입니다.

  • runtime_cpu_perc: Cloud TPU 런타임 CPU 사용량 비율입니다. 0~5,000 범위의 숫자 값입니다.

  • runtime_used_MiB: Cloud TPU 런타임 메모리 사용량(MiB)입니다. 0~350,000 범위의 숫자 값입니다.

  • system_available_memory_GiB: 남은 시스템 가용 메모리(GiB)입니다. 0~350 범위의 숫자 값입니다.

  • matrix_unit_utilization_percent: Cloud TPU MXU 사용률입니다. 0~100 범위의 숫자 값입니다.

로그 항목의 출처에 따라 모든 하위 필드가 한 번에 표시되지는 않습니다. 예를 들어 system_available_memory_GiB 하위 필드가 있는 로그 항목은 matrix_unit_utilization_percent와 같은 하위 필드를 포함하지 않습니다.

로그 기반 측정항목 만들기

이 섹션에서는 모니터링 대시보드 및 알림을 설정하는 데 사용되는 로그 기반 측정항목을 만드는 방법을 설명합니다. Stackdriver REST API를 사용하여 프로그래매틱 방식으로 로그 기반 측정항목 만들기도 참조하세요.

다음 예시에서는 matrix_unit_utilization_percent 하위 필드를 사용하여 Cloud TPU 행렬 곱셈 단위(MXU) 사용률 모니터링용 로그 기반 측정항목을 만드는 데 필요한 절차를 설명합니다.

  1. 고급 쿼리 상자에 다음 쿼리 스크립트를 입력하여 기본 Cloud TPU 워커에 matrix_unit_utilization_percent가 정의된 모든 로그 항목을 추출합니다.

    resource.type=tpu_worker
    resource.labels.project_id=your-project
    resource.labels.zone=your-tpu-zone
    resource.labels.node_id=your-tpu-name
    resource.labels.worker_id=0
    logName=projects/your-project/logs/tpu.googleapis.com%2Fruntime_monitor
    jsonPayload.matrix_unit_utilization_percent:*
    
  2. 측정항목 만들기 버튼을 클릭합니다. 오른쪽에 표시된 측정항목 편집기 사이드바에서 이름 필드와 설명 필드에 'matrix_unit_utilization_percent'와 'MXU utilization'을 각각 입력합니다.

  3. 유형 드롭다운 메뉴를 클릭하고 분포를 선택합니다. 분포 유형은 숫자 측정항목을 표시하는 데 적합합니다.

  4. 필드 이름에 'jsonPayload.matrix_unit_utilization_percent'를 입력합니다.

  5. 더보기를 클릭합니다. 히스토그램 버킷 섹션에서 유형 드롭다운 메뉴를 선형으로 변경합니다. 시작 값에 0, 버킷 수에 200, 버킷 너비에 0.5를 입력합니다. 그러면 버킷 너비가 0.5이고 범위가 0~100인 버킷 200개가 생성됩니다.

  6. 사이드바 하단의 측정항목 만들기 버튼을 클릭하여 측정항목 만들기를 완료합니다.

이미지

모니터링 결과를 정확하게 표시하려면 버킷 범위 정의가 적절해야 합니다. 로그 출력 이해의 숫자 필드에 지정된 범위 값을 사용합니다. 한 가지 방법은 선형유형으로, 200을 버킷 수로 사용한 다음 측정항목 범위를 기준으로 버킷 너비를 파악합니다.

Stackdriver REST API를 사용하여 프로그래매틱 방식으로 로그 기반 측정항목 만들기

Stackdriver REST API를 통해 이러한 측정항목을 프로그래매틱 방식으로 만들 수 있습니다. 이 API를 사용하기 위한 기본 요건은 모든 필수 측정항목의 정의가 포함된 JSON 파일입니다. JSON을 사용하여 로그 기반 측정항목을 정의하는 방법은 분포 측정항목 만들기 안내를 참조하세요. 다음 예시에서는 JSON 파일 하나에 두 개의 측정항목을 선언합니다.

[
  {
    "name": "system_available_memory_GiB",
    "description": "System available memory.",
    "filter": "resource.type=tpu_worker AND resource.labels.project_id=your-project AND jsonPayload.system_available_memory_GiB:*",
    "valueExtractor": "EXTRACT(jsonPayload.system_available_memory_GiB)",
    "bucketOptions": {
      "linearBuckets": {
        "numFiniteBuckets": 200,
        "width": 1.75,
        "offset": 0
      }
    },
    "metricDescriptor": {
      "metricKind": "DELTA",
      "valueType": "DISTRIBUTION"
    }
  },
  {
    "name": "matrix_unit_utilization_percent",
    "description": "MXU utilization.",
    "filter": "resource.type=tpu_worker AND resource.labels.project_id=your-project AND jsonPayload.matrix_unit_utilization_percent:*",
    "valueExtractor": "EXTRACT(jsonPayload.matrix_unit_utilization_percent)",
    "bucketOptions": {
      "linearBuckets": {
        "numFiniteBuckets": 200,
        "width": 0.5,
        "offset": 0
      }
    },
    "metricDescriptor": {
      "metricKind": "DELTA",
      "valueType": "DISTRIBUTION"
    }
  }
]

측정항목 만들기를 단순화하기 위해 이 링크에 다음과 같은 사전 정의된 측정항목이 포함된 JSON 파일이 제공됩니다.

  1. matrix_unit_utilization_percent: MXU 사용률입니다.

  2. system_available_memory_GiB: 시스템 가용 메모리(GiB)입니다.

  3. runtime_used_MiB: Cloud TPU 런타임 메모리 사용량(MiB)입니다.

  4. runtime_cpu_perc: Cloud TPU 런타임 CPU 사용량 비율입니다.

  5. training_completed: 완료된 학습 이벤트 수입니다.

  6. compilation_succeeded: 성공한 컴파일 이벤트 수입니다.

Stackdriver REST API는 한 번에 JSON 객체 하나만 입력으로 사용합니다. 따라서 JSON 파일의 목록을 REST API로 전달하기 전에 개별 JSON 객체로 분할하는 도구가 필요합니다. 오픈소스 도구인 jq를 사용하는 것이 좋습니다.

이미 이름이 같은 측정항목을 만든 경우 JSON 파일에서 측정항목 정의의 이름을 변경하거나 기존 측정항목을 삭제한 후 Stackdriver REST API를 실행해야 합니다. 기존 측정항목을 삭제하려면 먼저 측정항목에 설정된 모든 알림을 삭제해야 합니다. 기존 알림 정책을 삭제하는 방법은 이 가이드에 설명된 안내를 따르세요. 다음 안내에 따라 자동으로 측정항목을 삭제하고 새 측정항목을 만들 수 있습니다.

  1. 다운로드한 JSON 파일을 열고 your-project를 프로젝트로 바꿉니다.

  2. 기존 측정항목을 모두 삭제합니다.

    jq -c '.[] | .name' your-json-file-name | \
    xargs -I % curl -X DELETE "https://logging.googleapis.com/v2/projects/your-project/metrics/%" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Accept: application/json"
    
  3. 새 측정항목을 만듭니다.

    jq -c .[] your-json-file-name | \
    xargs -0 -d '\n' -I % curl -X POST "https://logging.googleapis.com/v2/projects/your-project/metrics" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Accept: application/json" -H "Content-Type: application/json" -d %
    

로그 기반 측정항목을 사용하여 대시보드 및 알림 만들기

로그 기반 측정항목을 만들었으면 Stackdriver Monitoring에서 대시보드와 알림을 만들 수 있습니다. 대시보드는 측정항목을 시각화하는 데 유용합니다(최대 2분 지연). 알림은 문제가 발생했을 때 알려줍니다.

대시보드 만들기

이 섹션의 단계에서는 matrix_unit_utilization_percent 측정항목에 대해 Stackdriver Monitoring에서 대시보드를 만드는 예시를 보여줍니다.

  1. Stackdriver Monitoring 콘솔로 이동합니다.

    Stackdriver Monitoring으로 이동

  2. 커서를 대시보드로 이동하고 표시된 메시지 메뉴에서 대시보드 만들기를 클릭합니다.

  3. 오른쪽 상단의 차트 추가 버튼을 클릭합니다.

  4. 메시지가 표시된 새 페이지에서 차트 제목 텍스트 입력 상자에 'TPU runtime MXU utilization'을 입력합니다.

  5. 리소스 유형 및 측정항목 찾기 필드에 'matrix_unit_utilization_percent'를 입력합니다. Stackdriver는 생성된 측정항목 logging.googleapis.com/user/matrix_unit_utilization_percent를 자동으로 로드합니다. 찾은 측정항목을 선택합니다. 리소스 유형 필드는 자동으로 TPU 워커로 채워집니다.

  6. 필터 필드에서 project_id를 프로젝트로, zone을 tpu 영역으로, node_id를 tpu 이름으로 설정합니다.

  7. 애그리게이터없음으로 변경합니다. 그런 다음 페이지 하단의 저장 버튼을 클릭합니다.

알림 만들기

이 섹션의 단계에서는 matrix_unit_utilization_percent 측정항목에 대한 알림 정책을 추가하는 방법의 예시를 보여줍니다. 이는 Cloud TPU MXU 사용률에 연결된 알림 정책을 생성합니다. 이 변수가 1시간 이상 동안 5% 미만으로 떨어지면 Stackdriver에서 등록된 이메일 주소로 이메일을 보냅니다. Cloud TPU의 MXU 사용률이 5% 이상으로 다시 증가하면 Stackdriver에서 알람이 삭제되었다는 알림을 보냅니다.

  1. Stackdriver Monitoring 콘솔로 이동합니다.

    Stackdriver Monitoring으로 이동

  2. 커서를 알림 위에 놓고 안내 메뉴에서 정책 만들기를 클릭합니다.

  3. 표시된 새 알림 정책 만들기 페이지에서 조건 추가 버튼을 클릭합니다.

  4. 조건 필드에 'TPU runtime low MXU utilization alert'을 입력합니다.

  5. 리소스 유형 및 측정항목 찾기 필드에 'matrix_unit_utilization_percent'를 입력합니다. Stackdriver는 생성된 측정항목 logging.googleapis.com/user/matrix_unit_utilization_percent를 자동으로 로드합니다. 찾은 측정항목을 선택합니다. 리소스 유형 필드는 자동으로 TPU 워커로 채워집니다.

  6. 구성 섹션에서 조건미만으로 변경합니다. 기준 필드에 5를 입력하고 기간 드롭다운 메뉴에서 1시간을 선택합니다. 저장 버튼을 클릭합니다.

  7. 알림 채널 유형 드롭다운 메뉴에서 이메일을 선택하고 이메일 주소 텍스트 상자에 이메일을 입력합니다. 알림 채널 추가 버튼을 클릭합니다.

  8. 문서 필드에 알림이 실행될 때 문제를 식별하는 데 도움이 되는 정보를 입력할 수 있습니다.

  9. 이 정책 이름 지정 아래의 텍스트 입력 상자에 'TPU runtime low MXU utilization alert'를 입력합니다. 하단의 저장 버튼을 클릭합니다.