老赵在小区楼下开了十年家常菜馆。街对面新开了家外卖中央厨房,菜式多得吓人,可老主顾们点单后要等 40 分钟,汤凉了、面坨了,连外卖单上印着什么菜都成了“隐私”。老赵一咬牙:在后厨现炒!可他的小后厨只有三平方米——电表容量小、燃气接口一路、台面窄得放不下两个盘子。要在这么个小地方把生意做起来,就得学会省电、省气、省地方。这就是本文的主角:低功耗推理引擎。它像一位精打细算的大厨,在手机、门锁、传感器这些“小后厨”里,用量化“粗切”、算子融合“一锅烩”、内存优化“顺手摆放”、计算加速“选对灶具”,把 AI 大菜端上桌,还让电表走得比别人慢。读完这篇文章,你会明白端侧 AI 是怎么做到又快、又省、又准的。
掌握低功耗推理引擎的量化、融合、内存优化与评估方法,是端侧 AI 部署工程师的核心硬技能,也是绿色 AI 落地的工程基础。
可视化演示
展示边缘端推理引擎的量化压缩、算子融合和综合优化效果对比。交互切换量化、融合和性能对比视图。
本节配有交互动效(进入视口后自动加载,约 3KB)。
量化压缩 FP32占4字节 INT8占1字节 体积缩小4倍 int8 = round(fp32 / scale) 量化将FP32映射到INT8,内存减少75%
端侧部署需求
老赵的餐馆开在小区门口,街对面的中央厨房出菜又快又全,可老主顾点一份炒饭要等 40 分钟,送到手时汤也凉了、面也坨了;更麻烦的是,有些老顾客不想让外人知道自己天天吃什么。老赵一拍大腿:就在自家后厨现炒!至少不用等、不用送、味道不变。这恰恰是端侧推理(Edge Inference)诞生的理由:手机、门锁、摄像头这些“小后厨”直接在本地跑 AI 模型。
可是小后厨有大难题:设备电池小、芯片功耗预算紧、散热差,天然横着一堵“能耗墙”;自动驾驶、AR 这类场景对“时延约束”极严,数据往返云端一百多毫秒根本来不及;更别提“隐私安全”——人脸、语音、健康数据留在本地,才让人安心。云端推理的总时延要累加三段,而端侧推理省掉了来回传输,还顺带解决了地铁隧道里没信号的弱网问题。
1. 总时延 T_total^云端:用户从按下按钮到看到结果的全部等待时间,是最真实的体验指标。
2. 上传与下载耗时:图片、音频往返传输的时间,在弱网下会成倍放大,是最大的不确定项。
3. 云端计算时间:云端算力虽强,但加上排队和调度,通常也要几十毫秒。
4. 端侧总时延:省去传输后,就只剩下本地计算这一段,量级从百毫秒降到几十甚至几毫秒。
老赵算完这笔账心里清楚:小店后厨肯定能开火,但必须精打细算。于是他把店规定为“省字当头”——接下来的量化、融合、内存优化,都是这条店规下的具体招数。
模型量化
老赵以前切土豆丝讲究“细如发丝”,可客人夹一筷子根本分不出 0.1 毫米的差别。他发现把刀工从“精雕”改成“均匀粗切”,出菜快了四倍,案板占的地方也小了一大半——这把刀在 AI 里就叫量化(Quantization):把 FP32 浮点数换成 INT8 整数。模型里绝大多数权重和中间激活都吃这套“粗切”,因为它们天生对微小扰动不敏感。
量化分两步走:先拿一把“尺子”——缩放系数 s,把浮点的取值范围压到整数档位上;再用 round 四舍五入落到最近的档位,并记录零点 z 让负数也能表示。FP32 一个数占 4 字节,INT8 只占 1 字节,权重和中间结果的内存直接降到四分之一,访存耗电也跟着降。位宽选择上,INT8 是性价比之王;训练后量化(PTQ)拿几百张校准图算好 s 和 z 直接部署,成本最低;量化感知训练(QAT)则在训练时就模拟量化误差,让权重“适应粗切”,精度几乎不掉。
1. 缩放系数 s:把浮点取值范围压缩到整数档位的“刻度”,由最大值、最小值和位宽共同决定。
2. 零点 z:浮点 0 对应的整数档位,让负数也能被映射到整数空间。
3. 整数 q:缩放后四舍五入并截断到合法范围,这一步是误差的来源,但也让数据得以用 INT8 存储和计算。
4. 反量化还原:推理末尾用 s 和 z 把整数结果放回浮点空间,供后续算子使用。
老赵试了粗切之后发现,客人没吃出差别,电费却真金白银地降了。他把粗切写进后厨手册——当然,光靠刀工还不够,还得学会“一锅烩”。
算子融合
老赵以前做番茄炒蛋要刷三次锅:先炒蛋,洗锅;再炒番茄,洗锅;最后勾芡收汁,洗锅。燃气和水全浪费在“来回折腾”上。他发现可以一锅烩:蛋半熟盛出来,同一个锅里直接炒番茄,最后倒回去——中间少端进端出两次。神经网络里最经典的算子融合(Operator Fusion),干的就是这件事。
典型模式是 Conv+BN+ReLU 这三个“绑定出场”的算子:卷积算完一张中间图,BN 立刻做归一化,ReLU 再砍掉负数。原本每个算子都把中间张量完整写回内存再读出来,等于把半成品端进端出三次。融合把这套流程改写成一步:把 BN 的缩放和平移“折叠”进卷积的权重与偏置里,三个算子合并成一个“大算子”,中间结果根本不落内存。这正是访存优化的精髓——推理时最耗电的往往不是乘法,而是中间张量在内存里搬进搬出的过程。融合后同一块数据在缓存里完成全部流水,计算访存比大幅提升,能耗通常能降 30% 到 50%。
1. BN 的统计量:σ² 和 μ 是训练时累计的方差与均值,推理时固定不变,因此可以提前折算。
2. BN 的缩放平移:γ 和 β 是 BN 层的两个可学习参数,控制归一化后的缩放与偏移。
3. 折叠后的权重与偏置:把缩放系数乘进卷积权重 W,把平移量合并进偏置 b,形成等价的 W' 和 b'。
4. 一步出菜:ReLU 跟随融合,整个计算变成 y=ReLU(W'x+b'),中间张量不再写回内存。
老赵看着燃气表走慢了半格,满意地点点头。一锅烩解决了“来回折腾”,但后厨台面还是太挤——内存优化就是他的下一招。
内存优化
老赵的台面只有一米宽。以前他做菜习惯把所有半成品都摊在台面上,放不下就临时拖桌子,结果转身都困难。后来他学会三招:用过的盘子立刻收走;两个菜错开时间用同一个碗;常用的调料就放在手边。推理引擎的内存优化,恰好也是这三招:张量生命周期分析、内存复用、数据布局调整。
推理引擎先给每个中间张量(如卷积的输出特征图)做“出生与死亡”记录——什么时候被创造、什么时候不再被引用。然后由内存规划器排一张时间表:生命周期不重叠的张量共用同一块缓冲区,这叫内存复用(Memory Reuse),峰值内存可以断崖式下降。再配合数据布局(Data Layout)优化,把 NCHW 调成 NHWC 等更贴合硬件的顺序,让访存连续、充分利用缓存。峰值内存越低,模型越容易塞进有限的内存,缓存命中率也越高,不用频繁去访问又慢又耗电的 DRAM。
1. 存活集合 A(t):t 时刻所有仍被后续算子需要的中间张量,已经用完的就算“死了”。
2. 张量大小:每个张量占用的字节数,由形状和位宽决定——这也解释了为什么量化能直接降低内存。
3. 求和:把同一时刻活着的张量大小加总,就是那一瞬间的内存占用。
4. 取最大值:在整个推理过程的时间轴上取最高点,即为必须预留的峰值内存。
台面腾出来之后,老赵做菜不再东撞西碰,心里也不冒火了。但省地方、省电还不够,他还想快——这就到了挑灶具、练刀法的环节。
计算加速
老赵的煤气灶火力猛但开火慢,电磁炉开火快但爆炒欠缺火候。他发现按菜式选灶才能又省又快。推理引擎也一样,得按硬件选“计算原语”:CPU 擅长灵活处理多种逻辑,GPU/NPU 擅长大批量矩阵乘。把算子在正确的硬件上跑,叫做多后端适配,等于给后厨配上多套锅具。
卷积是视觉模型的“命根子”,直接硬算乘法量大。Winograd 算法用“加法换乘法”——先把输入和卷积核变换到新空间,再用更少的乘法得到同样结果。在 F(2,3) 配置下,每个输出块的乘法从 6 次降到 4 次,省下三分之一。再叠加向量化(SIMD):一条指令同时处理 8 个 INT8 数,好比一把刀同时切八根葱;多核调度(Multi-core Scheduling)则把独立的通道分给多个核心并行,就像两个灶头同时开火。
1. 输出块大小 m:Winograd 每次计算 m 个连续输出点,常用 m=2,即一次算 2×2 的小块。
2. 卷积核长度 r:一维卷积核的尺寸,常见 r=3,即 3×3 卷积的一行。
3. 变换后乘法数:输入和卷积核都做线性变换后,每个块只需 m+r-1 次乘法。
4. 对比直接卷积:直接做法是 m×r=6 次乘法,因此乘法量降为原来的 2/3;块越大、核越短,收益越明显。
合适的灶、多刀并用、两个灶头排好班——老赵的翻台率翻了一倍。但他知道,光埋头干活不行,还得学会算账:性能评估。
性能评估
改完厨房一个月,老赵决定盘盘账本:高峰一小时能出多少单?顾客平均等几分钟?燃气费花了多少?回头客有没有变少?这四本账对应推理引擎的四个指标:吞吐量、延迟、功耗和精度。
延迟通常看 p50 和 p90 分位,p90 表示 90% 的请求比这个值更快,端侧实时类应用要求 p90 稳定;吞吐量是每秒能完成的推理次数(FPS),视频类应用至少 30FPS;功耗要在真机上插功率计实测,记录单次推理的能耗,再换算成能效 TOPS/W——每瓦每秒能做多少次万亿级运算;最后必须做精度对比,量化前后在同一测试集上测 top-1,掉点超限就要回调位宽或改用 QAT。很多团队只盯着“模型多大、FLOPs 多少”,但端侧真正的瓶颈往往是内存带宽和调度开销,所以评估必须在真实设备、真实场景上跑,峰值内存、发热降频都会影响表现。
1. 吞吐量:每秒完成的推理次数(FPS 或 Inferences/sec),代表后厨高峰期的出餐能力。
2. 单次计算量:每次推理包含的乘法加法总数(OPs),由模型结构决定。
3. 平均功耗:用功率计在真机上实测的平均功率,单位瓦特,相当于燃气表的读数。
4. TOPS/W 能效:每瓦功率每秒贡献的万亿次运算,数值越高说明电费花得越值。
老赵捧着账本乐了:翻台率和好评率都上去了,燃气费只有以前的三成。他知道,这套精打细算的规矩,得沉淀成店里长久的经营之道。
端侧实践
小店能撑到今天,老赵总结出三条店规:菜单不贪多——只做后厨驾驭得了的菜;预算内经营——每月燃气电费封顶;忙时大火、闲时小火——根据客流调节灶头。端侧部署的实践,恰好也是这三条。
模型选型是第一关:优先选天生“轻”的骨架(MobileNet、EfficientNet-Lite 等小模型),再考虑量化压缩,而不是把云端大模型硬塞进手机;功耗预算要先定业务能承受的功耗——always-on 语音唤醒要压低到 1mW 以下,实时视频处理可以放宽到几百毫瓦——再反推模型规模和算子选择;动态调频(DVFS)则让推理引擎在低负载时自动降低 CPU/GPU 频率、高负载时再拉高,让功耗跟着负载走。这套实践的哲学叫绿色 AI(Green AI):不只看模型准不准,更看“每一点精度花了多少电”。在数十亿台端侧设备上省电,累积的碳减排效果非常可观。
1. 电池容量 C:设备的总能量,相当于月初充好的电费预算,单位毫安时。
2. 待机功耗 P:芯片什么都不做时也在消耗的功率,always-on 场景的隐形电老虎。
3. 单次推理能耗 E:一次推理的耗电 = 平均功耗 × 推理耗时,是优化工作的主战场。
4. 使用频率 f:每小时唤醒推理的次数;模型再省电,也扛不住高频调用,所以要在两端同时控制。
老赵的小店生意红火,最让他得意的是那张电费单:同样一桌菜,他的后厨比别人省一半电。这就是低功耗推理引擎的价值——让 AI 轻装上路,让绿色能源细水长流。
AI 应用场景
手机实时人像分割
阶段:模型部署与端侧推理优化
解决的问题:视频人像虚化若上传云端处理,一帧一传带来明显卡顿,网络消耗大,且用户肖像数据容易泄露。端侧推理让分割在手机本地完成,时延低、省流量、隐私不出本机。
具体案例:某美颜 App 使用 MNN 推理引擎,将人像分割模型量化到 INT8 并完成 Conv+BN+ReLU 融合,在骁龙 7 系手机上达到 30FPS 实时出图,单帧处理功耗从约 300mW 降到 120mW,夜间长时间视频通话不再烫手。
智能门锁语音唤醒
阶段:始终在线(always-on)推理与绿色 AI 设计
解决的问题:唤醒词检测是常年待机的任务,云端方案既不可靠又无法保护住户语音隐私;传统方案待机功耗过高,电池撑不过一个月。
具体案例:某智能门锁在超低功耗 MCU 上运行量化后的关键词识别模型(KWS),推理引擎通过内存复用和低功耗算子库把待机功耗压到 0.8mW,本地完成语音特征提取与识别,一颗纽扣电池续航超过一年。
工业设备预测性维护
阶段:边缘计算与异常检测推理
解决的问题:工厂里几十个振动传感器如果全部把波形传到云端,带宽被挤爆,且设备运行数据涉及商业机密;电池供电的节点还要求极低功耗。
具体案例:某制造企业在电机上部署 1D 卷积异常检测模型,推理引擎将模型量化到 INT8 并在本地判断“正常 / 异常”,只有异常片段才上报云端。无线传感器节点电池寿命从 3 个月延长到 1 年以上,模型精度仅下降 0.4%。
Python 演示
"""低功耗推理引擎: 量化(INT8) + Conv-BN 融合的效果对比"""import numpy as np def quantize_sym(x, bits=8): """对称量化: 返回 (整数张量, 缩放系数)""" qmax = 2 ** (bits - 1) - 1 amax = max(float(np.abs(x).max()), 1e-8) scale = amax / qmax q = np.clip(np.round(x / scale), -qmax, qmax) return q.astype(np.int32), scale def fuse_bn_to_conv(w, b, gamma, beta, mu, var, eps=1e-5): """把 BN 层的缩放平移折叠进卷积权重和偏置""" k = gamma / np.sqrt(var + eps) w_f = w * k.reshape(-1, 1) b_f = k * (b - mu) + beta return w_f, b_f def conv2d(x, w, b): """极简 1x1 卷积: 等价于全连接""" return x @ w + b class TinyNet: def __init__(self): self.w = (np.random.randn(16, 8) * 0.5).astype(np.float32) self.b = np.zeros(8, dtype=np.float32) self.gamma = np.ones(8, dtype=np.float32) self.beta = np.zeros(8, dtype=np.float32) self.mu = (np.random.randn(8) * 0.1).astype(np.float32) self.var = (np.random.rand(8) * 0.5 + 0.5).astype(np.float32) self.w_q, self.s_w = quantize_sym(self.w) self.w_f, self.b_f = fuse_bn_to_conv( self.w, self.b, self.gamma, self.beta, self.mu, self.var ) self.w_fq, self.s_wf = quantize_sym(self.w_f) def forward_fp32_separate(self, x): """原始: Conv -> BN -> ReLU 三级流水""" h = conv2d(x, self.w, self.b) h = (h - self.mu) / np.sqrt(self.var + 1e-5) * self.gamma + self.beta return np.maximum(h, 0.0) def forward_fp32_fused(self, x): """融合后: 一步到位""" return np.maximum(conv2d(x, self.w_f, self.b_f), 0.0) def forward_int8(self, x): """量化+融合: 对称量化到 INT8 后再反量化""" x_q, s_x = quantize_sym(x) h = (x_q @ self.w_fq).astype(np.float64) * (s_x * self.s_wf) return np.maximum(h + self.b_f, 0.0).astype(np.float32) def peak_memory_bytes(model, input_size, bytes_per): """按同时存活的张量估算峰值内存(权重 + 两段激活)""" w_bytes = (model.w_f.size + model.b_f.size) * bytes_per a1 = input_size * bytes_per a2 = 8 * bytes_per return w_bytes + a1 + a2 def main(): rng = np.random.default_rng(0) net = TinyNet() x = rng.normal(0, 0.3, size=16).astype(np.float32) y_sep = net.forward_fp32_separate(x) y_fus = net.forward_fp32_fused(x) y_int = net.forward_int8(x) diff = float(np.abs(y_sep - y_fus).max()) drop = float(np.abs(y_fus - y_int).mean()) print("融合后与原始管线最大误差: %.2e" % diff) print("量化引入的平均误差: %.4f" % drop) m_fp = peak_memory_bytes(net, 16, 4) m_i8 = peak_memory_bytes(net, 16, 1) print("FP32 峰值内存: %d 字节" % m_fp) print("INT8 峰值内存: %d 字节" % m_i8) print("内存降为: %.1f 倍" % (m_fp / m_i8)) if __name__ == "__main__": main()
scale = amax / qmax对称量化的“尺子”刻度:用最大绝对值除以上限,把浮点压缩到整数区间。q = np.clip(np.round(x / scale), -qmax, qmax)缩放、四舍五入并截断到合法范围,这就是“粗切”那一刀。k = gamma / np.sqrt(var + eps)融合的关键缩放系数,把 BN 的归一化折算成一步缩放。w_f = w * k.reshape(-1, 1)把 BN 缩放折进卷积权重,融合后的权重直接可用。self.w_fq, self.s_wf = quantize_sym(self.w_f)对融合后的权重做 INT8 量化,融合和量化可以串联使用。h = (x_q @ self.w_fq).astype(np.float64) * (s_x * self.s_wf)INT8 矩阵乘后乘上两个缩放系数,还原真实数值范围。peak_memory_bytes(net, 16, 4)按“同时存活张量”估算峰值内存,直观对比 FP32 与 INT8。if __name__ == "__main__":可执行入口,保证脚本直接运行就能看到演示结果。
常见误区
误区量化就是把精度砍一半,模型效果肯定明显变差,还是老老实实用 FP32 稳妥,反正手机也能跑。
正解量化不是简单砍精度,而是利用神经网络对噪声的鲁棒性做“有损压缩”。配合逐通道(per-channel)量化、代表性校准集、量化感知训练,INT8 模型在 ImageNet 上的 top-1 掉点通常能控制在 1% 以内。好比土豆粗切,只要块切得均匀、火候到位,客人根本吃不出差别。真正危险的是用错误的校准集量化——那等于用一把歪尺子去量所有食材。
为何常见:人们习惯把“信息少 = 效果差”当铁律,却忽略了深度网络本身的冗余,以及 BN 层对分布变化的吸纳能力,更低估了 QAT 这类“先适应再压缩”的后手补救措施。
误区我的模型参数少了、FLOPs 低了,部署到端侧就一定更快更省电,所以只要把模型剪小就万事大吉。
正解端侧推理的瓶颈常常不是乘法次数,而是访存——一次内存访问消耗的能量比一次乘法高一两个数量级。如果算子没有融合、数据布局不对、缓存命中率低,小模型照样可能慢吞吞、费电地跑。好比换了一口小锅,但还在反复刷锅烧水,燃气一样哗哗地走。
为何常见:训练侧习惯用 FLOPs 衡量模型复杂度,但端侧的真实功耗 = 计算 + 访存 + 调度开销,纸面上的 FLOPs 并不等于电表上的度数。
误区选芯片只看 AI 算力数值,TOPS 越高推理引擎就越强,厂商 PPT 上的数字就是性能。
正解TOPS 是硬件峰值算力,实际能发挥多少取决于内存带宽、算子是否匹配、引擎调度是否高效。很多高 TOPS 芯片跑小模型时利用率不到 20%,因为被访存带宽拖死。评估必须用真实应用场景实测延迟、功耗和能效 TOPS/W,而不是看宣传数字。好比灶台标称火力再猛,锅不合适、火候不会控,炒菜照样慢。
为何常见:硬件厂商的宣传天然聚焦峰值指标,买方如果只看营销数字、不做真实负载测试,很容易掉进“数字迷信”的陷阱。
误区量化部署很简单,把模型权重转成 INT8 直接上线就行,不需要准备额外数据。
正解训练后量化(PTQ)必须用代表性校准集统计激活值分布,才能算出靠谱的缩放系数;校准集如果与真实输入分布偏差大,某一层的刻度就会失准,误差层层放大甚至崩溃。更稳妥的做法是量化感知训练(QAT),在训练中就让权重适应低位宽。好比厨师第一次用新刀,得先拿同批食材试切几刀找手感,直接上桌容易翻车。
为何常见:工具链越来越自动化,让人误以为“一键量化”不需要工程判断;其实数据分布分析、层敏感度评估、混合精度选择这些功课,一样都不能少。
面试题
Q1. 在端侧部署 AI 模型的主要驱动因素是什么?
- A.降低时延并保护用户隐私← 正确答案
- B.云端服务器的成本更低
- C.端侧一定比云端精度更高
- D.端侧完全不需要消耗电能
答案:A。端侧推理省去数据上传下载,时延更低,人脸、语音等数据不出本机,隐私更安全。云端虽然算力强,但“菜从中央厨房送来会凉”,而且端侧同样耗电、精度也不必然更高,因此 B、C、D 都不成立。
Q2. 把 FP32 权重量化成 INT8 的主要收益是?
- A.提升模型推理的准确率
- B.增加模型的参数总量
- C.降低内存占用和计算能耗← 正确答案
- D.让模型支持更多新任务
答案:C。INT8 每个数只占 1 字节,是 FP32 的四分之一,所以内存占用和访存能耗同步下降,这正是“粗切”的价值。量化本身不提升精度,也不增加参数或任务能力。
Q3. 对称量化中缩放系数 s 的计算公式是?
- A.量程除以二的b次幂减一
- B.最大绝对值除以上限值← 正确答案
- C.均值加三倍的标准差
- D.最大值减最小值的差值
答案:B。对称量化假设数据正负对称,用最大绝对值除以量化上限 2^(b-1)-1 即可得到刻度。A 是“非对称量化”的极差公式,C、D 则与量化无关,属于干扰项。
Q4. 训练后量化(PTQ)相比量化感知训练(QAT)的优势是?
- A.推理精度一定得到明显提升
- B.只能适用于云端的超大模型
- C.不需要提供任何校准数据
- D.无需重新训练且部署速度快← 正确答案
答案:D。PTQ 拿现成模型加校准集统计分布就能完成量化,不用重新训练,上线最快,适合快速验证。它不能提升精度,也不限于云端模型,而且恰恰需要校准数据,所以 A、B、C 均错误。
Q5. 下列哪些方法可以有效降低端侧推理的功耗?
- A.使用 INT8 量化压缩模型← 正确答案
- B.把相邻算子做融合处理← 正确答案
- C.不断增加模型的深度
- D.复用内存减少分配开销← 正确答案
答案:ABD。量化降低内存与计算开销,融合减少中间张量访存,内存复用压低峰值内存——三者都是老赵的“省电三件套”。加深模型只会增加计算和访存,通常让功耗更高,故选 A、B、D。
Q6. Conv+BN+ReLU 融合后,BN 层的计算发生了什么?
- A.被折叠进卷积权重与偏置← 正确答案
- B.被移除并完全不再参与计算
- C.转移到 ReLU 层中执行
- D.仍然单独在硬件上执行
答案:A。BN 在推理时的统计量固定,可以折算成缩放和平移,直接写进卷积的权重 W' 与偏置 b'。融合不是删除也不算到 ReLU 头上,更不会单独执行,所以 B、C、D 皆错。
Q7. 算子融合能够降低功耗的根本原因是什么?
- A.增加神经网络的层数量
- B.让每个算子的精度更高
- C.减少中间张量的访存次数← 正确答案
- D.把算子转移到云端执行
答案:C。融合后中间张量不写回内存,省掉了最耗电的访存环节——好比“一锅烩”省掉了反复刷锅烧水。它不是加层、不改变精度、也不牵扯云端,故选 C。
Q8. Winograd F(2,3) 卷积与直接卷积相比,每个输出块的乘法次数是?
- A.从四次增加到了六次
- B.从六次减少到了四次← 正确答案
- C.从三次减少到了两次
- D.从八次减少到了六次
答案:B。F(2,3) 中 m=2、r=3,直接卷积每块要 m×r=6 次乘法,Winograd 变换后只要 m+r-1=4 次,乘法量降为 2/3,代价是加法增多。A 方向反了,C、D 的数字搭配不对。
Q9. 关于低功耗推理引擎的评估,下列说法正确的是?
- A.需同时关注延迟功耗精度← 正确答案
- B.能效通常用 TOPS/W 衡量← 正确答案
- C.只看准确率一个指标即可
- D.单次能耗为功耗乘延迟← 正确答案
答案:ABD。端侧评估要三角平衡——延迟、功耗、精度缺一不可;能效的经典定义是每瓦每秒多少次万亿运算(TOPS/W);单次推理能耗 = 平均功率 × 推理耗时。只看准确率是以偏概全,故 C 错。
Q10. 为减少量化带来的精度损失,常用手段有哪些?
- A.采用量化感知训练 QAT← 正确答案
- B.使用有代表性的校准数据← 正确答案
- C.逐通道选择独立缩放系数← 正确答案
- D.将量化位宽降为二比特
答案:ABC。QAT 在训练中模拟量化误差,代表性校准集让 PTQ 的刻度更准,逐通道量化让每个卷积核有自己的尺子——都能显著回血精度。把位宽降到二比特只会放大误差,通常适得其反,故 D 错。