只要你開始看本地大模型或顯卡推理速度測試,很快就會遇到一堆縮寫:FA、pp512、tg128、Q4_0。它們看起來都像是效能指標,但如果沒有上下文,確實很容易看得一頭霧水。
例如你可能會看到這樣一行:
|
|
再往下看,又會看到像這樣的欄位:
|
|
如果不把這些詞拆開理解,你很難真正看懂這類速度測試到底在測什麼,也很難知道兩張不同顯示卡的成績到底該怎麼比。
這篇文章不打算討論「哪張卡更值得買」,而是專門把顯卡推理速度測試裡最常見的幾個指標拆開講清楚。
先看整行標題到底在說什麼
像 CUDA Scoreboard for Llama 2 7B, Q4_0 (no FA) 這樣一行,其實已經把測試背景交代得差不多了。
它至少包含四層資訊:
CUDA:說明跑分是在 NVIDIA GPU 的 CUDA 路徑上完成的Llama 2 7B:說明測試對象是Llama 2的7B參數版本Q4_0:說明模型用了 4-bit 量化格式no FA:說明這次測試關閉了Flash Attention
也就是說,這種標題的完整意思通常是:
「在 NVIDIA 顯示卡上,執行某個量化版本的大模型,並測量它在特定推理路徑下的速度表現。」
FA 是什麼:Flash Attention
這裡的 FA,指的是 Flash Attention。
它是大模型推理和訓練中非常關鍵的一類加速技術,主要目標是優化注意力機制的計算方式。因為在 Transformer 模型裡,注意力計算本來就是最耗時、最吃顯存頻寬的部分之一。
傳統注意力實作的一個問題是:
- 需要頻繁讀寫顯存
- 中間結果很多
- 資料會在顯存和片上快取之間來回搬運
- 上下文一長,開銷會非常明顯
Flash Attention 做的事情,可以簡單理解成:
- 重新組織計算順序
- 減少中間結果落到顯存的次數
- 讓更多操作留在更快的快取裡完成
所以它的典型效果通常有三點:
- 更快
- 更省顯存
- 在數學上和普通注意力等價,不是「犧牲精度換速度」
這也是為什麼今天很多推理框架、訓練框架都把它當成非常重要的優化項。
no FA 是什麼意思
既然 FA 是 Flash 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 的數值經常會非常高,看起來甚至高得有點誇張。
所以如果你看到:
|
|
不要驚訝,這測的是「輸入處理吞吐量」,不是模型一邊一邊吐字的速度。
tg128 t/s 是什麼意思
tg128 一般指的是:
Text Generation 128 tokens
它測的是模型連續生成 128 token 時的平均生成速度,單位同樣是 t/s。
這個指標更接近我們平時對「模型回答快不快」的直覺感受,因為它真的在測輸出階段。
但它和 pp512 最大的不同在於:文本生成通常是自回歸的。
簡單說就是:
- 要先算出第一個 token
- 才能繼續算第二個 token
- 再繼續算第三個 token
所以這個階段沒法像輸入處理那樣大規模並行,速度天然會慢很多。
這也是為什麼你經常會看到:
pp512是上萬t/stg128卻只有幾百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. 看的是輸入速度還是輸出速度
pp512 和 tg128 分別在測不同階段。一個更像「讀題速度」,一個更像「回答速度」。
4. 關注的是吞吐還是體感
如果你更在意長提示詞載入速度,pp512 更有參考價值;如果你更在意模型回答時的流暢程度,tg128 往往更貼近真實體感。
一個更實用的理解方式
如果要把這些指標壓縮成一句最容易記住的話,可以這樣理解:
Q4_0:模型被壓縮成了 4-bit 量化版本FA:是不是啟用了 Flash Attention 加速pp512:處理 512 token 輸入時有多快tg128:生成 128 token 輸出時有多快t/s:速度單位,每秒多少 token
只要先把這五件事分清楚,再看類似的 CUDA Scoreboard 時,就更容易判斷「這個分數到底是在測什麼」。
結語
很多 GPU 跑分表看起來複雜,不是因為指標本身特別神祕,而是因為它把模型、量化、優化項和不同階段的吞吐都壓縮進了很短的幾行縮寫裡。
一旦把 FA、Q4_0、pp512、tg128 這些詞拆開,你會發現這類 scoreboard 其實並不難讀。
真正重要的,不是只記住某張卡跑了多少分,而是知道:
- 這個分數是在什麼模型下測的
- 有沒有開關鍵優化
- 它測的是輸入,還是輸出
- 它更反映算力,還是更接近實際生成體驗
這樣你以後再看類似跑分表時,就更容易判斷這些結果分別對應什麼測試條件和性能含義。