GPUサービスグルーピング
GPUモニタリング全般の概要につ いては、WhaTap GPUモニタリングのドキュメントを参照してください。
WhaTap OperatorのGPUモニタリング機能では、アプリケーション(GPU使用)ポッドのKubernetesラベルをGPUメトリクスに付与し、WhaTapでサービス/プロジェクト単位にGPU使用量をグルーピング・照会できます。
-
適用対象:
WhatapAgentCR (monitoring.whatap.com/v2alpha1) -
関連フィールド:
spec.features.k8sAgent.gpuMonitoring.groupLabel、groupLabelAllowlistRegex -
キー結果ラベル:
whatap_kube_label_gpu_group
どのような問題を解決しますか?
デフォルトの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: projectA、prjId: projectB - WhaTapダッシュボードで
whatap_kube_label_gpu_groupでgroup by → プロジェクト別GPU使用率/メモリ使用量の比較
チーム(team)単位の精算
gpuMonitoring:
enabled: true
groupLabel: "team"
groupLabelAllowlistRegex: "^(team)$"
- ポッドラベル:
team: search、team: recsys、…
複数のラベルを同時に公開したい場合
groupLabelで正規化されるラベルは1つ(whatap_kube_label_gpu_group)ですが、他のポッドラベルもメトリクスラベルとして同時に公開したい場合はgroupLabelAllowlistRegexで拡張できます。
gpuMonitoring:
enabled: true
groupLabel: "prjId"
groupLabelAllowlistRegex: "^(prjId|team|env)$"
whatap_kube_label_gpu_group←prjIdの値team、envラベルも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=trueDCGM_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.enabled | GPUモニタリング(dcgm-exporter)の有効化 | false |
gpuMonitoring.groupLabel | グルーピングに使用するPodラベルキー。設定時にwhatap_kube_label_gpu_groupに正規化 | - |
gpuMonitoring.groupLabelAllowlistRegex | dcgm-exporterが公開 するPodラベルキーの正規表現 | ^(<groupLabel>)$ |
gpuMonitoring.clusterName | 全GPUメトリクスにclusterラベルを付与 | - |
参考
-
実装コード:
internal/controller/install_agents.go(addDcgmExporterToNodeAgent、GPU scrape config生成部) -
CRD定義:
api/v2alpha1/whatapagent_types.go(GpuMonitoringSpec) -
例:
examples/whatap-agent-all-options.yaml、examples/whatap-agent-gpu-custom-env.yaml