第4章:端侧硬件架构概览:CPU、GPU、NPU、DSP的特点与适用场景、异构计算基础

各位同学,今天我们来聊聊端侧推理的“地基”——硬件架构。

说实话,很多做算法的人容易忽略硬件。觉得模型写好就行,跑不动是硬件的事。我以前也这么想,直到有一次在手机上部署一个轻量级模型,结果帧率惨不忍睹。后来一查,发现是没用好NPU,全跑在CPU上了。嗯,从那以后,我每次做端侧推理,第一件事就是看硬件规格书。

这一章,我会带你快速过一遍端侧常见的四种计算单元:CPU、GPU、NPU、DSP。它们各有脾气,也各有绝活。搞懂了它们,你才知道怎么“对症下药”。

4.1 CPU:通用但不够快

CPU是端侧设备的“老大哥”。什么活都能干,但什么活都不算最擅长。

在推理场景下,CPU的优势是通用性。你写一个PyTorch模型,转成ONNX,随便找个手机CPU都能跑。但问题也在这里——它太“通用”了。CPU擅长的是控制逻辑和分支预测,而不是大规模并行计算。

我个人的习惯是:CPU只用来做预处理和后处理。比如图像缩放、颜色空间转换、NMS(非极大值抑制)这些逻辑密集型的操作,CPU反而比NPU快。为什么?因为这些操作里有很多if-else分支,NPU的并行计算单元反而处理不好。

小技巧: 在端侧推理中,尽量把模型推理交给NPU或GPU,CPU只做“管家”工作。我曾经见过一个项目,把整个模型都压在CPU上跑,结果发热严重,帧率只有5fps。后来把卷积层挪到NPU,CPU只做数据搬运和后处理,帧率直接翻了三倍。

4.2 GPU:并行计算的“老将”

GPU大家都很熟悉了。在PC和服务器上,它是深度学习的主力。但在端侧,GPU的地位有点尴尬。

端侧GPU(比如高通Adreno、ARM Mali)的优点是并行度极高。一个卷积层,在GPU上可以拆成成千上万个线程同时算。但缺点也很明显:功耗高、驱动复杂

我记得有一次在某个国产芯片上调试GPU推理,发现OpenCL驱动有bug,跑出来的结果全是错的。折腾了两天才找到原因——是驱动对某些算子支持不完整。从那以后,我对于端侧GPU的态度是:能用NPU就不用GPU,除非NPU不支持某些算子

GPU的适用场景主要是:

  • 大模型推理:当模型参数量超过NPU的SRAM容量时,GPU的大显存优势就体现出来了。
  • 图像/视频处理:比如超分辨率、风格迁移这类计算密集型任务。
  • 游戏引擎集成:如果你的应用本身就有渲染管线,顺带做推理很自然。
注意: 端侧GPU的功耗控制是个大坑。我曾经在某个平板上跑实时视频处理,GPU满载时温度飙升到70度,直接触发降频。结果帧率从30fps掉到10fps。所以用GPU时,一定要做好功耗监控和频率锁定。

4.3 NPU:端侧推理的“王牌”

NPU(神经网络处理单元)是专门为深度学习设计的。说白了,它就是一块“卷积加速器”。

NPU的核心优势是能效比极高。同样算一个卷积,NPU的功耗可能只有GPU的十分之一。为什么?因为NPU的架构是“数据流驱动”的——数据从内存流进来,经过一层层计算单元,直接输出结果,中间不需要频繁读写寄存器。

我建议你:只要NPU支持你的模型算子,优先用NPU。这是端侧推理的“黄金法则”。

但NPU也有短板:

  • 算子支持有限:很多NPU只支持Conv、ReLU、Pooling、FC这些常见算子。像LayerNorm、GELU这些Transformer里的算子,很多NPU不支持。
  • 精度问题:NPU通常只支持INT8量化,FP16都少见。如果你的模型对精度敏感,可能需要做量化校准。
  • 内存限制:NPU的片上SRAM通常只有几MB到几十MB。大模型放不下,需要频繁搬运数据到DDR,性能会大打折扣。
核心观点: NPU是端侧推理的“主力军”,但不是“万能药”。你需要根据模型结构和NPU的硬件特性,做针对性的算子替换和内存优化。

4.4 DSP:被低估的“多面手”

DSP(数字信号处理器)在端侧设备里其实很常见,但很多人忽略了它。

DSP的强项是低功耗、低延迟的信号处理。比如音频处理、传感器数据融合、图像ISP(图像信号处理)这些场景,DSP比CPU和GPU都合适。

在推理场景下,DSP可以做什么?

  • 小模型推理:比如唤醒词检测、手势识别这类轻量级模型,DSP完全可以胜任。
  • 预处理加速:比如FFT、滤波、特征提取这些操作,DSP有专门的指令集,比CPU快得多。
  • 低功耗场景:比如智能手表、IoT设备,电池容量小,DSP的低功耗特性就很重要。

我个人在项目中用过DSP做语音唤醒。模型只有几十KB,跑在DSP上功耗不到1mW,电池能用好几天。如果换成CPU,功耗至少翻五倍。

避坑指南: 我曾经在某个DSP上部署模型,发现它的乘法器精度只有16位,而我的模型需要32位浮点。结果跑出来的结果全是噪声。后来我重新做了量化,把模型转成INT16才搞定。所以用DSP前,一定要确认它的数据位宽和精度支持。

4.5 异构计算基础:让每个单元做擅长的事

好了,现在我们有四个“兵种”:CPU、GPU、NPU、DSP。怎么用?答案是异构计算

异构计算的核心思想很简单:把任务拆开,分给最合适的计算单元

举个例子,一个典型的端侧推理流程:

  1. CPU:读取图片、解码、缩放、颜色空间转换。
  2. NPU:运行模型推理(卷积、池化、全连接等)。
  3. CPU:后处理(NMS、阈值判断、结果解析)。
  4. DSP:如果模型输出需要做音频或信号处理,可以交给DSP。

这样分工的好处是:

  • CPU 不用做繁重的计算,功耗低。
  • NPU 专注于推理,效率高。
  • DSP 处理特殊任务,不占用主计算资源。

但异构计算也有挑战:数据搬运的开销。每次把数据从一个单元搬到另一个单元,都要经过总线,有延迟和功耗。所以你需要设计好流水线,让数据在单元之间“流”起来,而不是等一个单元算完再启动下一个。

关键点: 异构计算不是简单的“把任务分出去”,而是要最小化数据搬运次数。我见过一个项目,把数据从CPU搬到NPU,再从NPU搬回CPU,来回搬了三次,结果性能还不如全跑在CPU上。所以,能一次搬完就别分两次

4.6 如何选择?一张表说清楚

最后,我整理了一张对比表,方便你快速决策:

计算单元 优势 劣势 适用场景 功耗等级
CPU 通用性强、生态成熟 并行度低、能效比差 预处理、后处理、控制逻辑
GPU 并行度高、大显存 功耗高、驱动复杂 大模型推理、图像处理
NPU 能效比极高、推理专用 算子有限、精度受限 模型推理(卷积类为主)
DSP 低功耗、信号处理强 精度有限、生态封闭 小模型推理、音频/传感器处理 极低

嗯,这张表你最好保存下来。每次做端侧推理项目时,先对照着看看,你的任务适合哪个单元。

下一章,我们会深入讲批处理设计。到时候你会发现,硬件架构的理解是批处理优化的前提。所以这一章的内容,请务必消化好。

我是蓝海,我们下章见。


公众号:蓝海资料掘金营,微信deep3321