JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

效率問題:成本究竟花在哪裡

在動用任何技巧之前,先學會看清時間、記憶體與能量花在哪——並建立一套讓模型變便宜的方法分類圖。

為何效率如今是頭等大事

只能在資料中心執行的模型,多數人一輩子碰不到。真正有用的 AI 前緣不斷往使用者靠近:在筆電上摘要郵件的 transformer、在五美元微控制器上辨識標籤的視覺模型、在飛機上離線作答的助理。這種往使用者移動的趨勢,就是我們所說的裝置端推論(on-device inference)——而它取決於三個無法迴避的物理預算:運算記憶體能量,而非單純的巧思。

第一冊教你這些模型「是什麼」,這個系列則是讓它們「裝得下」。同一個 70 億參數的網路,在 16 位元精度下需要 14 GB 記憶體,卻必須塞進手機的 4 GB 預算、耗電低於一瓦、在一秒內回應。彌合這 4 倍到 100 倍的落差,正是高效 AI 這整個學門的核心,而它幾乎從來不是單一招式——而是一整疊技巧,每一個削去不同的成本。

M_{\text{mem}} = N_{\text{params}}\times b = 7\times10^{9}\times 2\,\text{B} = 14\,\text{GB}

权重内存就是参数量乘以每个数的字节数——一个 70 亿参数的模型在 16 位精度下就要占用 14 GB。

看懂帳單:運算、記憶體與頻寬

最有用的單一習慣,就是去問一個工作負載受哪種資源「限制」。訓練與大批次服務往往是運算受限(compute-bound):瓶頸在加速器的數學運算單元。但單一使用者的逐字生成,通常是記憶體頻寬受限(memory-bandwidth-bound):每產生一個新詞元,都得把整個權重矩陣從記憶體串流出來,相較之下數學運算微不足道。這就是為何推論成本無法只用 FLOPs 衡量,也是為何延遲與吞吐量能用截然不同的技術各自改善。

t \approx \max\!\left(\frac{\text{bytes}}{\text{BW}},\ \frac{\text{FLOPs}}{C}\right),\qquad \text{compute-bound}\iff \underbrace{\frac{\text{FLOPs}}{\text{bytes}}}_{\text{arithmetic intensity}} > \frac{C}{\text{BW}}

屋顶线诊断:在算术强度超过设备的算力与带宽之比之前,工作负载都受内存带宽限制。

讓模型變便宜的方法總覽

本系列幾乎每種方法都歸入四大家族。在鑽進任何一個角落之前,先把整張地圖記在腦中會很有幫助:

  1. 每個數字用更少位元——量化(quantization)保留每個權重,但用 8、4 甚至約 1.6 位元而非 16 位元儲存,按比例削減記憶體與頻寬。
  2. 直接移除數字——剪枝(pruning)與稀疏化刪去貢獻甚少的權重、通道或整顆注意力頭,讓網路做更少的工作。
  3. 用更精簡的方式表達同一批數字——低秩分解(low-rank factorization)把大矩陣換成兩個瘦長矩陣的乘積;蒸餾則把大模型重新表達為小模型。
  4. 只在需要處花費運算——提前退出、動態深度與詞元合併,在執行時對容易的輸入跳過運算,而非事先縮小模型。

這些家族可以彼此疊加。一個量產的邊緣模型,可能先蒸餾、再剪枝、再做 4 位元量化,最後用提前退出來服務——每一步彼此獨立,節省效果相乘。真正的功夫在於排序這些步驟,並知道每一步何時不再划算。這正是接下來四篇導覽的旅程。

誠實地度量:唯一重要的指標

壓縮論文喜歡報告參數量與理論上的 FLOP 削減,但在真實裝置上,兩者都可能完全沒讓實際時間變快。一個 50% 稀疏的模型不會更快,除非硬體有能「利用」這種稀疏的核心(kernel);對 GPU 而言,非結構化剪枝後的矩陣依舊是稠密矩陣。因此這門學問的紀律,是在目標裝置上做端到端量測:每秒詞元數、首字延遲、峰值記憶體、每次查詢的焦耳數——而非你論文剛好在優化的那個代理指標。

\min_{m\in\mathcal{M}}\ \operatorname{Cost}(m)\quad \text{s.t.}\quad \operatorname{Acc}(m)\ge \operatorname{Acc}_{0}

把效率表述为一个约束问题:在保持高于你真正在意的精度预算的前提下,最小化真实成本。