
1. 先给答案NPU架构的一句话概括我做了这么久芯片相关的开发被问得最多的一个问题就是NPU到底是什么听起来很玄各家厂商宣传得神乎其神什么“AI算力怪兽”“神经网络加速引擎”好像离了它手机电脑就转不动似的。但说穿了NPU的架构内核用一句话就能讲明白——NPU就是把“乘加运算”堆成阵列把“数据存储”搬到计算单元隔壁再把“搬运数据”这件事极度简化最终让数据尽量不动、计算尽量并行、每一焦耳功耗都花在矩阵运算上。话听起来简单但这背后其实藏了一整套设计哲学。这条思路回答了三个问题算力从哪里来瓶颈在哪里功耗花在了哪里把这三个问题想通了NPU的原理、架构、甚至选型基本都清楚了。这篇文章我就沿着这句话拆开揉碎讲适合刚接触NPU的嵌入式工程师、做端侧AI部署的开发者也适合想补硬件背景的算法同学。先说个容易被忽略的事实NPU不是一个全新的概念它的本质是专用集成电路ASIC的一种只是为神经网络算子量身定做了计算通路。但这个“量身定做”的度决定了各家NPU的架构差异。理解了架构再看Intel NPU开发、手机SoC里塞的NPU、以及各种AI加速卡就不会被参数表和宣传话术绕晕了。2. 从通用到专用为什么CPU干不了这活儿NPU才够用2.1 神经网络的计算特征和CPU的“不匹配”要理解NPU为什么存在得先看神经网络计算到底长什么样。以卷积神经网络CNN或者Transformer这类主流模型为例计算量的大头无非是卷积运算和矩阵乘法。这些东西拆到底层全是一堆乘加操作。听起来CPU也能算对吧没错CPU确实能算但效率低得离谱。问题出在三个层面。第一神经网络的计算并行度极高。一个卷积层里成百上千个输出通道之间的计算互不依赖理论上可以同时进行。CPU虽然也有多核和SIMD指令集但通用处理器的设计目标是处理各种不可预测的任务流它的控制逻辑、分支预测、乱序执行等电路占了大量芯片面积和功耗。你让一个全能运动员去干流水线工人的重复活儿能干但每个零件焦耳的产出效率太低。第二数据搬运的代价远超计算本身。学过体系结构的朋友都知道“存储墙”理论从内存拿一个数据的时间可以执行几十上百次算术运算。神经网络推理时权重和激活值的数据量非常大如果每个计算步骤都要从外部内存取数计算单元大部分时间都在空转等待算力利用率低得吓人。第三神经网络的容错特性让“算得快够用就行”成为可能。网络的最终输出来自大量计算的统计结果对单个数值的微小误差并不敏感。这就给了NPU一个巨大空间——用低精度计算INT8、INT4甚至更低换取更高的吞吐量。而CPU作为通用处理器数值精度、异常处理这些都得面面俱到这些“保险措施”在AI推理场景里反而成了累赘。2.2 算力利用率的差距比纸面性能更真实纸面算力数字很唬人。有些CPU标称多少GOPS每秒十亿次操作看起来不低但跑真实网络模型时实际有效算力可能只有理论值的5%到15%。原因就是上面说的数据喂不饱、并行掏不空、精度用不上。NPU的思路完全不同。它不是把算力堆到通用流水线里而是直接在芯片上铺开一个“算力矩阵”——成千上万个乘加单元排成阵列每个周期做同样的事但处理不同数据。配合精心设计的数据流路径尽量让每个计算单元从最近的存储里拿数据不经过远距离的外部内存。这样一来理论算力和实际算力的差距可以拉到50%以上甚至在设计良好的情况下逼近70%到80%。我拿个实际感受举例。某型号CPU在跑MobileNet这类轻量网络时耗电量或许能压住但延迟明显偏高而一颗算力数字只有CPU几分之一的NPU跑同样的模型延迟能低一到两个数量级而且功耗还更小。原因就一句话专用架构把每一分钱功耗都花在了刀刃矩阵计算上。CPU那把刀太大太全切小菜反而费劲。3. 拆开NPU的核心骨架计算阵列、片上存储、数据流3.1 乘加阵列以“空间换时间”的算力引擎NPU最核心的区域就是那一大片乘加单元阵列业界常叫MAC阵列Multiply-Accumulate Array。一个MAC单元做的事情很纯粹做一次乘法把结果累加到之前的结果上也就是result a * b。这是神经网络最底层的操作。这个阵列怎么组织、怎么喂数据直接决定了NPU的性能上限。最常见的设计有两种。一种是脉动阵列Systolic ArrayGoogle的TPU就是这种架构的代表。它的特点是数据像血液一样在相邻的计算单元之间“流动”每个单元只处理从邻居传来的数据然后把手里的乘加结果传给下一个单元。这样做的好处是数据复用率极高权重存在片上寄存器里重复使用几乎不用反复从内存读取。但代价是控制逻辑复杂数据要按严格的节拍灌入阵列开发编译器时非常头疼。另一种是二维网格阵列2D Grid/Simd Array市面上很多边缘端NPU采用这种设计比如瑞芯微、酷睿的IP方案里常见的做法。它本质上是把一个巨大的SIMD单元平铺开所有MAC单元在同一个时钟周期里执行相同的操作只是处理各自的数据块。相比脉动阵列它更容易编程编译器实现相对简单灵活性稍好但对片上带宽的要求更高因为数据要同时广播到所有单元。不管哪种结构选型逻辑都是同一套在“计算密集度”和“数据复用率”之间找平衡。这里我补充一句对于做应用的开发者这些阵列细节不需要背但最好有个概念——因为后面分析编译器为什么这么难用、为什么有些网络的算子跑不起来时根子都在这个阵列组织方式上。3.2 片上存储数据“跨一步”就能拿到计算阵列只是引擎让引擎跑起来还得有燃料燃料就是数据。神经网络推理涉及的数据有两类权重和张量中间激活值。如果每次计算都从外部DDR取数据功耗和延迟都会爆炸。所以NPU内部一定设计了大容量的片上存储通常叫SRAM或者统一缓冲区Unified Buffer。这就像你在厨房做饭锅计算阵列旁边的台面上片上存储提前摆好了所有食材和调料而不是每次炒菜都去楼下超市现买外部内存。NPU架构师在设计缓存容量时要精算“在一个网络层内最多能有多少数据待在片上”和“数据从哪里来、算完去哪里”这两个问题。容量太大芯片面积和成本飙升容量太小数据搬不进搬不出算力再强也是空转。实际开发中片上存储的大小直接影响一个网络能不能完整跑完。有些大模型或者分辨率很高的输入图一张中间特征图就得几十甚至上百MB远超出片上SRAM容量。这时候NPU得把网络“切”成一段段执行每段算完把结果导回DDR再加载下一段。这个切分过程叫“分层调度”或“tiling”是NPU编译器处理的核心任务之一。后面聊避坑的时候我还会再提。3.3 数据流控制用极简控制逻辑换取更多算力面积CPU为什么面积大因为它有复杂的指令解码、乱序执行、分支预测、高速缓存一致性协议等逻辑目的都是为了应对不可预知的指令流。但NPU应用场景很明确反复跑神经网络推理计算路径在编译阶段就固定了。这意味着NPU完全可以把大量控制电路砍掉把省下来的芯片面积和功耗让给算术单元。数据流控制的简化体现在几个方面。指令集极其精简常见NPU只有有限的几十条指令主要就是“加载权重”“加载数据”“执行矩阵乘”“执行激活函数”“写回结果”。没有复杂的分支和跳转代码基本是线性执行。内存地址访问模式高度固定编译器会提前把数据和权重的摆放位置计算好NPU运行时直接按预定模式取数不需要像CPU那样依赖复杂的缓存替换策略。所以你看NPU的结构图往往是“一块巨大的计算阵列 几块SRAM 一条简单的控制流水线”没有CPU那种密密麻麻的控制逻辑块也没有GPU那套复杂的线程调度器和渲染管线。简洁带来的直接好处是单位面积上的有效算力高能效比优秀上游厂商拿同样的功耗预算能塞更多MAC单元。4. 和CPU、GPU、DSP放在同一张桌上各自的位置在哪4.1 一张表看懂四类处理器的分工很多初学者会问GPU不是也在做并行计算吗DSP也能跑AI为什么要再搞一个NPU问得好。我在下面这张表里梳理了四类处理器的关键差异看完就明白了。类型并行方式擅长场景能效比灵活性编程难度CPU少量核心指令级并行通用计算、控制流、系统调度低极高低GPU上千个核心SIMT大规模并行浮点运算、图像/通用计算中高中高DSP专用向量指令VLIW音频、信号处理、简单AI中高中中NPUMAC阵列数据流控制定点神经网络推理最高低取决于工具链CPU是“全能杂工”什么活都能接但做什么都只能七十分。GPU是“重火力支援”适合那种成千上万独立任务一起上的场面比如3D渲染和CUDA生态下的通用计算。DSP更像“固定流水的熟练工”处理信号流很拿手。而NPU是“专项工种”只会做神经网络相关的乘加累加但做得极致省电极致快。4.2 GPU和NPU不是替代关系是互补关系GPU在AI训练阶段几乎是垄断地位因为训练需要高精度浮点、需要处理复杂的反向传播还要应付各种动态shape这些恰好是GPU的强项。但到了推理阶段特别是端侧和边缘场景NPU的优势就出来了功耗低、延迟稳定、吞吐量高、无需巨大的散热系统。拿自动驾驶举例训练一个感知模型可以放在云端用GPU集群跑几天但车上的推理必须用低功耗的NPU因为车内供电和散热条件有限还要保证每一帧画面都稳定在几十毫秒内完成推理。这就是NPU不可替代的边界——在功耗、成本和实时性都有严格约束的场景里通用处理器完全打不过专用加速器。不过也别指望NPU取代CPU更别指望CPU“免费”帮你把NPU的活抢过来。实际系统里两者是协同的CPU负责调度整个应用、处理传感器数据、跑非AI逻辑遇到神经网络算子就把数据交给NPU算完再拿回来做后续处理。这个协同过程就是“异构计算”后面章节我会具体讲开发中怎么处理这种协同。5. 别被TOPS忽悠了NPU关键指标的真相与选型思路5.1 TOPS到底是什么怎么算出来的NPU厂商最喜欢宣传一个参数TOPS意思是每秒万亿次操作。听起来数字越大越强但这里面的水很深。先看它怎么来的。假设你的MAC阵列出厂做成256个乘加单元每个单元一个周期做一次乘加一次乘加通常算作两次操作一次乘法一次加法芯片主频1GHz那么它的理论算力就是256MAC单元数× 2每周期操作数× 1GHz频率 512 GOPS 0.512 TOPS看到问题了吗这个公式里没有任何真实网络模型的因素。它只是硬件的极限吞吐能力实际跑网络时因为数据搬运、层间切分、算子支持度等因素真实表现可能只有理论值的30%到60%。所以两个TOPS相同的NPU跑同一个模型成绩可能差一倍完全不奇怪。选型时更值得看的是官方或者社区里对目标网络比如ResNet50、MobileNet、YOLO系列、LLM的真实跑分数据以及对应的功耗数字。有时候一颗4 TOPS的NPU能用低得多的功耗跑赢8 TOPS的竞品因为前者的数据流设计更匹配你的模型形态。算力不等于端到端性能这个认知相当重要。5.2 内存带宽和数据精度两个更容易被忽略的瓶颈芯片算力再高数据送不进来也是白搭。NPU的性能上限经常被内存带宽锁死这个现象在深度学习领域叫“memory-bound”。打个比方算力是一台每小时能处理一万个包裹的分拣机但如果传送带每小时只送来五千个包裹分拣机再快也只能等料。内存带宽取决于DDR和片上SRAM之间的传输能力。大模型比如几B参数级别的LLM推一次光是把权重从DDR搬进NPU内部就需要几十毫秒算力阵再快也在干等。这也是为什么很多NPU方案开始引入大容量片上SRAM甚至HBM就是在提升“传送带”的速度。数据精度同理。同一颗NPU跑FP16的算力可能是INT8的一半跑INT4又是INT8的两倍。量化是NPU开发里几乎绕不开的一环。如果你把FP32模型直接丢给NPU大概率跑不了或者性能难看。所以看NPU规格时要留意不同精度下的TOPS分别是多少以及编译器对INT8/INT4的支持度这些直接决定你能跑什么体量的模型需要多少量化工作量。6. 主流NPU方案速览Intel NPU、手机SoC NPU、端侧NPU都在做什么6.1 Intel NPU从云端老玩家到端侧的新动作热词里出现了“Intel NPU开发”这个趋势值得聊。Intel在云端的AI加速早已有布局比如Habana Labs的Gaudi系列但在PC端和边缘端的NPU布局是近年才开始发力的代表性产品就是集成在酷睿Ultra系列处理器里的NPU单元。它主打低功耗下的持续性AI负载比如视频会议背景模糊、眼神矫正、语音降噪、本地LLM推理等。Intel的策略是让NPU长期“在岗”处理那些CPU和GPU搞得定但功耗不划算的任务。Intel OpenVINO工具链在这个过程中起到了非常关键的桥接作用——模型可以经由ONNX等格式导入OpenVINO把高层模型转化为NPU可执行的IR中间表示并调度到CPU/GPU/NPU三个计算单元上协同工作。实操层面Intel NPU开发流程大概是训练好模型PyTorch/TensorFlow→ 导出ONNX → OpenVINO模型转换器转换并量化 → 编写推理代码指定使用“NPU”设备 → 部署测试。对开发者来说最需要注意的是NPU单元有着明确的“内存访问共享”特性它没有独立的显存但共享系统带宽。这意味着如果在NPU上跑大数据量的模型会和CPU抢内存带宽调度不当反而拖慢整个系统。6.2 手机SoC NPU和端侧NPU把AI放进你的口袋手机SoC里的NPU典型如苹果的Neural Engine、高通Hexagon、联发科APU和Intel NPU承担类似的职责在拍照场景做语义分割和夜景增强、在语音助手场景做唤醒词识别、在AR场景做姿态估计。它们的架构逻辑也是简化到极致的MAC阵列加数据流控制但设计约束更严格——每毫瓦功耗都要精打细算。端侧NPU更极端比如各类物联网芯片里的NPU IP。这类方案算力通常在0.5到4 TOPS之间主打超低功耗跑一些轻量级模型比如唤醒词、人体检测、口罩识别。开发这类NPU时工具链成熟度是选型第一原则。有些芯片的NPU算力纸面上很好看但编译器只支持极少数算子稍微复杂一些的网络结构就跑不起来只能手工替换算子甚至放弃某些层项目进度很容易被拖死。我的经验是选NPU方案先拿目标模型在芯片厂家的SDK里跑一遍确认算子覆盖率和量化工具链路通顺再考虑性能参数。跑不通的算力等于零这个教训是真金白银换来的。7. NPU开发避坑实录编译器、量化、数据搬运那些事7.1 数据布局一个看似不起眼却能拖慢一倍的问题NPU对输入数据的布局比CPU敏感得多。CPU跑连续内存上的数据块随便怎么排无非快慢问题NPU通常要求特定维度的对齐比如NHWC还是NCHW通道数C是否对齐到16或32的整数倍这对MAC阵列的访问效率影响巨大。我踩过这样一个坑把一个PyTorch训练好的分割模型迁移到某款端侧NPU上前置处理是OpenCV读图输出的是HWC排列的BGR图像而NPU工具链默认期望NCHW并且通道需要对齐。我一开始直接在预处理阶段做了逐像素转换虽然结果正确但推理总延迟比预期多了40%。排查了半天发现问题根本不出在推理本身而是预处理的数据布局转换耗了大量时间。后来用NEON指令重写了转置逻辑又把图像填充到对齐的通道数延迟立刻降回来。给新手的建议很简单拿到NPU工具链的第一天先看它要求的输入张量布局是什么。是NHWCNCHW通道对齐到几这些信息往往藏在工具链文档的“推荐配置”里但很多人不看直接拿OpenCV的数据硬塞出了性能问题还得不到正确方向。7.2 量化不是无脑转INT8而是和数据分布博弈几乎所有端侧NPU都支持INT8量化高端的还支持INT4。很多同学把模型转成INT8之后精度掉得厉害就一口咬定“NPU不行”。但真实原因往往是量化预处理没做好。量化本质上是把浮点数值范围映射到整数范围。如果你的权重和激活值分布比较均匀这个过程几乎无损耗但如果数据分布有长尾、有明显异常点量化就会放大误差。业界通行做法是“校准”——用一小批有代表性的数据跑一遍浮点模型统计各层激活值的分布找到最优的缩放系数和零点再进行量化。实操细节上有几个容易被忽略的坑。每个层的缩放系数可能不同校准集不能太小几百张图是最低限度太少会导致统计失真。如果目标浮点模型已经在训练时用过了各种归一化层量化之后发现BN层效果“变了味”可以提前把BN层“折叠”进前面的卷积层让量化伴侣更稳定。还有INT4量化虽然能实打实把吞吐翻倍但精度损失往往不可控除非是2B参数以上的大模型自带冗余否则建议从INT8起步。7.3 闲下来的NPU也很重要底层算力调度是一门取舍芯片上往往有CPU、GPU、NPU三种可用的计算单元怎么分配任务不是简单的“NPU最大优先”。NPU虽快但它能适用的算子有限尤其在混合模型里如果有LSTM、动态控制流这类“不规整”结构NPU编译器会退化成在CPU上执行这些算子导致频繁地在CPU和NPU之间来回切换开销巨大最终端到端延迟反而不如纯CPU跑。我在一个语音识别模型中遇到过一次这样的情况模型主体是CNN计算但前后有VAD语音活动检测和特征后处理全部是常规Python代码。最初我把整个流程都交给NPU调度看似“硬件加速”实际上每次推理都要在高速缓存和DDR之间拷贝多次数据延迟翻倍。后来调整策略特征提取在CPU完成CNN推理进NPU后处理再回到CPU三段流水线化执行总延迟缩短了60%。NPU适合的是“大块计算”把它当通用处理器用是在浪费它也在给自己挖坑。8. 最后说说我对NPU架构发展趋势的真实体感聊到最后我特别想分享一个观察NPU架构的演进远没有结束而且正在变得越来越“软硬协同”。早期NPU设计比较死板编译器只是一种“翻译官”把模型翻译成指令就算完事。现在的新方案已经开始反过来了——编译器参与架构设计工具链和硬件一起改良。比如不少NPU工具链开始支持“自动搜索最优切分策略”Auto-tiling编译器会根据模型结构和片上存储容量自动决定怎么切分数据、怎么编排流水线不再要求开发者手工调参。这对应用开发者的门槛正在降低是好迹象。另一个趋势是“存算一体”和“近存计算”。前面反复提到带宽瓶颈是NPU设计的大敌所以架构师们开始把更多存储单元搬到计算阵列旁边甚至直接做存内计算。这个方向如果成熟能在端侧解锁更大的模型潜力值得持续关注。虽然这些技术还处在前沿阶段但方向已经比较明确了。我自己的经验是不管NPU架构怎么变那句老话始终成立——先把数据流想清楚再谈算力。做应用的人不要被TOPS数字牵着走多关注工具链成熟度、算子覆盖率和数据搬运的开销。这些才是决定一个AI项目能否落地的真正变量。希望这篇文章能帮你在NPU的迷雾中拨开一角下次再有人问NPU是什么你也可以用一句话回他让数据尽量不动让计算尽量并行让每一焦耳都花在矩阵上。