1. NPU基础认知:什么是NPU、NPU与CPU/GPU的区别、NPU的典型架构
大家好,我是你们这堂课的老朋友。咱们直接切入正题——NPU。很多同学第一次听到这个词,觉得很高大上。其实说白了,NPU就是专门为神经网络计算设计的“特种兵”。
我刚开始接触AI芯片那会儿,也犯过迷糊。CPU、GPU、NPU,到底谁干谁的活?今天这一讲,咱们就把这事儿彻底捋清楚。
1.1 什么是NPU?
NPU,全称Neural Processing Unit,神经网络处理单元。它不是通用处理器,而是“专用加速器”。
你想想看,神经网络里最频繁的操作是什么?卷积、矩阵乘、激活函数。这些操作重复性高、并行度大。CPU处理这些,就像用菜刀切西瓜——能切,但效率低。GPU好一些,像用砍刀。而NPU呢?它是一台专门设计的“西瓜切片机”。
核心定义:NPU是一种针对神经网络计算范式(特别是矩阵乘法和卷积运算)进行硬件优化的专用处理器。它通过大规模并行计算单元和高效的数据流架构,实现比CPU/GPU更高的能效比。
我在项目中遇到过不少团队,拿着GPU跑推理,功耗压不下去。换成NPU之后,同样的模型,功耗直接降了一个数量级。这就是专用硬件的魅力。
1.2 NPU与CPU/GPU的区别
咱们用一张表来对比,这样最直观。
| 维度 | CPU | GPU | NPU |
|---|---|---|---|
| 设计哲学 | 通用计算,低延迟 | 大规模并行,高吞吐 | 神经网络专用,极致能效 |
| 核心单元 | ALU + 控制 + 缓存 | 大量CUDA Core/流处理器 | 脉动阵列 + 数据流控制 |
| 并行方式 | 指令级并行(ILP) | 线程级并行(TLP) | 数据级并行(DLP) + 流水线 |
| 典型应用 | 操作系统、逻辑控制 | 图形渲染、训练 | 推理、端侧AI |
| 能效比(TOPS/W) | 低(<0.1) | 中(0.1-1) | 高(1-10+) |
嗯,这里要注意。GPU虽然也能跑神经网络,但它本质上是个“图形卡”。它的架构是为渲染优化的,不是为矩阵乘优化的。NPU则不同,它的每一条数据通路、每一个控制逻辑,都是为神经网络量身定做的。
我建议你在选型时,先问自己一个问题:我的模型是跑训练还是跑推理?训练用GPU,推理用NPU,这是目前业界的主流做法。
1.3 NPU的典型架构
NPU的架构设计,核心就两个关键词:脉动阵列和数据流。
1.3.1 脉动阵列(Systolic Array)
脉动阵列是什么?说白了,就是一堆计算单元排成矩阵,数据像血液一样在阵列里“脉动”流动。每个单元只做一件事:乘加运算。
为什么会这样设计?你想想看,矩阵乘法C = A × B,本质上是大量的乘加操作。如果让数据在阵列里有序流动,就能最大限度地复用数据,减少访存次数。
我曾经在一个项目中,把卷积操作映射到脉动阵列上。刚开始没注意数据流动的方向,结果性能惨不忍睹。后来调整了数据排布方式,吞吐量直接翻了三倍。嗯,这就是“数据流”的重要性。
个人经验:脉动阵列的尺寸(比如16×16、32×32)直接决定了算力上限。但更大的阵列也意味着更高的功耗和面积。选型时,要结合你的模型大小来权衡。
下面我用一张SVG图,帮你直观理解脉动阵列的工作原理。
你看这张图。数据A从左向右流动,数据B从上向下流动。每个PE(处理单元)收到A和B后,执行一次乘加运算,然后把结果传递给下一个PE。这样,整个阵列就像一个流水线工厂,吞吐量极高。
1.3.2 数据流架构
数据流架构,说白了就是“数据驱动计算”。传统CPU是“指令驱动”——指令告诉CPU去拿数据、做运算。NPU则是“数据驱动”——数据准备好了,计算单元自动开始工作。
我习惯把数据流分为三种类型:
- 权重固定(Weight Stationary):权重数据留在PE里不动,输入数据流过来。适合卷积层。
- 输入固定(Input Stationary):输入数据留在PE里,权重数据流过来。适合全连接层。
- 输出固定(Output Stationary):部分和留在PE里,不断累加。适合深度卷积。
避坑指南:我曾经在一个项目中,默认使用了权重固定的数据流,结果模型里全是全连接层,性能反而比GPU还差。后来改成输入固定,才把性能拉回来。所以,数据流的选择一定要结合你的模型结构来定。
1.4 小结
这一讲,咱们把NPU的底牌翻了个底朝天。NPU不是万能的,但在神经网络推理这个赛道上,它确实是最优解。CPU负责“杂活”,GPU负责“重活”,NPU负责“专活”。
脉动阵列和数据流架构,是NPU的两大法宝。理解了它们,你就掌握了NPU性能调优的钥匙。
下一讲,咱们会深入算子映射,看看怎么把神经网络里的各种算子,高效地“塞”进NPU里。到时候,我会拿一个真实的模型案例,手把手带你走一遍。