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 の料金の詳細については、Logging の料金をご覧ください。

Cloud TPU Pod を追加すると、Stackdriver Logging で直線的にスケーリングが行われます。ログを除外することで、取り込むログの数を減らしたり、Stackdriver Logging を無効にしたりできます。詳細については、ログの除外をご覧ください。

Stackdriver でのモニタリング ログの探索

このガイドで説明するモニタリング ログは、runtime_monitor という名の特別なログエントリーに存在します。それらを探索するには:

  1. Cloud Console で Google Cloud のオペレーション スイートの [Logging] > [ログ](ログビューア)ページに移動します。

    ログビューア ページに移動

  2. ページの上部にある既存の Google Cloud プロジェクトを選択します。

  3. 監査済リソースセレクタ メニューでは、表示するリソース、ログ、ログレベルの重大度を選択できます。[監査対象リソース] セレクタ メニューをクリックし、下にスクロールして [TPU ワーカー] にカーソルを合わせます。ログを表示する Cloud TPU のゾーン、名前(node_id)を選択します。

  4. ログのプルダウン メニューで [runtime_monitor] を選択します。[OK] ボタンをクリックします。

画像

Stackdriver の高度なクエリの使用

Stackdriver の高度なクエリを使用すると、リクエストしたモニタリング ログを簡単に特定できます。

ログビューアで高度なログクエリを使用するには、次の手順に従います。

  1. Cloud Console で Google Cloud のオペレーション スイートの [Logging] > [ログ](ログビューア)ページに移動します。

    ログビューア ページに移動

  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: ランタイムがイーガーモードを採用しているかどうか。

  • 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 Matrix Multiplication Unit(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 使用率」を入力します。

  3. [タイプ] プルダウン メニューをクリックして、[分布] を選択します。分布タイプは数値指標の表示に適しています。

  4. [フィールド名] に「jsonPayload.matrix_unit_utilization_percent」と入力します。

  5. その他アイコン をクリックします。[ヒストグラム バケット] セクションで、プルダウン メニューの [タイプ] を [線形] に変更します。[初期値] に 0、[バケット数] に 200、[バケット幅] に 0.5 を入力します。これにより、0〜100 の範囲で幅が 0.5 のバケットが 200 個作成されます。

  6. サイドバーの下部にある [指標を作成] ボタンをクリックして、指標の作成を完了します。

画像

モニタリング結果を正確に表示するには、バケット範囲を適切に定義する必要があります。ログ出力を理解するの数値フィールドに指定された範囲値を使用します。1 つの方法としては、常にタイプ線形バケット数は 200 とし、バケット幅は指標範囲に基づいて算出します。

Stackdriver REST API を使用してプログラムでログベースの指標を作成する

これらの指標は、Stackdriver REST API を使用してプログラムによって作成できます。この API を使用するための前提条件は、必要なすべての指標の定義が含まれる JSON ファイルです。JSON を使用してログベースの指標を定義する方法については、分布指標の作成の手順をご覧ください。次の例では、1 つの JSON ファイル内で 2 つの指標を宣言しています。

[
  {
    "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 は、一度に 1 つの JSON オブジェクトのみを入力として受け取ります。そのため、REST API に渡す前に JSON ファイル内のリストを個々の 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 分遅れ)。アラートは、問題が発生した場合の通知として役立ちます。

ダッシュボードの作成

このセクションの手順は、Stackdriver Monitoring で matrix_unit_utilization_percent の指標のダッシュボードを作成する例です。

  1. Stackdriver Monitoring Console に移動します。

    Stackdriver Monitoring に移動

  2. カーソルをダッシュボードに移動し、表示されるメニューで [ダッシュボードを作成] をクリックします。

  3. 右上の [グラフを追加] ボタンをクリックします。

  4. 表示される新しいページの [グラフのタイトル] テキスト入力ボックスに「TPU runtime MXU utilization」と入力します。

  5. [Find resource type and metric] フィールドに「matrix_unit_utilization_percent」と入力します。Stackdriver では、作成された指標 logging.googleapis.com/user/matrix_unit_utilization_percent が自動的に読み込まれます。見つかった指標を選択します。[Resource type] フィールドには、TPU ワーカーが自動的に入力されるはずです。

  6. [フィルタ] フィールドで、[プロジェクト ID] にプロジェクトを、[ゾーン] に tpu ゾーンを、[ノード ID] に tpu の名前を設定します。

  7. [集約名] を none に変更します。次に、ページ下部にある [保存] ボタンをクリックします。

アラートの作成

このセクションの手順は、matrix_unit_utilization_percent 指標のアラート ポリシーを追加する方法の一例です。Cloud TPU の MXU 使用率に関連付けられたアラート ポリシーを作成します。この変数が 1 時間以上 5% を下回ると、Stackdriver は登録されたメールアドレスにメールを送信します。Cloud TPU の MXU 使用率が再び 5% を超えると、Stackdriver はアラームが削除されたという通知を送信します。

  1. Stackdriver Monitoring Console に移動します。

    Stackdriver Monitoring に移動

  2. カーソルを [アラート] に移動し、表示されるメニューで [ポリシーを作成] をクリックします。

  3. 表示された [新しいアラート ポリシーを作成] ページで [条件を追加] ボタンをクリックします。

  4. [条件] フィールドに「TPU runtime low MXU utilization alert」と入力します。

  5. [Find resource type and metric] フィールドに「matrix_unit_utilization_percent」と入力します。Stackdriver では、作成された指標 logging.googleapis.com/user/matrix_unit_utilization_percent が自動的に読み込まれます。見つかった指標を選択します。[Resource type] フィールドには、TPU ワーカーが自動的に入力されるはずです。

  6. [構成] セクションで、[条件] を 以下に変更し、[閾値] フィールドに「5」と入力し、[期間] プルダウン メニューで 1 時間を選択します。 [保存] ボタンをクリックします。

  7. [通知チャネルタイプ] プルダウン メニューで、メールを選択し、[メールアドレス] テキスト ボックスにメールアドレスを入力します。[通知チャネルの追加] ボタンをクリックします。

  8. [ドキュメント] フィールドでは、アラートが発生したときに問題を特定するのに役立つなんらかの情報を入力できます。

  9. [このポリシーに名前を付ける] の下のテキスト入力ボックスに、「TPU runtime low MXU utilization alert」と入力します。 下部にある [保存] ボタンをクリックします。