大家可能见过那句流传很广的话:“人脑只有20瓦,GPT-3却要400瓦。”第一次看到时我也挺震撼的——一个是几十亿神经元组成的超级计算系统,一个只是跑一个语言模型,功率差距怎么就这么大。这个对比在网上传了很多年,细节却经常是错的。好多人拿它说明“人工神经网络太笨了、太费电了”,可真实情况比这复杂得多。这篇我打算把口径拆开,把人工神经网络的能耗来源拆开,再把大脑的省电机制拆开;最后结合我在端侧部署和功耗测试里踩过的一些坑,聊聊现在有哪些省电路线真的能落地,哪些只是听起来很美。
1. 先把账算清楚:“20瓦”和“400瓦”到底比的是什么
1.1 两个数字背后分别是哪本账
先问最基础的问题:20瓦和400瓦各自是从哪来的?大脑的20瓦,指的是一个成年人全脑的代谢功率,是一个持续运行的平均值。脑细胞维持静息电位、发放动作电位、合成神经递质、修复细胞结构,这些全都要耗能;哪怕你安安静静地坐着发呆,大脑也在按这个功率默默消耗能量。而GPT-3那个400瓦,更接近一块A100加速卡在推理任务下的板卡功耗——注意是板卡功耗,不是整台服务器,更不是训练过程的电费。
训练GPT-3这种规模,要做几千PFLOPs级别的计算,行业里公开的研究估计一次完整训练要消耗数百到上千兆瓦时电量,折算成电费是相当夸张的一笔钱。拿训练总电量去对比人脑的一秒功率,本身就是教科书级的“单位都没对齐”。所以网上那些“GPT-3比人脑费电XX万倍”的说法,多半是把不同口径的数字硬塞进同一个算式里了。
真正该比的,其实是同样做一次“智能推理”时,两种系统各自要付出多少运行功率和多少总能量。这个维度上,大脑依然处在碾压级的位置。换句话说,口径虽然要校正,但效率差距本身是真实存在的,而且比我们能想到的还要深。
1.2 比完功耗,再看“硬件配置单”
讲完口径,再看两者的“硬件配置单”。GPT-3是1750亿参数,前馈加注意力堆出来的稠密网络;人脑神经元总数约860亿,其中大脑皮层大概160亿,听起来参数规模差不多,但连接数完全不是一个级别——人脑突触数量在百万亿这个量级往上走,运行时光靠稀疏连接就比GPT-3的全连接矩阵复杂得多。
硬件规模比大脑小,实际功耗却高出一到两个数量级,这正是大家兴奋的点:如果能把能耗拉平,省下的不只是电费,还有数据中心的占地、散热和整个基础设施的投入。但是要把这件事做成,得先搞清楚人工神经网络的电到底烧在哪。这也是我接下来想展开的部分。
2. 人工神经网络的能耗,到底烧在哪里
2.1 前向计算、反向传播和数据搬运
做深度学习的人都知道,一次推理就是把输入张量逐层往前推:卷积层做乘加,全连接层做矩阵乘,激活函数做非线性变形。这个过程落到硬件上,主要是MAC(乘累加)单元在数亿次地翻转,同时权重和中间特征要从内存一级一级搬到计算单元。真正烧电的往往不是那些数位运算本身,而是数据搬运。做过体系结构的人都清楚,访问一次片外DRAM的能耗,比做一次浮点乘法高出一两个数量级。模型越大,权重越多,访存的账单就越吓人。
训练阶段还要反向传播,梯度从最后一层往回到第一层,每一层都要把前向时的激活值拿出来做残差计算和权重更新。这意味着训练过程的计算量大约是前向的三倍,内存占用更是爆炸。很多人最初接触BP神经网络,可能是在Matlab里跑手写数字识别,那时网络小,没人关心功耗;等模型大到GPT-3这个量级,同样的反向传播逻辑就变成了发电厂的账单。
2.2 从CNN、LSTM到Transformer:结构越聪明,电费越吓人
人工神经网络的结构演化,在精度上越走越远,但能耗角度并不是每条路都友好。卷积神经网络靠局部感受野和共享权重节省了大量参数,这是它在2012年后成功的关键。循环神经网络和LSTM则要维护一个隐状态序列,按时间步一步步展开,门控矩阵和单元状态都在反复做矩阵乘;训练还要用基于时间的反向传播(BPTT),长序列下计算和显存消耗会按时间长度累积。
Transformer走的是另一条路。注意力机制让任意两个token都能交互,精度上占尽便宜,代价是计算复杂度随序列长度平方增长。加上自回归生成时每一步都要重新加载权重和缓存KV,推理时的功耗相当稳定地维持在高位。除了这些主线,工程里还有不少“结构换能效”的衍生网络:小波Elman网络把多尺度分解接进反馈结构,图神经网络处理非欧空间的消息传递,Neural ODE则把网络层看成连续动力系统,用神经网络参数化导数、用ODE求解器推进——听起来很优雅,但求解器每一步数值迭代都要完整跑一遍网络,省下的参数又花在了时间上。
可以说没有任何一种结构是天然省电的,省电与否取决于计算密度和访存模式。真正想低功耗,就得回到最底层的“算力-带宽-能效”三角里做取舍。
2.3 一个常被忽略的能耗大头:中间激活与带宽
做推理优化的人会发现一个反直觉现象:有时候计算量明明降低了,功耗却没降多少。原因往往出在中间激活值上。Transformer的每一层都要把特征图、注意力矩阵、FFN中间层临时写进显存;batch大小和输入序列一拉长,中间激活的大小甚至会超过权重本身。
显存带宽是有限资源,数据写进写出都要耗电。我在跑神经网络TTS时也踩过类似坑:模型本身很小,但每帧都要生成频谱,还要重复加载状态缓存,导致GPU一直处于“空转等高带宽”的状态,功耗下不去。想要真正省电,光数FLOPs没用,得算数据和计算的比例到底是多少。这个比例,业内常叫arithmetic intensity,决定了这段网络到底是计算密集还是访存密集,也决定了该往哪个方向优化。
3. 大脑凭什么只用20瓦?三个反直觉的省电机制
3.1 事件驱动:不响铃就不工作
人脑神经网络在信息处理上有个很重要的原则:少就是多。神经元并不是每个周期都放电,而是等膜电位累积到阈值后偶尔发一个脉冲;静息状态下放电率极低,皮层神经元平均每秒只有个位数到几十个脉冲。这意味着大脑的大部分突触在大部分时间里是“沉默”的,能量主要用于维持静息电位,而不是做大规模同步计算。
GPU恰恰相反,芯片内部的时钟让所有晶体管每个周期都在同步翻转,不管当前这批数据用不用得上,功耗都是一笔固定开销。打个比方:大脑像一间不响铃就不工作的办公室,GPU则像一间常年把走廊灯光、广播和每台电脑都开满的机房。事件驱动带来的省电效果,是数量级的。
3.2 终身学习,不做全局反向传播
人工神经网络训练的能耗大户是反向传播:全局损失要回传梯度到每一层,每一层都要更新权重。大脑从来不走这条路。突触的可塑性是局部的:当一个神经元反复参与另一个神经元的放电,它们之间的突触会变强,这叫Hebbian规则,更精细的还有STDP机制,按脉冲到达的先后顺序调整连接强弱。
整个过程不依赖一个全局误差信号,也不需要存储前向的激活值来回放。可以说大脑把“训练”融进了“运行”里,边干活边更新,而不是像神经网络那样先花几个月训练再上线推理。这也是为什么大脑能在20瓦的预算内同时保持学习能力,而通用神经网络要跑一遍完整训练流程,电费惊人。
3.3 用结构省电:稀疏连接、侧抑制与突触修剪
大脑的第二个秘密是“用结构换效率”。皮层是高度分层组织的,视觉、语言、运动各有各的专用通路;同级神经元之间还普遍存在侧抑制,谁被激活得强,就压住周围神经元,形成稀疏的胜者全拿编码。这种稀疏化让每个时刻真正处于激活状态的神经元比例很小,自然就省了电。
更重要的一点是,大脑会修剪突触。儿童时期突触密度达到峰值,随后十几年持续修剪,保留经过验证有用的连接。这跟神经网络剪枝其实是同一件事——只不过大脑是在能量预算的强约束下被迫剪的,把冗余连接当作浪费电的负担。反观现在的大模型,训练完反而把全部权重都留在那张庞大的稠密矩阵里,推理时代价自然被加倍放大。
4. 向大脑抄作业:低功耗AI的现实路径
4.1 软件侧优先级:量化、剪枝、蒸馏、稀疏化怎么排
把大脑的启发落到工程里,第一件能做的是软件侧优化。我的做法通常按“收益/成本”排序:先做量化。FP16转INT8通常能把访存带宽需求砍半,在很多硬件上还能用上低精度算子;关键是把归化因子的校准做好,再加一点量化感知训练,精度掉点一般能控制在半个点以内。
第二是结构化剪枝,直接删掉不重要的通道或注意力头,因为非结构化剪枝在稠密矩阵硬件上几乎没有加速收益。第三是蒸馏,用小模型学大模型的注意力分布,换来的是推理阶段直接降到原来的几十分之一规模。最后才是稀疏化,包含稀疏激活、稀疏注意力等等——这一项在通用GPU上收益有限,必须配合专门支持稀疏计算的硬件。把这四项按顺序做下来,通常能带回一个量级以上的功耗下降。
4.2 硬件侧尝试:多核调度、存算一体与Versal ACAP
软件优化有天花板,真正想逼近大脑的效率还得动硬件。先说一个经常被忽略的问题:通用神经网络处理器下的多核调度问题。现在手机SoC里的NPU、数据中心里的AI加速卡,内部不止一个计算核心,网络层的矩阵乘往往被切分到多个核心上并行。
切分方式很有讲究:按batch切分的话,各核心任务独立,通信开销小;按层内切分的话,每个核心只算一部分输出通道,结果要跨核拼接,访存同步就是个坑。我在实际工程里见过不少例子,四核NPU跑一个小模型,延迟反而比单核还差,就是被同步和内存竞争拖垮的。
调度之外,存算一体是另一个方向:让权重在存储单元里直接参与乘加计算,省掉数据搬运。阻变存储器之类的方案在学术圈已经做了多年,产品化还没完全成熟,但在特定低精度推理场景里已经能压出很低的功耗。工业界一条更务实的路是自适应计算平台,像Versal ACAP这种芯片,把可编程逻辑和AI Engine阵列放在一起——想换网络结构时不用流片,在PL里定制数据通路,用AI引擎做高吞吐向量计算。我拿它跑过实时视频流和神经网络推理,小批量、低延迟场景下,功耗控制确实比纯GPU从容得多。但代价是开发门槛极高,工程团队要同时懂RTL、C语言和系统架构。
4.3 神经拟态芯片和SNN:看着很美,落地还早
既然大脑是事件驱动的,干脆做事件驱动的芯片不是更直接吗?工业界确实尝试过,IBM TrueNorth、Intel Loihi、Loihi 2都是这个思路。神经拟态芯片用脉冲神经网络(SNN),神经元只在有事件时发脉冲,计算和存储天然融合,理论功耗比同规模传统加速卡低几个数量级。
听起来是终极答案,但真拿去跑任务就会发现问题:SNN的训练算法远没有BP成熟,精度在ImageNet、语言模型这类任务上掉点严重;现有工具链和生态也远不如PyTorch、TensorRT成熟,很多算法工程师根本没法上手。这几年不少团队把SNN用在低功耗语音唤醒、神经形态视觉传感器这类信号稀疏的场景,效果不错;但要让它在通用AI任务里替代GPU,还有很长的路。所以我的判断是:类脑是方向,但真正能在明年就落地的低功耗方案,还是量化加剪枝加专用加速器那一套组合拳。
5. 我在功耗评测里走过的弯路
5.1 误区一:把训练电费和推理功率混为一谈
这是最容易出现的错误。前面已经提过,训练是“一次性把所有数据算很多遍”,训练GPT-3要烧掉几百上千兆瓦时;推理则是“每次生成一个token都要重跑一遍网络”。两者根本不是同一本账。我们平时说400瓦,是推理时某块板卡的瞬时功耗;说训练耗电,则要按用电量而不是功率来讨论。
网上很多对比把训练电费说成“GPT-3用了多少瓦”,属于典型的口径污染。工程上做能效预算时,一定要分场景写清楚:训练一次多少度电、每秒能跑多少次推理、单卡瞬时功耗多少,三张表各归各的,混在一起只会得出完全没用的结论。
5.2 误区二:把GPU标称功耗当真值
我刚开始做功耗测试时走过弯路:直接读nvidia-smi里的Power Limit,当作实际功耗来算能耗比。后来把功率计接到AC电源上才发现,显卡标称的TDP和实际工况差很多。同样是跑Transformer推理,batch=1时GPU大部分时间在等待数据搬运,功耗只有额定的一半;batch拉大把计算打满后,功耗才逼近TDP。
更坑的是,GPU会动态升降频,温度一高就降频降功耗;服务器整机还要算上CPU、DRAM、风扇、电源转换损耗。所以任何号称“毫瓦级/瓦级”的指标,最好都自己用功率计复核。我现在的习惯是:放在同一台机器上、固定室温、跑稳定至少5分钟后读数,取多次稳态值平均。
5.3 误区三:觉得“省电=更快”,量化一定赚
省电和提速不是一回事。有些硬件对INT8支持很好,量化后既省电又快,比如端侧NPU;但在老一代GPU上,把数据从FP16转INT8,反量化、重新布局的操作反而会拖慢速度。剪枝也一样,非结构化稀疏在稠密矩阵硬件上完全没有加速,只是白白把模型做小,真正的收益要等硬件支持2:4稀疏或者专门的稀疏加速器。
所以做优化时要先问:我的瓶颈是访存、计算还是延迟?量化主要是降访存带宽,剪枝主要是降参数存储和部分计算,蒸馏主要是降模型规模;别一听“省电”就上全套优化,结果电没省多少,体验反而差了。
5.4 实测记录:4个真实场景的排查清单
下面这四类问题,我在端侧和服务器部署时都踩过,列成速查表可能对你有帮助。
| 场景 | 现象 | 排查结果 |
|---|---|---|
| 端侧NPU跑小模型 | 四核比单核还慢 | 多核之间同步和访存竞争严重,切分策略没做好 |
| 服务器跑Transformer | GPU功耗远低于TDP | batch太小,访存阻塞,计算资源空转;拉大batch后功耗才上来 |
| 模型量化后 | 延迟没降,功耗微降 | 硬件对INT8算子支持弱,反量化开销吃掉了收益 |
| 跑神经网络TTS | 功耗高但不卡 | 频谱生成和状态加载串行,带宽瓶颈;改成流式管线后功耗降了20% |
每一条背后都能再展开讲十分钟,但核心教训是一致的:别拿标称值、平均值和峰值混着用,别脱离硬件谈优化。做能耗优化时,第一件事永远是先把测量做好——没有可靠的功率计数据,后面所有结论都是猜。
最后聊点个人体会。我做过几次低功耗部署之后,最大的感受是:大脑的20瓦并不是因为它“算得少”,而是因为它把大部分计算都安排在了最恰当的时刻和最合适的位置,平时绝不空转,更新发生在局部,结构本身就在替它省电。这给我们做AI工程的启发其实很朴素——先把度量和边界搞准确,再用硬件特性倒推软件优化,比一味追求“类脑”更务实。如果这篇里的哪一条能帮你少走一次弯路,那就不算白写。我自己后面还打算把“能耗感知的推理调度”做成一套小工具,让每个请求都能按实时电价和硬件状态自动选择模型档位——从这个角度看,能效优化的路还长着呢,但每一步都值得走。