扫码打开虎嗅APP
本文来自微信公众号: 歪睿老哥 ,作者:歪睿老哥,原文标题:《写给技术人的深度学习芯片加速器指南:从 GPU 到 TPU 再到 FPGA》
故事是这样的。
前两天在AI芯片群里看到一个问题,有人问:大模型推理到底卡在哪里。
问题描述挺详细的,说推理阶段,尤其是token by token生成的时候,延迟高得离谱。
评论区有一群人在吵,有人说"上更大内存",有人说"换更硬的芯片",有人说"优化算法"。
吵了半天,没一个说对。
后来我花了一周时间,把一篇60页的综述论文啃了一遍。论文标题叫《Hardware Acceleration for Neural Networks:A Comprehensive Survey》,作者是一群做硬件加速的研究人员,内容涵盖了ANN、CNN、RNN到Transformer的完整硬件加速方案。

看完之后,我发现那帮人最大的问题不是不够专业,而是根本没搞清楚一个最基本的东西。
大模型推理慢,不是缺算力。
是内存带宽不够,是数据搬运太慢,是架构设计没跟上算法的演进。
这篇文章,我想把这个综述的核心内容,用人话讲清楚。
先从一个简单的问题开始。
如果CPU能跑深度学习,为什么还需要GPU、TPU、NPU这些专用芯片?
答案是:因为矩阵运算的本质,是高度并行的。
一个典型的深度学习模型,每次前向传播都要做大量矩阵乘法。一个7B参数的模型,每次推理涉及至少几十次矩阵乘法操作。每次矩阵乘法的维度可能是4096×4096,甚至更大。
如果这些操作串行执行,算一次可能需要几分钟。但如果并行执行,用专门设计的硬件,可以把计算密度和吞吐量提升几十倍、几百倍。
这就是专用加速器的核心价值。
但问题来了:不同的神经网络架构,计算模式完全不同。
全连接层的矩阵乘法,是稠密的、规则的计算,适合通用矩阵乘法引擎。
卷积层的计算,有空间局部性,同一个卷积核要滑动应用到输入特征的多个位置,适合流水线和空间并行。
循环神经网络的计算,有严格的时序依赖,每一步的计算结果会影响下一步,难以并行。
Transformer的计算,注意力机制的复杂度是二次方的,自回归生成的延迟又受限于KV cache的读写带宽。
所以,没有一种加速器能通吃所有模型。每种架构,都有最适合的硬件设计。
下面我逐个讲。
计算模式
ANN的核心操作是矩阵乘法(GEMM),也就是General Matrix-Matrix Multiplication。
一个全连接层的计算可以表示为:
output=W@input+bias
其中W是权重矩阵,input是输入向量,bias是偏置。

这个计算的特点是高度规则、计算密集。每个输入神经元都要和权重矩阵的每一行做点积,每个点积都是一系列乘加操作的累加。
所以ANN加速器的核心设计目标是:最大化矩阵乘法的吞吐量,同时最小化内存访问。

GPU上的ANN加速
GPU加速ANN的方式,核心思路是让数据复用最大化。
具体来说,有几个关键技术:
Tiling(分块)
权重矩阵和激活值太大了,一次性加载到GPU显存再算,带宽根本吃不消。所以要把数据分成小块(tiles),每次只加载需要的数据到寄存器或shared memory,反复利用。
比如一个4096×4096的矩阵乘法,如果分块成64×64的tiles,每次只加载64×64的权重和64×64的激活值,就能在芯片内反复利用这些数据,大幅减少DRAM访问。
Fusion(算子融合)
传统做法是矩阵乘法算完,结果写到全局显存,然后下一个激活函数再从全局显存读出来算。这样每个中间结果都要经过一次显存读写。
融合的做法是把激活函数、归一化等操作直接嵌入到矩阵乘法的epilogue里,结果存在寄存器里,根本不写入显存。
这一刀切下去,显存带宽压力直接减半。
混合精度训练
训练阶段用FP16或BF16做计算,但累加用更高精度(FP32),这样吞吐量翻倍的同时,数值稳定性也不会崩。
推理阶段更猛,INT8量化能把权重和激活值压缩到1/4的精度,吞吐量直接提升4倍。前提是精度损失在可接受范围内。
TPU/NPU上的ANN加速
TPU和NPU的设计理念,和GPU不太一样。
GPU的核心是灵活。它有CUDA核心、tensor core、各种内存层级,能跑各种模型,什么都能算。
NPU的核心是效率。它的硬件是为特定计算模式量身定制的,比如systolic array(脉动阵列),专门为矩阵乘法设计。
脉动阵列的工作原理有点复杂,简单说就是数据像流水线一样在阵列中流动,每个处理单元同时接收输入数据,执行乘加操作,然后把部分结果传递给下一个单元。这种设计能实现计算和数据流的完美匹配,几乎没有多余的内存访问。
NPU的关键挑战在于编译器和调度。因为硬件是固定的,所以必须在编译期就把计算图切分成适合硬件执行的tile,安排好数据在SRAM中的复用,才能让阵列保持100%忙碌。
ASIC上的ANN加速
ASIC是专用集成电路,硬件完全定制。
对于ANN来说,ASIC的设计思路是去掉所有不必要的灵活性。
GPU有指令集、有调度器、有复杂的控制逻辑,这些都是为了灵活而存在的。但ANN的计算模式太固定了,大部分时间都在跑矩阵乘法,其他操作占比很小。
所以ASIC可以硬连线一些固定的矩阵引擎,去掉调度开销,去掉指令_fetch_,甚至去掉浮点单元,直接用定点数做计算。
这种设计能实现比GPU高几十倍的能效比,代价是灵活性几乎为零。
FPGA上的ANN加速
FPGA的优势在于可重构。
对于ANN来说,FPGA的设计思路是空间流水线。
把矩阵乘法映射到硬件上,设计一个固定数据流,每个周期推进部分和的计算,避免中间结果写入DRAM。
关键是确定性延迟。只要输入维度固定,FPGA的延迟就是固定的,这对实时推理场景很重要。
计算模式
CNN的核心操作是卷积。
卷积和矩阵乘法的不同在于空间局部性。同一个卷积核要滑动应用到输入特征的多个位置,相邻输出的输入窗口有大量重叠。
这意味着权重可以被反复利用,而且输入数据也有很好的空间局部性。
硬件加速器的设计目标就是把这种局部性挖掘到极致。

GPU上的CNN加速
GPU加速CNN的核心技术是Winograd变换和Im2Col优化。
Im2Col是把输入特征图展开成矩阵,把卷积操作转化为矩阵乘法。然后GPU可以用高度优化的GEMM内核来执行。
Winograd变换是另一种思路,通过数学变换减少乘法操作的次数。一个3×3的卷积,传统做法需要9次乘法和8次加法。Winograd只需要4次乘法。
但代价是增加了加法运算和数据转换的开销。所以实际效果要看数据量和硬件架构。

ASIC上的CNN加速
CNN的ASIC设计,经典案例是Eyeriss。
Eyeriss的核心理念是行驻留映射(row-stationary mapping)。
具体做法是让输入特征的一个"行"在计算过程中驻留在本地缓冲区,权重和输出部分和则在阵列中流动。这样能最大化数据复用,最小化DRAM访问。
关键设计是层次化的缓冲和片上互连,确保数据在正确的时间出现在正确的位置,以维持数据流。
计算模式
RNN和ANN、CNN最大的不同在于时序依赖。
RNN的隐藏状态在每一步都会更新,并且影响下一步的计算。这意味着RNN难以并行化,每一步都必须等上一步的结果。
这导致RNN的加速方向不是追求吞吐量,而是降低单步延迟。

关键技术
Gate Fusion(门融合)
LSTM和GRU有多个门(遗忘门、输入门、输出门等),每个门都是一个矩阵乘法加激活函数。传统的做法是每个门独立执行,中间结果写入显存再读回来。

融合的做法是把所有门操作融合成一个内核,中间结果存在寄存器或shared memory里,避免显存往返。
On-chip State Buffering(片上状态缓冲)
RNN的隐藏状态每一步都要读写,如果每次都要访问DRAM,带宽会成为瓶颈。
好的设计是把隐藏状态和权重缓存在SRAM里,每一步只需要在内部传递,不需要访问外部内存。
实际瓶颈
RNN的实际瓶颈往往不是MAC吞吐量,而是软件栈的调度效率。
每次kernel launch的开销、不同timestep之间的同步开销,都比计算本身更耗时。
所以RNN加速的核心是减少内核数量、减少内存访问、保持循环紧密。
五、Transformer和LLM加速器:当前最复杂的挑战
为什么Transformer最难加速
Transformer的计算模式是三者中最复杂的。
它包含密集矩阵乘法(QKV投影、MLP块)和带宽密集型注意力机制,而且推理阶段有自回归生成的额外开销。
具体来说,LLM推理分为两个阶段:
Prefill(预填充):一次性处理整个prompt,计算密集,适合批量处理。
Decode(解码):每次只生成一个token,需要读取/写入KV cache,计算量小但内存访问量大。

Decode阶段是瓶颈。每个token的生成,需要读取整个KV cache,执行一个小矩阵乘法。对于7B模型,KV cache可能有几GB的数据,每次生成一个token都要读这么多数据。
这就是为什么大模型推理的瓶颈不是算力,而是内存带宽。
GPU上的LLM加速

GPU加速LLM的核心技术:
IO-aware Attention(IO感知注意力)
传统注意力机制要把整个注意力矩阵计算出来,然后做softmax。IO-aware的做法是分块计算,避免一次性把整个矩阵加载到内存。
KV Cache管理和分页
KV cache的增长会导致显存耗尽,影响并发。分页技术可以把KV cache分散存储,像操作系统的虚拟内存一样管理。
Speculative Decoding(推测解码)
用小模型预测几个token,然后大模型只验证这些预测。这样每次大模型推理可以生成多个token,减少端到端延迟。
ASIC/FPGA和专用推理加速器
专用LLM推理加速器的设计思路是优化token级延迟和能效。
核心挑战是在MAC吞吐量和内存带宽之间做平衡。
如果只优化MAC,不做内存带宽优化,那么decode阶段就会因为KV cache读取而stall。
如果只优化内存,不做MAC优化,那么prefill阶段就不会充分利用硬件。

所以好的设计是全局系统效率优化:内存provisioning、cache管理、控制开销最小化,缺一不可。
看完这个综述,我最大的感受是:硬件加速器的发展,本质上是算法演进的结果。
ANN时代,计算模式简单,矩阵乘法是核心,加速器设计围绕GEMM展开。
CNN时代,引入了空间局部性,加速器设计开始利用数据复用和空间并行。
RNN时代,时序依赖成为瓶颈,加速器设计转向降低延迟和内存访问。
Transformer时代,注意力机制和自回归生成带来了全新的挑战,加速器设计必须同时优化计算密度、内存带宽、cache管理和调度策略。
算法变了,硬件必须跟着变。变慢了,就被淘汰。
所以,未来的加速器设计,一定会更加定制化、更加系统化。不再是通用芯片的简单优化,而是算法、硬件、软件栈的全局协同设计。
以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~
谢谢你看我的文章,我们,下次再见。
附:论文引用
本文内容基于以下论文:
Hardware Acceleration for Neural Networks:A Comprehensive Survey
主要技术点涵盖:
-ANN加速:Tiling、Fusion、Mixed Precision
-CNN加速:Winograd、Im2Col、Systolic Array
-RNN加速:Gate Fusion、On-chip State Buffering
-Transformer加速:IO-aware Attention、KV Cache Management、Speculative Decoding
-硬件平台:GPU、TPU/NPU、ASIC、FPGA