arithmetic intensity
每搬移一個 byte 執行的運算數
定位運算相對於硬體 roofline 轉折點的位置。
2
把模型讀成一連串運算、表示法與記憶體傳輸;它的架構會預示推論時哪一項資源先變得稀缺。
9 分鐘閱讀
印刷頁: 39–70
生成式模型由大型神經網路組合而成,推論效能會跟著這些網路要求的工作形態改變。語言模型先把提示轉成 token,在 prefill 階段處理所有輸入位置,把可重用的 attention 狀態放進 KV cache,再於 decode 階段每次 forward pass 產生一個 token。prefill 通常受運算能力限制,主要決定 time to first token(TTFT);decode 通常受記憶體限制,主要決定 tokens per second(TPS)。diffusion 式影像與影片系統則會反覆細化整個 latent 表示,通常受運算能力限制。arithmetic intensity 是運算次數與記憶體流量的比值,可把不同工作放到硬體 roofline 上,解釋為什麼同一種最佳化不可能加速所有階段。理解架構,能把效能調校從經驗法則轉為依瓶頸選擇的工程。
token 輸入先流向 Transformer 工作再分支:prefill 路徑越過 roofline 轉折點後進入 compute-bound 區;decode 路徑則在轉折點下方進入 memory-bound 區。
模型不是一整塊均勻的浮點運算。線性層持有語言模型的大部分 weights;attention 會搬移並組合序列狀態;稀疏 expert 改變實際啟用哪些參數;媒體處理管線則在許多 denoising 步驟中呼叫多個元件模型。這些選擇決定 weights 讀取、中間張量、cache 成長、parallelism 機會,以及哪些近似方法可能傷害品質。若最佳化瞄準錯誤資源,最昂貴的路徑可能完全不變。
prefill 和 decode 的分界尤其重要,因為同一個請求會在執行途中更換瓶頸。更快的矩陣運算有助於運算密集的提示階段;逐 token 生成則主要受記憶體搬移與重用支配。若只看一個平均值,就會掩蓋 TTFT 與 TPS 為何對 batch 大小、硬體、kernel 和放置策略有不同反應。有用的推論模型必須保留階段,而不能把它們壓平。
推理時應先看執行形態,再看模型或 accelerator 品牌。模型設定檔會揭露層數、hidden dimension、attention head、詞彙表,以及 feed-forward 層採密集或 expert routing;請求資料則揭露序列長度、batch、輸出長度與媒體維度。兩者合起來,便能預測最大的張量和會反覆執行的迴圈。接著由硬體提供運算與頻寬上限,實作則決定工作能多接近上限。這個順序能跨越產品世代。它也解釋為什麼同一架構的不同變體可以承接相同 inference engine 支援,卻因尺寸不同而需要不同容量;也解釋為什麼換成更新 GPU,仍不會消除隨 context 或 latent volume 快速成長的演算法形態。若只從品牌或峰值規格開始,團隊容易把理論上更快的硬體配給實際受記憶體流量限制的 decode,或用為 token 生成設計的技巧處理全 latent denoising。從形態出發,才能先列出需要驗證的資源假設,再選擇真正可能改變瓶頸的模型、kernel 與硬體。
閱讀效能時,可以使用一條四段鏈。第一段辨識語意運算,例如 attention、feed-forward 層、expert routing 或 denoising;第二段辨識執行形態,是完整序列矩陣工作、單 token 向量工作、稀疏 routing,或整個 latent 的更新;第三段透過 byte、運算數、cache 狀態與重複次數,找出受到壓力的資源;最後把該資源連回產品指標,例如第一份輸出延遲、token 節奏、影像完成時間、影片完成時間、容量或成本。跳過任何一段都容易產生照抄式調校:看到別人使用某個 kernel 就直接套用,卻沒有確認自己的矩陣形狀和資料流;看到更高峰值運算量就換硬體,卻沒有確認記憶體是否才是上限。沿著整條鏈推理,能讓每個改動都有可檢驗假設,也能說清楚某項技術何時可以跨 modality 移植,何時因執行迴圈根本不同而失效。這條鏈還能協助溝通:模型研究者描述運算,系統工程師描述資源,產品團隊描述可見結果,三者用同一請求與量測互相對齊;變更後再用相同輸入與工作負載切片重新量測,才能確認改善不是資料差異或測試條件漂移造成。
arithmetic intensity = 浮點運算數 ÷ 搬移的 byte 數每搬移一個 byte 執行的運算數
定位運算相對於硬體 roofline 轉折點的位置。
每秒尖峰運算數 ÷ 每秒尖峰 byte 數
針對選定精度,提供記憶體限制和運算限制之間的比較點。
TTFT 的主要來源
追蹤處理提示位置與建立 KV cache 的運算密集工作。
TPS 的主要來源
追蹤記憶體密集階段中反覆讀取 weights 與逐 token 生成。
狀態隨活躍序列長度成長
顯示保留 attention 狀態造成的記憶體容量與搬移壓力。
步驟數 × 每步 forward pass 數
把影像或影片延遲連結到迴圈長度、guidance、latent 大小與模型成本。
FlashAttention 類 fused kernel 能移除多餘的記憶體流量而不改變模型輸出,PagedAttention 則管理碎片化的 KV cache 區塊;兩者都保留原本 attention 規則與成長速度。sliding-window、gated、linear、compressed 或 multi-latent attention 會改變工作本身,可能以品質換取較佳時間或空間複雜度。Mamba 等 state-space 架構以遞迴狀態更新取代 attention,混合模型則結合兩類區塊。
密集模型會以可預期方式使用所有參數。MoE 能降低單一 token 的有效參數量,卻讓 routing、expert 放置與多樣化 batch 請求的記憶體使用及多 GPU 執行更複雜。
KV cache 避免重複計算先前 key 與 value,讓 decode attention 成為可行的增量工作。它也會占用持續成長的 GPU 記憶體,促成分頁、放置與重用策略。
更多 diffusion 步驟會反覆細化影像,也會增加 forward pass。少步數一致性模型或蒸餾模型可以大幅加速,但品質下降明顯;對延遲敏感的即時特效仍可能適用。
更新完整時空 latent 能限制逐幀漂移,並讓 frame 跨時間互相注意,卻固定短輸出長度並要求極昂貴 attention。自回歸元件嘗試放鬆這項成本,又不回到失控的誤差累積。
單一請求的 decode arithmetic intensity 偏低。batching 以同一次 weights 載入完成更多工作,讓運算更接近 compute-bound,但也會改變延遲、cache 需求,以及哪些 expert 被啟用。
印刷頁 41–42
介紹神經模型、transformer、自回歸與反覆 denoising。
印刷頁 42–46
建立表示、層、matmul 與非線性 activation 的直覺。
印刷頁 46–49
追蹤 token 準備、prefill、decode、logits、取樣與停止。
印刷頁 49–53
解釋 transformer block、attention 輸入、head、mask 與 KV cache。
印刷頁 53–54
說明稀疏 expert routing 和生產 batch 下的行為。
印刷頁 55–59
整理影像管線、latent diffusion、guidance、架構成長與少步數模型。
印刷頁 59–61
解釋時空 latent 生成、全域 attention 與資源限制。
印刷頁 61–63
定義 arithmetic intensity 與 roofline 上從 memory-bound 轉為 compute-bound 的位置。
印刷頁 63–67
從工作量與記憶體流量推導 prefill、decode、影像與影片瓶頸。
印刷頁 67–70
概覽 attention 實作、分頁、近似方法與 state-space 替代架構。