端侧推理的能效账:把模型装进设备之后要算什么
从能不能跑到跑得值不值
过去两年讨论的焦点一直是能不能把参数量不小的模型塞进手机,如今这条线已经走通:量化、稀疏化和算子融合让千亿级以下的模型在移动端有了可行解。问题随之转移,变成一次推理要花多少电、机身温度会升到多少、连续使用会不会触发降频。
体验上的差别很直接。同样的问答任务,一次云端往返可能是几百毫秒加一次网络请求,端侧则是连续几秒的高负载计算。前者受网络影响大,后者受散热限制大,两者的失败方式并不一样。
内存带宽才是瓶颈
很多人直觉上认为算力决定速度,实际在端侧场景里,内存带宽常常是更硬的限制。模型权重需要反复从内存搬到计算单元,搬运所消耗的能量往往高于计算本身。这也是为什么减少权重位宽带来的收益,常常比单纯提升峰值算力更明显。
工程上的应对是尽量让权重留在离计算单元更近的存储层级,并且一次载入后完成更多计算。批处理在本地场景里不容易做大,于是转向算子层面的融合与访存重排,把零碎的读写合并成连续的大块。
发热与持续性能
手机没有风扇,散热完全依赖机身导热。短时峰值性能可以很漂亮,但持续负载两三分钟后往往进入降频,这时候的实测速度可能只有初始的一半左右。评测如果只看首次响应时间,很容易得出过于乐观的结论。
比较务实的做法是看稳态表现:连续跑十分钟之后还剩多少性能,机身关键位置的温度是否影响握持。对需要长时间在后台工作的功能来说,稳态指标比峰值指标更有参考价值。
量化带来的取舍
把权重从十六位压到八位甚至四位,体积和带宽压力都会下降,代价是精度损失。损失并不是均匀的,某些注意力头和部分层对量化格外敏感,一旦压得太狠,输出质量会出现肉眼可见的下降。
常见做法是混合精度:敏感层保留高位宽,其余层压低。还有一条路径是量化感知训练,让模型在训练阶段就习惯低位宽表示,这样部署时的落差会小很多。两条路都需要额外工程量,不是改一个参数就能完成。
什么时候该走云端
端侧的优势在于响应及时、数据不出设备、不依赖网络,适合短指令、频繁触发、涉及个人隐私的任务。云端的优势在于可以调用更大的模型与更完整的知识索引,适合长文处理、复杂推理与需要外部数据的场景。
现实中的多数产品会做成混合:轻量意图判断与常见指令在本地完成,遇到超出能力范围的请求再上送。分流的判断逻辑本身也是一道工程题,判断错了要么白跑一趟网络,要么在本地勉强给出一个不够好的答案。
读者留言
共 4 条 · 精选展示这篇可以收藏,端侧推理部分值得反复看。
同意文中对端侧推理的判断,别照搬结论就行。
写得不夸张,把端侧推理的边界说清楚了,难得。
端侧推理这段最有价值,比泛泛而谈的解读好读。补充一句,文中提到的情况因人而异,不要直接照搬。