资讯动态

NPU深度解析:从MAC阵列到软件栈,AI推理基础设施的实战指南

发布时间:2026/9/10 1:38:05 来源:尧图企业网站定制
在高性能计算这个圈子里混久了很容易形成一种惯性思维算力不够就加卡跑得慢就堆机器。直到我开始认真研究NPU相关的项目这种惯性思维被彻底打破了——AI基础设施和生态层里的水远比加卡两个字深得多。所谓NPU全称Neural Processing Unit神经网络处理器。这几年它频繁出现在手机发布会上、端侧AI的PPT里、大模型推理服务器的宣传册上。但说实话很多团队的认知还停留在NPU是GPU之外另一个加速器的程度。真到选型、部署、调优的时候NPU和GPU之间的差异会直接改写你的模型结构、量化策略、软件栈甚至机柜里的散热规划。这篇文章我想把NPU这件事从底到上拆开讲为什么神经网络计算需要专门的芯片、MAC阵列和峰值算力是怎么算出来的、为什么标称TOPS跑不满、端侧和云端NPU的两种活法、以及决定NPU能不能落地的软件栈。最后一部分会聊一些我在实际部署推理模型时踩过的坑和调优思路。适合做模型推理服务、边缘设备方案选型的技术负责人也适合想从基础设施层面理解AI生态怎么转的产品和技术爱好者。1. 神经网络处理器的诞生逻辑通用计算为什么扛不住1.1 从通用复杂到专用重复的计算模式变迁CPU的设计哲学是什么都能干无论是操作系统调度、数据库查询、还是游戏物理引擎都能用一套通用逻辑来处理。但通用是有代价的为了支持各种指令CPU里大量面积和功耗都消耗在指令译码、分支预测、乱序执行、缓存一致性这些管理开销上真正用来做数学运算的算术单元只占一小部分。神经网络计算恰恰和CPU擅长的事是拧着来的。一个卷积层或者注意力层本质上就是反复做同一件数学操作乘法和累加。CNN里的卷积是一个filter窗口在特征图上滑来滑去Transformer里的矩阵乘法更是把乘累加应用到了极致。这类负载的特点非常鲜明计算模式极度规律、数据访问高度重复、单个操作本身极其简单但数量惊人。用生活化的方式类比CPU像是一个精通十八般武艺的杂货店老板什么需求都能应付而神经网络计算则像是流水线上的拧螺丝工人动作单一但需要一天拧几万次。你要是让杂货店老板去拧螺丝他也能干但效率一定是浪费的——他的经验和体力本应花在更复杂的问题上。1.2 NPU到底专在哪矩阵运算、数据复用与片上存储NPU的出现在于把拧螺丝这件事做到极致。它不再带沉重的指令流水和乱序执行逻辑而是把芯片面积几乎全部留给计算单元和专用存储只做神经网络推理/训练中频率最高的操作矩阵乘法和卷积。这里的关键技术点是数据复用。做矩阵运算时同一份权重会被反复使用同一块输入特征也会被多个计算单元同时用到。如果能把这些数据留在芯片内部的片上存储SRAM里反复读取而不是每次都去片外DRAM搬运能节省的功耗和时间是数量级的。NPU的架构核心就是围绕如何最大化片上数据复用、减少片外访存来设计的这才是它效率远超通用芯片的根本原因。我见过不少人对NPU有误解以为它只是把GPU里的Tensor Core搬出来单独做成一款芯片。这个理解不完全对。GPU里的Tensor Core本质上是给GPU这辆跑车加了一个氮气加速系统整体架构仍然是通用的而NPU则直接把这辆车改装成了只跑直线加速赛的专用机器在特定负载下效率更高但灵活性大幅下降。1.3 大模型时代NPU的重新登场2023年之后大模型爆发围绕算力的讨论几乎无处不在token、参数量、训练FLOPs这些词满天飞。也是在那个阶段我注意到一个明显的变化过去NPU主要出现在手机SoC和边缘摄像头这些设备上做的是人脸识别、语音唤醒这类小模型但大模型来了以后CPU跑不动、GPU太贵太耗电的中间地带开始显露出巨大的空间——端侧跑7B甚至更大参数量模型、数据中心跑高吞吐推理、AI Agent应用需要低延迟连续推理这些都是NPU的机会。它解决的核心问题可以概括成一句话在给定的功耗和成本约束下用最少的资源把海量矩阵运算跑完。理解了这句话后面所有的架构设计、性能指标、调优手段就都有了主线。2. NPU的架构底细MAC阵列、数据流与片上内存的三角关系2.1 数一数MAC算力指标的真正含义要读懂NPU的算力标称值绕不开一个基本动作MAC也就是Multiply-Accumulate乘累加。一次MAC完成y y w × x这是神经网络里最基本的计算原子。把一堆MAC单元排列成二维阵列同一时刻让阵列里所有单元都工作就构成了矩阵乘法的硬件加速引擎。厂家宣称的TOPSTera Operations Per Second每秒万亿次操作就是用这个阵列算出来的TOPS MAC单元总数 × 2 × 时钟频率注意那个2因为一次MAC包含一次乘法和一次加法业界习惯把这两个操作都算进操作数里。举个例子假设一颗芯片有4096个MAC单元跑1GHz那么它的算力是4096 × 2 × 1GHz 8.192 TOPS。这里给出一个直接的参考当前主流旗舰手机SoC里的NPU算力在几十TOPS量级专门的云端推理芯片能到数百TOPS而英伟达最新数据中心GPU在FP4精度下能到几千TOPS注意精度差异。只看数字没有意义必须把精度的前提绑定在一起否则就是不同量纲在比大小。2.2 数据流设计权重固定、输入固定还是输出固定MAC阵列只是积木真正决定NPU效率的是数据怎么在阵列之间流动。业界把各种流动策略统称为Dataflow数据流主要有三种流派第一种是权重固定Weight Stationary权重一次性从片外搬到片上后就不动了后续所有输入特征都来复用这份权重。卷积神经网络里权重复用度极高这种策略特别适合CNN场景。第二种是输入固定Input Stationary把输入特征留在片上多个不同的权重轮流来跟它计算。这适合权重不断变化、输入需要反复使用的场景。第三种是输出固定Output Stationary把部分累积结果留在计算单元里一边读新的输入和权重一边累加减少中间结果的搬移。实际芯片很少用单一数据流大多是混合策略根据模型结构动态调整。我在调研昇腾、Google TPU这些公开资料时发现它们在数据流选择上的文档描述五花八门但本质都是在减少数据搬移这个目标下做权衡。这个权衡是极其关键的矩阵乘法的计算量随矩阵维度增长如果数据在片外和片上之间反复搬运功耗和延时都会迅速失控算力再高也无济于事。2.3 片上内存和带宽NPU性能的真正瓶颈芯片计算单元速度再快数据喂不进来也是白搭。NPU设计中有一个我特别想强调的规律性能和功耗的瓶颈往往不在计算阵列而在存储和带宽。以一张1080×1920的输入图像为例如果进行3×3卷积卷积核要滑过大约37万个位置每个位置需要读取9个像素。如果这些数据全靠从片外DRAM读取内存访问次数会被放大数倍。将图像块缓存到片上SRAM中后访问量就是图像本身的数据量了。片上SRAM越大能装下的权重和中间结果越多对外部内存带宽的要求就越低但SRAM面积成本极高容量做大会直接让芯片尺寸和成本失控。这就形成了一个三角制约计算阵列规模决定峰值算力上限片上SRAM决定数据复用能力片外内存带宽决定数据的供水能力。三者必须匹配任何一块短板都会让芯片实际表现远低于标称值。这也解释了为什么同样标称100TOPS的两颗芯片实测性能可能差出两倍——短板的位置不同。3. 算力不等于峰值有效算力、内存带宽与功耗的三方掰扯3.1 为什么实测跑不到标称TOPS几乎所有刚接触NPU的团队都会在第一个性能验证项目里撞上同一堵墙芯片标称50TOPS实测跑一个常规的ResNet或Transformer模型实际有效算力可能只有20TOPS出头。这个落差是由多方面原因叠加造成的。第一个原因是利用率打不满。MAC阵列需要源源不断地供数才能全速运转但模型里的算子并不都是整齐划一的矩阵乘法。卷积、激活函数、归一化、残差连接、非线性操作这些算子对MAC阵列的利用率参差不齐有些算子甚至几乎不使用MAC阵列。把这些算子的耗时平均下来阵列利用率落到50%~70%是非常正常的。第二个原因是访存受限。Roofline模型把计算强度定义为每读取一字节数据可以执行的浮点操作数。如果某个算子的计算强度远低于做乘加运算所需的数据量计算单元就会长时间处于等数据的空闲状态。大模型推理里特别典型的decode阶段每个token只做一次矩阵运算但权重必须全部从内存过一遍——这时候芯片的瓶颈已经从算力转移到了内存带宽。第三个原因是调度和同步开销。多核并行时核与核之间需要同步、输出结果需要汇总拼接这些操作都会产生真实的时间开销但在标称值里是看不见的。3.2 有效算力怎么评估才靠谱基于这些经验我给团队定的评估方法很简单不要信TOPS就用准备上线的真实模型去工程板上跑一遍同时结合芯片的计算强度和存储带宽做一次Roofline分析判断当前模型是受算力限制还是带宽限制。评估时我会在同样的情况下跑几个验证指标单batch延时一次推理从输入到输出了多久、多batch吞吐每秒能过多少个样本、以及达到这些数据时的功耗和芯片温度。把这几个数放到同一个坐标系里和厂商提供的算力曲线做对比基本就能判断这颗芯片的实际可用算力水平。需要特别提醒的是不同尺寸的模型在NPU上的表现差异巨大。模型越大权重片外读取的比例越高对带宽越敏感模型越小越容易整体塞进片上SRAM计算阵列的利用率就越高。我在一个项目里测过同一颗芯片小模型利用率能到70%以上换成大模型直接掉到30%。这不是芯片变差了而是模型特征和硬件特征的匹配度不同。选型时如果只看厂商给的标准模型测试报告很容易被误导。3.3 能效比和TDP端侧和云端都躲不开的硬约束功耗是算力之外另一个决定选型的硬指标。数据中心里一颗300W的GPU可以暴力堆算力对能效比没有那么敏感因为机柜电源和散热都能兜住但边缘盒子和手机完全不同TDP可能只有几瓦到十几瓦电池和散热约束把可用的算力上限死死压住了。能效比通常用TOPS/W来表示。例如一个10TOPS、功耗5W的端侧NPU能效比约2TOPS/W而一颗达到300W的高性能加速芯片即使算力做到500TOPS能效比也只约1.7TOPS/W。在高性能计算这个圈子里混久了你会在各种发布会PPT里反复看到一个话术我们的能效比远高于GPU。但必须冷静想想它是在什么样的精度、什么样的模型、什么样的batch、什么样的占空比下测出来的。端侧芯片宣传能效比时常常用的是稀疏化激活后的小模型实测数据而这个数据在真实负载下不一定能复现。4. 端侧NPU和数据中心NPU同一技术路线的两种活法4.1 手机SoC里的NPU在功耗预算里做文章端侧NPU的代表形态是集成在手机SoC里的独立计算单元。无论是苹果的Neural Engine、高通的Hexagon DSP衍生出的NPU架构还是各厂商自研的AI加速模块它们面对的共同约束都是功耗预算只有几瓦还得和CPU、GPU、基带、ISP抢面积和带宽。这迫使端侧NPU在设计上极端重视能效比宁可牺牲通用性也要把常见视觉模型跑得飞快。端侧NPU最常见的加速对象是摄像头相关的CV模型、语音识别、翻译、以及大模型出现后的端侧LLM推理。以目前手机上流行的小参数模型为例一个7B模型用INT4量化后权重约3.5GB左右远超片上内存必须流式地从LPDDR读取这时推理速度基本被内存带宽锁死。这也是为什么有些手机宣传本地跑大模型实际每秒只能吐几个token——硬件本身没有做错什么只是工作模式已经完全切换到了访存受限状态。4.2 云端可扩展的AI芯片把阵列做成规模云端NPU和端侧的思路截然不同。数据中心里的AI推理芯片不再那么计较单瓦能效更强调的是绝对吞吐、大批量处理能力和可扩展的互联能力。Google TPU、昇腾的推理芯片、Amazon Inferentia这类产品的共同点是核心还是MAC阵列但阵列规模更大、片上内存和HBM带宽配置更高同时通过PCIe或专用互联协议把多颗芯片拼成一个计算集群。云端NPU最典型的使用场景是高并发的推理服务一个在线推荐服务可能每秒要处理几万个请求一个LLM服务可能要同时服务数千个并发会话。这类场景下batch维度为持续利用MAC阵列提供了条件——把多个请求的矩阵乘法合并成更大的矩阵运算阵列利用率能大幅提升。这里要提一个最近讨论度很高的词token算力需求评估。LLM推理的算力需求是有明确物理公式的。模型推理一个token的理论计算量大约等于模型参数量的两倍单位FLOPs所以一个7B模型生成一个token大约需要14GFLOPs换算成MAC操作就是7GMAC。如果芯片标称100TOPS且利用率100%理论上每秒能生成约1.4万token但实际要考虑prefill阶段的高计算量和decode阶段的带宽瓶颈还要算上batch的叠加效应。网上有不少人在问评估token算力需求到底怎么算我的经验是先拆解模型的参数量、上下文长度、并发数和响应速度目标再反推出需要的译码吞吐量和带宽这才是一个可执行的需求评估框架而不是停留在感觉层面。4.3 NPU与GPU共存基础设施层的分工对应到实际的数据中心NPU和GPU并不是你死我活的替代关系。训练阶段模型结构频繁变化、需要大规模通用矩阵运算和混合精度支持这仍然是GPU的主场而训练完成后的在线推理服务、大批量、模型结构固定NPU在能效比和单卡吞吐上往往更有优势更适合承担这些负载。在AI基础设施规划里我看到越来越多团队采用CPU负责调度和前后处理、GPU负责训练和复杂推理、NPU承担高并发固定模型的策略。这种分工对应着整个AI基础设施的演进趋势基础设施层不再是一台机器装一张GPU那么简单而是由异构计算节点、调度平台、存储和网络共同构成的生态。后面讲到软件栈时你会更深刻地理解这个生态的黏合剂根本不在硬件本身。5. 软件栈才是NPU的隐形战场算子库、编译器与量化方案5.1 算子缺失AI芯片落地的第一大难题关于NPU一个经常被严重低估的事实是NPU本身只是半成品周围的软件工具链、算子库、编译器决定了它是否真的能被用起来。一款全新AI芯片就算峰值算力做到全球第一如果TensorFlow/PyTorch模型导进去有一堆算子无法编译团队照样不会选它。云端GPU生态之所以强大恰恰是CUDA二十年积累的算子库和开发工具的深厚沉淀这是留给新NPU最重要的生态门槛。我在一个边缘端项目里遇到的情况很有代表性选了一款算法团队认为性价比极高的NPU芯片结果模型里一个在高版本PyTorch里非常普通的注意力机制变体使用了一种非标准的相对位置编码实现在该芯片的SDK中没有对应实现。后续查算子映射表发现虽然2D卷积、全连接这些标准算子都有但transformer里常用的reshape和transpose组合在特定数据布局下触发了一个未优化的路径性能掉了一个数量级。大家只能改网络实现或者等厂商更新工具链。芯片算力强但算子不全这种情况在工程上的代价远比多买几块GPU大得多——因为重新设计和验证模型的时间成本是不可接受的。5.2 神经网络的编译与图优化为了让模型从训练框架跑到NPU上软件栈一般会经历一个前端对接→图优化→算子映射→指令生成的流水线。前端对接负责读入ONNX、TensorFlow或PyTorch导出的模型格式转换成统一的中间表示。图优化阶段做的是算子融合、维度折叠、数据布局转换这些事情。算子融合是最直观的优化手段把卷积后面的激活函数、批量归一化这些逐元素操作融合进卷积本身减少中间结果的搬运和多次启动的开销。这类优化在做传统推理优化时RISC风格的思路是完全一致的NCNN、MNN这些推理框架在CPU和GPU上都在做同样的事。算子映射决定了一个模型算子能不能落到NPU的MAC阵列上。如果算子能直接映射就调用厂商提供的算子库如果不能就尝试将其拆解成多个简单算子的组合实在拆不了只能退回到CPU执行。一个模型里只要有少数几个算子落到CPU上性能就会塌方因为数据要在NPU和CPU之间来回搬运走一次仿存可能比在NPU上跑几次算子还慢。5.3 量化用精度换速度的经典交易NPU能效比高的一大来源是低精度计算。云端GPU训练常用FP16、BF16甚至FP8而NPU推理主流是INT8端侧LLM更是大量采用INT4/INT8混合精度。量化就是把FP32/FP16的权重值和激活值用更少的bit来表示。量化按方式分为训练后量化PTQ和量化感知训练QAT。PTQ是最省事的路线直接用一批代表数据做校准统计激活值的分布算出合适的缩放系数后就直接把模型转成INT8。QAT则需要在训练阶段就模拟量化误差让模型通过训练去适应低精度表示精度损失通常更小但需要训练资源和流程改造。这里有一个非常重要的认知量化不是简单的四舍五入而是要在最小化精度损失和最大化计算效率之间寻找平衡。per-tensor量化给整个张量一个缩放系数实现简单但误差大per-channel量化给每个通道单独一个系数精度好但计算复杂度略高。具体用哪种取决于模型对数值范围的敏感度。我在做过一个视觉模型时模型里的某一层对量化特别敏感改用混合精度方案只对这一层保持FP16其余层用INT8最终在精度损失低于0.1%的前提下拿到了数倍的速度提升。这个经验说明要善用工具提供的profiling信息不要一股脑全员INT8。6. NPU实战经验部署推理模型时踩过的坑和调优思路6.1 模型跑不起来的头号原因算子不支持如果你准备把一个PyTorch模型部署到NPU上我先给你一个心理准备第一次编译大概率会报算子不支持。这几乎是所有NPU入局团队都要经历的第一课区别只是报错早晚而已。我踩坑最深的一次是一个目标检测模型前向传播里用了Torch自带的torch.topk做候选框挑选。这个算子在NPU SDK的算子列表里明确标记为不支持编译直接失败。当时第一个想法是换一颗硬件支持更好的NPU但重新选型代价极大。最终解决方式是重构后处理逻辑候选框数量固定用argsort取前K个替代复杂的topk动态逻辑再配合NMS在CPU上做。模型的检测精度完全没变但模型终于能完整地跑到NPU上去了。这段经历让我总结了一条流程在选型阶段就把模型的关键算子列出来逐项比对厂商提供的算子支持列表。重点看三个地方动态shape尤其是reshape、slicing这类在编译期无法确定维度的操作、控制流操作循环、条件分支、以及各种自定义op。这三个地方是模型迁移到NPU时最常出问题的高风险区。宁可前期多花几天做算子审计也不要等模型已经跑通CPU版本后在最后一步换硬件。6.2 性能调优的几个抓手如果你的模型已经能在NPU上正确跑通但速度达不到预期我建议按下面的顺序排查和调优这个顺序是根据经验教训得出来的每一步都有真实意义先看数据布局。深度学习框架里数据有NCHW和NHWC两种排布不同NPU偏好的布局不一样且对卷积层和全连接层的影响不同。如果布局和硬件不匹配算子可能会触发重排操作性能会显著受损。首选手段是通过编译器选项指定实在不行才考虑改模型。再看batch策略。很多NPU在batch较小时无法打满计算阵列。LLM服务优化的关键手段之一就是动态batch——把多个并发请求聚合成一个大batch同时处理大幅提升吞吐。如果服务延迟在可接受范围内尽量让batch大一些。再看多核调度。多核NPU产品里模型如何在核之间切分是决定性能的关键。常见切分方式有按通道切分、按空间切分、按batch切分。厂商SDK通常有自动切分能力但自动方案不一定最优特别是对不规则的模型结构。实测后效果不理想时就要考虑手动指定切分策略。最后看计算与数据传输的流水重叠。NPU和CPU异步工作时数据搬运可以和计算并发进行做到边搬边算。很多NPU的SDK都提供异步接口、用stream/task队列来实现这一点如果代码写成同步式性能会损失一截。这个优化做到位往往能带来20%~30%的总耗时下降。6.3 NPU选型时的现实问题清单最后结合近期被反复提及的怎么统一管理多台算力服务器这个方向给大家一份我在项目里实际使用的选型和部署检查清单按重要程度排序算力需求和内存带宽是否匹配。模型多大、权重多大、片上SRAM多大、片外带宽多少这几个数先测算不要只看TOPS。内存容量够不够。《token算力需求评估》提到的LLM场景尤其要算KV Cache占用的显存跟模型权重加在一起再乘以并发数就是所需内存容量的下限。KV Cache的大小是上下文长度的数倍乘以隐藏层维度和层数很多项目都在这里栽过跟头。算子支持列表和模型算子集合做diff。这个上面讲过了提前做别等到最后。软件工具链的迭代速度。SDK活跃度多高、发布节奏多快、遇到的问题能不能获得及时反馈决定了踩坑之后的存活率。多节点统一管理方案。多台算力服务器管理本质上是一个异构调度问题。如果是同品牌NPU厂商通常提供集群管理平台如果是混合了不同N卡、不同NPU就需要靠Kubernetes加设备插件来做统一资源抽象。实际管理多台设备时的核心诉求是设备的可观测性、故障自动转移、作业的亲和性调度。建议先从这两个维度出发搭建一是选一个支持异构设备接入的调度框架把NPU设备插件化接入二是建立统一的监控面板把每台服务器的算力利用率、显存占用、温度功耗采集上来。没有监控直接上多机负载出了问题排查成本会非常高。成本模型。把芯片价格、整机功耗、散热改造成本、部署后的运维人力全部算进去再和GPU方案做全周期对比。NPU香不香答案一定是你自己算出来的而不是厂商PPT告诉你的。写到这里基本都是我在多个NPU相关项目里用时间和夜班换来的教训。回想起来最核心的一条体会是NPU的价值从来不是一个芯片的性能参数而是它周边那个完整的软硬件生态能否闭环。你选的不是一个TOPS数字而是一整套研发工作流。只要把算力需求算清楚、算子审计做在前面、软件栈验证做彻底NPU在很多场景下完全有能力成为比GPU更务实的算力选择。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价