想象一家热闹的餐厅后厨:菜谱锁在办公室的档案柜里,大厨每做一道菜,都得跑回办公室翻菜谱、再跑去仓库搬食材,来来回回几十趟才能炒出一盘菜。大部分体力都耗在“从厨房到仓库的距离”上,真正颠勺的时间少得可怜。今天的主角 Mythic,是一家“把菜谱写进灶台”的芯片餐厅——它把神经网络的权重直接存进闪存单元,相当于把用料刻度刻在台面上;把输入信号变成电压,相当于食材从水槽流过台面上的一排排量杯;电流穿过存有权重的存储单元,总和就自动算出了需要的用量。矩阵乘法在存储阵列内部就完成了,数据一步都不用挪。这么干最大的好处是省电:省掉了数据来回搬运的巨大开销。当然,台面上的量杯终究是“大概准”,于是又引出了模拟计算的精度取舍、权重如何量化映射到电导档位,以及误差如何被校准。这篇内容,就带你把 Mythic 这座“存算一体厨房”从头到尾参观一遍。
搞懂 Mythic 的存内计算路线,你就能理解 AI 芯片为何正从“算得快”转向“省得快”,这对边缘端低功耗推理芯片的架构选型与功耗评估,是一块重要的认知基石。
目录
可视化演示
展示Mythic存算一体芯片核心原理:存内计算架构对比、模拟矩阵乘法I=V×G机制、以及数字与模拟芯片功耗精度差异。
本节配有交互动效(进入视口后自动加载,约 3KB)。
存算一体 vs 冯诺依曼 存内计算:权重存储与计算在同一阵列 冯诺依曼:数据在存储与计算单元间搬运 消除数据搬运开销 = 降低功耗 存算一体从根源消除搬运瓶颈。
存算一体:把菜谱写进灶台
一间传统后厨里,最累的不是大厨的胳膊,而是他的腿。菜谱锁在办公室的档案柜,食材堆在走廊尽头的仓库,大厨每做一道菜,都要跑回去翻菜谱、搬食材,来来回回几十趟。颠勺只需要几秒钟,可每次颠勺之前,等待食材的时间却是它的上百倍。瓶颈从来不在手上,而在路上。
传统 AI 芯片的后厨,就是大名鼎鼎的冯·诺依曼架构:计算单元是灶台,内存是仓库,权重和中间结果都堆在仓库里。每一次矩阵运算,都要把数据从内存搬到计算单元,算完再搬回去。一圈神经网络跑下来,搬运的次数以百万计,而搬运一次数据的能耗,足够计算单元做上百次乘加——这就是“内存墙”,也是推理功耗居高不下的头号元凶。
存算一体(Computing-in-Memory)的做法,是干脆把菜谱写进灶台。Mythic 把神经网络的权重编程进闪存单元,用电导值表示权重大小:电导高,意味着这个连接“分量重”;电导低,则是“点到为止”。推理时,输入信号经数模转换变成电压,加到闪存阵列的行线上;根据欧姆定律,每个单元的电流等于电压乘电导,这就在物理层面完成了一次“权重×输入”的乘法。同一列上所有单元的电流再依据基尔霍夫定律自然汇合,求和也一并完成。一次矩阵乘法,就这样在存储阵列内部无声无息地算完了。
回到餐厅的比方:菜谱用量直接刻在台面上,食材从水槽流过台面,每经过一个刻度就自动“称”好一份,全程不需要把菜谱搬来搬去。这就是存内计算的全部秘密——计算跟着存储走,数据零搬运。
- 输入电压 V_i每个输入特征被转换成一条行线上的电压值,电压高低代表这个特征“有多强”。
- 存储电导 G_i每个权重被编程为闪存单元的导电能力,电导大小代表权重数值。
- 欧姆定律贡献电流流过第 i 个单元的电流等于电压乘电导,一个单元完成一次“乘法”。
- 基尔霍夫电流求和同一列上的所有单元电流在垂直位线上自然相加,完成“累加”。
Mythic芯片架构:一间完整的存算厨房
光有一块写满菜谱的台面还开不了餐厅。真正的后厨还需要水槽、排水沟、记账本和掌勺的规矩。Mythic 的芯片也一样——它不是一个孤零零的存储阵列,而是一间设计完整的“存算厨房”。
Mythic 的旗舰方案(如 M1070 模块)内部集成多颗模拟计算芯片,每颗芯片的核心是一块巨大的模拟计算阵列(Analog Compute Array)。阵列由成千上万个闪存单元排列成交叉阵列,行线负责输入,列线负责汇出。阵列之外,还有两类重要角色:数据转换器和数字控制逻辑。数据转换器把数字世界的输入变成模拟电压(DAC),再把列线上的电流读回成数字(ADC);数字控制逻辑则负责指令调度、激活函数、残差相加这些“只有数字电路能干得漂亮”的活。
这套架构的精髓在于分工:凡是能靠物理规律“免费”完成的乘加,全部交给模拟阵列;凡是必须精确的流程控制,交给数字部分。输入数据只在芯片边缘完成一次“数字→模拟→计算→模拟→数字”的转换,中途不再有任何大范围数据搬运。省下来的,正是传统架构里最贵的“跑腿费”。数据搬运的代价到底有多高?它比一次计算本身贵上两三个数量级:
这就像一间把水槽、量杯、灶台、账本整合在一条流水线上的厨房:菜从水龙头进,从出货口出,厨师全程站在原地,只负责掌勺。
- 单次计算能耗 E_compute一次乘加运算在先进工艺下仅消耗约 0.1~1 皮焦耳,是芯片里最便宜的操作。
- 单次搬运能耗 E_move从片外 DRAM 读一个数到处理器,要经过总线、缓存等多级路径,能耗高达几十到几百皮焦耳。
- 取比值两者相差两到三个数量级,数据搬得越远,这个比值越悬殊。
模拟AI的精度:大厨的“大概准”
台面上的量杯再精致,也比不上实验室的天平。数字芯片是一台精密电子秤,每一次运算都精确到比特;而模拟存算阵列更像一把带刻度的量杯,电流里天然带着一丝“毛刺”——这就是模拟计算与生俱来的“大概准”。
毛刺从哪来?一是热噪声,导体里的电子在温度下永远在乱撞,给电流叠加微小的随机波动;二是器件失配,同一块晶圆上,两个“看起来一样”的闪存单元,电导未必一模一样;三是多级编程时的保持误差,电荷在存储单元里会缓慢泄漏。这些误差叠加在一起,让模拟阵列的每次乘加结果,都带上了等效约 4~8 bit 的“抖动”。
但神经网络偏偏是个“宽容的食客”。权重之间存在大量冗余,某个连接的轻微偏差,很快会被后续层的加权平均“稀释”;激活函数的饱和区又像厨师对咸淡的钝感——已经够咸的菜,再多加一撮盐也尝不出来。大量实验表明,在图像分类、语音识别等常见任务上,模拟存算推理与数字浮点推理的准确率差距通常只有 1~2 个百分点。工程上,我们用信噪比来衡量这种“大概准”到底有多准:
说到底,客人吃的是整桌菜,不是某一粒盐的味道。“大概准”的量杯,配合宽容的神经网络,端出来的菜照样光盘。
- 信号电流 I_signal我们真正想要的、由权重和输入决定的电流部分,它承载着计算结果。
- 噪声电流 I_noise热噪声、器件失配等造成的随机扰动,服从近似正态分布。
- 线性比值先看信号是噪声的多少倍,这是最直观的“清晰程度”。
- 对数换算成分贝取 20 倍常用对数,把跨度巨大的比值压缩成好读的 dB 数,每增加 20 dB 代表信号强十倍。
量化映射机制:把克换算成勺
菜谱上写“盐 3 克”,可台面上只有一把勺。想用勺做菜,就得先做一张“克与勺”的换算表。存内计算面临同样的问题:权重在数字世界里是浮点数,可闪存单元只能记住有限个电导档位,这中间的翻译工作,就是量化映射。
为了让电导值可靠地写入和读出,Mythic 并不把权重当作连续值存储,而是把每个闪存单元编程为有限个离散档位——这就是多级单元技术,常见 4~8 bit,相当于每个单元能记住 16~256 个“勺”的刻度。推理前,所有浮点权重都要按步长“归位”到最近的档位:先算出权重范围对应的步长,再把权重除以步长取整,最后乘回步长还原成物理量纲。
量化步长决定了这把“勺”的粗细:步长越大,档位越少,每个权重最多偏出半个步长,误差越明显;步长越小,档位越多,越接近连续电导,但编程电导本身也有精度上限,档位细到一定程度就成了自欺欺人。Mythic 的取舍是:让量化误差落在神经网络容错范围之内,用等效精度换取存储密度与可靠性。量化映射的数学表达如下:
翻译得再糙,只要“勺”的分寸拿捏到位,照方抓药做出来的菜就不会跑味。量化映射,就是给台面配一套恰到好处的量勺。
- 求权重峰值 w_max先看整层权重里绝对值最大的是多少,它决定量化范围的上限。
- 计算步长 s把权重范围均匀切分成 b bit 能表示的 2^(b-1) 个正档位,每个档位宽 s。
- 归一化取整权重除以步长后得到一个浮点数,四舍五入到最近的整数档位 k。
- 还原物理量纲把整数档位乘回步长,得到可编程进闪存单元的电导对应值。
数字芯片对比:两种厨房哲学
传统后厨信奉“精确制”:每一克盐都要上电子秤,食材在仓库和灶台之间跑断腿也在所不惜。存算厨房信奉“省力制”:台面量勺大概准,但一步路都不用多走。两种哲学,对应着两种完全不同的芯片设计思路。
数字加速器(GPU、NPU)的思路是“算得快”:用海量晶体管堆出高速乘加单元,再用高时钟频率把每个周期压到最短。代价是数字电路每做一次乘加,都要让成百上千个节点的电压在 0 和供电电压之间完整翻转一次——每一次翻转都要给电容充放电,这是数字功耗的物理来源。模拟存算芯片的思路则是“省得快”:乘加交给阵列里的物理规律,电压只在行线上做小幅摆动,求和根本不需要逐位翻转。
数字功耗公式清楚地揭示了差别:α 是每个时钟周期里发生翻转的节点比例,模拟阵列沿列线求和时几乎不消耗这部分能量;C 是要充放电的电容,模拟摆幅小、等效电容低;V 是供电电压,数字信号满摆幅翻转,而模拟信号只在小范围内变化。把这些因素叠起来,Mythic 对外宣称的能效比可达 10 TOPS/W 以上,而常见边缘数字芯片多在 1~3 TOPS/W——这是数量级的差距。
两种厨房,一种赢在“每一勺都精确”,一种赢在“一整天不用跑腿”。对追求续航的边缘设备而言,后者的诱惑显然更大。
- 翻转率 α一个时钟周期内发生电压翻转的节点占总节点的比例,数字乘加时大量节点跟着翻转,α 居高不下。
- 电容 C 与电压 V²每次翻转都要给寄生电容充放电,能耗与电压的平方成正比,满摆幅的数字信号为此付出巨大代价。
- 频率 f时钟跑得越快,单位时间翻转次数越多,功耗线性上升。
误差与校准:台面也会热胀冷缩
台面上的量勺用久了也会骗人:夏天厨房一热,塑料勺会变形;冬天一冷,刻度又缩回去。闪存里的电导也有同样的毛病——温度一变,电荷的迁移率就变,权重的“刻度”跟着漂。
模拟存算芯片的误差主要有三类来源:随机噪声,每次推理都在变,无法预测但可以统计;系统漂移,由温度变化、芯片老化和电荷泄漏引起,缓慢但有方向;编程误差,权重写入电导档位时本身就不完美。其中,随机噪声只能靠电路设计压低,而系统漂移是校准可以对付的“主犯”。
校准的思路,是给阵列安放一组“标准量勺”——参考单元。这些单元的电导在出厂时精确已知,推理前先读一遍参考单元,就能估算出当前温度下电导的整体偏移量,再用数字补偿电路把偏移修正回来。更彻底的办法是定期重新编程权重,相当于把磨损的刻度重新刻一遍。Mythic 的做法是:用参考单元做快速校准,配合定期刷新,把漂移误差压到可忽略的程度;是否需要加大校准频率,则由推理精度的实时监测决定。误差的全貌可以写成下面的分解式:
好厨师的台面,每天开业前都会用标准杯校验一次——代价不过几分钟,换来的却是一整天的稳定手感。校准,就是这场“台面校验”。
- 理想电流 I_ideal电导完全等于目标权重时的输出电流,也就是我们希望得到的计算结果。
- 随机噪声 I_noise服从正态分布的瞬时扰动,每次测量都不同,只能统计其方差,无法逐点预测。
- 系统漂移 I_drift温度变化、电荷泄漏导致的电导偏移累积,方向明确、变化缓慢,可以通过参考单元测出来。
- 三者合成测量值实测电流是这三项的叠加,校准就是估计并补偿其中的漂移项。
AI 应用场景
边缘工业质检:省下电费与散热
阶段:推理部署与功耗优化
解决的问题:传统方案用 GPU 边缘盒子跑质检模型,功耗高达 20~60W,产线设备既要考虑散热,又要承担高额电费;换成存内计算模块后,同样精度的推理功耗直接降一个数量级,“台面做菜”省掉了大量“跑腿搬数据”的开销。
具体案例:某电子厂在 PCB 焊点质检环节部署 Mythic M.2 存算模块,运行 YOLO 类缺陷检测模型,整体功耗从 45W 降到 5W,产线检测节拍不变,良品率监测仍然实时响应。
智能音箱语音唤醒:毫瓦级待机监听
阶段:始终在线(Always-on)的低功耗推理
解决的问题:智能音箱要 7×24 小时监听唤醒词,传统 DSP 方案的待机监听功耗仍在瓦级;模拟存算芯片让“量杯”一直放在台面上待命,不工作时几乎不耗电,唤醒时才瞬间工作。
具体案例:一家音箱厂商采用模拟存算协处理器运行唤醒词模型,把持续监听功耗压到 50mW 级,设备改用电池供电后仍能连续工作数月。
无人机避障:把续航省给飞行
阶段:机载实时推理
解决的问题:续航是无人机最痛的瓶颈,载荷与电池都极其有限;存内计算把每瓦时能做的算力大幅提升,让“精准但费电”的数字方案让位给“大概准但省电”的模拟方案。
具体案例:物流无人机用存算模块完成视觉避障与目标识别,推理功耗压到约 1W,相比搭载传统嵌入式 GPU 的方案,整机续航提升约 30%,且模型精度未见明显下降。
Python 演示
import numpy as np rng = np.random.default_rng(42) def make_data(n=600, d=16): # 造一份线性可分的合成数据,标签只由前几个特征决定 x = rng.randn(n, d) score = x[:, 0] * 1.2 + x[:, 1] * 0.9 - x[:, 2] * 0.7 y = np.where(score > 0, 1.0, -1.0) return x, y def train_perceptron(x, y, epochs=30, lr=0.05): # 感知机训练:只在预测错误时更新权重 w = np.zeros(x.shape[1]) for _ in range(epochs): for i in range(x.shape[0]): if y[i] * (w @ x[i]) <= 0: w += lr * y[i] * x[i] return w def quantize(w, bits=4): # 把浮点权重映射到有限个电导档位,模拟闪存多级单元编程 levels = 2 ** bits scale = np.max(np.abs(w)) + 1e-9 w_q = np.round(w / scale * (levels / 2 - 1)) / (levels / 2 - 1) * scale return w_q def analog_infer(x, w, noise=0.2, drift=0.04): # 模拟存内计算:电流 = 电导 × 电压,叠加器件噪声与温度漂移 w_drift = w * (1 + drift) current = x @ w_drift + noise * np.random.randn(x.shape[0]) return current def accuracy(y, score): return float(np.mean((score > 0) == (y > 0))) def main(): x_train, y_train = make_data() x_test, y_test = make_data() w = train_perceptron(x_train, y_train) score_ideal = x_test @ w score_quant = x_test @ quantize(w, bits=4) score_analog = analog_infer(x_test, w, noise=0.2, drift=0.04) score_cal = analog_infer(x_test, w, noise=0.2, drift=0.0) # 校准掉漂移 names = ["Digital float", "4bit quantized", "Analog in-memory", "After calibration"] scores = [score_ideal, score_quant, score_analog, score_cal] for name, sc in zip(names, scores): acc = accuracy(y_test, sc) err = float(np.max(np.abs(sc - score_ideal))) print(f"{name:>18s} acc: {acc:.3f} max dev: {err:.3f}") if __name__ == "__main__": main()
w_q = np.round(w / scale * (levels / 2 - 1)) / (levels / 2 - 1) * scale权重按步长归到离散档位,模拟把权重编程为闪存电导if y[i] * (w @ x[i]) <= 0:感知机只在预测错误时更新权重,训练出可被后续对比的基准模型w_drift = w * (1 + drift)模拟温度漂移让电导整体偏移,相当于台面量勺热胀冷缩current = x @ w_drift + noise * np.random.randn(x.shape[0])模拟存算推理:矩阵乘法在“阵列”中完成,再叠加随机噪声score_cal = analog_infer(x_test, w, noise=0.2, drift=0.0)去掉漂移项,模拟用参考单元校准后的效果
常见误区
误区我以为存内计算就是把内存颗粒和计算芯片用先进封装塞进同一个壳子里,比如把 DRAM 和 GPU 叠在一起,那就是传说中的“存内计算”了。
正解封装在一起(如 HBM、Chiplet)依然要在大范围内搬运数据,只是把路缩短了;真正的存内计算是把计算动作直接“融化”进存储阵列——权重就地存着,乘加就地发生,数据根本不出阵列,就像菜谱刻在灶台上而不是放在隔壁房间。
为何常见:近两年 HBM、3D 堆叠的概念太流行,很多人把“离得近”误解成“不用搬”,忽略了模拟计算才是 Mythic 路线的本质。
误区模拟电路又是噪声又是漂移,数字芯片能精确到小数点后七位,模拟芯片恐怕只能做做“识别猫狗”的 demo,上不了真实业务。
正解神经网络的容错性远超直觉,权重冗余、激活饱和、逐层平均都会“稀释”单点误差。Mythic 在 ImageNet 级分类、语音识别等真实任务上的实测精度与数字方案差距常在 1~2% 以内,配合校准后完全够用——“大概准”的量杯,遇到宽容的食客,照样能端出合格的菜。
为何常见:人们习惯把“精度”等同于“质量”,却忽略了在端到端任务里,精度只要落在容错区间内,剩余差距并不影响最终效果。
误区我猜模拟芯片功耗低,是因为它内部乘加运算比数字芯片少很多,或者跑得特别慢,靠“少干活”来省电。
正解模拟存算完成的乘法次数和数字芯片一样多,甚至因为阵列并行,吞吐更高。真正的省电来自两点:一是消除了数据搬运的巨额能耗(搬运一次抵得上百次计算),二是乘加过程没有数字电路那种“满摆幅翻转”的充放电开销。它不是在偷懒,而是用物理规律把同样多的活干得更便宜。
为何常见:人们习惯用“算力=功耗”的粗略公式,忽略了架构层面“能耗都花在了哪里”才是关键。
误区量化不就是把浮点权重随便取个整吗?取整必然丢精度,丢多少只能听天由命,模型可能突然就崩了。
正解量化映射是有步长、有范围的系统设计:先定峰值和档位数,再按步长归位,误差上限就是半个步长,完全可预测。Mythic 还能通过调配档位宽度、结合校准,把误差压在神经网络容错区间内,并在部署前用校验集评估影响——“勺”有多大、误差有多少,都在厨师的掌控之中。
为何常见:把“量化”理解成简单的四舍五入,忽略了步长设计、范围裁剪和后续校准这些配套机制。
面试题
Q1. 传统冯·诺依曼架构中,AI 推理最大的开销瓶颈是什么?
- A.晶体管开关速度受限
- B.计算单元运算能力弱
- C.数据搬运能耗与延迟← 正确答案
- D.芯片散热问题严重
答案:C。冯·诺依曼架构的“内存墙”在于存储与计算分离,数据反复搬运的能耗比计算本身高两三个数量级。就像大厨把时间都耗在来回跑腿上,而不是在颠勺上,瓶颈在“搬运”而非“算力”。
Q2. Mythic 存内计算芯片最核心的设计思想是什么?
- A.追求更快的数字乘法器
- B.存储阵列内做模拟计算← 正确答案
- C.把数据压缩之后再搬运
- D.用光互连替代电互连
答案:B。Mythic 的核心是把权重存进闪存单元,用电压乘电导的物理规律在存储阵列内直接完成矩阵乘法,让数据不出阵列。压缩数据或改用光互连都还在“搬运”框架内打转,没有触及根本。
Q3. 在存内计算阵列中,神经网络的权重用什么物理量表示?
- A.用电阻或电导值表示← 正确答案
- B.用电容存储电荷表示
- C.用电感感值大小表示
- D.用晶体管数量表示
答案:A。闪存单元的电导值直接对应权重大小,电流等于电导乘电压,乘加一步完成。电感与晶体管数量都不是阵列单元的存储物理量,电容存储方案也不属于闪存存算的主流做法。
Q4. 公式 I_out = Σ G_i × V_i 在存内计算中实现的是哪种运算?
- A.卷积核的空间展开
- B.向量点积与累加运算← 正确答案
- C.非线性的激活函数
- D.信号的傅里叶变换
答案:B。每个单元贡献 G_i × V_i,同一列电流自然求和,正是神经网络中最基础的“乘加”即向量点积。卷积在实现时也要拆成点积,激活函数和傅里叶变换则是完全不同的运算。
Q5. 模拟AI芯片精度通常低于数字芯片,为何仍能用于实际推理?
- A.神经网络本身有容错性← 正确答案
- B.模拟结果一定是精确的
- C.推理阶段不需要计算
- D.输出数据会自动取整
答案:A。神经网络存在大量冗余,单点权重误差会被后续层平均和激活饱和区稀释,常见的图像、语音任务上模拟推理与浮点差距只有 1~2%。模拟结果显然不精确,推理当然需要计算,输出也不会自动取整。
Q6. 以下哪些是模拟存内推理中常见的误差来源?
- A.器件之间的制造失配← 正确答案
- B.电流中的热噪声干扰← 正确答案
- C.温度变化导致的漂移← 正确答案
- D.编译器优化策略不当
答案:ABC。器件失配让“看起来一样”的单元电导有差异,热噪声给电流叠加随机抖动,温度漂移让电导整体偏移——这三者正是模拟计算的误差三来源。编译器优化影响的是数字代码的执行效率,与模拟物理误差无关。
Q7. 量化映射中,步长 s = w_max / 2^(b-1) 的物理含义是什么?
- A.决定档位之间的间隔← 正确答案
- B.增加神经网络的宽度
- C.提升芯片供电的电压
- D.减少模型的网络层数
答案:A。步长把权重范围切成 2^(b-1) 个正档位,决定相邻两个电导档位之间的距离;步长越大量化误差越大。它不改变网络结构,也不影响供电和层数,纯粹是“量勺的粗细”。
Q8. 与数字加速器相比,模拟存算芯片最关键的省电来源是?
- A.在同样能耗下做更多次运算
- B.省去搬运与数字翻转开销← 正确答案
- C.通过提高电压来减少电流
- D.用降低频率来换取功耗
答案:B。存算芯片一方面消除了数据搬运的巨额能耗,另一方面乘加过程不需要数字电路那种满摆幅的节点翻转。省电不是靠降频或调电压得来的,而是从架构上绕开了两大能耗黑洞。
Q9. Mythic 存算芯片的完整架构包含以下哪些部分?
- A.模拟计算阵列与存储单元← 正确答案
- B.数模与模数转换器电路← 正确答案
- C.数字控制与接口逻辑电路← 正确答案
- D.云端的深度学习加速中心
答案:ABC。一颗完整的存算芯片由模拟计算阵列(含闪存)、DAC/ADC 数据转换器和数字控制逻辑组成。云端加速中心是远程服务,不属于芯片内部的架构组成。
Q10. 以下哪些方法可以用来校准模拟存算芯片的误差?
- A.读取参考单元估算漂移← 正确答案
- B.定期重新编程权重数值← 正确答案
- C.数字补偿电路修正偏移← 正确答案
- D.调高芯片工作频率加速
答案:ABC。参考单元提供“标准量勺”用于估算漂移,定期重写权重视为重新刻刻度,数字补偿电路负责把偏移修正回来——三者是常见校准手段。调高频率只会增加功耗,与校准误差毫无关系。