前兩天在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 的方式,核心思路是讓數據復用最大化。
具體來說,有幾個關鍵技術:
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 的設計理念,和 GPU 不太一樣。
GPU 的核心是靈活。它有 CUDA 核心、tensor core、各種內存層級,能跑各種模型,什么都能算。
NPU 的核心是效率。它的硬件是為特定計算模式量身定制的,比如 systolic array(脈動陣列),專門為矩陣乘法設計。
脈動陣列的工作原理有點復雜,簡單說就是數據像流水線一樣在陣列中流動,每個處理單元同時接收輸入數據,執行乘加操作,然后把部分結果傳遞給下一個單元。這種設計能實現計算和數據流的完美匹配,幾乎沒有多余的內存訪問。
NPU 的關鍵挑戰在于編譯器和調度。因為硬件是固定的,所以必須在編譯期就把計算圖切分成適合硬件執行的 tile,安排好數據在 SRAM 中的復用,才能讓陣列保持 100% 忙碌。
ASIC 是專用集成電路,硬件完全定制。
對于 ANN 來說,ASIC 的設計思路是去掉所有不必要的靈活性。
GPU 有指令集、有調度器、有復雜的控制邏輯,這些都是為了靈活而存在的。但 ANN 的計算模式太固定了,大部分時間都在跑矩陣乘法,其他操作占比很小。
所以 ASIC 可以硬連線一些固定的矩陣引擎,去掉調度開銷,去掉指令_fetch_,甚至去掉浮點單元,直接用定點數做計算。
這種設計能實現比 GPU 高幾十倍的能效比,代價是靈活性幾乎為零。
FPGA 的優勢在于可重構。
對于 ANN 來說,FPGA 的設計思路是空間流水線。
把矩陣乘法映射到硬件上,設計一個固定數據流,每個周期推進部分和的計算,避免中間結果寫入 DRAM。
關鍵是確定性延遲。只要輸入維度固定,FPGA 的延遲就是固定的,這對實時推理場景很重要。
CNN 的核心操作是卷積。
卷積和矩陣乘法的不同在于空間局部性。同一個卷積核要滑動應用到輸入特征的多個位置,相鄰輸出的輸入窗口有大量重疊。
這意味著權重可以被反復利用,而且輸入數據也有很好的空間局部性。
硬件加速器的設計目標就是把這種局部性挖掘到極致。

GPU 加速 CNN 的核心技術是Winograd 變換和Im2Col 優化。
Im2Col 是把輸入特征圖展開成矩陣,把卷積操作轉化為矩陣乘法。然后 GPU 可以用高度優化的 GEMM 內核來執行。
Winograd 變換是另一種思路,通過數學變換減少乘法操作的次數。一個 3×3 的卷積,傳統做法需要 9 次乘法和 8 次加法。Winograd 只需要 4 次乘法。
但代價是增加了加法運算和數據轉換的開銷。所以實際效果要看數據量和硬件架構。

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 的計算模式是三者中最復雜的。
它包含密集矩陣乘法(QKV 投影、MLP 塊)和帶寬密集型注意力機制,而且推理階段有自回歸生成的額外開銷。
具體來說,LLM 推理分為兩個階段:
Prefill(預填充):一次性處理整個 prompt,計算密集,適合批量處理。
Decode(解碼):每次只生成一個 token,需要讀取/寫入 KV cache,計算量小但內存訪問量大。

Decode 階段是瓶頸。每個 token 的生成,需要讀取整個 KV cache,執行一個小矩陣乘法。對于 7B 模型,KV cache 可能有幾 GB 的數據,每次生成一個 token 都要讀這么多數據。
這就是為什么大模型推理的瓶頸不是算力,而是內存帶寬。

GPU 加速 LLM 的核心技術:
IO-aware Attention(IO 感知注意力)
傳統注意力機制要把整個注意力矩陣計算出來,然后做 softmax。IO-aware 的做法是分塊計算,避免一次性把整個矩陣加載到內存。
KV Cache 管理和分頁
KV cache 的增長會導致顯存耗盡,影響并發。分頁技術可以把 KV cache 分散存儲,像操作系統的虛擬內存一樣管理。
Speculative Decoding(推測解碼)
用小模型預測幾個 token,然后大模型只驗證這些預測。這樣每次大模型推理可以生成多個 token,減少端到端延遲。
專用 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