一、GPU 功耗建模:从单一数值到多维预测
1. 功耗的构成分解
GPU 的总功耗并非一个固定数值,而是由多个子系统的功耗叠加而成:
- 计算核心功耗:流式多处理器的动态功耗,与计算利用率、时钟频率和工作电压成正比——这是 GPU 功耗中占比最大也最可调控的部分;
- 显存功耗:高带宽显存(HBM 或 GDDR)的读写功耗,与显存带宽利用率正相关。显存密集型任务(如大 batch 的矩阵乘法)中的显存功耗占比可高达 30%;
- 静态功耗:GPU 通电即产生的漏电流功耗,与计算任务无关,仅与芯片温度和供电电压相关。
功耗建模的目标是基于任务的计算特征(算子类型、张量形状、批次大小)和 GPU 的工作参数(时钟频率、温度、电压),预估该任务在 GPU 上的实际功耗。
2. 基于性能计数器的功耗反推
GPU 暴露了丰富的硬件性能计数器,包括 SM 活跃周期数、显存读写字节数、PCIe 传输字节数等。功耗建模的一种有效方法是通过这些性能计数器反推各子系统的功耗:
- SM 活跃周期与计算核心功耗近似线性相关——通过离线基准测试建立周期数与功耗的回归模型;
- 显存读写字节数与显存功耗呈正相关——当显存带宽利用率从 30% 升到 90% 时,显存功耗可能翻倍;
- 静态功耗与温度的关系可通过 Arrhenius 模型近似——温度每升高 10°C,静态功耗可能上升 5%-15%。
将性能计数器的实时采集值与预标定的功耗系数相乘后求和,得到 GPU 瞬时的功耗估计。这一方法的精度取决于系数标定的准确度——不同 GPU 型号的系数差异显著,需要逐型号做标定。
3. 任务级功耗预测
为调度器提供功耗决策支持,需要从"GPU 瞬时的功耗估计"升级到"任务级的功耗预测"——在某任务被调度到某个 GPU 上之前,预估它将消耗的总能量。
任务级功耗预测结合任务的计算图特征与目标 GPU 的功耗模型:从任务的计算图中提取算子类型和比例(矩阵乘法占比、注意力计算占比、激活函数占比),结合训练步数的估算,得出各类算子的总执行周期;再将周期数与 GPU 的功耗模型结合,得出任务的总能量消耗。
预测精度在实际部署中通常在 ±15% 的范围内。对于调度决策而言,预测的相对排序(任务 A 比任务 B 预计省电 30%)比绝对数值更有价值。
二、任务聚合:从碎片执行到批量集中
1. 时间维度的任务聚合
GPU 集群中常见的情况是:多张 GPU 上分散运行着多个短小任务。每张 GPU 都在工作,但整体利用率不高——每个任务单独占用一张 GPU 使得 GPU 内部的并行度未被充分利用,同时多张 GPU 的静态功耗叠加产生了不必要的能耗。
任务聚合的思路是:将多个短小、低利用率的任务聚合到更少的 GPU 上执行。这减少了处于低利用率状态的 GPU 数量——被释放的 GPU 可以进入休眠或低功耗状态,从而降低整体能耗。
聚合策略需要折中"能耗节省"与"任务延迟增加":被聚合的任务从独占 GPU 变为共享 GPU,单个任务的执行时间可能变长。调度器的决策依据是聚合前后的能效比——如果节省的 GPU 静态功耗超过因聚合导致的总执行时间增加所带来的额外计算功耗,则聚合是合理的。
2. 空间维度的热感知放置
GPU 集群中不同物理位置的 GPU 散热条件不同。靠近空调出风口的 GPU 温度比角落中的 GPU 低 5-10°C。更低的温度意味着更低的静态功耗和更低的散热能耗。
热感知放置策略将高功耗任务优先分配到散热条件更好的 GPU 上——这些 GPU 在运行高功耗任务时温度升高幅度较小,维持较低温度所需的散热能耗也更少。温度监控数据实时反馈到调度器,形成"调度决策→温度变化→下一次调度决策"的闭环。
3. 功耗封顶与聚合的协同
GPU 支持功耗封顶——将 GPU 的最大功耗限制在设定值以下。功耗封顶与任务聚合相辅相成:当多个任务聚合到同一张 GPU 上时,GPU 的计算利用率上升,功耗趋近上限,可能触发功耗封顶机制导致降频。此时调度器需要评估:降频带来的任务减速是否抵销了聚合带来的能耗节约。
协同策略是:为每张 GPU 设定一个"最优功耗区间"——在此区间内 GPU 的能效比最高。调度器在聚合任务时,确保聚合后的总功耗预测值落在最优功耗区间内,而非逼近功耗上限。
三、动态频率调节:以频率换能效
1. 频率-功耗的非线性关系
GPU 的计算功耗与时钟频率之间的关系不是线性的,而是近似三次方关系。将频率从峰值降低 20%,计算速度下降约 20%(线性),但计算功耗下降约 49%(三次方)。这意味着——以较低频率运行非时延敏感任务,可以在少量牺牲执行时间的情况下大幅降低能耗。
动态频率调节(DVFS)利用了这一非线性特性。对于调度器而言,它为每个任务的资源分配添加了一个新的可调维度——除了分配 GPU 数量和执行时间窗口之外,还可以设定 GPU 的运行频率。
2. 频率的差异化调度
并非所有任务都适合降频。区分任务类型后差异化设置频率:
- 时延敏感型任务(如在线推理):维持较高频率,确保响应延迟在可接受范围内;
- 吞吐型任务(如离线训练、批量推理):适度降频 10%-20%,以少量训练时间换去可观的能耗节省;
- 低优先级后台任务(如数据预处理、超参数搜索):较大幅度降频 20%-30%,利用空闲资源和低频率在周末或夜间完成。
调度器在分配任务时,同时设定目标频率。被分配到降频 GPU 上的任务,其资源描述中包含频率信息,由 GPU 管理组件在任务启动时应用频率设置。
3. 频率调节对训练收敛的影响
降频对训练任务的影响不仅是执行时间延长,还可能间接影响模型收敛。某些优化器对 GPU 浮点运算的精度和时序敏感——降频可能改变浮点运算的舍入模式或时序特性,导致"参数完全相同但训练结果有微小差异"。
这一影响在实践中通常可以忽略——降频 10%-20% 在绝大多数训练场景中不会导致可观测的收敛差异。但对于精度要求极端严格的场景(如数值模拟、科学计算),建议在降频实验前先做收敛性验证,确保频率变化不会影响最终结果。
能耗感知的绿色调度不是一次性的优化项目,而是嵌入调度器核心决策逻辑的持续机制。功耗建模为每次调度决策提供了量化的能耗预估,任务聚合在时间和空间维度上提升能源利用效率,动态频率调节利用电压-频率的非线性关系以少量性能换取显著的能耗节约。三者叠加,在算力效率与环境可持续性之间找到工程上的最优解。