把一次大模型训练想象成管理一整栋楼的用电。你给每台空调装一个智能插座,手机上实时跳动着功率数字——这是单卡功耗监控;把每个房间所有电器的耗电加到一起,算出一户人家今天的用电量——这是节点能耗统计;再把全楼住户的电费汇总,加上楼道灯、电梯这些公摊费用,得到整栋楼的电费单——这是集群能耗建模。一天之中,做饭时段厨房电器齐开、晚上空调连轴转,训练任务也有自己的“用电高峰”:启动加载、前向计算、反向传播、梯度同步,每个阶段耗电节奏各不相同;电表数字忽高忽低,背后是负载、显存、温度在悄悄“捣乱”。最后,把实测电表读数与空调铭牌上的标称功率比一比,你才能判断这台电器到底省不省电——这对应着实际功耗与TDP的对照分析。训练能耗分析做的正是这样一件事:从一张卡、一台服务器到整个集群,把AI训练的电费一笔一笔算清楚,为绿色AI的节能优化提供最基础的“账本”。

岗位关联

学会训练能耗分析,你就掌握了绿色AI的第一本账——从单张GPU到整个集群,用数据看清每一度电的去向,为功耗优化提供精准的决策依据。

目录
  1. 可视化演示
  2. 单卡功耗监控
  3. 节点能耗统计
  4. 集群能耗建模
  5. 阶段能耗分布
  6. 功耗波动因素
  7. 能耗指标计算
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

单卡功耗监控

想看空调一晚上花多少钱,最笨也最可靠的办法,是在空调插座上装一个智能插座。手机App里的功率数字不停跳动——刚启动那一阵可能冲到1500瓦,温度稳定后慢慢回落到800瓦。训练任务想弄清一张GPU卡的真实耗电,思路完全一样:用nvidia-smi这类工具,实时读取显卡的瞬时功耗,看它在训练过程中如何起伏。

nvidia-smi输出的power.draw字段,单位是瓦(W),就相当于智能插座的读数。工具默认每秒刷新一次,做能耗分析时通常每5到10秒落一个采样点就够了:采样太密浪费存储空间,太疏又会漏掉短促的功耗尖峰。把这些点连成线,就是一张单卡功耗曲线——它是后续一切能耗分析的起点。

功耗P(t)是瞬时值,好比汽车仪表盘上的实时速度;能耗E是累计值,好比里程表。训练跑了T秒,总能耗等于功耗对时间的积分。计算机只能拿到离散的采样点,于是用梯形法近似:把相邻两个采样功耗取平均,乘上采样间隔,再把所有小梯形面积相加。

智能插座记下每一秒的功率,月底叠加出“本月用电多少度”。单卡功耗曲线做一次积分,就是这张卡这次训练的电费账本。账本有了,后面才有优化依据。

E单卡=∫0TP(t) dt≈∑i=1NPi−1+Pi2⋅Δt\displaystyle E_{单卡} = \int_{0}^{T} P(t)\, dt \approx \sum_{i=1}^{N} \frac{P_{i-1} + P_i}{2} \cdot \Delta t
这个公式的意思是:GPU的瞬时功耗每秒都在变,把它在每一小段采样间隔内的平均值乘上时间,再全部加起来,就得到训练全程的累计能耗,单位通常折算成千瓦时(度)。
  1. 瞬时功耗 P(t)GPU在t时刻的实时功率,来自nvidia-smi的power.draw字段,相当于智能插座上跳动的瓦数。
    P(t)P(t)
  2. 对时间积分功耗乘上微小时段再累加,得到训练全程的能耗,就像把每一秒的功率累加成“今天的用电量”。
    ∫0TP(t) dt\int_{0}^{T} P(t)\, dt
  3. 梯形近似把两个相邻采样点的功耗取平均,再乘采样间隔,得到这段时间段的电量近似值。
    Pi−1+Pi2⋅Δt\frac{P_{i-1} + P_i}{2} \cdot \Delta t
  4. 累加求和把所有采样段的电量加起来,便是单卡训练总能耗。
    ∑i=1NPi−1+Pi2⋅Δt\sum_{i=1}^{N} \frac{P_{i-1} + P_i}{2} \cdot \Delta t

节点能耗统计

家里一个房间不会只有空调:冰箱全年待机、电视每天开几小时、路由器从不休息。一台训练服务器也住着一窝电器——GPU是耗电大户,CPU、内存、硬盘、风扇也一刻不停。如果只盯着GPU功耗,就像月底只算空调电费、把冰箱电视忘到九霄云外,账单自然对不上。

节点能耗统计要做的事,就是把一台服务器上的所有用电部件都算进去:GPU功耗从nvidia-smi读取,CPU功耗可以通过RAPL接口拿到,内存、硬盘、风扇等设备合并估算。更省事的手段是直接看服务器管理口(BMC/IPMI)给出的整机实时功率——相当于房间门口挂了一块总电表。

不过,总电表只能告诉你“整个房间用了多少电”,拆不到具体电器头上。实践中通常两条腿走路:用nvidia-smi和RAPL抓器件级读数,用整机功率做校验,两侧对上账,才敢放心填写能耗报告。节点能耗的基本构成就是下面的加和式。

把房间每个插座的电量加起来等于总表读数,说明没有“漏电”;节点各部件能耗加起来约等于整机功率,说明统计口径齐全。对不上账时,差的电量往往藏在某个被遗忘的角落——通常是散热风扇或待机电源。

E节点=EGPU+ECPU+E内存+E其他\displaystyle E_{节点} = E_{GPU} + E_{CPU} + E_{内存} + E_{其他}
节点能耗等于GPU、CPU、内存和其他外设(风扇、网卡、电源模块自身损耗)的能耗之和。GPU通常占60%到80%,但另外三部分加起来也不是小数目。
  1. GPU能耗训练算力的主力,由单卡功耗曲线积分得到,是节点能耗中最大的一块。
    EGPU=∑iPGPU,i⋅ΔtE_{GPU} = \sum_{i} P_{GPU,i} \cdot \Delta t
  2. CPU能耗负责数据预处理和调度,通过RAPL接口读取,占比通常10%到20%。
    ECPUE_{CPU}
  3. 内存能耗常被忽略却持续耗电的部件,占比较小但稳定存在。
    E内存E_{内存}
  4. 其他外设汇总风扇、网卡、电源转换损耗等,在整机功率与前三者之间做差额校验。
    E其他E_{其他}

集群能耗建模

整栋楼的电费单,除了各家各户的电量,还有楼道灯、电梯、水泵这些公摊开销。数据中心也一样:IT设备本身只是“住户”,冷却塔、配电柜、照明系统才是“公摊”。公摊占多大比例,用一个叫PUE的系数来衡量。

PUE指的是数据中心总能耗与IT设备能耗的比值。理想值是1.0,意味着所有电能都花在计算上;现实中PUE通常在1.2到2.0之间,多出来的部分就是制冷、配电等开销。集群能耗建模,就是把每一台服务器的节点能耗汇总,再乘上这个公摊系数。

同时还要考虑利用率折算与分摊规则:集群不是每时每刻满载,空闲节点的静态功耗也要记账;多个训练任务共享集群时,通常按各任务实际占用的GPU数量和时长分摊能耗成本。

物业把电梯电费按面积摊给住户,数据中心按用电量把PUE摊给任务——谁的计算任务吃电多,谁分摊的“公摊”就多。训练能耗报表里的集群总能耗,就是这样一层层摊出来的。

E集群=PUE×∑j=1ME节点,j\displaystyle E_{集群} = PUE \times \sum_{j=1}^{M} E_{节点,j}
集群总能耗等于所有节点能耗之和再乘以PUE。PUE扮演“公摊系数”的角色:数据中心的冷却、供电损耗越大,这个系数越高,账单就越贵。
  1. M个节点逐一计量集群中有M台训练服务器,每台按节点能耗统计方法分别核算。
    E节点,1,E节点,2,⋯ ,E节点,ME_{节点,1}, E_{节点,2}, \cdots, E_{节点,M}
  2. 求和得IT总能耗把所有节点能耗相加,得到整个集群的计算设备能耗。
    ∑j=1ME节点,j\sum_{j=1}^{M} E_{节点,j}
  3. 乘以PUE公摊系数把制冷、配电、照明等非计算开销按比例摊入,得到数据中心口径的集群总能耗。
    E集群=PUE×∑j=1ME节点,jE_{集群} = PUE \times \sum_{j=1}^{M} E_{节点,j}

阶段能耗分布

家庭用电有早中晚三个高峰:早上热水器、中午电磁炉、晚上空调。训练任务的功耗曲线同样有自己的“作息表”:刚启动时加载模型权重、预热数据管道,功率一路爬坡;前向传播计算规律、功耗平稳;反向传播要算梯度,算力需求大,功耗明显抬升;多卡训练还有梯度同步阶段,GPU之间频繁通信,同样在耗电。

把这些阶段在时间轴上切分好,分别统计各自累计能耗,再算出每一段占全程的比例,就能一眼看出哪段训练最“费电”。这个操作叫阶段能耗分布分析,是定位能耗热点的第一把扳手。

假设一次训练全程总能耗已知,某阶段能耗为E_i,那么该阶段的能耗占比就是它除以总能耗再乘以100%。通过这个公式,可以让“反向传播最费电”这类直觉变成精确的百分比。

家里知道晚上空调用电占比最高,才会安排错峰用电;训练任务知道反向传播和梯度同步占了六成以上电能,才会优先优化算子实现、压缩通信量。能耗热点在哪里,优化资源就投向哪里。

ηi=E阶段i∑k=1KE阶段k×100%\displaystyle \eta_i = \frac{E_{阶段i}}{\displaystyle\sum_{k=1}^{K} E_{阶段k}} \times 100\%
第i个训练阶段的能耗占比,等于该阶段能耗除以所有阶段能耗之和。占比越高的阶段越值得优先优化。
  1. 阶段能耗 E_阶段i把时间轴上属于第i个阶段(如反向传播)的采样点功耗做积分,得到这个阶段消耗的总电能。
    E阶段iE_{阶段i}
  2. 所有阶段能耗求和分母把启动、前向、反向、同步等K个阶段的能耗全部加起来,即训练全程总能耗。
    ∑k=1KE阶段k\sum_{k=1}^{K} E_{阶段k}
  3. 相乘以100%除法的结果是0到1之间的小数,乘以100%换算成直观的百分比。
    ηi=E阶段i∑k=1KE阶段k×100%\eta_i = \frac{E_{阶段i}}{\sum_{k=1}^{K} E_{阶段k}} \times 100\%

功耗波动因素

家里同时开微波炉和空调,电表数字会剧烈跳动;训练过程中功耗曲线也往往毛刺丛生。这些波动不完全是噪声——它们背后藏着真实的运行状态:计算负载在变、显存在吞吐、温度在累积、电源策略在调整。

工程上常用变异系数(CV)量化波动大小:CV等于功耗序列的标准差除以平均值。CV越大说明功耗越不稳定,供电估算越失真;CV越小说明训练节奏越平稳。训练功耗的CV通常稳定在0.05到0.2之间,超过0.25就要警惕了。

影响功耗波动的因素主要有四类,可以对照排查:一是计算负载变化,batch size越大,每个step的算力请求起伏越明显;二是显存占用影响,频繁分配释放显存会造成功耗毛刺;三是温度与散热,高温会导致GPU降频或漏电增大,改变功耗形态;四是电源管理策略,DVFS动态调频调压会让功耗在高、低档位间切换。

电表剧烈跳动会让人担心电路负荷,训练功耗CV过高则让电费估算失真。发现功耗曲线像过山车,先别急着怪测量仪器——对照负载、显存、温度、电源策略四个因素逐一排查,往往能找出真正的“电老虎”。

CV=σPPˉ=1N−1∑i=1N(Pi−Pˉ)2Pˉ\displaystyle CV = \frac{\sigma_P}{\bar{P}} = \frac{\sqrt{\frac{1}{N-1}\sum_{i=1}^{N}(P_i - \bar{P})^2}}{\bar{P}}
变异系数CV量化功耗波动的剧烈程度:先算功耗序列的平均值和标准差,再用标准差除以平均值。比值越大,说明功耗像“过山车”一样起伏越剧烈。
  1. 平均功耗把所有采样点的功耗取平均,得到训练期间的平均功率水平。
    Pˉ=1N∑i=1NPi\bar{P} = \frac{1}{N}\sum_{i=1}^{N} P_i
  2. 偏离均值的平方每个采样点功耗减去平均值后平方,衡量该点偏离平均水平的程度。
    (Pi−Pˉ)2(P_i - \bar{P})^2
  3. 标准差把偏离平方求平均再开方,得到功耗波动幅度的绝对指标。
    σP=1N−1∑i=1N(Pi−Pˉ)2\sigma_P = \sqrt{\frac{1}{N-1}\sum_{i=1}^{N}(P_i - \bar{P})^2}
  4. 归一化得CV标准差除以平均值,消除量纲,让不同功率水平的任务可以互相比较波动程度。
    CV=σPPˉCV = \frac{\sigma_P}{\bar{P}}

能耗指标计算

空调铭牌上印着“输入功率2000W”,那是最大制冷工况下的极限值,实际运转可能只有700W。GPU也有类似的铭牌值——TDP(热设计功耗),它是给散热器设计的参考上限,不等于实际功耗。能耗分析如果直接拿TDP当功耗算,就像按铭牌最大功率给整个夏天的空调电费做预算,一定会严重高估。

正确做法是“看电表,不信铭牌”:用实测的平均功率乘运行时长得到实际能耗,再和TDP估算值对比,得到一个反映运行效率的参考比。实测值远低于TDP,说明任务负载不重;接近甚至超过TDP,就要检查是否存在超频或散热异常。

单位换算也是容易出错的地方:功耗单位是瓦(W),能耗常用千瓦时(kWh)。1千瓦时=1000瓦×3600秒=3.6×10⁶瓦秒。功耗曲线积分得到的是瓦秒,除以3.6×10⁶才能变成“度”。nvidia-smi这类工具给的瞬时功耗是瓦,时长是秒,乘完别忘记换算。

月底交电费,电力公司只认电表读数。能耗分析报告的最终落笔,也应该以实测累计值为准,TDP只用于采购选型时的粗估算。这一对比,就是“省电小能手”与“虚标大胃王”的照妖镜。

E实测=Pˉ实测×T运行,R效=E实测ETDP估算=Pˉ实测PˉTDP\displaystyle E_{实测} = \bar{P}_{实测} \times T_{运行}, \qquad R_{效} = \frac{E_{实测}}{E_{TDP估算}} = \frac{\bar{P}_{实测}}{\bar{P}_{TDP}}
实测能耗等于实测平均功率乘以运行时长;能效参考比是实测能耗与TDP估算能耗的比值。这个比值越接近1说明运行越接近标称上限,远小于1则说明负载偏轻。
  1. 实测平均功率对功耗曲线取平均,得到训练期间的真实平均功耗水平,单位瓦。
    Pˉ实测=1N∑i=1NPi\bar{P}_{实测} = \frac{1}{N}\sum_{i=1}^{N} P_i
  2. 乘以运行时长平均功率乘上训练总秒数,得到实测能耗(瓦秒)。
    E实测=Pˉ实测×T运行E_{实测} = \bar{P}_{实测} \times T_{运行}
  3. TDP估算能耗用标称TDP乘同样时长,得到假设满载运行的理论能耗。
    ETDP估算=PˉTDP×T运行E_{TDP估算} = \bar{P}_{TDP} \times T_{运行}
  4. 两者求比值实测能耗除以TDP估算值,得到能效参考比,判断任务“吃”了多少标称功率。
    R效=E实测ETDP估算R_{效} = \frac{E_{实测}}{E_{TDP估算}}

AI 应用场景

训练集群能效月报

阶段:能耗监控与分析

解决的问题:传统做法是月底看电费单,只能知道整个数据中心花了多少钱,算不出每个业务部门、每个训练任务各用了多少电。基于训练能耗分析,采集每张卡的功耗日志,逐层汇总节点、集群能耗,再按PUE和GPU占用时长分摊到各个团队,形成人人认账的能效月报。

具体案例:某IDC运维团队接入20个训练任务的功耗画像后,发现某个任务占用了30%的GPU时长,却只产出8%的有效算力,随即推动任务下线,每月节省电能超过500千瓦时,相当于减少了约300公斤碳排放。

训练任务能效体检

阶段:训练中监控与调优

解决的问题:训练任务跑得慢,说不清是算法问题还是硬件功耗受限。通过单卡功耗曲线、阶段能耗分布和功耗波动CV分析,能快速定位“启动预热过长”“反向阶段过热降频”“显存频繁抖动导致功耗毛刺”等隐藏问题。

具体案例:某团队训练大模型时发现反向阶段功耗异常偏低,排查后定位到GPU过热降频,调整机房散热策略后训练时间缩短18%,同时CV从0.31回落到0.12。

硬件采购实测评估

阶段:硬件选型评估

解决的问题:筛选GPU时,供应商标称的TDP差异很大,仅凭纸面参数难以判断真实能效。借助标准训练脚本跑同等工作负载,采集实测功耗和累计能耗,计算“单位能耗产出”(如Token/kWh),用数据替代感觉做决策。

具体案例:某公司对比两款GPU平台时发现,TDP较低的一款在训练场景下实测功耗反而高出15%,结合PUE核算后总拥有成本更高,最终选型改变了原定采购计划。

Python 演示

python71 行
"""训练能耗分析:从功耗日志到集群能效评估"""import mathimport statistics  class Analyzer:    def __init__(self, records, pue=1.5, interval=10.0):        self.records = records    # 每条含 gpu_w/cpu_w/phase        self.pue = pue        self.interval = interval  # 采样间隔(秒)     def _integrate(self, key):        total = 0.0        for i in range(1, len(self.records)):            p0 = self.records[i - 1][key]            p1 = self.records[i][key]            total += (p0 + p1) / 2.0 * self.interval        return total / 3600000.0  # 瓦秒 -> 千瓦时     def gpu_energy(self):        return round(self._integrate("gpu_w"), 3)     def node_energy(self):        return round(self._integrate("gpu_w") + self._integrate("cpu_w"), 3)     def cluster_energy(self):        return round(self.node_energy() * self.pue, 3)     def phase_share(self):        ws = {}        for r in self.records:            k = r["phase"] or "other"            ws[k] = ws.get(k, 0.0) + r["gpu_w"] * self.interval        total = sum(ws.values())        return {k: round(v / total * 100.0, 1) for k, v in ws.items()}     def fluctuation_cv(self):        powers = [r["gpu_w"] + r["cpu_w"] for r in self.records]        mean = statistics.mean(powers)        stdev = statistics.stdev(powers)        return round(stdev / mean, 3)  def simulate(duration=3600, interval=10.0):    records = []    for i in range(int(duration / interval)):        t = i * interval        if t < 600:            phase = "warmup"        elif t < 2400:            phase = "forward"        else:            phase = "backward"        gpu = 250 + 80 * math.sin(t / 300.0)        cpu = 60 + 10 * math.sin(t / 120.0)        if phase == "warmup":            gpu += max(0.0, 80 * (1.0 - t / 600.0))        if phase == "backward":            gpu += 40        records.append({"time": t, "gpu_w": round(gpu, 1),                        "cpu_w": round(cpu, 1), "phase": phase})    return records  if __name__ == "__main__":    ana = Analyzer(simulate(), pue=1.5)    print("GPU能耗(kWh):", ana.gpu_energy())    print("节点能耗(kWh):", ana.node_energy())    print("集群能耗(kWh):", ana.cluster_energy())    print("阶段能耗占比(%):", ana.phase_share())    print("功耗波动CV:", ana.fluctuation_cv())
目的:模拟1小时训练功耗日志,用梯形积分计算单卡GPU能耗、节点能耗、集群能耗(含PUE),并给出阶段能耗占比与功耗波动变异系数,完整走通训练能耗分析流程。
  1. total += (p0 + p1) / 2.0 * self.interval梯形法把相邻两个功耗采样平均后乘间隔,近似这一小段的电量。
  2. return total / 3600000.0把瓦秒换算成千瓦时(度),1度=3.6×10⁶瓦秒。
  3. return round(self._integrate("gpu_w") + self._integrate("cpu_w"), 3)节点能耗是GPU与CPU两路积分之和。
  4. ws[k] = ws.get(k, 0.0) + r["gpu_w"] * self.interval按训练阶段分组累加功耗与时间的乘积,得到各阶段累计能耗。
  5. return {k: round(v / total * 100.0, 1) for k, v in ws.items()}每个阶段的瓦秒数除以总数再乘100,得到能耗占比。
  6. mean = statistics.mean(powers)计算整个训练过程的平均功耗,作为波动分析的基准。
  7. stdev = statistics.stdev(powers)标准差描述功耗偏离平均值的绝对幅度。
  8. return round(stdev / mean, 3)标准差除以均值得到变异系数CV,归一化后方便不同任务之间比较波动。
  9. gpu = 250 + 80 * math.sin(t / 300.0)用正弦函数模拟计算负载带来的功耗自然起伏。
  10. if phase == "backward": gpu += 40反向传播阶段算力需求大,叠加40瓦的额外功耗。

常见误区

误区GPU标称TDP是350W,配电源时按350W准备,写能耗预算也按350W算,认为训练时GPU一直以这个功率运行。

正解TDP是热设计功耗,是散热器需要压住的发热上限,不是实际运行功耗。训练负载通常到不了TDP,空闲时甚至只有几十瓦。这就像空调铭牌写着2000W,实际运行平均可能只有七八百瓦。能耗分析必须以实测功耗为准,TDP只能用于选型估算。

为何常见:TDP是设备规格表上最显眼的功耗数字,采购和供电规划都按它算,久而久之就把它当成了“实际功耗”。

误区训练任务主要跑在GPU上,觉得把GPU功耗加起来就是整台服务器的能耗,省事又“差不多够用”。

正解服务器上CPU、内存、风扇、电源转换损耗持续耗电,GPU通常只占节点总功耗的60%到80%。只看GPU就像只看空调不看冰箱电视,月底电费单一定对不上。正确做法是整机功率与部件功耗双侧校验。

为何常见:GPU是训练的主角,nvidia-smi又极易读取,其他部件可读性差,于是很多人图省事只算GPU。

误区估算训练集群的电费时,直接把显卡标称功耗、卡数量和训练时长三个数相乘,认为这就是集群总能耗。

正解这个算法同时犯了两个错:一是用了TDP而非实测功耗,容易高估;二是漏掉了CPU、内存和PUE公摊,又会低估。正确路径是逐卡实测积分得到节点能耗,求和后乘PUE,才是数据中心真实口径。

为何常见:纸面估算最快最方便,标称值、卡数、时长都是现成数字,拍照一样省事,但离真实电表差得很远。

误区nvidia-smi读出的功耗上下跳几十瓦,第一反应是工具不准,直接取个平均值当噪声滤掉。

正解波动本身携带重要信息:批量大小变化、显存分配释放、温度降频、DVFS调频调压都会造成波动。用变异系数定量描述,再结合阶段分布解读,反而能定位到过热降频、显存抖动等真实问题。

为何常见:功耗不像准确率那样被重视,人们习惯把看不懂的跳动归为噪声,其实它更像是系统状态的体温计。

面试题

Q1. 在家庭用电比喻中,nvidia-smi 读取的GPU功耗相当于什么?

单选题 · easy

  • A.空调铭牌标称功率
  • B.智能插座实时功率← 正确答案
  • C.月末电费账单总额
  • D.楼道灯泡的公摊电费

答案:B。nvidia-smi的power.draw字段给出的是GPU瞬时功耗,像智能插座上实时跳动的功率数字;TDP才是铭牌标称功率,电费总额相当于累计能耗,PUE才是公摊概念。

Q2. TDP(热设计功耗)的正确理解是?

单选题 · easy

  • A.温度功耗比系数
  • B.热设计功耗上限← 正确答案
  • C.数据传输协议名称
  • D.显卡显存容量大小

答案:B。TDP是散热设计参考上限,不是实际运行功耗。实际训练中GPU功耗会随负载变化,通常低于TDP。把它当成标称功耗上限理解,才能避免在做能耗分析时严重高估。

Q3. PUE 值越接近1,说明什么?

单选题 · easy

  • A.数据中心能效极佳← 正确答案
  • B.数据中心能耗巨大
  • C.服务器的数量非常少
  • D.冷却系统非常耗电

答案:A。PUE=数据中心总能耗÷IT设备能耗。越接近1说明越少电被浪费在制冷、配电等非计算环节,能效越好。现实中PUE多在1.2到2.0之间,1.0是理论极限。

Q4. 做节点能耗统计时,最容易被忽略的用电部分是?

单选题 · mid

  • A.GPU核心功耗
  • B.CPU降压功耗
  • C.内存硬盘风扇← 正确答案
  • D.网络交换设备

答案:C。GPU和CPU都有成熟的功耗读取工具,内存、硬盘、风扇等部件常被忽略。这就像算房间电费只看空调和冰箱,忘了路由器、充电器等持续耗电的小设备。节点能耗应是GPU+CPU+内存+其他外设的总和。

Q5. 关于训练各阶段能耗,下列说法正确的是?

单选题 · mid

  • A.启动加载阶段功耗最高
  • B.反向传播阶段功耗较高← 正确答案
  • C.前向传播完全不消耗电
  • D.梯度同步几乎不耗电

答案:B。反向传播需要计算梯度,算力需求大,功耗通常最高;启动加载阶段功率处于爬坡期、前向传播功耗平稳、梯度同步涉及GPU间通信也会耗电。阶段能耗分布分析正是用占比数据来验证这些规律。

Q6. 功耗变异系数CV的作用是?

单选题 · mid

  • A.衡量功耗波动的大小← 正确答案
  • B.计算显存占用率高低
  • C.调整采样频率的快慢
  • D.预测模型收敛的速度

答案:A。CV=标准差÷均值,是归一化的波动指标。它衡量训练功耗的稳定性,CV过高说明功耗波动剧烈,供电估算失真、可能存在过热降频或显存抖动等问题。显存占用、采样频率、收敛速度是另一码事。

Q7. 为什么能耗分析要用实测功耗而非TDP?

单选题 · mid

  • A.TDP数值总是偏小
  • B.实测反映真实运行← 正确答案
  • C.TDP只用于CPU测算
  • D.实测数据更容易取得

答案:B。TDP是散热设计上限,实际功耗随负载变化,用TDP估算就像按空调铭牌最大功率算电费,严重高估。实测功耗来自运行时采样,能反映真实用电,配合运行时长才能得到准确的累计能耗。

Q8. 做集群能耗建模时,需要哪些数据?

多选题 · hard

  • A.每个节点的实时功耗← 正确答案
  • B.数据中心PUE数值← 正确答案
  • C.模型参数量的大小
  • D.训练任务的运行时长← 正确答案

答案:ABD。集群能耗=Σ节点能耗×PUE。节点实时功耗用于逐级积分得到每个节点的能耗,PUE用于折算公摊,运行时长与功耗共同决定能耗总量。模型参数量可能影响功耗水平,但它本身不是建模的输入数据,而是通过功耗间接体现。

Q9. 下列哪些因素会造成训练功耗波动?

多选题 · hard

  • A.批量大小的调整← 正确答案
  • B.显存分配与释放← 正确答案
  • C.服务器机柜的颜色
  • D.温度与散热策略← 正确答案

答案:ABD。批量大小变化会改变每个step的算力请求,显存频繁分配释放产生功耗毛刺,高温导致降频或漏电增大、改变功耗形态,DVFS电源管理策略同样影响波动。机柜颜色显然与电气特性无关,属于干扰项。

Q10. 关于能耗积分与采样频率,下列说法正确的有?

多选题 · extreme

  • A.采样越密集积分越精确← 正确答案
  • B.采样间隔不影响精度
  • C.梯形法精度高于矩形法← 正确答案
  • D.采样过密浪费存储空间← 正确答案

答案:ACD。采样越密,梯形近似越贴近真实功耗曲线,积分精度越高,但存储和计算开销也越大;梯形法用相邻两点平均,比单点矩形法更能反映变化趋势,精度更高。因此实际中常取5到10秒一个采样点,在精度与成本间取平衡。B说反了,采样间隔直接影响精度。