第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的并行计算单元反而处理不好。
4.2 GPU:并行计算的“老将”
GPU大家都很熟悉了。在PC和服务器上,它是深度学习的主力。但在端侧,GPU的地位有点尴尬。
端侧GPU(比如高通Adreno、ARM Mali)的优点是并行度极高。一个卷积层,在GPU上可以拆成成千上万个线程同时算。但缺点也很明显:功耗高、驱动复杂。
我记得有一次在某个国产芯片上调试GPU推理,发现OpenCL驱动有bug,跑出来的结果全是错的。折腾了两天才找到原因——是驱动对某些算子支持不完整。从那以后,我对于端侧GPU的态度是:能用NPU就不用GPU,除非NPU不支持某些算子。
GPU的适用场景主要是:
- 大模型推理:当模型参数量超过NPU的SRAM容量时,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,性能会大打折扣。
4.4 DSP:被低估的“多面手”
DSP(数字信号处理器)在端侧设备里其实很常见,但很多人忽略了它。
DSP的强项是低功耗、低延迟的信号处理。比如音频处理、传感器数据融合、图像ISP(图像信号处理)这些场景,DSP比CPU和GPU都合适。
在推理场景下,DSP可以做什么?
- 小模型推理:比如唤醒词检测、手势识别这类轻量级模型,DSP完全可以胜任。
- 预处理加速:比如FFT、滤波、特征提取这些操作,DSP有专门的指令集,比CPU快得多。
- 低功耗场景:比如智能手表、IoT设备,电池容量小,DSP的低功耗特性就很重要。
我个人在项目中用过DSP做语音唤醒。模型只有几十KB,跑在DSP上功耗不到1mW,电池能用好几天。如果换成CPU,功耗至少翻五倍。
4.5 异构计算基础:让每个单元做擅长的事
好了,现在我们有四个“兵种”:CPU、GPU、NPU、DSP。怎么用?答案是异构计算。
异构计算的核心思想很简单:把任务拆开,分给最合适的计算单元。
举个例子,一个典型的端侧推理流程:
- CPU:读取图片、解码、缩放、颜色空间转换。
- NPU:运行模型推理(卷积、池化、全连接等)。
- CPU:后处理(NMS、阈值判断、结果解析)。
- DSP:如果模型输出需要做音频或信号处理,可以交给DSP。
这样分工的好处是:
- CPU 不用做繁重的计算,功耗低。
- NPU 专注于推理,效率高。
- DSP 处理特殊任务,不占用主计算资源。
但异构计算也有挑战:数据搬运的开销。每次把数据从一个单元搬到另一个单元,都要经过总线,有延迟和功耗。所以你需要设计好流水线,让数据在单元之间“流”起来,而不是等一个单元算完再启动下一个。
4.6 如何选择?一张表说清楚
最后,我整理了一张对比表,方便你快速决策:
| 计算单元 | 优势 | 劣势 | 适用场景 | 功耗等级 |
|---|---|---|---|---|
| CPU | 通用性强、生态成熟 | 并行度低、能效比差 | 预处理、后处理、控制逻辑 | 中 |
| GPU | 并行度高、大显存 | 功耗高、驱动复杂 | 大模型推理、图像处理 | 高 |
| NPU | 能效比极高、推理专用 | 算子有限、精度受限 | 模型推理(卷积类为主) | 低 |
| DSP | 低功耗、信号处理强 | 精度有限、生态封闭 | 小模型推理、音频/传感器处理 | 极低 |
嗯,这张表你最好保存下来。每次做端侧推理项目时,先对照着看看,你的任务适合哪个单元。
下一章,我们会深入讲批处理设计。到时候你会发现,硬件架构的理解是批处理优化的前提。所以这一章的内容,请务必消化好。
我是蓝海,我们下章见。
公众号:蓝海资料掘金营,微信deep3321