DCGM Exporter#
Data Center GPU Manager Exporter (DCGM Exporter) - инструмент, входящий в состав GPU Operator, предназначенный для сбора метрик с GPU NVIDIA и экспорта их в формате, совместимом с Prometheus.
Основные функции:
Сбор метрик GPU в реальном времени, например:
DCGM_FI_DEV_GPU_UTIL— утилизация GPU (%);CGM_FI_DEV_MEM_COPY_UTIL— утилизация памяти (%);DCGM_FI_DEV_FB_USED— использовано видеопамяти (MiB);DCGM_FI_DEV_POWER_USAGE— потребление энергии (Вт);DCGM_FI_DEV_TEMPERATURE— температура GPU (°C);DCGM_FI_PROF_PIPE_TENSOR_ACTIVE— активность тензорных ядер (для AI-ускорения).
Тегирование метрик по pod/контейнерам/GPU. Совместно с GPU Feature Discovery , DCGM Exporter может:
связывать метрики GPU с конкретными pod и контейнерами.
показывать, какой pod сколько GPU использует.
включать метки
pod,namespace,container,device,modelName.
Примечание
DCGM Exporter позволяет кластеру идентифицировать и отслеживать конкретные pod, которые используют ресурсы GPU, по их уникальным идентификаторам (UID). Для включения данной функции запустите DCGM Exporter с флагом
--kubernetes.Экспорт в формате Prometheus:
Запуск HTTP-сервера на порту
9400.Доступ метрики по адресу
/metrics.Совместимость с
ServiceMonitorв экосистеме Prometheus Operator.
В составе GPU Operator DCGM Exporter:
устанавливается автоматически как
DaemonSet;настраивается с поддержкой Kubernetes-меток;
имеет преднастроенные
ServiceиServiceMonitor.
Установка DCGM Exporter#
Для установки DCGM Exporter с помощью Helm, используйте команду:
helm install \
--generate-name \
<repository-helm-charts>/dcgm-exporter
Важно
Helm-чарт в состав поставки продукта не входит. Его можно получить с официального сайта NVIDIA.
Получение метрик#
Для быстрого получения метрик после развертывания pod dcgm-exporter можно воспользоваться переадресацией портов:
Создайте файл
dcgm-exporter.yaml:dcgm-exporter.yaml
apiVersion: apps/v1 kind: DaemonSet metadata: name: "dcgm-exporter" labels: app.kubernetes.io/name: "dcgm-exporter" app.kubernetes.io/version: "4.7.0" spec: updateStrategy: type: RollingUpdate selector: matchLabels: app.kubernetes.io/name: "dcgm-exporter" app.kubernetes.io/version: "4.7.0" template: metadata: labels: app.kubernetes.io/name: "dcgm-exporter" app.kubernetes.io/version: "4.7.0" name: "dcgm-exporter" spec: automountServiceAccountToken: false containers: - image: "<image-path>/dcgm-exporter:4.4.1-4.6.0-ubi9" env: - name: "DCGM_EXPORTER_LISTEN" value: ":9400" - name: "DCGM_EXPORTER_KUBERNETES" value: "true" name: "dcgm-exporter" ports: - name: "metrics" containerPort: 9400 securityContext: runAsNonRoot: false runAsUser: 0 capabilities: add: ["SYS_ADMIN"] drop: ["ALL"] allowPrivilegeEscalation: false volumeMounts: - name: "pod-gpu-resources" readOnly: true mountPath: "/var/lib/kubelet/pod-resources" resources: limits: cpu: 200m memory: 256Mi requests: cpu: 100m memory: 128Mi volumes: - name: "pod-gpu-resources" hostPath: path: "/var/lib/kubelet/pod-resources" --- kind: Service apiVersion: v1 metadata: name: "dcgm-exporter" labels: app.kubernetes.io/name: "dcgm-exporter" app.kubernetes.io/version: "4.7.0" spec: selector: app.kubernetes.io/name: "dcgm-exporter" app.kubernetes.io/version: "4.7.0" ports: - name: "metrics" port: 9400Разверните ресурс из файла
dcgm-exporter.yaml:kubectl create -f dcgm-exporter.yamlПолучите имя первого pod, который помечен меткой
app.kubernetes.io/name=dcgm-exporter, и сохраните его в переменнойNAME:NAME=$(kubectl get pods -l "app.kubernetes.io/name=dcgm-exporter" \ -o "jsonpath={ .items[0].metadata.name}")Переадресуйте метрики, собранные DCGM Exporter на стандартном порте
9400, на порт8080. Такие метрики будут доступны локально по адресуhttp://<localhost-IP>:8080/metrics:kubectl port-forward $NAME 8080:9400 &Запросите метрики:
curl -sL http://<localhost-IP>/metricsПример вывода:
# HELP DCGM_FI_DEV_SM_CLOCK SM clock frequency (in MHz). # TYPE DCGM_FI_DEV_SM_CLOCK gauge DCGM_FI_DEV_SM_CLOCK{gpu="0", UUID="<UUID>", container="", namespace="", pod=""} 139 # HELP DCGM_FI_DEV_MEM_CLOCK Memory clock frequency (in MHz). # TYPE DCGM_FI_DEV_MEM_CLOCK gauge DCGM_FI_DEV_MEM_CLOCK{gpu="0", UUID="<UUID>", container="", namespace="", pod=""} 405 # HELP DCGM_FI_DEV_MEMORY_TEMP Memory temperature (in C). # TYPE DCGM_FI_DEV_MEMORY_TEMP gauge DCGM_FI_DEV_MEMORY_TEMP{gpu="0", UUID="<UUID>", container="", namespace="", pod=""} 72Где:
HELP- описание каждой метрики (например, частота SM, частота памяти и температура памяти);TYPE- тип метрики, в данном случае все метрики имеют типgauge;gpu,UUID,container,namespaceиpod- метки для идентификации, какой конкретный GPU или pod используется;139,405,72- значение метрики.