本文へスキップ

GPUサービスグルーピング

ノート

GPUモニタリング全般の概要については、WhaTap GPUモニタリングのドキュメントを参照してください。

WhaTap OperatorのGPUモニタリング機能では、アプリケーション(GPU使用)ポッドのKubernetesラベルをGPUメトリクスに付与し、WhaTapでサービス/プロジェクト単位にGPU使用量をグルーピング・照会できます。

  • 適用対象: WhatapAgent CR (monitoring.whatap.com/v2alpha1)

  • 関連フィールド: spec.features.k8sAgent.gpuMonitoring.groupLabelgroupLabelAllowlistRegex

  • キー結果ラベル: whatap_kube_label_gpu_group

Tips

どのような問題を解決しますか?

デフォルトのDCGMメトリクス(DCGM_FI_DEV_GPU_UTILなど)にはGPU/ノード/ポッドの識別子はありますが、ユーザーが運用する「サービス」単位の情報(例: プロジェクトID、チーム、ワークロード種別)は含まれていません。

その結果:

  • 「プロジェクトAが使用する全GPU使用率の合計」のようなクエリが困難です。

  • マルチテナント(複数チームが1クラスターを共有)環境でのコスト/使用量の精算が困難です。

この機能を使用すると、ポッドに付けたラベル(prjId=projectAなど)がDCGMメトリクスラベルに自動伝播され、WhaTapの共通ラベルwhatap_kube_label_gpu_groupに正規化されて、ダッシュボード/検索でグルーピングキーとしてすぐに使用できます。

クイックスタート

GPUモニタリング + グループラベルの有効化

apiVersion: monitoring.whatap.com/v2alpha1
kind: WhatapAgent
metadata:
name: whatap
namespace: whatap-monitoring
spec:
features:
k8sAgent:
gpuMonitoring:
enabled: true
# グルーピングキーとして使用するポッドラベルキー
groupLabel: "prjId"
# (任意)公開を許可するラベルキーの正規表現。未設定時は ^(prjId)$ が自動適用
# groupLabelAllowlistRegex: "^(prjId|team)$"
# (任意)全GPUメトリクスにclusterラベルを付与
clusterName: "prod-gpu-cluster"

GPU使用ポッドへのラベル付与

apiVersion: apps/v1
kind: Deployment
metadata:
name: ml-train
namespace: ml
spec:
replicas: 2
selector:
matchLabels:
app: ml-train
template:
metadata:
labels:
app: ml-train
prjId: "projectA" # ◀ グルーピングキー(groupLabelと同じ)
spec:
containers:
- name: trainer
image: my-registry/trainer:latest
resources:
limits:
nvidia.com/gpu: 1
ノート

ラベルはDeploymentラベルではなく、Podレベルspec.template.metadata.labels)に付与する必要があります。

使用例(活用シナリオ)

プロジェクト(prjId)単位の使用量

  • groupLabel: prjId
  • ポッドラベル: prjId: projectAprjId: projectB
  • WhaTapダッシュボードでwhatap_kube_label_gpu_groupでgroup by → プロジェクト別GPU使用率/メモリ使用量の比較

チーム(team)単位の精算

gpuMonitoring:
enabled: true
groupLabel: "team"
groupLabelAllowlistRegex: "^(team)$"
  • ポッドラベル: team: searchteam: recsys、…

複数のラベルを同時に公開したい場合

groupLabelで正規化されるラベルは1つ(whatap_kube_label_gpu_group)ですが、他のポッドラベルもメトリクスラベルとして同時に公開したい場合はgroupLabelAllowlistRegexで拡張できます。

gpuMonitoring:
enabled: true
groupLabel: "prjId"
groupLabelAllowlistRegex: "^(prjId|team|env)$"
  • whatap_kube_label_gpu_groupprjIdの値
  • teamenvラベルもDCGMメトリクスにそのまま公開されます(正規化はされません)

検証方法

dcgm-exporter環境変数の確認

kubectl -n whatap-monitoring get ds whatap-node-agent \
-o jsonpath='{.spec.template.spec.containers[?(@.name=="dcgm-exporter")].env}' | jq

出力結果に以下の2つの環境変数が含まれていることで、ポッドラベル収集が有効な状態です。

  • DCGM_EXPORTER_KUBERNETES_ENABLE_POD_LABELS=true
  • DCGM_EXPORTER_KUBERNETES_POD_LABEL_ALLOWLIST_REGEX=^(prjId)$

メトリクスの直接照会(ポッドにラベルが必要)

# dcgm-exporter Podに接続
POD=$(kubectl -n whatap-monitoring get pod -l name=whatap-node-agent -o name | head -1)
kubectl -n whatap-monitoring exec "$POD" -c dcgm-exporter -- \
wget -qO- localhost:9400/metrics | grep DCGM_FI_DEV_GPU_UTIL | head
DCGM_FI_DEV_GPU_UTIL{gpu="0", ..., pod="ml-train-xxxx", namespace="ml", prjId="projectA"} 87

OpenAgent scrape設定の確認

kubectl -n whatap-monitoring get configmap whatap-open-agent-config -o yaml | grep -A2 whatap_kube_label_gpu_group

出力に以下のrelabelブロックが含まれている必要があります。source_labelsの値は設定したgroupLabelキーと一致している必要があります。

- action: replace
source_labels: [prjId]
target_label: whatap_kube_label_gpu_group

トラブルシューティング

症状原因 / 確認ポイント
メトリクスにprjIdラベルが表示されない(1) PodラベルにprjIdが付与されているか(spec.template.metadata.labels)、(2) dcgm-exporterが再起動されて新しいenvが反映されているか
prjIdは見えるがwhatap_kube_label_gpu_groupが見えないOpenAgent ConfigMap更新後、OpenAgentポッドの再起動が必要。kubectl rollout restart deploy/whatap-open-agent -n whatap-monitoring
groupLabelの値に-./が含まれるPrometheusラベルキールール上、_に置換されたキーでsource_labelsが構成されます。allowlist正規表現は元のキー基準で設定可能
複数のラベルを公開したいgroupLabelAllowlistRegex^(prjId|team|env)$のように明示
全GPUメトリクスにクラスター識別が必要clusterNameフィールドを併せて設定(メトリクスにcluster=<値>を付与)

関連フィールド一覧

フィールド説明デフォルト
gpuMonitoring.enabledGPUモニタリング(dcgm-exporter)の有効化false
gpuMonitoring.groupLabelグルーピングに使用するPodラベルキー。設定時にwhatap_kube_label_gpu_groupに正規化-
gpuMonitoring.groupLabelAllowlistRegexdcgm-exporterが公開するPodラベルキーの正規表現^(<groupLabel>)$
gpuMonitoring.clusterName全GPUメトリクスにclusterラベルを付与-

参考

  • git repo: https://github.com/whatap/whatap-operator.git

  • 実装コード: internal/controller/install_agents.goaddDcgmExporterToNodeAgent、GPU scrape config生成部)

  • CRD定義: api/v2alpha1/whatapagent_types.goGpuMonitoringSpec

  • 例: examples/whatap-agent-all-options.yamlexamples/whatap-agent-gpu-custom-env.yaml