AI服务器DCGM配置:从安装到监控GPU状态的完整步骤
DCGM 是 NVIDIA 提供的一套 GPU 监控与管理工具,配置它的主要目的是把 GPU 的温度、利用率、显存、功耗等指标采集出来,方便接入 Prometheus 或直接命令行查看。
本文面向零基础运维,按“先确认环境、再安装组件、最后验证指标”的顺序,讲清楚在 AI 服务器上完成 DCGM 配置的完整步骤。
先确认驱动和 GPU 状态
DCGM 依赖 NVIDIA 驱动,安装前先在服务器上执行以下命令,确认驱动已加载且 GPU 能被识别:
nvidia-smi
如果能看到 GPU 列表、驱动版本和 CUDA 版本,说明基础环境正常。
接着检查内核模块是否加载:
lsmod | grep nvidia
正常应看到 nvidia、nvidia_uvm 等模块。
如果 nvidia-smi 报错或找不到命令,需要先安装或修复 NVIDIA 驱动,再继续 DCGM 配置。
安装 DCGM 和 dcgm-exporter
推荐使用 NVIDIA 官方仓库安装。
以 Ubuntu 为例,先添加仓库并安装:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y datacenter-gpu-manager
安装完成后启动 DCGM 服务:
sudo systemctl enable nvidia-dcgm
sudo systemctl start nvidia-dcgm
sudo systemctl status nvidia-dcgm
状态显示 active (running) 即表示服务正常。
如果使用容器部署 dcgm-exporter,可以拉取镜像并运行:
docker run -d --gpus all --rm -p 9400:9400 nvidia/dcgm-exporter:latest
运行后访问 http://服务器IP:9400/metrics,能看到以 DCGM_FI_ 开头的指标即表示 exporter 工作正常。
接入 Prometheus 并检查指标
在 Prometheus 的 prometheus.yml 中增加抓取任务:
scrape_configs:
- job_name: 'dcgm'
static_configs:
- targets: ['服务器IP:9400']
重启 Prometheus 后,在 Web 界面 Status -> Targets 中查看该任务是否为 UP。
也可以用 dcgmi 命令直接验证:
dcgmi discovery -l
dcgmi stats -e
discovery -l 会列出所有 GPU 和组信息,stats -e 会持续输出关键指标。
如果命令报连接错误,检查 nvidia-dcgm 服务是否运行。
常见坑和排查思路
- 权限不足:非 root 用户执行
dcgmi可能提示权限错误,需要将用户加入video或render组,或使用sudo。 - 端口冲突:dcgm-exporter 默认监听 9400,如果被占用,用
-p参数换端口,并同步修改 Prometheus 配置。 - GPU 指标为空:确认容器启动时加了
--gpus all,否则 exporter 看不到 GPU 设备。 - 服务启动失败:查看
journalctl -u nvidia-dcgm日志,常见原因是驱动版本与 DCGM 不匹配,需调整版本后重试。
验证配置是否生效
完成上述步骤后,从 Prometheus 查询 DCGM_FI_DEV_GPU_UTIL,如果能返回数值,说明监控链路已通。
也可以在 Grafana 中导入 NVIDIA 官方提供的 DCGM 仪表板模板,快速查看 GPU 使用率、显存和温度曲线。
建议定期检查 exporter 日志,确认没有采集超时或连接拒绝的报错。
如果服务器上有多块 GPU,dcgm-exporter 默认会采集所有卡,可以通过 --devices 参数指定需要监控的 GPU 编号,避免无关指标干扰。
配置完成后,建议将 Prometheus 的抓取间隔设置为 15 秒左右,既能反映负载变化,又不会给服务器带来太大压力。