AI能耗管理配置:从采集到策略的落地步骤
AI能耗管理配置的核心目标是让服务器上运行的AI任务(训练或推理)的功耗变得可观测、可控制。
如果你手头有一台或多台带GPU的Linux服务器,希望知道每个任务耗了多少电、在什么时间功耗偏高、如何在不影响业务的前提下降低整体能耗,可以按下面的步骤操作。
本文以常见的Ubuntu 22.04 + NVIDIA GPU环境为例,工具链选择开源的Prometheus + Node Exporter + NVIDIA DCGM Exporter,适合零基础用户跟随操作。
先确认硬件与系统是否具备采集条件
能耗管理的第一步不是装软件,而是确认服务器能否读到功耗数据。
大多数服务器电源和GPU都提供功耗传感器,但需要对应驱动和工具支持。
- 检查GPU是否可被系统识别:运行
nvidia-smi -q -d POWER,如果能看到Power Draw数值,说明GPU功耗可读。 - 检查CPU与整机功耗:运行
sudo apt install lm-sensors -y && sudo sensors-detect,按提示回答默认选项,然后运行sensors,查看是否有Package或power相关读数。 - 检查网络与权限:后续采集组件需要通过HTTP端口暴露指标,确保防火墙允许本机或监控服务器访问对应端口,例如
9100(Node Exporter)和9400(DCGM Exporter)。
如果 nvidia-smi 没有输出功耗,先升级驱动或确认GPU型号是否支持功耗上报;
如果 sensors 没有读数,可能是主板传感器未加载,可尝试更新内核或使用IPMI工具 ipmitool 读取整机功耗。
安装并配置能耗采集组件
采集层负责把功耗数据变成Prometheus能抓取的指标。
下面分别配置整机与GPU两部分。
部署Node Exporter采集整机指标
Node Exporter负责暴露CPU、内存、磁盘等基础指标,配合 lm-sensors 可以间接反映整机功耗趋势。
wget https://github.com/prometheus/node_exporter/releases/download/v1.8.0/node_exporter-1.8.0.linux-amd64.tar.gz
tar xzf node_exporter-1.8.0.linux-amd64.tar.gz
sudo mv node_exporter-1.8.0.linux-amd64/node_exporter /usr/local/bin/
sudo useradd --no-create-home --shell /bin/false node_exporter
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
创建systemd服务文件 /etc/systemd/system/node_exporter.service,内容如下:
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
启动并设置开机自启:
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
curl http://localhost:9100/metrics | head
如果返回以 # HELP 开头的指标列表,说明整机采集已生效。
部署NVIDIA DCGM Exporter采集GPU功耗
DCGM Exporter是NVIDIA官方提供的GPU指标导出工具,支持功耗、温度、利用率等字段。
使用Docker方式部署最简单:
docker run -d --gpus all --rm -p 9400:9400 \
-v /run/prometheus:/run/prometheus \
nvcr.io/nvidia/k8s/dcgm-exporter:3.3.5-3.1.5-ubuntu22.04
运行后执行 curl http://localhost:9400/metrics | grep DCGM_FI_DEV_POWER_USAGE,如果能看到类似 DCGM_FI_DEV_POWER_USAGE{gpu="0"} 65.2 的输出,说明GPU功耗指标已经可以采集。
注意:Docker需要安装NVIDIA Container Toolkit,否则 --gpus all 会报错。
配置Prometheus抓取与能耗看板
采集组件就绪后,需要让Prometheus定期拉取指标,并在Grafana中展示。
在Prometheus配置文件 prometheus.yml 的 scrape_configs 部分加入两个任务:
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
- job_name: 'dcgm'
static_configs:
- targets: ['localhost:9400']
重启Prometheus后,在Web界面 Status -> Targets 中确认两个任务均为 UP。
然后导入Grafana看板:Node Exporter常用看板ID为 1860,DCGM看板可搜索NVIDIA官方提供的Dashboard ID(例如 12239),导入后即可看到GPU功耗曲线。
避坑提醒:如果Prometheus抓取报错 context deadline exceeded,先检查目标端口是否监听:ss -tlnp | grep -E '9100|9400';
如果DCGM Exporter容器频繁退出,检查GPU驱动版本与DCGM镜像版本是否匹配,可尝试更换镜像标签。
编写AI任务能耗调度策略
有了监控数据,就可以设置简单的节能策略。
以下策略适合单机场景,不需要复杂编排平台。
- 限制GPU功耗上限:使用
nvidia-smi -pl 250将GPU功耗限制在250瓦(具体数值以GPU型号允许范围为参考),可在训练任务启动前执行,避免峰值功耗过高。 - 错峰调度:通过
crontab -e添加定时任务,将非紧急的AI批处理任务安排在电价低谷或业务低峰时段运行,例如0 2 * * * /usr/bin/python3 /opt/ai/batch_job.py。 - 空闲降频:如果GPU长时间空闲但功耗仍高,检查是否有残留进程占用,使用
nvidia-smi查看进程列表,必要时用kill结束无用进程。
这些策略需要根据你的业务容忍度调整,不要直接照搬数值。
修改功耗上限前,建议先记录当前任务在默认设置下的完成时间和功耗,对比后再决定是否长期启用。
验证配置是否生效
配置完成后,从三个层面检查:
- 指标层:在Prometheus查询框输入
DCGM_FI_DEV_POWER_USAGE,应返回当前GPU功耗数值;输入node_power_supply_watts(部分主板支持)可查看整机功耗。 - 看板层:Grafana中GPU功耗曲线应随任务负载变化,空闲时明显下降。
- 策略层:执行
nvidia-smi -q -d POWER确认功耗限制已生效;查看定时任务日志grep CRON /var/log/syslog确认错峰任务按计划触发。
如果某项验证失败,
优先回看对应组件的日志:journalctl -u node_exporter -n 50 或 docker logs ,
根据报错关键词搜索处理。
常见疑问
没有GPU的服务器能做AI能耗管理吗?
可以。AI任务也可能跑在CPU上,此时重点采集CPU利用率和整机功耗(通过IPMI或智能PDU),策略上以错峰和降频为主,工具链中的DCGM部分可以省略。
功耗数据波动很大,正常吗?
AI训练任务本身负载波动大,功耗随之变化是正常的。建议观察一段时间内的平均值和峰值,而不是单个采样点。如果波动伴随任务异常,检查是否有其他进程争抢GPU。
限制功耗会影响模型训练速度吗?
有可能。功耗上限降低后,GPU可能降频,训练时间会变长。建议在小规模任务上对比限制前后的耗时和能耗,找到适合你业务的平衡点,不要盲目追求最低功耗。
完成以上配置后,你已经具备了对AI任务能耗的基本观测和调节能力。
后续可以根据实际数据逐步细化策略,例如结合任务队列动态调整功耗上限,或按时间段自动切换调度规则。