GPU モニタリングは、NVIDIA Data Center GPU Manager (DCGM) を活用して、GPU のための強力なモニタリングシステムを構築します。このトピックでは、クラスターの GPU モニタリングを有効にする方法について説明します。
前提条件
背景情報
Kubernetes クラスター内の大規模な GPU デバイスを管理するには、包括的なモニタリングシステムが必要です。GPU メトリックをモニタリングすることで、クラスター全体の GPU 使用量、ヘルスステータス、およびワークロードのパフォーマンスを把握できます。これにより、問題を迅速に診断し、GPU リソースの割り当てを最適化し、リソース使用率を向上させることができます。O&M エンジニアに加えて、データサイエンティストや AI アルゴリズムエンジニアなどの他のロールも、これらのメトリックを使用して、自身のサービスの GPU 使用量を把握できます。この情報は、容量計画とタスクスケジューリングに役立ちます。
NVIDIA は、大規模クラスター内の GPU を管理するための DCGM を提供しています。NVIDIA DCGM 上に構築された GPU モニタリングシステムは、強力な機能とさまざまな GPU モニタリングメトリックを提供します。その主な特徴は次のとおりです。
GPU 動作のモニタリング
GPU 構成管理
GPU ポリシー管理
GPU ヘルス診断
GPU レベルおよびスレッドレベルの統計
NVSwitch の構成とモニタリング
制限事項
ノード上の NVIDIA ドライバーは、バージョン 418.87.01 以降である必要があります。GPU ノードにログインし、
nvidia-smiコマンドを実行してドライバーのバージョンを確認できます。GPU プロファイリングメトリックを使用するには、ノード上の NVIDIA ドライバーがバージョン 450.80.02 以降である必要があります。GPU プロファイリングメトリックの詳細については、「機能概要」をご参照ください。
NVIDIA MIG のモニタリングはサポートされていません。
課金
Alibaba Cloud Prometheus の課金ポリシーの詳細については、「課金の概要」をご参照ください。
1. Prometheus モニタリングを有効にする
ack-arms-prometheus コンポーネントがバージョン 1.1.7 以降であることを確認してください。ack-arms-prometheus コンポーネントのバージョンを表示し、必要に応じてアップグレードできます。
Prometheus モニタリングを有効にする方法の詳細については、「ACK の Prometheus モニタリングを有効にする」をご参照ください。
セルフマネージドのオープンソース Prometheus サービスを使用していて、GPU モニタリング機能が必要な場合は、ack-gpu-exporter コンポーネントをインストールする必要があります。
2. サンプルアプリケーションをデプロイする
次の内容で tensorflow-benchmark.yaml という名前のファイルを作成します。
apiVersion: batch/v1 kind: Job metadata: name: tensorflow-benchmark spec: parallelism: 1 template: metadata: labels: app: tensorflow-benchmark 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=50000 - --batch_size=8 resources: limits: nvidia.com/gpu: 1 # 1 つの GPU をリクエストします。 workingDir: /root restartPolicy: Never次のコマンドを実行して、GPU ノードに tensorflow-benchmark アプリケーションをデプロイします。
kubectl apply -f tensorflow-benchmark.yaml次のコマンドを実行して、Pod のステータスを確認します。
kubectl get pod期待される出力:
NAME READY STATUS RESTARTS AGE tensorflow-benchmark-k*** 1/1 Running 0 114s
3. クラスターの GPU モニタリングデータを表示する
ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、 を選択します。
[Prometheus モニタリング] ページで、[GPU モニタリング] タブをクリックし、次に [クラスター GPU モニタリング - アプリケーション Pod ディメンション] タブをクリックします。
モニタリングデータは、GPU Pod がノード cn-beijing.10.131.xx.xxx で実行されていることを示しています。

[クラスター GPU モニタリング - ノードディメンション] タブをクリックし、[GPUNode] を cn-beijing.10.131.xx.xxx に設定して、ノードの詳細な GPU 情報を表示します。パラメーターの詳細については、「ダッシュボードの説明」をご参照ください。

よくある質問
DCGM のメモリリーク
背景: DCGM は、NVIDIA が提供する GPU の管理およびモニタリングツールです。
ack-prometheus-gpu-exporterは、Managed Service for Prometheus コンポーネントをインストールした後に起動する DaemonSet Pod です。原因: DCGM のメモリリークは、実行時に DCGM が占有するメモリが正しく解放されず、メモリ使用量が継続的に増加する場合に発生します。
解決策: DCGM はメモリリークを経験する可能性があります。この問題を回避するために、
ack-prometheus-gpu-exporterが実行される Pod にresources.limits設定が構成されています。メモリ使用量が制限に達すると、ack-prometheus-gpu-exporterが再起動します。これは通常、月に 1 回程度発生します。再起動後、メトリックは通常どおり報告されます。ただし、再起動後の数分間、Grafana はノード数の急増など、一部のメトリックを異常に表示することがあります。その後、表示は正常に戻ります。この問題の詳細については、「DCGM にはメモリリークがありますか?」をご参照ください。
ack-prometheus-gpu-exporter が OOM kill を経験する
背景:
ack-prometheus-gpu-exporterは、Managed Service for Prometheus コンポーネントをインストールした後に起動する DaemonSet Pod です。モニタリングを有効にすると問題が発生する可能性があります。原因: ACK クラスター上の
ack-prometheus-gpu-exporterは、埋め込みモードで DCGM を使用します。このモードでは、DCGM はマルチ GPU ノードで大量のメモリを消費し、メモリリークが発生しやすくなります。したがって、複数の GPU を持つインスタンスで複数の GPU プロセスを実行し、ack-prometheus-gpu-exporterに少量のメモリを割り当てると、エクスポーター Pod がメモリ不足 (OOM) イベントによって強制終了される可能性があります。解決策: この場合、Pod は通常、再起動後にメトリックの報告を再開します。OOM kill が頻繁に発生する場合は、
arms-prom名前空間のack-prometheus-gpu-exporterDaemonSet のメモリlimitsを手動で増やすことで問題を解決できます。
ack-prometheus-gpu-exporter がエラーを報告する
背景:
ack-prometheus-gpu-exporterは、Managed Service for Prometheus コンポーネントをインストールした後に起動する DaemonSet Pod です。この Pod からのエラーは、モニタリングの問題を引き起こす可能性があります。原因: この問題は、
ack-prometheus-gpu-exporterの Pod ログに次のようなエラーメッセージが含まれている場合に発生します。failed to get all process informations of gpu nvidia1,reason: failed to get gpu utilizations for all processes on device 1,reason: Not Foundこのエラーは、特定の GPU カードで特定のタスクが実行されていない場合に、古いバージョンの
ack-prometheus-gpu-exporterが関連コンテナーの GPU メトリックを取得できないために発生します。解決策: この問題は最新バージョンで修正されています。この問題を解決するには、ack-arms-prometheus コンポーネントを最新バージョンにアップグレードしてください。