GPU モニタリングは、NVIDIA Data Center GPU Manager (DCGM) を使用して、クラスター内の GPU ノードをモニターします。このドキュメントでは、3 つの異なる方法で GPU リソースをリクエストするアプリケーションのモニタリング結果を表示する方法について説明します。
前提条件
ACK マネージドクラスターを作成済みであること。
クラスターの GPU モニタリングを有効化済みであること。
GPU 共有コンポーネントをインストール済みであること。
背景情報
GPU モニタリングは、クラスター内の GPU ノードを包括的にモニターし、クラスター、ノード、および Pod レベルでダッシュボードを提供します。詳細については、「ダッシュボードの説明」をご参照ください。
クラスターレベルの GPU モニタリングダッシュボードには、クラスター全体の利用率、GPU メモリ使用量、XID エラー検出など、クラスター全体または特定のノードプールの情報が表示されます。
ノードレベルの GPU モニタリングダッシュボードには、特定のノードの GPU の詳細、利用率、GPU メモリ使用量など、ノード固有の情報が表示されます。
Pod レベルの GPU モニタリングダッシュボードには、Pod によってリクエストされた GPU リソースとその利用率など、Pod 固有の情報が表示されます。
このドキュメントでは、次のワークフロー例を使用して、さまざまな GPU リクエストメソッドがモニタリング結果にどのように影響するかを示します。
重要事項
GPU モニタリングメトリックは 15 秒間隔で収集されるため、Grafana ダッシュボードでわずかなデータ遅延が発生する可能性があります。その結果、ダッシュボードではノードに利用可能な GPU メモリがないと表示されていても、Pod が正常にスケジュールされることがあります。これは、Pod がタスクを完了し、15 秒の収集間隔 (2 回のスクレイプの間) 内に GPU リソースを解放し、次のメトリック更新の前にスケジューラが保留中の Pod をそのノードに配置できる場合に発生する可能性があります。
モニタリングダッシュボードは、Pod の
resources.limitsを介してリクエストされた GPU リソースのみをモニターします。詳細については、「Pod とコンテナーのリソース管理」をご参照ください。次の方法で GPU リソースを使用すると、モニタリングダッシュボードのデータが不正確になる場合があります。
ノード上で直接 GPU アプリケーションを実行する。
docker runコマンドで直接起動されたコンテナーで GPU アプリケーションを実行する。Pod の
envセクションでNVIDIA_VISIBLE_DEVICES=allまたはNVIDIA_VISIBLE_DEVICES=<GPU ID>環境変数を直接設定し、GPU プログラムを実行して Pod の GPU リソースをリクエストする。Pod の
securityContextでprivileged: trueを構成し、GPU プログラムを実行する。NVIDIA_VISIBLE_DEVICES環境変数が設定されていない Pod で GPU プログラムを実行するが、Pod が使用するコンテナイメージにはデフォルトでNVIDIA_VISIBLE_DEVICES=allが構成されている。
割り当てられた GPU メモリと使用されている GPU メモリは必ずしも同じではありません。たとえば、GPU カードの合計 GPU メモリが 16 GiB であるとします。そのうち 5 GiB を、起動コマンドが
sleep 1000である Pod に割り当てます。この場合、Pod はRunning状態ですが、1000 秒間は GPU を使用しません。その結果、5 GiB の GPU メモリが割り当てられますが、使用される GPU メモリは 0 GiB になります。
手順 1: ノードプールを作成する
GPU モニタリングダッシュボードには、GPU リソースをカード全体として、または特定の量の GPU メモリ (オプションで計算能力も) でリクエストする Pod のメトリックが表示されます。
この例では、クラスターに 3 つのノードプールを作成して、さまざまな GPU リクエストモデルの Pod スケジューリングとリソース使用量を示します。ノードプールの作成に関する詳細な手順については、「ノードプールを作成する」をご参照ください。ノードプールの構成は次のとおりです。
構成項目 | 説明 | 値の例 |
ノードプール名 | 最初のノードプールの名前。 | exclusive |
2 番目のノードプールの名前。 | share-mem | |
3 番目のノードプールの名前。 | share-mem-core | |
インスタンスタイプ | ノードのインスタンスタイプ。この例では、10 GiB の GPU メモリを必要とする TensorFlow Benchmark プロジェクトを使用するため、ノードのインスタンスタイプは 10 GiB を超えるメモリを提供する必要があります。 | ecs.gn7i-c16g1.4xlarge |
ノードの期待数 | ノードプールが維持すべきノードの総数。 | 1 |
ノードラベル | 最初のノードプールに追加されたラベル。これは、GPU リソースがカード全体としてリクエストされることを示します。 | なし |
2 番目のノードプールに追加されたラベル。これは、GPU リソースが GPU メモリによってリクエストされることを示します。 | ack.node.gpu.schedule=cgpu | |
3 番目のノードプールに追加されたラベル。これは、GPU リソースが GPU メモリによってリクエストされ、計算能力のリクエストをサポートすることを示します。 | ack.node.gpu.schedule=core_mem |
手順 2: GPU アプリケーションをデプロイする
ノードプールを作成した後、ノードで GPU テストジョブを実行して、GPU メトリックが正しく収集されていることを確認します。各ジョブに必要なラベルとスケジューリングの関係については、「GPU ノードタイプとスケジューリングラベル」をご参照ください。3 つのジョブの構成は次のとおりです。
ジョブ名 | タスクのノードプール | GPU リソースリクエスト |
| exclusive |
GPU カード 1 枚をリクエストします。 |
| share-mem |
10 GiB の GPU メモリをリクエストします。 |
| share-mem-core |
10 GiB の GPU メモリと 1 枚の GPU カードの計算能力の 30% をリクエストします。 |
ジョブのマニフェストファイルを作成します。
tensorflow-benchmark-exclusive.yamlという名前のファイルを次の YAML コンテンツで作成します。apiVersion: batch/v1 kind: Job metadata: name: tensorflow-benchmark-exclusive spec: parallelism: 1 template: metadata: labels: app: tensorflow-benchmark-exclusive spec: containers: - name: tensorflow-benchmark image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:benchmark-tensorflow-2.2.3 command: - bash - run.sh - --num_batches=5000000 - --batch_size=8 resources: limits: nvidia.com/gpu: 1 # GPU を申請します。 workingDir: /root restartPolicy: Nevertensorflow-benchmark-share-mem.yamlという名前のファイルを次の YAML コンテンツで作成します。apiVersion: batch/v1 kind: Job metadata: name: tensorflow-benchmark-share-mem spec: parallelism: 1 template: metadata: labels: app: tensorflow-benchmark-share-mem spec: containers: - name: tensorflow-benchmark image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:benchmark-tensorflow-2.2.3 command: - bash - run.sh - --num_batches=5000000 - --batch_size=8 resources: limits: aliyun.com/gpu-mem: 10 # 10 GiB の GPU メモリを申請します。 workingDir: /root restartPolicy: Nevertensorflow-benchmark-share-mem-core.yamlという名前のファイルを次の YAML コンテンツで作成します。apiVersion: batch/v1 kind: Job metadata: name: tensorflow-benchmark-share-mem-core spec: parallelism: 1 template: metadata: labels: app: tensorflow-benchmark-share-mem-core spec: containers: - name: tensorflow-benchmark image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:benchmark-tensorflow-2.2.3 command: - bash - run.sh - --num_batches=5000000 - --batch_size=8 resources: limits: aliyun.com/gpu-mem: 10 # 10 GiB の GPU メモリを申請します。 aliyun.com/gpu-core.percentage: 30 # GPU の計算能力の 30% を申請します。 workingDir: /root restartPolicy: Never
次のコマンドを実行してジョブをデプロイします。
kubectl apply -f tensorflow-benchmark-exclusive.yaml kubectl apply -f tensorflow-benchmark-share-mem.yaml kubectl apply -f tensorflow-benchmark-share-mem-core.yaml次のコマンドを実行して Pod のステータスを確認します。
kubectl get pod期待される出力:
NAME READY STATUS RESTARTS AGE tensorflow-benchmark-exclusive-7dff2 1/1 Running 0 3m13s tensorflow-benchmark-share-mem-core-k24gz 1/1 Running 0 4m22s tensorflow-benchmark-share-mem-shmpj 1/1 Running 0 3m46s出力は、すべての Pod が
Running状態であることを示しており、ジョブが正常にデプロイされたことを意味します。
手順 3: GPU モニタリングダッシュボードを表示する
GPU - クラスターディメンションダッシュボードの表示
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、 を選択します。
Prometheus モニタリングページで、[GPU モニタリング] タブをクリックし、次に [GPU - クラスターディメンション] タブをクリックします。クラスターレベルのモニタリングダッシュボードの情報は以下のとおりです。詳細については、「クラスターディメンションモニタリングダッシュボード」をご参照ください。

番号
パネル名
説明
1
合計 GPU ノード数
クラスターには 3 つの GPU ノードがあります。
2
割り当て済み GPU
合計 3 つの GPU のうち 1.9 が割り当てられています。
説明Pod が GPU をカード全体としてリクエストする場合、1 枚のカードの割り当ては 1 です。共有 GPU スケジューリングの場合、割り当ては、割り当てられた GPU メモリとそのカードの合計 GPU メモリの比率です。
3
割り当て済み GPU メモリ
合計 GPU メモリの 63.0% が割り当てられています。
4
使用済み GPU メモリ
合計 GPU メモリの 35.5% が使用されています。
5
平均 GPU 使用率
すべてのカードの平均使用率は 74% です。
6
GPU メモリコピー使用率
すべてのカードの平均メモリコピー使用率は 43.7% です。
7
GPU ノード詳細
ノード名、GPU カードインデックス、GPU 使用率、メモリコントローラー使用率など、クラスター内の GPU ノードに関する情報。
GPU - ノードダッシュボードの表示
Prometheus モニタリングページで、[GPU モニタリング] タブをクリックし、次に [GPU - ノード] タブをクリックします。[GPUNode] ドロップダウンリストからターゲットノードを選択します。この例では cn-hangzhou.10.166.154.xxx を使用します。ノードレベルのモニタリングダッシュボードの情報は以下のとおりです。




パネルグループ | 番号 | パネル名 | 説明 |
概要 | 1 | GPU モード | GPU モードは共有モードで、Pod は GPU メモリと計算能力によって GPU リソースをリクエストします。 |
2 | NVIDIA ドライバーバージョン | インストールされている GPU ドライバーのバージョンは 535.161.07 です。 | |
3 | 割り当て済み GPU | GPU の総数は 1 で、割り当てられた GPU の数は 0.45 です。 | |
4 | GPU 使用率 | 平均 GPU 使用率は 26% です。 | |
5 | 割り当て済み GPU メモリ | 割り当てられた GPU メモリは、合計 GPU メモリの 45.5% です。 | |
6 | 使用済み GPU メモリ | 現在使用されている GPU メモリは、合計 GPU メモリの 36.4% です。 | |
7 | 割り当て済み計算能力 | GPU カード 0 の計算能力の 30% が割り当てられています。 説明 [割り当て済み計算能力] パネルは、ノードで計算能力の割り当てを有効にした場合にのみデータを表示します。したがって、この例の 3 つのノードのうち、 | |
使用率 | 8 | GPU 使用率 | GPU カード 0 の場合、最小使用率は 0%、最大は 33%、平均は 12% です。 |
9 | メモリコピー使用率 | GPU カード 0 の場合、最小メモリコピー使用率は 0%、最大は 22%、平均は 8% です。 | |
メモリ & BAR1 | 10 | GPU メモリ詳細 | GPU カードの UUID、インデックス番号、モデルなど、GPU メモリに関する詳細。 |
11 | 使用済み BAR1 | 使用されている BAR1 メモリは 4 MB です。 | |
12 | 使用済みメモリ | カード上で使用されている GPU メモリは 8.17 GB です。 | |
13 | 合計 BAR1 | 合計 BAR1 メモリ: 32.8 GB。 | |
GPU プロセス | 14 | GPU プロセス詳細 | Pod の名前空間と名前を含む、各 GPU プロセスの詳細。 |
ページの下部で、より高度なメトリックを表示することもできます。詳細については、「ノードレベルのモニタリングダッシュボード」をご参照ください。

GPU - アプリケーション Pod ディメンションダッシュボードの表示
Prometheus モニタリングページで、[GPU モニタリング] タブをクリックし、次に [GPU - アプリケーション Pod ディメンション] タブをクリックします。Pod レベルのモニタリングダッシュボードの情報は以下のとおりです。
番号 | パネル名 | 説明 |
1 | GPU Pod 詳細 | Pod の名前空間、名前、ノード名、使用済み GPU メモリなど、クラスター内で GPU リソースをリクエストした Pod に関する情報。 説明
|
ページの下部で、より高度なメトリックを表示することもできます。詳細については、「GPU - アプリケーション Pod ディメンション」をご参照ください。
