Ce document explique comment configurer votre déploiement Google Kubernetes Engine en vue d'utiliser Google Cloud Managed Service pour Prometheus afin de collecter des métriques à partir du gestionnaire GPU de centre de données NVIDIA. Sur cette page, vous allez :
- configurer l'exportateur pour DCGM afin de générer des rapports sur les métriques ;
- configurer une ressource PodMonitoring pour Managed Service pour Prometheus afin de collecter les métriques exportées ;
Ces instructions ne s'appliquent que si vous utilisez une collecte gérée avec Managed Service pour Prometheus.
Si vous utilisez une collecte autodéployée, consultez le dépôt source pour l'exportateur DCGM afin d'obtenir des informations sur l'installation.
Ces instructions sont fournies à titre d'exemple et devraient fonctionner dans la plupart des environnements Kubernetes. Si vous rencontrez des difficultés pour installer une application ou un exportateur en raison de règles de sécurité ou d'organisation restrictives, nous vous recommandons de consulter la documentation Open Source pour obtenir de l'aide.
Pour en savoir plus sur DCGM, consultez la page DCGM NVIDIA.
Prérequis
Pour collecter des métriques à partir de DCGM en utilisant Managed Service pour Prometheus et la collecte gérée, votre déploiement doit répondre aux exigences suivantes :
- Votre cluster doit exécuter Google Kubernetes Engine version 1.21.4-gke.300 ou ultérieure.
- Vous devez exécuter Managed Service pour Prometheus en ayant activé la collecte gérée. Pour en savoir plus, consultez la page Premiers pas avec la collecte gérée.
Vérifiez que vous disposez d'un quota suffisant pour les GPU NVIDIA.
Pour énumérer les nœuds GPU de votre cluster GKE et leurs types de GPU dans le cluster approprié, exécutez la commande suivante :
kubectl get nodes -l cloud.google.com/gke-gpu -o jsonpath='{range .items[*]}{@.metadata.name}{" "}{@.metadata.labels.cloud\.google\.com/gke-accelerator}{"\n"}{end}'
Vous devrez peut-être installer un pilote de GPU NVIDIA compatible sur les nœuds, si l'installation automatique a été désactivée ou si elle n'est pas compatible avec votre version de GKE. Pour vérifier que le plug-in d'appareils GPU NVIDIA est en cours d'exécution, exécutez la commande suivante :
kubectl get pods -n kube-system | grep nvidia-gpu-device-plugin
Installer l'exportateur DCGM
Nous vous recommandons d'installer l'exportateur DCGM, DCGM-Exporter
, en utilisant la configuration suivante :
# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nvidia-dcgm
namespace: gmp-public
labels:
app: nvidia-dcgm
spec:
selector:
matchLabels:
app: nvidia-dcgm
updateStrategy:
type: RollingUpdate
template:
metadata:
labels:
name: nvidia-dcgm
app: nvidia-dcgm
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: cloud.google.com/gke-accelerator
operator: Exists
tolerations:
- operator: "Exists"
volumes:
- name: nvidia-install-dir-host
hostPath:
path: /home/kubernetes/bin/nvidia
containers:
- image: "nvcr.io/nvidia/cloud-native/dcgm:3.3.0-1-ubuntu22.04"
command: ["nv-hostengine", "-n", "-b", "ALL"]
ports:
- containerPort: 5555
hostPort: 5555
name: nvidia-dcgm
securityContext:
privileged: true
volumeMounts:
- name: nvidia-install-dir-host
mountPath: /usr/local/nvidia
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: nvidia-dcgm-exporter
namespace: gmp-public
labels:
app.kubernetes.io/name: nvidia-dcgm-exporter
spec:
selector:
matchLabels:
app.kubernetes.io/name: nvidia-dcgm-exporter
updateStrategy:
type: RollingUpdate
template:
metadata:
labels:
app.kubernetes.io/name: nvidia-dcgm-exporter
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: cloud.google.com/gke-accelerator
operator: Exists
tolerations:
- operator: "Exists"
volumes:
- name: nvidia-dcgm-exporter-metrics
configMap:
name: nvidia-dcgm-exporter-metrics
- name: nvidia-install-dir-host
hostPath:
path: /home/kubernetes/bin/nvidia
- name: pod-resources
hostPath:
path: /var/lib/kubelet/pod-resources
containers:
- name: nvidia-dcgm-exporter
image: nvcr.io/nvidia/k8s/dcgm-exporter:3.3.0-3.2.0-ubuntu22.04
command: ["/bin/bash", "-c"]
args:
- hostname $NODE_NAME; dcgm-exporter --remote-hostengine-info $(NODE_IP) --collectors /etc/dcgm-exporter/counters.csv
ports:
- name: metrics
containerPort: 9400
securityContext:
privileged: true
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: "DCGM_EXPORTER_KUBERNETES_GPU_ID_TYPE"
value: "device-name"
- name: LD_LIBRARY_PATH
value: /usr/local/nvidia/lib64
- name: NODE_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: DCGM_EXPORTER_KUBERNETES
value: 'true'
- name: DCGM_EXPORTER_LISTEN
value: ':9400'
volumeMounts:
- name: nvidia-dcgm-exporter-metrics
mountPath: "/etc/dcgm-exporter"
readOnly: true
- name: nvidia-install-dir-host
mountPath: /usr/local/nvidia
- name: pod-resources
mountPath: /var/lib/kubelet/pod-resources
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nvidia-dcgm-exporter-metrics
namespace: gmp-public
data:
counters.csv: |
# Utilization (the sample period varies depending on the product),,
DCGM_FI_DEV_GPU_UTIL, gauge, GPU utilization (in %).
DCGM_FI_DEV_MEM_COPY_UTIL, gauge, Memory utilization (in %).
# Temperature and power usage,,
DCGM_FI_DEV_GPU_TEMP, gauge, Current temperature readings for the device in degrees C.
DCGM_FI_DEV_MEMORY_TEMP, gauge, Memory temperature for the device.
DCGM_FI_DEV_POWER_USAGE, gauge, Power usage for the device in Watts.
# Utilization of IP blocks,,
DCGM_FI_PROF_SM_ACTIVE, gauge, The ratio of cycles an SM has at least 1 warp assigned
DCGM_FI_PROF_SM_OCCUPANCY, gauge, The fraction of resident warps on a multiprocessor
DCGM_FI_PROF_PIPE_TENSOR_ACTIVE, gauge, The ratio of cycles the tensor (HMMA) pipe is active (off the peak sustained elapsed cycles)
DCGM_FI_PROF_PIPE_FP64_ACTIVE, gauge, The fraction of cycles the FP64 (double precision) pipe was active.
DCGM_FI_PROF_PIPE_FP32_ACTIVE, gauge, The fraction of cycles the FP32 (single precision) pipe was active.
DCGM_FI_PROF_PIPE_FP16_ACTIVE, gauge, The fraction of cycles the FP16 (half precision) pipe was active.
# Memory usage,,
DCGM_FI_DEV_FB_FREE, gauge, Framebuffer memory free (in MiB).
DCGM_FI_DEV_FB_USED, gauge, Framebuffer memory used (in MiB).
DCGM_FI_DEV_FB_TOTAL, gauge, Total Frame Buffer of the GPU in MB.
# PCIE,,
DCGM_FI_PROF_PCIE_TX_BYTES, gauge, Total number of bytes transmitted through PCIe TX
DCGM_FI_PROF_PCIE_RX_BYTES, gauge, Total number of bytes received through PCIe RX
# NVLink,,
DCGM_FI_PROF_NVLINK_TX_BYTES, gauge, The number of bytes of active NvLink tx (transmit) data including both header and payload.
DCGM_FI_PROF_NVLINK_RX_BYTES, gauge, The number of bytes of active NvLink rx (read) data including both header and payload.
Procédez comme suit pour vérifier que l'exportateur DCGM émet des métriques sur les points de terminaison attendus :
Configurez le transfert de port à l'aide de la commande suivante :
kubectl -n gmp-public port-forward POD_NAME 9400
Accédez au point de terminaison localhost:9400/metrics
à l'aide du navigateur ou de l'utilitaire curl
dans une autre session de terminal.
Vous pouvez personnaliser la section ConfigMap afin de sélectionner les métriques de GPU à émettre.
Vous pouvez également utiliser le chart Helm officiel afin d'installer l'exportateur DCGM.
Pour appliquer les modifications de configuration à partir d'un fichier local, exécutez la commande suivante :
kubectl apply -n NAMESPACE_NAME -f FILE_NAME
Vous pouvez également utiliser Terraform pour gérer vos configurations.
Définir une ressource PodMonitoring
Pour la découverte des cibles, l'opérateur Managed Service pour Prometheus doit disposer d'une ressource PodMonitoring correspondant à l'exportateur DCGM dans le même espace de noms.
Vous pouvez utiliser la configuration PodMonitoring suivante :
Pour appliquer les modifications de configuration à partir d'un fichier local, exécutez la commande suivante :
kubectl apply -n NAMESPACE_NAME -f FILE_NAME
Vous pouvez également utiliser Terraform pour gérer vos configurations.
Vérifier la configuration
Vous pouvez utiliser l'explorateur de métriques pour vérifier que vous avez correctement configuré l'exportateur DCGM. L'ingestion de vos métriques par Cloud Monitoring peut prendre une ou deux minutes.
Procédez comme suit pour vérifier que les métriques ont bien été ingérées :
-
Dans le panneau de navigation de la console Google Cloud, sélectionnez Monitoring, puis leaderboard Explorateur de métriques :
Accéder à l'explorateur de métriques
- Dans la barre d'outils du volet de création de requêtes, sélectionnez le bouton nommé code MQL ou code PromQL.
- Vérifiez que PromQL est sélectionné dans le bouton d'activation Langage. Le bouton de langage se trouve dans la barre d'outils qui vous permet de mettre en forme votre requête.
- Saisissez et exécutez la requête suivante :
DCGM_FI_DEV_GPU_UTIL{cluster="CLUSTER_NAME", namespace="gmp-public"}
Dépannage
Pour en savoir plus sur la résolution des problèmes d'ingestion de métriques, consultez la section
Problèmes liés à la collecte par les exportateurs dans la section Résoudre les problèmes côté ingestion.