AI 集群的功耗挑战与 DVFS 简介
随着AI模型规模的爆炸式增长,支持这些模型的计算集群(无论是使用高性能CPU还是GPU)消耗的能源也水涨船高。高功耗不仅意味着高昂的电费,还会带来巨大的散热压力和潜在的硬件故障风险。在许多情况下,集群节点并非时刻处于100%满载状态,尤其是在数据预处理、I/O等待或分布式同步阶段,保持芯片以最高频率和电压运行是巨大的浪费。
动态电压和频率调节(Dynamic Voltage and Frequency Scaling, DVFS)是一种成熟的硬件控制技术,允许操作系统根据当前负载动态调整处理器(CPU或GPU)的核心频率和运行电压。由于功耗与电压的平方和频率呈正相关($P \propto C V^2 f$),即使是微小的电压降低也能带来显著的功耗节省。
本文将聚焦如何在Linux驱动的AI集群节点上,利用DVFS机制,特别是在CPU侧(适用于数据预处理、推理、参数服务器等角色)进行优化,以达到节能降费的目的,同时确保关键性能不掉队。
实施步骤:Linux 下 CPU 动态调频配置
在大多数现代Linux系统上,DVFS是通过内核的CPU频率调节器(CPU Frequency Scaling Governors)来实现的。这些调节器定义了CPU频率调整的策略。
1. 检查当前状态
首先,确定你的系统支持哪些调节器,以及当前的调节器设置。
# 查看当前所有CPU核的频率调节器设置
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# 查看系统支持的调节器列表
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
常见的调节器包括:
* performance: 始终以最大频率运行(高功耗,高响应速度)。
* powersave: 始终以最低频率运行(低功耗,低性能)。
* ondemand: 负载达到一定阈值时迅速提升频率,负载降低时降低频率。
* schedutil: 最新的推荐调节器,它利用Linux调度器的信息来更智能、更平滑地调整频率,通常比ondemand更高效和响应及时。
2. 选择合适的 DVFS 策略
对于AI集群的非训练核心(如处理I/O、分布式通信或轻量级推理),推荐使用 schedutil 调节器。
如何判断性能不掉队?
在切换调节器后,需要通过实际运行AI工作负载(例如小型批次的训练或推理任务)并监控其延迟和吞吐量。如果使用 performance 和 schedutil 模式下的性能指标差距小于5%,则采用 schedutil 是理想的节能方案。
3. 动态设置调节器
你可以使用简单的Shell循环命令将所有核心的调节器设置为 schedutil:
#!/bin/bash
GOVERNOR="schedutil"
# 检查 schedutil 是否可用
if grep -q "$GOVERNOR" /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors; then
echo "开始将所有CPU核心设置为 $GOVERNOR 模式..."
# 遍历所有CPU核心并设置调节器
for cpu_path in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
echo "$GOVERNOR" | sudo tee $cpu_path > /dev/null
done
echo "设置完成。请验证:"
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
else
echo "错误:调节器 $GOVERNOR 不可用,请尝试 ondemand 或其他选项。"
fi
4. 实时监控和验证
配置完成后,需要实时监控CPU的实际运行频率和功耗(如果硬件支持)。使用 cpupower 工具或简单的 lscpu 结合 watch 命令可以快速查看频率变化。
# 实时查看CPU的运行频率 (需要安装 cpupower utils)
watch -n 1 cpupower frequency-info
# 或使用 lscpu (简略查看)
watch -n 1 'lscpu | grep "MHz"'
当AI负载启动时,您会观察到频率迅速提升;当负载减小时(如等待数据加载),频率则会降低,从而实现有效的功耗节省。
DVFS 在 GPU 集群中的应用(概述)
对于主要执行计算任务的GPU,NVIDIA和AMD也提供了类似的动态功耗管理机制,虽然操作方式不同于CPU。
对于NVIDIA GPU,通常通过 NVIDIA System Management Interface (nvidia-smi) 来控制功耗限制(Power Limit)和持久化模式。
如果集群的AI任务具有低优先级或间歇性特点,可以尝试设置较低的功耗上限:
# 查看当前GPU的功耗限制
nvidia-smi -q -d POWER
# 设置特定的GPU(例如GPU 0)的功耗上限为200W
sudo nvidia-smi -i 0 -pl 200
通过降低功耗上限,GPU会自动降低其运行频率和电压,以满足限制,这对于那些未充分利用全部计算资源的AI模型尤其有效。
汤不热吧