部署與效率

flops

FLOPs(浮點運算次數)計算模型在一次前向傳遞中執行多少算術運算——一個與硬體無關的「做了多少數學」估計值。它是衡量模型運算成本的標準粗估,讓你能在真實晶片上跑任何東西之前,紙上比較不同架構(4 GFLOP 的模型對上 40 GFLOP 的模型)。

要計數,就清點每層的乘法與加法。一個常見的混淆來源是:許多論文其實回報的是 MACs(乘積累加運算),卻寬鬆地稱之為 FLOPs,而 1 MAC = 1 乘法 + 1 加法 = 2 FLOPs,所以兩者差了兩倍。一個卷積層約耗 H_out · W_out · C_out · C_in · k · k 個 MAC;一個 M×K 乘 K×N 矩陣的矩陣乘法耗 M · N · K 個 MAC。機器學習中的「FLOPs」幾乎總是指單次推論,且只計卷積與線性層中的乘加,忽略激活、正規化與資料搬移。

FLOPs 對實際延遲與能耗是個很差的預測指標,而了解原因很重要。真實速度取決於記憶體頻寬——由 roofline 模型中的算術強度(arithmetic intensity)刻畫——再加上平行度、核心效率與啟動額外開銷,而這些單純的運算計數都反映不出來。深度卷積的 FLOPs 極少,卻受記憶體限制、以低效率執行;兩個 FLOPs 完全相同的網路,實際時間可能差上數倍。請把 FLOPs 當作粗略的合理性檢查,而以實測的延遲與能耗作為真正依據。

務必確認回報的數字是 FLOPs 還是 MACs——兩者差 2 倍,無聲的不一致會讓跨論文比較出錯。並請記住 FLOPs 忽略了記憶體流量,而那通常才是真正的瓶頸。

又稱
FLOPsMACsmultiply-accumulates浮點運算次數