DCGM-Exporter 是一个基于 Go 语言开发的开源工具,专门用于通过 NVIDIA DCGM API 收集 GPU 性能数据,并以 Prometheus 兼容的格式输出指标。它为构建完整的 GPU 监控系统提供了强大的基础支撑。
项目架构解析
DCGM-Exporter 采用模块化设计,各个组件分工明确:
核心目录结构:
cmd/- 主程序入口点,包含服务启动逻辑internal/- Go 语言核心库,处理与 DCGM 的交互docker/- Docker 容器构建配置deployment/- Kubernetes 部署配置和 Helm Chartetc/- 默认指标配置和兼容性文件grafana/- 官方监控仪表盘配置pkg/- 公共包和命令行接口tests/- 完整的测试套件
关键组件:
- 数据收集系统:负责从 DCGM 获取不同类型的 GPU 指标
- 设备监控(Device Monitoring):实时跟踪 GPU 设备状态
- 指标转换(Transformation):对原始数据进行处理和格式化
- 服务端(Server):提供 HTTP 端点供 Prometheus 采集
快速部署指南
Docker 容器部署
使用官方 Docker 镜像快速启动 DCGM-Exporter:
docker run -d --rm --gpus all --cap-add SYS_ADMIN -p 9400:9400 nvcr.io/nvidia/k8s/dcgm-exporter:4.4.2-4.7.0-ubuntu22.04
验证服务运行状态:
curl localhost:9400/metrics
Kubernetes 部署
推荐使用 Helm Chart 进行 Kubernetes 部署:
# 添加 Helm 仓库
helm repo add gpu-helm-charts https://nvidia.github.io/dcgm-exporter/helm-charts
# 更新仓库
helm repo update
# 安装 Chart
helm install --generate-name gpu-helm-charts/dcgm-exporter
或者使用提供的 YAML 配置文件:
kubectl create -f dcgm-exporter.yaml
配置详解
自定义指标采集
DCGM-Exporter 允许通过自定义 CSV 文件配置要收集的指标。默认配置文件位于 etc/default-counters.csv:
# DCGM FIELD, Prometheus metric type, help message
DCGM_FI_DEV_SM_CLOCK, gauge, SM clock frequency (in MHz).
DCGM_FI_DEV_MEM_CLOCK, gauge, Memory clock frequency (in MHz).
DCGM_FI_DEV_MEMORY_TEMP, gauge, Memory temperature (in C).
使用自定义配置文件:
dcgm-exporter -f /path/to/custom-collectors.csv
安全配置
启用 TLS 加密和基本身份验证:
dcgm-exporter --web-config-file=web-config.yaml
示例 web-config.yaml 文件:
server:
listenAddress: ":9400"
tls:
enabled: true
certFile: "/security/cert.pem"
keyFile: "/security/key.pem"
basicauth:
enabled: true
users:
- name: admin
password: securePassword123
高级功能
HPC 作业映射
DCGM-Exporter 支持将 HPC 作业信息包含到指标标签中。启用方法:
dcgm-exporter --hpc-job-mapping-dir=/path/to/mapping/files
性能剖析指标
要收集性能剖析指标,需要额外的系统权限:
docker run --user 0 --cap-add SYS_ADMIN --cap-drop ALL nvcr.io/nvidia/k8s/dcgm-exporter:latest
监控指标详解
DCGM-Exporter 提供丰富的 GPU 监控指标,主要包括:
核心性能指标:
- GPU 利用率(SM 时钟、内存时钟)
- 温度监控(GPU 核心温度、内存温度)
- 功耗和能耗统计
- 显存使用情况
- 错误计数和健康状态
网络指标:
- P2P 状态和带宽
- NVLink 连接状态
集成监控系统
Prometheus 配置
在 Prometheus 配置文件中添加 DCGM-Exporter 作业:
scrape_configs:
- job_name: 'dcgm-exporter'
static_configs:
- targets: ['localhost:9400']
Grafana 仪表盘
项目提供了官方 Grafana 仪表盘配置,位于 grafana/dcgm-exporter-dashboard.json。可以直接导入使用。
构建与定制
从源码构建
构建 DCGM-Exporter 需要以下环境:
- Go 语言 >= 1.24
- NVIDIA DCGM 库
- 支持 DCGM 的 Linux 系统和 GPU
构建步骤:
git clone https://gitcode.com/gh_mirrors/dc/dcgm-exporter
cd dcgm-exporter
make binary
sudo make install
容器镜像构建
构建多架构容器镜像:
# 构建本地镜像
make local
# 构建 Ubuntu 22.04 镜像
make ubuntu22.04 PLATFORMS=linux/amd64 OUTPUT=type=docker
故障排除
常见问题
- 权限问题:确保容器有足够的权限访问 GPU 设备
- DCGM 版本兼容性:检查 DCGM 库版本是否匹配
- 端口冲突:确认 9400 端口未被占用
日志分析
DCGM-Exporter 会输出详细的运行日志,通过分析日志可以快速定位问题。
安全最佳实践
- 最小权限原则:仅在需要性能剖析指标时授予 SYS_ADMIN 权限
- 网络安全:在生产环境中启用 TLS 加密
- 身份验证:配置基本身份验证保护监控端点
通过本指南,您可以充分利用 DCGM-Exporter 的强大功能,构建稳定可靠的 GPU 监控系统。无论是单机部署还是大规模集群管理,DCGM-Exporter 都能提供准确、实时的 GPU 性能数据。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



