NPU基础:NPU架构、与CPU/GPU的区别、主流NPU厂商与产品

端侧大模型推理的兴起,将NPU(神经网络处理单元)从幕后推到了台前。无论是手机上的语音助手、实时翻译,还是智能摄像头中的人脸识别,背后都离不开NPU对神经网络计算的高效加速。要真正理解NPU如何为端侧大模型提速,首先需要厘清它的硬件架构本质、与CPU/GPU的分工差异,以及当前主流厂商的技术路线。本章将从这三个维度展开,帮助您建立对NPU的系统认知。

NPU 核心概念关系与硬件加速链路 NPU 核心 MAC阵列 / 脉动阵列 片上SRAM / 权重缓存 激活函数 / 池化单元 指令调度器 / DMA CPU 控制流 / 分支预测 复杂逻辑 / 操作系统 GPU 大规模并行 / 图形渲染 通用计算 / 高吞吐 控制/调度 数据搬运 存储层次 DDR(主存) ↔ 片上SRAM(NPU本地缓存) ↔ 寄存器/累加器 华为昇腾 达芬奇架构 / 昇腾310/910 高通 Hexagon DSP / 骁龙AI引擎 联发科 APU(AI处理器)/ 天玑系列

上图展示了NPU在端侧计算体系中的核心位置:它既不是替代CPU的通用控制器,也不是替代GPU的图形渲染器,而是专门为神经网络算子(如卷积、矩阵乘、激活函数)设计的专用加速引擎。下面我们逐一深入。

2.1 NPU架构核心原理:从指令流到数据流

NPU的架构设计哲学与CPU截然不同。CPU基于冯·诺依曼架构,强调指令流的顺序执行和复杂控制逻辑;而NPU则转向了数据流(Dataflow)架构,其核心目标是最大化数据复用、减少数据搬运,从而在极低的功耗预算下完成海量乘加运算。

一个典型的端侧NPU内部包含以下关键模块:

  • MAC阵列(乘加单元阵列):这是NPU的心脏,由成百上千个乘加器组成,通常排列成脉动阵列(Systolic Array)或二维网格。以8×8的脉动阵列为例,一次可以并行执行64个乘加操作,数据在阵列中像波浪一样流动,极大减少了寄存器访问次数。
  • 片上SRAM(静态随机存取存储器):作为NPU的“本地仓库”,用于缓存权重、输入特征图和中间结果。与访问外部DDR相比,访问SRAM的延迟可降低10倍以上,功耗降低20倍以上。容量通常在几百KB到几MB之间。
  • 激活函数与池化单元:专门硬件实现ReLU、Sigmoid、Tanh等激活函数,以及最大池化、平均池化操作,避免将这些简单操作交给CPU处理。
  • 指令调度器与DMA(直接内存访问):负责解析神经网络模型编译后的指令序列,并控制DMA在DDR与SRAM之间高效搬运数据。DMA的传输效率往往决定了NPU的实际利用率。

NPU的工作流程可以概括为“编译-调度-计算-搬运”的循环:模型首先通过编译器(如华为的CANN、高通的QNN)转换为NPU指令集,然后由调度器按依赖关系分发到MAC阵列执行,同时DMA预取下一批数据,实现计算与搬运的重叠。

核心原理小结:NPU通过“数据流驱动计算”替代“指令流驱动计算”,用大量低功耗MAC阵列和片上缓存换取了极高的算力密度(TOPS/W)。这是它与CPU/GPU最本质的区别。

2.2 NPU与CPU/GPU的对比:分工与边界

理解NPU的价值,必须放在CPU、GPU、NPU三者协同的异构计算框架中。下表从多个维度进行了对比:

对比维度CPUGPUNPU
设计目标低延迟、复杂控制流高吞吐、大规模并行图形/通用计算极致能效比的神经网络推理
核心计算单元ALU(算术逻辑单元)+ 控制单元数千个CUDA核心/流处理器MAC阵列(脉动阵列/网格)
数据精度FP64/FP32/INT64FP32/FP16/TF32INT8/INT4/FP16/BF16
存储架构多级Cache(L1/L2/L3)大容量显存(GDDR/HBM)+ L2片上SRAM + 外部DDR
典型功耗5W-100W+100W-500W+0.5W-15W(端侧)
擅长任务操作系统、逻辑判断、串行任务图形渲染、科学计算、并行批处理卷积、矩阵乘、Transformer推理
端侧代表Cortex-A系列Adreno(高通)/Mali(ARM)Hexagon(高通)/APU(联发科)

在实际的端侧大模型推理中,三者分工明确:CPU负责模型加载、任务调度和预处理(如分词、归一化);GPU负责部分并行度高的算子(如某些注意力机制中的矩阵运算),但功耗较高;NPU则承担了绝大部分的Transformer层计算,包括QKV投影、注意力分数计算、FFN(前馈网络)等。

常见误区:不要认为NPU可以完全替代CPU或GPU。NPU是专用电路,无法处理分支跳转、动态内存分配等复杂逻辑。如果模型中有大量动态shape操作或自定义算子,NPU可能无法高效执行,此时需要CPU回退(Fallback)机制。

2.3 主流NPU厂商与产品:技术路线与生态

端侧NPU市场呈现“三足鼎立”的格局,各家技术路线和软件生态差异显著。了解这些差异,有助于您在项目选型时做出更合理的决策。

2.3.1 华为昇腾:达芬奇架构的端云协同

华为昇腾系列NPU采用自研的达芬奇(Da Vinci)架构,其核心是“统一计算单元”设计,将标量计算、向量计算和矩阵计算融合在同一个核中。昇腾310主要用于边缘推理,功耗约8W,算力可达22 TOPS(INT8);而昇腾910则面向训练场景。在端侧,麒麟芯片集成的NPU同样基于达芬奇架构,配合CANN(Compute Architecture for Neural Networks)工具链,支持从TensorFlow/PyTorch模型到OM(Offline Model)的转换。

技术特点:支持动态shape输入,对Transformer类模型有专门优化(如Flash Attention的硬件加速),且提供MindSpore框架的原生适配。

2.3.2 高通:Hexagon DSP的融合演进

高通的NPU并非独立硬件,而是集成在Hexagon DSP(数字信号处理器)中的AI加速单元。从骁龙855开始,高通将Hexagon DSP、Adreno GPU和Kryo CPU整合为“AI引擎”,通过异构计算调度器(HTA)统一分配任务。最新的骁龙8 Gen 3中,Hexagon NPU支持INT4/INT8混合精度,并增加了对LoRA(低秩适配)等大模型微调技术的硬件加速。

技术特点:软件生态成熟,QNN(Qualcomm Neural Network)工具链支持从ONNX/TFLite到QPC(Qualcomm Platform Compiler)的转换,且对Android系统集成度极高。

2.3.3 联发科:APU的能效比追求

联发科天玑系列搭载的APU(AI Processing Unit)采用多核架构,例如天玑9300的APU 790包含“大核+小核”的配置,大核负责高算力需求,小核处理常驻低功耗任务。联发科强调“混合精度”和“内存压缩”技术,通过将模型权重压缩至INT4并配合硬件解压缩单元,有效降低了DDR带宽压力。

技术特点:NeuroPilot SDK提供统一的AI开发接口,支持TensorFlow Lite、PyTorch Mobile等主流框架,且对多核调度优化较好。

厂商架构名称代表产品软件工具链端侧算力(INT8)
华为达芬奇昇腾310/910、麒麟NPUCANN、MindSpore22 TOPS(310)
高通Hexagon DSP骁龙8 Gen 3QNN、Qualcomm AI Engine约45 TOPS
联发科APU(多核)天玑9300NeuroPilot SDK约48 TOPS

2.4 实战场景:在端侧部署7B大模型的NPU选型与优化

假设您需要在某款旗舰手机上部署一个7B参数的对话大模型,要求首延迟低于1秒,且功耗不超过3W。这是一个典型的端侧NPU应用场景。我们以高通骁龙8 Gen 3平台为例进行拆解。

初始目标与约束:7B模型FP16权重约14GB,远超手机DDR容量(通常12-16GB),因此必须进行INT4量化(约3.5GB)。同时,模型需要常驻内存,且推理时不能影响手机其他应用的流畅度。

关键输入数据:模型结构为标准的Decoder-only Transformer,包含32层,每层有QKV投影(4096维)、FFN(11008维)。单次推理需要执行约2×7B×2 = 28 GFLOPs的浮点运算(实际为INT8/INT4运算)。

分析判断过程:

  1. 算力评估:骁龙8 Gen 3的Hexagon NPU INT8算力约45 TOPS,即45万亿次/秒。28 GFLOPs的运算量在理想情况下仅需0.6ms,但实际要考虑数据搬运和算子调度开销,预估单计算时间约20-30ms。
  2. 内存带宽瓶颈:INT4量化后,每层权重约110MB(3.5GB/32层)。DDR5的带宽约68GB/s,读取一层权重需要约1.6ms。32层总计约51ms,这是主要瓶颈。
  3. 优化策略:采用“权重流式加载”策略,即NPU计算当前层时,DMA预取下一层权重到SRAM,实现计算与搬运重叠。同时,将Attention的KV Cache存储在SRAM中,减少DDR访问。

实际操作步骤:

# 使用QNN工具链进行INT4量化与编译
qnn-onnx-converter --input_model model.onnx --output_model model.cpp --quantization INT4
qnn-context-binary-generator --model model.cpp --backend libQnnHtp.so --binary_file model.serialized
# 在Android端加载并执行推理
QnnContext* ctx = qnn_context_create(model.serialized);
qnn_context_execute(ctx, input_tensor, output_tensor);

结果对比:经过优化后,实测首延迟约800ms,功耗约2.8W,满足要求。未优化时,首延迟高达3.2秒,功耗超过5W。

风险与代价:INT4量化可能导致模型精度下降约1-2%,需要采用或AWQ等量化感知训练技术进行补偿。此外,NPU的SRAM容量有限(约4MB),对于超大batch或长序列输入,可能无法完全缓存KV Cache,需要动态调整。

复盘经验:端侧NPU部署的核心不是“算力不够”,而是“数据喂不饱”。优化重点应放在内存带宽利用率和数据复用率上,而非单纯追求峰值TOPS。建议使用NPU厂商提供的Profiler工具(如高通的Snapdragon Profiler)定位DMA等待周期。

2.5 常见误区与总结复盘

在接触NPU开发时,工程师常陷入以下误区:

  • 误区一:只看TOPS数值。TOPS是理论峰值,实际有效算力受限于算子支持度、数据精度和内存带宽。例如,一个支持INT4但不支持稀疏化的NPU,其实际性能可能远低于标称值。
  • 误区二:忽略软件生态。NPU硬件再强,如果编译器不支持您的模型算子,或者转换工具链报错频繁,项目将寸步难行。建议在选型前,用目标模型跑一遍完整的工具链流程。
  • 误区三:认为所有模型都能无缝迁移。NPU对动态shape、循环控制流、自定义激活函数的支持有限。在模型设计阶段就应考虑NPU的约束,例如使用固定长度的KV Cache、避免使用Python原生控制流。

总结:NPU是端侧大模型推理的基石,其数据流架构、低精度计算和片上缓存设计,使其在能效比上远超CPU和GPU。理解不同厂商的架构差异(华为达芬奇、高通Hexagon、联发科APU),并掌握“算力-带宽-功耗”三角平衡的优化方法论,是您从入门到精通的关键一步。下一阶段,我们将深入NPU的算子映射与内存优化技巧。