為何效率如今是頭等大事
只能在資料中心執行的模型,多數人一輩子碰不到。真正有用的 AI 前緣不斷往使用者靠近:在筆電上摘要郵件的 transformer、在五美元微控制器上辨識標籤的視覺模型、在飛機上離線作答的助理。這種往使用者移動的趨勢,就是我們所說的裝置端推論(on-device inference)——而它取決於三個無法迴避的物理預算:運算、記憶體與能量,而非單純的巧思。
第一冊教你這些模型「是什麼」,這個系列則是讓它們「裝得下」。同一個 70 億參數的網路,在 16 位元精度下需要 14 GB 記憶體,卻必須塞進手機的 4 GB 預算、耗電低於一瓦、在一秒內回應。彌合這 4 倍到 100 倍的落差,正是高效 AI 這整個學門的核心,而它幾乎從來不是單一招式——而是一整疊技巧,每一個削去不同的成本。
权重内存就是参数量乘以每个数的字节数——一个 70 亿参数的模型在 16 位精度下就要占用 14 GB。
看懂帳單:運算、記憶體與頻寬
最有用的單一習慣,就是去問一個工作負載受哪種資源「限制」。訓練與大批次服務往往是運算受限(compute-bound):瓶頸在加速器的數學運算單元。但單一使用者的逐字生成,通常是記憶體頻寬受限(memory-bandwidth-bound):每產生一個新詞元,都得把整個權重矩陣從記憶體串流出來,相較之下數學運算微不足道。這就是為何推論成本無法只用 FLOPs 衡量,也是為何延遲與吞吐量能用截然不同的技術各自改善。
屋顶线诊断:在算术强度超过设备的算力与带宽之比之前,工作负载都受内存带宽限制。
讓模型變便宜的方法總覽
本系列幾乎每種方法都歸入四大家族。在鑽進任何一個角落之前,先把整張地圖記在腦中會很有幫助:
- 每個數字用更少位元——量化(quantization)保留每個權重,但用 8、4 甚至約 1.6 位元而非 16 位元儲存,按比例削減記憶體與頻寬。
- 直接移除數字——剪枝(pruning)與稀疏化刪去貢獻甚少的權重、通道或整顆注意力頭,讓網路做更少的工作。
- 用更精簡的方式表達同一批數字——低秩分解(low-rank factorization)把大矩陣換成兩個瘦長矩陣的乘積;蒸餾則把大模型重新表達為小模型。
- 只在需要處花費運算——提前退出、動態深度與詞元合併,在執行時對容易的輸入跳過運算,而非事先縮小模型。
這些家族可以彼此疊加。一個量產的邊緣模型,可能先蒸餾、再剪枝、再做 4 位元量化,最後用提前退出來服務——每一步彼此獨立,節省效果相乘。真正的功夫在於排序這些步驟,並知道每一步何時不再划算。這正是接下來四篇導覽的旅程。
誠實地度量:唯一重要的指標
壓縮論文喜歡報告參數量與理論上的 FLOP 削減,但在真實裝置上,兩者都可能完全沒讓實際時間變快。一個 50% 稀疏的模型不會更快,除非硬體有能「利用」這種稀疏的核心(kernel);對 GPU 而言,非結構化剪枝後的矩陣依舊是稠密矩陣。因此這門學問的紀律,是在目標裝置上做端到端量測:每秒詞元數、首字延遲、峰值記憶體、每次查詢的焦耳數——而非你論文剛好在優化的那個代理指標。
把效率表述为一个约束问题:在保持高于你真正在意的精度预算的前提下,最小化真实成本。