2、计算硬件基础:CPU、GPU、NPU、FPGA架构对比,计算单元与内存层次结构
各位同学,咱们今天聊聊硬件的底子。说实话,搞AI推理优化,不懂硬件就像开车不看仪表盘——能跑,但迟早要出问题。我这些年踩过的坑,十有八九都是对硬件特性理解不够深。
CPU、GPU、NPU、FPGA,这四种架构,说白了就是四种不同的“干活思路”。咱们一个一个拆开看。
2.1 CPU:通用计算的“老黄牛”
CPU的设计哲学是“什么活都能干,但一次干不了太多”。它的计算单元(Core)数量少,但每个核都很大、很复杂。为什么?因为它要处理分支预测、乱序执行、缓存一致性这些杂事。
计算单元特点:
- 少量大核(通常4-16个)
- 每个核有独立的L1/L2缓存
- 支持SIMD向量指令集(AVX、SSE等)
- 控制逻辑占比高(约40%面积)
内存层次结构:
| 层级 | 容量 | 延迟 | 带宽 |
|---|---|---|---|
| L1 Cache | 32KB-64KB | ~1ns | 极高 |
| L2 Cache | 256KB-1MB | ~5ns | 高 |
| L3 Cache | 8MB-32MB | ~15ns | 中 |
| DDR4/DDR5 | 8GB-128GB | ~100ns | 50-100GB/s |
核心观点:CPU适合做控制密集型和延迟敏感型任务。比如模型加载、数据预处理、小批量推理。我见过有人拿CPU跑大模型推理,结果内存带宽成了瓶颈,GPU闲着等数据——这就是典型的“木桶效应”。
2.2 GPU:并行计算的“肌肉男”
GPU的设计思路完全相反——它有很多小核,每个核能力一般,但数量多到吓人。NVIDIA的A100有6912个CUDA核心,H100更是达到了18432个。
计算单元特点:
- 大量小核(SM单元,每个SM包含多个CUDA core)
- SIMT执行模型(单指令多线程)
- 计算单元占比高(约70%面积)
- Tensor Core专门做矩阵乘法(AI推理的关键)
内存层次结构:
| 层级 | 容量 | 延迟 | 带宽 |
|---|---|---|---|
| L1/Shared Memory | 128KB-256KB per SM | ~5ns | 极高 |
| L2 Cache | 40MB-60MB | ~20ns | 高 |
| HBM2e/HBM3 | 40GB-80GB | ~200ns | 2-3.35TB/s |
个人经验:我建议你在做推理优化时,优先关注GPU的显存带宽。为什么?因为Transformer模型的计算强度(Compute Intensity)很高,但带宽往往才是真正的瓶颈。我曾经把一个模型的batch size从1调到32,吞吐量提升了8倍,但延迟只增加了2倍——这就是带宽利用率的威力。
2.3 NPU:专用推理的“特种兵”
NPU(神经网络处理器)是专门为AI推理设计的。它不像GPU那样“什么都能算”,而是把矩阵乘法、卷积、激活函数这些操作固化在硬件里。
计算单元特点:
- 脉动阵列(Systolic Array)——典型的NPU核心结构
- 支持INT8、INT4等低精度计算
- 硬件加速器(卷积引擎、池化单元)
- 片上SRAM容量大(几十MB)
内存层次结构:
| 层级 | 容量 | 延迟 | 带宽 |
|---|---|---|---|
| 片上SRAM | 8MB-64MB | ~2ns | 极高 |
| LPDDR5 | 8GB-16GB | ~80ns | 50-100GB/s |
避坑指南:我曾经在部署一个BERT模型到NPU时,发现推理速度比GPU还慢。排查了半天,原来是模型里有个LayerNorm操作,NPU没有硬件支持,只能用CPU模拟。嗯,这里要注意:NPU虽然快,但只对“它认识的操作”快。如果你的模型里有特殊算子,一定要提前确认硬件支持情况。
2.4 FPGA:可定制的“变形金刚”
FPGA介于CPU和ASIC之间。它没有固定的计算单元,而是由可编程的逻辑块(LUT、DSP、BRAM)组成。你可以“画”出你想要的硬件电路。
计算单元特点:
- LUT(查找表)——实现任意逻辑函数
- DSP Slice——专门做乘加运算
- BRAM(块RAM)——片上存储
- 可编程布线资源
内存层次结构:
| 层级 | 容量 | 延迟 | 带宽 |
|---|---|---|---|
| BRAM | 几MB | ~1ns | 极高 |
| URAM | 几十MB | ~3ns | 极高 |
| DDR4/HBM | 4GB-16GB | ~100ns | 50-500GB/s |
核心观点:FPGA的优势在于“低延迟”和“可定制”。你想想看,GPU的延迟通常在毫秒级,但FPGA可以做到微秒级。我做过一个实时语音识别的项目,GPU的延迟是15ms,换成FPGA后降到了2ms——这对实时交互来说是天壤之别。
2.5 四种架构的对比总结
咱们用一张表来对比一下,这样更直观:
| 特性 | CPU | GPU | NPU | FPGA |
|---|---|---|---|---|
| 计算单元 | 少量大核 | 大量小核 | 脉动阵列 | 可编程逻辑 |
| 并行度 | 低 | 高 | 极高 | 中高 |
| 灵活性 | 极高 | 高 | 低 | 极高 |
| 能效比 | 低 | 中 | 高 | 中高 |
| 延迟 | 低 | 中 | 低 | 极低 |
| 典型场景 | 控制、预处理 | 训练、批量推理 | 端侧推理 | 实时处理 |
我个人习惯在做推理优化时,先问自己三个问题:
- 延迟要求有多高?——微秒级选FPGA,毫秒级选GPU/NPU
- 模型是否固定?——固定模型选NPU,频繁更新选GPU
- 功耗预算多少?——低功耗选NPU/FPGA,高性能选GPU
一个小技巧:如果你在做边缘端部署,我建议优先考虑NPU。为什么?因为它的能效比是GPU的5-10倍。我做过一个智能摄像头项目,用GPU功耗是35W,换成NPU后只有5W,而且推理速度还快了20%。
好了,这一章的内容就到这里。下一章咱们会深入讲“计算强度与内存带宽的匹配”,这是做推理优化的核心数学基础。你想想看,如果连硬件怎么算、怎么存都不清楚,优化就只能是瞎蒙了。