顯卡推理速度測試的常用指標具體含義:FA、pp512、tg128、Q4_0 都是什麼意思

看顯卡推理速度測試時,經常會遇到 FA、pp512、tg128、Q4_0、t/s 這些指標。它們都和效能有關,但分別在測什麼、該怎麼理解,並不是每個人都清楚。這篇文章專門把這些常見指標拆開講明白。

只要你開始看本地大模型或顯卡推理速度測試,很快就會遇到一堆縮寫:FApp512tg128Q4_0。它們看起來都像是效能指標,但如果沒有上下文,確實很容易看得一頭霧水。

例如你可能會看到這樣一行:

1
CUDA Scoreboard for Llama 2 7B, Q4_0 (no FA)

再往下看,又會看到像這樣的欄位:

1
2
pp512 t/s
tg128 t/s

如果不把這些詞拆開理解,你很難真正看懂這類速度測試到底在測什麼,也很難知道兩張不同顯示卡的成績到底該怎麼比。

這篇文章不打算討論「哪張卡更值得買」,而是專門把顯卡推理速度測試裡最常見的幾個指標拆開講清楚。

先看整行標題到底在說什麼

CUDA Scoreboard for Llama 2 7B, Q4_0 (no FA) 這樣一行,其實已經把測試背景交代得差不多了。

它至少包含四層資訊:

  • CUDA:說明跑分是在 NVIDIA GPU 的 CUDA 路徑上完成的
  • Llama 2 7B:說明測試對象是 Llama 27B 參數版本
  • Q4_0:說明模型用了 4-bit 量化格式
  • no FA:說明這次測試關閉了 Flash Attention

也就是說,這種標題的完整意思通常是:

「在 NVIDIA 顯示卡上,執行某個量化版本的大模型,並測量它在特定推理路徑下的速度表現。」

FA 是什麼:Flash Attention

這裡的 FA,指的是 Flash Attention

它是大模型推理和訓練中非常關鍵的一類加速技術,主要目標是優化注意力機制的計算方式。因為在 Transformer 模型裡,注意力計算本來就是最耗時、最吃顯存頻寬的部分之一。

傳統注意力實作的一個問題是:

  • 需要頻繁讀寫顯存
  • 中間結果很多
  • 資料會在顯存和片上快取之間來回搬運
  • 上下文一長,開銷會非常明顯

Flash Attention 做的事情,可以簡單理解成:

  • 重新組織計算順序
  • 減少中間結果落到顯存的次數
  • 讓更多操作留在更快的快取裡完成

所以它的典型效果通常有三點:

  • 更快
  • 更省顯存
  • 在數學上和普通注意力等價,不是「犧牲精度換速度」

這也是為什麼今天很多推理框架、訓練框架都把它當成非常重要的優化項。

no FA 是什麼意思

既然 FAFlash Attention,那麼 no FA 就很好理解了:這次測試沒有啟用 Flash Attention

也就是說,跑分用的是更傳統的注意力實作。

之所以很多跑分表會特地把 no FA 標出來,通常是為了下面幾件事:

  • 做對照組,方便看出開啟 FA 後到底提升了多少
  • 相容某些不支援 FA 的硬體或軟體環境
  • 避免不同測試項混在一起,導致資料不可比

所以你看到 no FA 時,不要把它理解成「這張卡不行」,更準確的理解是:

「這個成績是在沒有開啟 Flash Attention 優化的前提下測出來的。」

Q4_0 是什麼:量化格式

Q4_0 指的是一種 4-bit 量化格式。

大模型原始權重通常不是這種低精度格式,直接載入時體積會非常大。量化做的事情,本質上就是把原本更高精度的權重壓縮成更低位寬的表示方式,讓模型更容易在消費級顯示卡上運行。

你可以先把它粗略理解成:

  • Q:Quantization,量化
  • 4:4-bit
  • _0:某一種具體量化方案的標識

它的重要意義在於:

  • 減少模型體積
  • 降低顯存需求
  • 讓本來裝不下的模型變得能跑起來

所以 Llama 2 7B, Q4_0 的意思,不是「一個普通的 7B 模型」,而是「一個已經經過 4-bit 量化壓縮的 7B 模型」。

pp512 t/s 是什麼意思

pp512 一般指的是:

Prompt Processing 512 tokens

它衡量的是模型處理輸入提示詞時的速度,單位通常是 t/s,也就是 tokens per second

這裡的 512,表示測試時輸入的提示詞長度是 512 token

這個指標測的不是「吐字速度」,而是模型在開始回答之前,對輸入內容做編碼和計算的速度。你可以把它理解成模型在「先把你說的話讀完」的階段有多快。

這個階段通常有一個很重要的特點:並行度比較高。

因為輸入序列可以成批處理,所以 GPU 在這個階段往往能把算力壓得很滿。也正因如此,pp512 的數值經常會非常高,看起來甚至高得有點誇張。

所以如果你看到:

1
pp512 ≈ 14000 t/s

不要驚訝,這測的是「輸入處理吞吐量」,不是模型一邊一邊吐字的速度。

tg128 t/s 是什麼意思

tg128 一般指的是:

Text Generation 128 tokens

它測的是模型連續生成 128 token 時的平均生成速度,單位同樣是 t/s

這個指標更接近我們平時對「模型回答快不快」的直覺感受,因為它真的在測輸出階段。

但它和 pp512 最大的不同在於:文本生成通常是自回歸的。

簡單說就是:

  • 要先算出第一個 token
  • 才能繼續算第二個 token
  • 再繼續算第三個 token

所以這個階段沒法像輸入處理那樣大規模並行,速度天然會慢很多。

這也是為什麼你經常會看到:

  • pp512 是上萬 t/s
  • tg128 卻只有幾百 t/s

這不是跑分出錯,而是它們本來就在測兩種完全不同的工作負載。

為什麼 pp512 和 tg128 會差這麼多

這是很多人第一次看 scoreboard 時最困惑的一點。

原因可以概括成一句話:

pp512 更像在測並行吞吐,tg128 更像在測逐 token 生成能力。`

再展開一點說:

  • 輸入階段更容易並行
  • 輸出階段更依賴逐步遞推
  • 生成階段通常更吃顯存頻寬和快取效率
  • 所以生成速度遠低於輸入處理速度是正常現象

也正因為這樣,很多時候兩張卡的表現會出現一種很有意思的情況:

  • pp512 上,一張卡更強
  • tg128 上,另一張卡反而略快

這並不矛盾。因為一個更偏算力峰值,一個更偏實際生成路徑下的頻寬和延遲表現。

t/s 到底怎麼理解

這裡的 t/s,就是 tokens per second

它表示模型每秒能處理或生成多少個 token。

但需要注意,token 不是「字」,也不是「單詞」,它是模型分詞器切出來的單位。不同模型、不同語言環境下,一個 token 對應的文本長度可能差別很大。

所以在實際閱讀跑分時,t/s 更適合用來做:

  • 同模型下不同顯示卡對比
  • 同環境下不同參數設定對比
  • 同一框架裡開啟或關閉某個優化項前後的對比

而不太適合直接拿來跨模型、跨框架、跨分詞器硬比「誰絕對更快」。

看 scoreboard 時,最該先抓住哪幾個點

如果你不想每次都被一堆縮寫淹沒,可以先抓這幾個核心問題:

1. 測試模型是什麼

比如是不是 Llama 2 7B,是不是同一個量化版本,例如 Q4_0。模型不同、量化不同,成績直接橫比意義不大。

2. 有沒有開啟關鍵優化

最常見的就是 FA。如果一個測試開了 Flash Attention,另一個沒開,那兩邊成績不能簡單直接對讀。

3. 看的是輸入速度還是輸出速度

pp512tg128 分別在測不同階段。一個更像「讀題速度」,一個更像「回答速度」。

4. 關注的是吞吐還是體感

如果你更在意長提示詞載入速度,pp512 更有參考價值;如果你更在意模型回答時的流暢程度,tg128 往往更貼近真實體感。

一個更實用的理解方式

如果要把這些指標壓縮成一句最容易記住的話,可以這樣理解:

  • Q4_0:模型被壓縮成了 4-bit 量化版本
  • FA:是不是啟用了 Flash Attention 加速
  • pp512:處理 512 token 輸入時有多快
  • tg128:生成 128 token 輸出時有多快
  • t/s:速度單位,每秒多少 token

只要先把這五件事分清楚,再看類似的 CUDA Scoreboard 時,就更容易判斷「這個分數到底是在測什麼」。

結語

很多 GPU 跑分表看起來複雜,不是因為指標本身特別神祕,而是因為它把模型、量化、優化項和不同階段的吞吐都壓縮進了很短的幾行縮寫裡。

一旦把 FAQ4_0pp512tg128 這些詞拆開,你會發現這類 scoreboard 其實並不難讀。

真正重要的,不是只記住某張卡跑了多少分,而是知道:

  • 這個分數是在什麼模型下測的
  • 有沒有開關鍵優化
  • 它測的是輸入,還是輸出
  • 它更反映算力,還是更接近實際生成體驗

這樣你以後再看類似跑分表時,就更容易判斷這些結果分別對應什麼測試條件和性能含義。

记录并分享
使用 Hugo 建立
主題 StackJimmy 設計