Cloud TPU VM のモニタリング
このガイドでは、Google Cloud Monitoring を使用して Cloud TPU VM をモニタリングする方法について説明します。Google Cloud Monitoring は、Cloud TPU とそのホスト Compute Engine から指標とログを自動的に収集します。これらのデータを使用して、Cloud TPU と Compute Engine の状態をモニタリングできます。
指標を使用すると、CPU 使用率、ネットワーク使用量、TensorCore のアイドル期間など、時間の経過に伴う数値を追跡できます。ログは特定の時点でのイベントをキャプチャします。ログエントリは、独自のコード、Google Cloud サービス、サードパーティ製アプリケーション、Google Cloud インフラストラクチャによって作成されます。ログベースの指標を作成して、ログエントリ内のデータから指標を生成することもできます。また、指標値やログエントリに基づいてアラート ポリシーを設定することもできます。
このガイドでは、Google Cloud Monitoring について説明し、次の方法を示します。
- Cloud TPU の指標を表示する
- Cloud TPU 指標アラート ポリシーを設定する
- Cloud TPU ログをクエリする
- ログに基づく指標を作成し、アラートを設定してダッシュボードを可視化する。
前提条件
このドキュメントでは、Google Cloud Monitoring の基本的な知識があることを前提としています。Google Cloud Monitoring の生成と操作を開始する前に、Compute Engine VM リソースと Cloud TPU リソースを作成する必要があります。詳細については、Cloud TPU のクイックスタートをご覧ください。
指標
Google Cloud の指標は、Compute Engine VM と Cloud TPU ランタイムによって自動的に生成されます。Cloud TPU VM によって、次の指標が生成されます。
memory/usage
network/received_bytes_count
network/sent_bytes_count
cpu/utilization
tpu/tensorcore/idle_duration
/accelerator/tensorcore_utilization
/accelerator/memory_bandwidth_utilization
指標値が生成されて Metrics Explorer に表示されるまで、最大で 180 秒かかることがあります。
Cloud TPU によって生成される指標の完全なリストについては、Google Cloud の Cloud TPU の指標をご覧ください。
メモリ使用量
memory/usage
指標は TPU Worker
リソースに対して生成され、TPU VM によって使用されるメモリをバイト単位で追跡します。この指標は 60 秒ごとにサンプリングされます。
ネットワーク受信バイト数
network/received_bytes_count
指標は TPU Worker
リソースに対して生成され、TPU VM がネットワーク経由で特定の時点で受信したデータの累積バイト数を追跡します。
ネットワーク送信バイト数
network/sent_bytes_count
指標は TPU Worker
リソースに対して生成され、TPU VM がネットワーク経由で特定の時点で送信した累積バイト数を追跡します。
CPU 使用率
cpu/utilization
指標は TPU Worker
リソース用に生成され、TPU ワーカーの現在の CPU 使用率を追跡します。これは、1 分ごとにサンプリングされ、割合として示されます。値は通常、0.0~100.0 ですが、100.0 を超える場合もあります。
TensorCore のアイドル期間
tpu/tensorcore/idle_duration
指標は TPU Worker
リソース用に生成され、各 TPU チップの TensorCore がアイドル状態だった秒数を追跡します。この指標は、使用しているすべての TPU の各チップで利用できます。TensorCore が使用されている場合、アイドル状態の期間の値はゼロにリセットされます。TensorCore が使用されなくなった場合、アイドル状態の期間の値が増え始めます。
次のグラフは、1 つのワーカーを持つ v2-8 TPU VM の tpu/tensorcore/idle_duration
指標を示しています。各ワーカーには 4 つのチップがあります。この例では、4 つのチップすべてで tpu/tensorcore/idle_duration
に同じ値があるため、グラフが互いに重ねて表示されます。
TensorCore の使用率
/accelerator/tensorcore_utilization
指標は GCE TPU Worker
リソースに対して生成され、使用されている TensorCore の現在の割合を追跡します。サンプル期間に実行された TensorCore オペレーションの数を、同じサンプル期間に実行できるオペレーションの最大数で割ることによって計算されます。値が大きいほど、使用率が高いことを意味します。TensorCore 使用率の指標は、v4 以降の TPU 世代でサポートされています。
メモリ帯域幅の使用率
/accelerator/memory_bandwidth_utilization
指標は GCE TPU Worker
リソース用に生成され、使用されているアクセラレータ メモリ帯域幅の現在の割合を追跡します。この指標は、サンプル期間で使用されていたメモリ帯域幅を、同じサンプル期間でサポートされている最大帯域幅で割ることによって計算されます。値が大きいほど、使用率が高いことを意味します。 メモリ帯域幅の使用率の指標は、v4 以降の TPU 世代でサポートされています。
指標の表示
指標は、Google Cloud コンソールの Metrics Explorer を使用して表示できます。
Metrics Explorer で [指標を選択] をクリックし、関心のある指標に応じて TPU Worker
または GCE TPU Worker
を検索します。[アクティブなリソースと指標のみを表示] がオンになっている場合は、アクティブなリソースの指標のみが表示されます。[TPU ワーカー] をクリックして、使用可能なすべての指標を表示します。
curl
HTTP 呼び出しを使用して指標にアクセスすることもできます。
projects.timeSeries.query ドキュメントの [試してみる] ボタンを使用して、指定した期間内の指標の値を取得します。
- 名前を projects/{project-name} の形式で入力します。
- [リクエストの本文] セクションにクエリを追加します。次は、特定のゾーンにおける過去 5 分間
fetch tpu_worker | filter zone = 'us-central2-b' | metric tpu.googleapis.com/tpu/tensorcore/idle_duration | within 5m
のアイドル状態の期間の指標を取得するサンプルクエリです。 - [実行] をクリックして呼び出しを行い、HTTP POST メッセージの結果を確認します。
このクエリをカスタマイズする方法については、Monitoring Query Language リファレンスのドキュメントをご覧ください。
条件が満たされたときにアラートを送信するように Cloud Monitoring に指示するアラート ポリシーを作成できます。
アラートの作成
このセクションの手順は、TensorCore のアイドル期間指標のアラート ポリシーを追加する方法の例を示しています。この指標が 24 時間を超えると、Cloud Monitoring は登録されたメールアドレスにメールを送信します。
- Monitoring Console に移動します。
- ナビゲーション パネルで [アラート] をクリックします。
- [通知チャネルの編集] をクリックします。
- [メール] で [新規追加] をクリックします。メールアドレスと表示名を入力し、[保存] をクリックします。
- [ポリシーの作成] をクリックします。
- [指標を選択] をクリックして、[TensorCore のアイドル期間] を選択し、[適用] をクリックします。
- [次へ]、[しきい値] の順にクリックします。
- [アラート トリガー] で [任意の時系列の違反] を選択します。
- [しきい値の位置] で [しきい値より上] を選択します。
- [しきい値] に「
86400000
」と入力します。 - [NEXT] をクリックします。
- [通知チャネル] でメール通知チャネルを選択し、[OK] をクリックします。
- アラート ポリシーの名前を入力します。
- [次へ]、[ポリシーを作成] の順にクリックします。
TensorCore のアイドル期間が 24 時間を超えると、指定したメールアドレスにメールが送信されます。
ロギング
ログエントリは、Google Cloud サービス、サードパーティ サービス、ML フレームワーク、またはコードによって書き込まれます。ログは、ログ エクスプローラまたはログ API を使用して表示できます。Google Cloud Logging の詳細については、Google Cloud Logging をご覧ください。
ログ エクスプローラでリソースタイプを選択します。
- [Cloud TPU ワーカー] -> [ゾーン] -> [ノード ID]
- [監査対象リソース] -> [Cloud TPU] -> [API](
google.cloud.tpu.v2alpha1.Tpu.CreateNode
、google.cloud.tpu.v2alpha1.Tpu.DeleteNode
、google.cloud.tpu.v2alpha1.Tpu.UpdateNode
)
Cloud TPU ワーカーのログには、特定のゾーンの特定の Cloud TPU ワーカーに関する情報(Cloud TPU ワーカーで使用可能なメモリ量(system_available_memory_GiB
)など)が含まれます。
監査対象リソースログには、特定の Cloud TPU API の呼び出し日時と呼び出しを行ったユーザーに関する情報が記録されます。たとえば、CreateNode
、UpdateNode
、DeleteNode
です。
ML フレームワークは stdout や stderr にログを生成できます。これらのログは環境変数によって制御され、トレーニング スクリプトによって読み取られます。
Google Cloud Logging にコードでログを書き込むことができます。詳細については、標準ログを書き込むと構造化ログを書き込むをご覧ください。
Cloud TPU ログを表示するには:
- Google Cloud ログビューアに移動する
- [リソース] プルダウンをクリック
- [Cloud TPU ワーカー] をクリック
- ゾーンを選択
- 関心のある Cloud TPU を選択
- [適用] をクリックします。ログはクエリ結果に表示されます
監査対象リソースのログを表示するには:
- Google Cloud ログビューアに移動する
- [リソース] プルダウンをクリック
- [監査対象リソース]、[Cloud TPU] の順にクリック
- 関心のある Cloud TPU API を選択
- [適用] をクリックします。ログはクエリ結果に表示されます
google.cloud.tpu.v2alpha1.Tpu
で始まる API を選択します
Google Cloud ログをクエリする
Google Cloud コンソールでログを表示すると、ページでデフォルトのクエリが実行されます。クエリを表示するには、Show query
切り替えスイッチを選択します。デフォルト クエリを変更することも、新しいクエリを作成することもできます。詳細については、ログ エクスプローラでクエリを作成するをご覧ください。
監査対象リソースログ
任意のログエントリをクリックして展開すると、protoPayload
という名のフィールド表示されます。
protoPayload
を展開すると、次のようなサブフィールドが表示されます。
- logName: ログの名前
- protoPayload -> @type: ログの種類
- resourceName: Cloud TPU の名前。
- methodName: 呼び出されたメソッドの名前(監査ログのみ)
- request -> @type: リクエストの種類
- request -> node: Cloud TPU ノードの詳細
- request -> node_id: TPU の名前
- severity: ログの重大度
TPU ワーカーログ
任意のログエントリをクリックして展開すると、jsonPayload
という名のフィールド表示されます。
jsonPayload
を展開すると、いくつかのサブフィールドが表示されます。
- accelerator_type: アクセラレータ タイプ
- consumer_project: Cloud TPU が存在するプロジェクト
- evententry_timestamp: ログが生成された時刻
- system_available_memory_GiB: Cloud TPU ワーカーの使用可能なメモリ(0 ~ 350 GiB)。
ログベースの指標を作成する
このセクションでは、モニタリング ダッシュボードとアラートの設定に使用するログベースの指標を作成する方法について説明します。プログラムでログベースの指標を作成する方法については、Cloud Logging REST API を使用してプログラムでログベースの指標を作成するをご覧ください。
次の例では、system_available_memory_GiB サブフィールドを使用して、Cloud TPU ワーカーで利用できるメモリをモニタリングするためのログベースの指標を作成する方法を示します。
- ログ エクスプローラに移動します。
クエリボックスに次のクエリを入力して、プライマリ Cloud TPU ワーカー用に定義された system_available_memory_GiB があるすべてのログエントリを抽出します。
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.system_available_memory_GiB:*
[指標を作成] をクリックして、指標エディタを表示します。
[指標タイプ] で [ディストリビューション] を選択します。
指標の名前、説明(省略可)、測定単位を入力します。 [名前] フィールドと [説明] フィールドにそれぞれ「matrix_unit_utilization_percent」と「MXU 使用率」を入力します。
フィルタには、ログ エクスプローラに入力したスクリプトが事前に入力されています。
[指標を作成] をクリックします。
[指標を見る] をクリックして、新しい指標を表示します。指標が表示されるまでに数分かかります。
Cloud Logging REST API を使用してログベースの指標を作成する
Cloud Logging API を使用してログベースの指標を作成することもできます。詳細については、分布指標の作成をご覧ください。
ログベースの指標を使用してダッシュボードとアラートを作成する
ダッシュボードは指標を可視化するのに役立ちます(最大 2 分遅れ)。アラートは、エラーの発生時に通知を送信するのに役立ちます。詳細については、次のトピックをご覧ください。
ダッシュボードの作成
Cloud Monitoring で Tensorcore のアイドル期間指標のダッシュボードを作成するには、次の手順を実施します。
- Monitoring Console に移動
- ナビゲーション パネルで [ダッシュボード] をクリックします。
- [ダッシュボードを作成]、[ウィジェットを追加] の順にクリックします。
- 追加するグラフの種類を選択します。この例では、[折れ線] を選択します。
- ウィジェットのタイトルを入力します
- [指標を選択] プルダウン メニューをクリックして、フィルタ フィールドに「TensorCore のアイドル期間」と入力します。
- 指標のリストで、[TPU ワーカー] -> [TPU] -> [Tensorcore のアイドル期間] を選択します。
- ダッシュボードのコンテンツをフィルタリングするには、[フィルタ] プルダウン メニューをクリックします。
- [リソースラベル] で [project_id] を選択します。
- 比較演算子を選択して、[値] フィールドに値を入力します。
- [適用] をクリックします。