Cloud TPU のモニタリングおよびロギング ダッシュボード

Cloud TPU のモニタリングおよびデバッグ ダッシュボード リポジトリには、TPU VM 上で実行されるワークフローのモニタリングとデバッグに必要なすべてのインフラストラクチャとロジックが含まれています。これには Terraform が必要です。これは、構成ファイルを使用して Google Cloud インフラストラクチャを定義して管理するオープンソース ツールです。

モニタリング ダッシュボード

モニタリング ダッシュボードには、次の Cloud TPU 指標が表示されます。

  • TPU ワーカーの CPU 使用率: cpu/utilization
  • TPU VM によるメモリ使用量: memory/usage
  • ネットワーク経由で Pod が受信したネットワーク バイト数: network/received_bytes_count
  • Pod がネットワーク経由で送信したネットワーク バイト数: network/sent_bytes_count
  • TPU チップの TensorCore のアイドル状態の期間: tpu/tensorcore/idle_duration

Cloud Monitoring は指標データを自動的に生成します。モニタリング ダッシュボードを表示するには、Google Cloud コンソールに移動し、[Monitoring]、[ダッシュボード] の順に選択します。ダッシュボードのリストで [GCE - TPU Monitoring Dashboard] を選択します。Cloud TPU モニタリング ダッシュボードは複数のペインで構成され、各ペインには指標データが表示されます。Cloud TPU の指標ごとに、現在の指標値、平均、最大値がダッシュボードの別々のペインに表示されます。平均ペインと最大ペインで、外れ値の TPU VM を特定してさらに詳しく調査できます。

TPU 指標は、Cloud Monitoring Google Cloud コンソールの Metrics Explorer を使用して表示することもできます。詳細については、Cloud TPU VM のモニタリングをご覧ください。

ロギング ダッシュボード

ロギング ダッシュボードには、次の 2 つのセクションが表示されます。

  1. ログ指標: 各 TPU VM ワーカーで収集されたスタック トレース エントリの数を表示します。
  2. ログパネル: 重大度、タイムスタンプ、エントリの概要の列を含む、すべてのスタック トレース エントリを表示します。このログパネルは、文字列または node_idworker_id などの TPU ワーカーラベルでフィルタできます。たとえば、フィルタ resource.labels.node_id:"testing" を追加すると、ID が「testing」に設定された TPU VM ワーカーについて収集されたすべてのトレース エントリが表示されます。

Cloud Logging は、Google Cloud サービス、サードパーティ サービス、ML フレームワーク、コードによって生成されたログエントリを収集します。cloud-tpu-diagnostics PyPi パッケージをインストールして、障害や例外が発生したとき、またはワークロードが応答しない場合に Python スタック トレースを書き込むことができます。詳細については、Cloud TPU VM のデバッグをご覧ください。

ロギング ダッシュボードを表示するには、Google Cloud コンソールに移動し、[Monitoring]、[ダッシュボード] の順に選択します。ダッシュボードのリストで [GCE - TPU Logging Dashboard] を選択します。

指標とロギングのダッシュボードを構成する

以下の手順に沿って、指標とロギングのダッシュボードを構成します。

ダッシュボード リポジトリのクローンを作成する

リポジトリのクローンは、Cloud TPU Monitoring and Debugging GitHub リポジトリまたはコマンドラインから直接作成することができます。

git clone https://github.com/google/cloud-tpu-monitoring-debugging.git

Terraform をインストールする

  1. ローカルマシンに Terraform をインストールします。
  2. terraform init を実行して必要なプラグインを追加し、.terraform ディレクトリを作成します。
  3. terraform init –upgrade を実行して、利用可能なアップデートをインストールします。

モニタリングとロギングの権限を構成する

Google Cloud プロジェクトにモニタリング対象リソースをデプロイするには、モニタリング管理者、モニタリング ダッシュボード構成の編集者、Logging 管理者のロールが必要です。モニタリングのロールの詳細については、Cloud Monitoring へのアクセス権を付与するをご覧ください。

Cloud Storage バケットを作成する

Terraform 状態ファイルを保存するための Cloud Storage バケットを作成します。既存の Cloud Storage バケットを使用することもできます。Cloud Storage バケットを使用すると、複数のユーザーが Terraform を同時に実行し、同じインフラストラクチャにアクセスできるようになります。

  1. Cloud Shell で、Cloud Storage バケットを作成します。

    gsutil mb gs://${GCS_BUCKET_NAME}
    
  2. オブジェクトのバージョニングを有効にして、デプロイの履歴を保持します。オブジェクトのバージョニングを有効にすると、ストレージ コストが増加します。これは、古い状態のバージョンを削除するようにオブジェクトのライフサイクル管理を構成することで軽減できます。

    gsutil versioning set on gs://${GCS_BUCKET_NAME}
    

Terraform を初期化する

リポジトリの gcp_resources/gce ディレクトリ内で terraform init を実行します。このコマンドでは、Terraform 状態ファイルを保存するための Cloud Storage バケットの名前を入力するように求められます。

モニタリングとロギングのダッシュボードをデプロイする

gcp_resources/gce ディレクトリ内で terraform apply を実行し、Google Cloud プロジェクトにモニタリング ダッシュボードとロギング ダッシュボードをデプロイします。このコマンドでは、次の変数の値を指定するように求められます。

  • var.monitoring_dashboard_config
  • var.project_name
  • var.stack_trace_bucket_config

モニタリング ダッシュボードのみをデプロイする場合は、gcp_resources/gce/dashboard/monitoring_dashboard ディレクトリ内で terraform initterraform apply を実行します。同様に、gcp_resources/gce/dashboard/logging_dashboard ディレクトリ内でこれらのコマンドを実行して、ロギング ダッシュボードのみをデプロイします。

構成例

terraform apply を実行すると、Terraform によって構成変数の値の入力を求められます。このセクションでは、使用可能な構成の例をいくつか示します。各例では、terraform apply コマンドで表示される出力と、各構成変数の提案する値を太字で示しています。入力は中かっこ(「{}」)で囲まれた JSON 形式にする必要があります。

例 1

この例では、Google Cloud プロジェクト名を指定し、残りの構成にデフォルト値を使用します。

var.project_name
  Name of gcp project

  Enter a value: <gcp_project_name>

var.stack_trace_bucket_config
    Configuration to create a log bucket to store stack traces:
    {
      "bucket_name": "name of log bucket to create",
      "retention_days": &lt;number of days to retain stack traces, default to 30 days if not set&gt;
    }
    Enter {} to not create separate bucket for stack traces.

  Enter a value: {}

var.monitoring_dashboard_config
    Configuration for monitoring dashboard:
    {
      "node_prefix": "prefix used to generate the node name in multislice node provision, default to empty string",
      "outlier_count": &lt;the number of outliers to show on dashboard, default to 10 if not set&gt;
    }
    Enter {} to set default configuration for monitoring dashboard.

  Enter a value: {}

例 2

この例では、5 つの外れ値 TPU VM を表示するようにダッシュボードを構成しています。

var.project_name
  Name of gcp project

  Enter a value: <gcp_project_name>

var.stack_trace_bucket_config
    Configuration to create a log bucket to store stack traces:
    {
      "bucket_name": "name of log bucket to create",
      "retention_days": &lt;number of days to retain stack traces, default to 30 days if not set&gt;
    }
    Enter {} to not create separate bucket for stack traces.

  Enter a value: {}

var.monitoring_dashboard_config
    Configuration for monitoring dashboard:
    {
    "node_prefix": "prefix used to generate the node name in multislice node provision, default to empty string",
      "outlier_count": &lt;number of outliers to show on dashboard, default to 10 if not set&gt;
    }
    Enter {} to set default configuration for monitoring dashboard.

  Enter a value: {"outlier_count":5}

例 3

この構成では、ダッシュボードによって生成されたノード名の接頭辞として「test」を使用して、10 個の外れ値 TPU VM を表示するダッシュボードを作成します。

var.project_name
  Name of gcp project

  Enter a value: <gcp_project_name>

var.stack_trace_bucket_config
    Configuration to create a log bucket to store stack traces:
    {
      "bucket_name": "name of log bucket to create",
      "retention_days": &lt;number of days to retain stack traces, default to 30 days if not set&gt;
    }
    Enter {} to not create separate bucket for stack traces.

  Enter a value: {}

var.monitoring_dashboard_config
    Configuration for monitoring dashboard:
    {
      "node_prefix": "prefix used to generate the node name in multislice node provision, default to empty string",
      "outlier_count": &ltnumber of outliers to show on dashboard, default to 10 if not set&gt;
    }
    Enter {} to set default configuration for monitoring dashboard.

  Enter a value: {"node_prefix":"test"}

例 4

この構成では、ダッシュボードによって生成されたノード名の接頭辞として「test」を使用して、5 つの外れ値 VM を表示するダッシュボードを作成します。

var.project_name
  Name of gcp project

  Enter a value: <gcp_project_name>

var.stack_trace_bucket_config
    Configuration to create a log bucket to store stack traces:
    {
      "bucket_name": "name of log bucket to create",
      "retention_days": &lt;number of days to retain stack traces, default to 30 days if not set&gt;
    }
    Enter {} to not create separate bucket for stack traces.

  Enter a value: {}

var.monitoring_dashboard_config
    Configuration for monitoring dashboard:
    {
    "node_prefix": "prefix used to generate the node name in multislice node provision, default to empty string",
      "outlier_count": "number of outliers to show on dashboard, default to 10 if not set"
    }
    Enter {} to set default configuration for monitoring dashboard.

  Enter a value: {"node_prefix":"test", "outlier_count":5}

例 5

この例では、スタック トレースを保存する Cloud Storage バケットを構成します。スタック トレースには、デフォルトで 30 日間の保持ポリシーが設定されています。

var.project_name
  Name of gcp project

  Enter a value: <gcp_project_name>

var.stack_trace_bucket_config
    Configuration to create a log bucket to store stack traces:
    {
      "bucket_name": "name of log bucket to create",
      "retention_days": &lt;number of days to retain stack traces, default to 30 days if not set&gt;
    }
    Enter {} to not create separate bucket for stack traces.

  Enter a value: {"bucket_name":"stack_trace_log_bucket"}

var.monitoring_dashboard_config
    Configuration for monitoring dashboard:
    {
    "node_prefix": "prefix used to generate the node name in multislice node provision, default to empty string",
      "outlier_count": "number of outliers to show on dashboard, default to 10 if not set"
    }
    Enter {} to set default configuration for monitoring dashboard.

  Enter a value: {}

例 6

この例では、保持期間が 20 日間の Cloud Storage バケットを構成しています。

var.project_name
  Name of gcp project

  Enter a value: <gcp_project_name>

var.stack_trace_bucket_config
    Configuration to create a log bucket to store stack traces:
    {
      "bucket_name": "name of log bucket to create",
      "retention_days": &lt;number of days to retain stack traces, default to 30 days if not set&gt;
    }
    Enter {} to not create separate bucket for stack traces.

  Enter a value: {"bucket_name":"stack_trace_log_bucket", "retention_days":20}

var.monitoring_dashboard_config
    Configuration for monitoring dashboard:
    {
    "node_prefix": "prefix used to generate the node name in multislice node provision, default to empty string",
      "outlier_count": "number of outliers to show on dashboard, default to 10 if not set"
    }
    Enter {} to set default configuration for monitoring dashboard.

  Enter a value: {}