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

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

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

モニタリング ダッシュボードには、次の 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 コンソールに移動し、[モニタリング]、[ダッシュボード] の順に選択します。ダッシュボードのリストで [GCE - TPU モニタリング ダッシュボード] を選択します。Cloud TPU モニタリング ダッシュボードは、指標データを表示する複数のペインで構成されています。Cloud TPU の指標ごとに、現在の指標値、平均、最大値がダッシュボードの別々のペインに表示されます。平均と最大のペインでは、外れ値の TPU VM を特定して詳細を調査できます。

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

ロギング ダッシュボード

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

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

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

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

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

指標とロギングのダッシュボードを構成する手順は次のとおりです。

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

リポジトリのクローンは、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 バケットを作成します。

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

    gcloud storage buckets update gs://${GCS_BUCKET_NAME} --versioning
    

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: {}