硬件基础:GPU架构、CPU推理与专用芯片

做推理加速,第一件事就是搞清楚你的代码到底跑在什么硬件上。我见过不少团队,模型调得飞起,一上生产环境就慢得像蜗牛——说白了,就是没摸透硬件的脾气。

这一章,我们聊聊三种主流推理硬件的底细:GPU、CPU,还有越来越火的NPU和TPU。

GPU架构:CUDA核心与Tensor Core

GPU一开始是为图形渲染设计的,后来发现它做并行计算特别猛。你想想看,一张显卡里有几千个计算单元,同时干活,这不就是深度学习最需要的吗?

但GPU内部不是铁板一块。我习惯把GPU的计算单元分成两类:CUDA核心和Tensor Core。

CUDA核心

CUDA核心是NVIDIA GPU的基础计算单元。每个核心能执行浮点运算、整数运算、逻辑判断等通用任务。一张A100显卡有6912个CUDA核心,听起来很吓人对吧?

不过要注意,这些核心是分组的。每32个核心组成一个Warp,Warp是GPU调度任务的最小单位。我曾经在项目里踩过一个坑:写了个小模型,batch size设成1,结果GPU利用率不到10%。为什么?因为一个Warp里32个核心,只有1个在干活,其他31个都在摸鱼。

避坑指南:我曾经因为没注意Warp对齐,导致推理延迟翻了一倍。记住,batch size最好是32的倍数,这样才能喂饱每个Warp。

Tensor Core

Tensor Core是NVIDIA从Volta架构开始加入的专用单元。它专门做矩阵乘法,一次能算一个4×4的小矩阵。别小看这个4×4,它背后是混合精度计算的革命。

举个例子,用CUDA核心做一次FP32的矩阵乘法,需要很多条指令。但Tensor Core用FP16输入、FP32累加,一次搞定。我在优化BERT推理时,把FP32换成FP16+Tensor Core,速度直接翻了3倍。

特性 CUDA核心 Tensor Core
主要用途 通用并行计算 矩阵乘法加速
精度支持 FP32/FP64/INT32 FP16/BF16/INT8/INT4
单次运算量 1个FMA 64个FMA(等效)
适用场景 激活函数、数据预处理 卷积、全连接层
我的建议:如果你的模型推理瓶颈在矩阵乘法(大部分情况都是),优先考虑用Tensor Core。但要注意,Tensor Core需要数据排布对齐,我一般用cuBLAS或cuDNN库来调用,手写kernel容易翻车。

显存带宽:推理的隐形瓶颈

很多人只盯着算力,却忽略了显存带宽。其实,推理时模型参数要从显存搬到计算单元,这个搬运过程往往比计算本身还慢。

我做过一个实验:把ResNet-50的权重从HBM2显存搬到SM上,花了大约2毫秒。而实际计算只用了0.5毫秒。也就是说,60%的时间都花在数据搬运上。

显存带宽取决于两个因素:显存频率和位宽。比如A100的HBM2e显存,带宽高达2TB/s。但注意,这是理论峰值,实际能跑到80%就不错了。

关键指标:推理延迟 ≈ 参数搬运时间 + 计算时间。当模型变大时,搬运时间占比会越来越高。这也是为什么模型量化(INT8/INT4)能大幅加速——参数变小了,搬运就快了。

CPU推理:别小看它

说到推理,很多人第一反应就是GPU。但CPU推理在某些场景下反而更合适。比如延迟要求不高的离线批处理,或者模型很小的边缘设备。

CPU推理的杀手锏是AVX指令集。AVX-512一次能处理16个FP32数,或者32个INT8数。虽然单核算力不如GPU,但胜在灵活——不需要显存搬运,数据就在L1/L2缓存里。

我记得有个项目,客户要求用纯CPU部署一个语音识别模型。一开始用FP32跑,延迟200ms,完全不行。后来换成INT8量化,加上AVX-512优化,延迟降到30ms。嗯,CPU的潜力其实很大。

对比维度 CPU推理 GPU推理
延迟 低(单请求) 高(需批量)
吞吐量 低 高
功耗 低 高
部署成本 低(通用服务器) 高(需专用显卡)
优化手段 AVX、MKL、ONNX Runtime CUDA、TensorRT、Tensor Core
我的经验:如果模型参数量小于100M,且batch size=1,CPU推理往往比GPU更快。因为省去了PCIe传输和GPU启动开销。我建议你手头备一个CPU推理方案,关键时刻能救命。

NPU与TPU:专用芯片的崛起

GPU虽然强,但它毕竟是通用芯片。为了深度学习专门设计的芯片,效率更高。这就是NPU(神经网络处理器)和TPU(张量处理器)的由来。

NPU:手机里的推理引擎

NPU最早出现在手机上。高通骁龙的Hexagon、华为的达芬奇架构、苹果的Neural Engine,都是NPU。它们的特点是:极低功耗、极高能效。

我测试过骁龙8 Gen2的NPU,跑MobileNet V3,功耗只有0.5W,而GPU要2W。对于手机这种电池敏感的设备,NPU是唯一选择。

但NPU也有局限:算子支持有限。不是所有模型都能在NPU上跑。我遇到过好几次,模型里有个自定义算子,NPU不支持,只能回退到GPU或CPU。

TPU:Google的杀手锏

TPU是Google为自家服务设计的。从TPU v1到TPU v4,每一代都在提升矩阵乘法的效率。TPU的核心是脉动阵列——一种专门做矩阵乘法的硬件结构。

TPU v4有4096个矩阵乘法单元,每个单元一次能算128×128的矩阵。这是什么概念?跑一个BERT Large,TPU v4比A100快2倍,功耗还低30%。

不过TPU不是你想买就能买的。它通过Google Cloud提供,按小时收费。我建议你如果做大规模部署,可以考虑TPU;但如果是小团队做实验,GPU更灵活。

注意:NPU和TPU的编程模型和GPU完全不同。NPU通常用厂商提供的SDK(如Qualcomm SNPE、华为HiAI),TPU用XLA编译器。迁移成本不低,我建议你评估好再入坑。

知识体系总览

下面这张图,把本章的核心知识点串起来了。你可以把它当作一个快速参考。

推理硬件知识体系 推理硬件 GPU CPU NPU/TPU CUDA核心 Tensor Core 显存带宽 AVX指令集 MKL库 ONNX Runtime 脉动阵列 低功耗设计 XLA编译器 选择建议: 大模型批量推理 → GPU | 小模型低延迟 → CPU | 移动端/云端专用 → NPU/TPU

这张图把三种硬件的核心组件和适用场景都标出来了。你可以在做技术选型时,把它当作一个快速检查清单。

小结

硬件是推理加速的基石。GPU靠CUDA核心和Tensor Core打天下,CPU靠AVX和缓存吃饭,NPU/TPU则用专用架构追求极致能效。没有最好的硬件,只有最合适的。

我个人习惯,在开始任何推理优化项目前,先花一天时间摸透硬件规格。看看算力、带宽、缓存大小,再决定优化方向。这一步省了,后面可能要走很多弯路。