2、嵌入式AI硬件基础:了解CPU、GPU、NPU、DSP的差异,以及如何为模型选择计算单元

做嵌入式AI移植,第一件事不是调代码,而是搞清楚你的芯片里到底有什么。

我见过不少新手,拿到一块开发板就开始跑模型,结果发现推理速度慢得离谱。后来一查,模型跑在了CPU上,而芯片自带的NPU压根没启用。嗯,这种坑我自己也踩过。

今天我们就来聊聊嵌入式设备里常见的几种计算单元:CPU、GPU、NPU、DSP。它们各自擅长什么,不擅长什么,以及——你的MobileNet到底该交给谁去跑。

2.1 四大计算单元的核心差异

先给个直观的对比。你想想看,如果让一个数学家去搬砖,或者让一个搬运工去解微积分,效率肯定都不行。计算单元也是这个道理。

计算单元 核心特点 适合任务 不适合任务 功耗水平
CPU 串行处理,控制能力强 逻辑控制、小规模计算 大规模并行计算 中等
GPU 大规模并行,浮点运算强 图像渲染、矩阵运算 强依赖分支的任务 较高
NPU 专为神经网络设计 卷积、激活、池化等 通用计算 极低
DSP 数字信号处理专用 音频编解码、滤波 复杂神经网络

这张表你记在心里就行。下面我们逐个拆开聊。

2.2 CPU:万金油,但别指望它跑AI

CPU是嵌入式设备的"大脑"。它什么都能干,但什么都干得不够快。

我个人习惯把CPU比作一个全能型选手。它能处理中断、调度任务、管理内存,也能跑一些简单的AI推理。但问题是——它一次只能处理少量数据。

举个例子。MobileNet的一个3x3卷积层,在CPU上跑可能需要几十毫秒。同样的计算量,交给NPU可能只需要几毫秒。差距就是这么明显。

避坑指南: 我曾经在一个项目里,为了省事直接把PC上的模型用OpenCV的dnn模块跑在CPU上。结果帧率只有2fps。后来切到NPU,直接飙到30fps。所以,除非你的模型极小(比如只有几KB),否则别指望CPU能扛起AI推理的大旗。

2.3 GPU:图形卡的逆袭,但功耗是硬伤

GPU天生就是为并行计算设计的。它有成百上千个核心,特别适合做矩阵乘法——而神经网络的核心恰恰就是矩阵运算。

但嵌入式设备上的GPU和PC上的不太一样。像NVIDIA的Jetson系列,GPU确实很强,跑MobileNet可以轻松上百fps。但代价是什么?功耗。一块Jetson Xavier NX的功耗可以到15W甚至更高,这在电池供电的设备里基本不可接受。

所以我的建议是:如果你做的是车载、机器人这类对功耗不敏感的场景,GPU是个好选择。但如果是智能门锁、可穿戴设备,还是看看NPU吧。

2.4 NPU:AI推理的"专业选手"

NPU,全称Neural Processing Unit,是专门为神经网络设计的计算单元。它内部有大量的乘加器阵列,可以一条指令完成多个乘加操作。

说白了,NPU就是为AI而生的。它跑卷积、池化、激活函数这些操作,效率比CPU高出一个数量级。

我最近在做一个智能摄像头项目,用的芯片内置了NPU。MobileNet V2的推理时间,CPU上要120ms,NPU上只要8ms。而且NPU的功耗只有CPU的十分之一。你说选谁?

关键点: NPU通常只支持定点运算(INT8/INT16),不支持浮点。所以模型量化是必须的。但好消息是,MobileNet这种轻量网络对量化非常友好,精度损失通常控制在1%以内。

2.5 DSP:被低估的"老黄牛"

DSP(数字信号处理器)在嵌入式领域其实很常见。它擅长做滤波、FFT、音频编解码这类信号处理任务。

有些芯片厂商会把DSP也用来跑AI。比如高通骁龙系列,它的Hexagon DSP就可以用来加速神经网络。但说实话,DSP的AI加速能力不如NPU,它更适合处理一些轻量级的、对延迟要求高的任务。

我记得有一次做语音唤醒项目,模型只有20KB,用DSP跑只需要0.5ms,功耗几乎可以忽略。这种情况下,用NPU反而有点"杀鸡用牛刀"了。

2.6 如何为MobileNet选择计算单元?

好了,理论说完了,我们来点实际的。假设你手里有一块芯片,集成了CPU、GPU、NPU和DSP,你的MobileNet该交给谁?

我总结了一个简单的决策流程:

  1. 先看功耗预算:如果整机功耗限制在1W以内,直接选NPU。别犹豫。
  2. 再看实时性要求:如果需要30fps以上的推理速度,GPU或NPU是唯二选择。
  3. 然后看模型大小:如果模型小于100KB,可以考虑DSP。否则,NPU优先。
  4. 最后看开发难度:NPU通常需要厂商提供的SDK,学习成本高一些。GPU可以用CUDA或OpenCL,生态更成熟。
我的经验: 在实际项目中,我通常会做一个"三路对比"——同一个模型分别跑在CPU、GPU、NPU上,记录推理时间和功耗。然后根据产品需求做取舍。数据说话,比拍脑袋靠谱得多。

2.7 一个实际案例:MobileNet V2在RK3588上的选择

RK3588是瑞芯微的一款旗舰芯片,集成了四核Cortex-A76 CPU、Mali-G610 GPU、以及一个6TOPS的NPU。

我在一个边缘计算盒子里用过这颗芯片。当时跑MobileNet V2(输入224x224,INT8量化),结果如下:

计算单元 推理时间 功耗 帧率
CPU (A76单核) 85ms 2.5W 11fps
GPU (OpenCL) 18ms 4.2W 55fps
NPU (RKNN) 6ms 0.8W 166fps

看到差距了吧?NPU的推理速度是CPU的14倍,功耗却只有三分之一。所以在这个项目里,我毫不犹豫地选择了NPU。

但注意,NPU也有它的局限性。比如它不支持某些自定义算子,需要手动实现。还有就是调试起来比较麻烦,不像CPU上可以用GDB单步调试。

2.8 总结

选计算单元这件事,没有绝对的"最好",只有"最合适"。

我的建议是:能用NPU就用NPU,它是目前嵌入式AI推理的最优解。如果NPU不支持某些算子,再考虑GPU兜底。CPU和DSP,留给控制逻辑和信号处理就好。

下一章,我们会深入NPU的编程模型,聊聊如何把MobileNet的每一层都映射到NPU上。到时候你会看到,NPU的编程方式和CPU完全不同——嗯,那又是另一个故事了。