1. NPU基础认知:什么是NPU、NPU与GPU/CPU的区别、NPU的典型架构
各位同学好,我是你们的老王。在芯片行业摸爬滚打了十几年,从CPU到GPU再到NPU,我算是把这几类处理器都折腾了个遍。今天咱们聊聊NPU——这个近几年火得不行的人工智能芯片。
说实话,我第一次接触NPU是在2016年左右。那时候AI刚火起来,大家都在用GPU跑神经网络。我当时就在想:GPU虽然并行能力强,但毕竟是为图形渲染设计的,跑AI总有点「杀鸡用牛刀」的感觉。后来看到NPU的出现,我才觉得——嗯,这才是AI该有的样子。
1.1 什么是NPU?
NPU,全称Neural Processing Unit,神经网络处理器。说白了,就是专门为神经网络计算设计的芯片。
你可能会问:CPU也能跑神经网络,GPU也能跑,为什么还要专门搞个NPU?
我举个例子你就明白了。CPU就像个全能选手,什么活都能干,但干AI这种重复性极高的活,效率不高。GPU像个大力士,一次能扛很多活,但能耗高。NPU呢?它像个专业工匠,只干一件事——矩阵乘法和卷积运算,但干得又快又省电。
核心定义:NPU是一种专门针对神经网络推理和训练任务设计的处理器,通过硬件级别的优化,实现高吞吐、低延迟、低功耗的AI计算。
1.2 NPU与GPU/CPU的区别
我习惯用一个比喻来理解这三者的区别:
- CPU:像大学教授,什么都会,但一次只能处理一两件事
- GPU:像流水线工人,能同时处理很多简单任务,但每个任务都不复杂
- NPU:像专业技师,只做一件事,但做得又快又好
咱们用表格来对比一下:
| 特性 | CPU | GPU | NPU |
|---|---|---|---|
| 设计目标 | 通用计算 | 图形渲染 | 神经网络 |
| 计算单元 | 几个到几十个核心 | 数千个CUDA核心 | 脉动阵列/乘加阵列 |
| 数据流 | 控制流驱动 | SIMT(单指令多线程) | 数据流驱动 |
| 典型功耗 | 15-150W | 150-450W | 1-50W(移动端) |
| 适用场景 | 操作系统、数据库 | 游戏、科学计算 | AI推理、模型部署 |
我在项目中遇到过这样一个场景:用CPU跑一个MobileNet的推理,一帧图像要200ms;换成GPU,降到20ms,但功耗飙到80W;最后用NPU,5ms搞定,功耗才2W。你想想看,在手机或者嵌入式设备上,这个差距意味着什么?
1.3 NPU的典型架构
NPU的架构设计,核心就两个关键词:脉动阵列和数据流。
1.3.1 脉动阵列(Systolic Array)
脉动阵列是NPU最核心的计算单元。我第一次看到这个架构时,觉得它特别像「多米诺骨牌」——数据像水流一样在阵列中流动,每个计算单元只做简单的乘加操作,但整个阵列协同起来,效率惊人。
下面我用一张SVG图来展示脉动阵列的工作原理:
这张图展示的是一个3x3的脉动阵列。每个PE(Processing Element)就是一个乘加单元。数据从左边流入(特征图),从上边流入(权重),每个PE做完乘加后,把结果往下传。这种设计的好处是什么?
- 数据复用率高:同一个数据可以被多个PE重复使用
- 局部性极好:数据只在相邻PE间流动,不用频繁访问全局内存
- 扩展性强:想要更大算力?把阵列做大就行
避坑指南:我曾经在一个项目中,把脉动阵列设计得特别大,想着算力越高越好。结果发现数据搬运成了瓶颈,大部分PE都在空转。后来我学乖了——阵列大小要和片上缓存、带宽匹配,不是越大越好。
1.3.2 数据流(Dataflow)
数据流是NPU的另一个核心概念。说白了,就是数据在芯片里怎么「流」。
我习惯把数据流分为三种类型:
- 权重固定(Weight Stationary):权重数据留在PE里不动,输入数据流过来。适合卷积层,因为权重复用率高。
- 输入固定(Input Stationary):输入数据留在PE里,权重流过来。适合全连接层。
- 输出固定(Output Stationary):部分和结果留在PE里,不断累加。适合深度可分离卷积。
你可能会问:哪种最好?
说实话,没有绝对的好坏。我在实际项目中,通常会根据网络结构动态切换数据流模式。比如MobileNet的深度可分离卷积,用输出固定模式;而ResNet的标准卷积,用权重固定模式更合适。
1.4 小结
这一章我们聊了NPU是什么,它和CPU、GPU的区别,以及它的核心架构——脉动阵列和数据流。这些都是后面章节的基础,一定要理解透。
我个人觉得,理解NPU最好的方式就是动手。下一章我们会搭建一个简单的NPU模拟器,到时候你就能亲手感受数据在脉动阵列中流动的感觉了。
注意:NPU虽然强大,但不是万能的。如果你的算法里有很多分支判断、动态形状,NPU反而可能不如CPU。选型时一定要看场景。
想要更多资料,联系可可