當前位置:
首頁 > 知識 > Roofline Model 與深度學習模型的性能分析

Roofline Model 與深度學習模型的性能分析

本文原載於知乎專欄——機器學習筆記。AI研習社已獲得文章作者 Michael Yuan 轉載授權。

最近在不同的計算平台上驗證幾種經典深度學習模型的訓練和預測性能時,經常遇到模型的實際測試性能表現和自己計算出的複雜度並不完全吻合的現象,令人十分困惑。機緣巧合聽了 Momenta 的技術分享後,我意識到問題的答案其實就在於 Roof-line Model 這個理論,於是認真研究了一下相關論文。現在把自己的心得總結出來,分享給大家。

在真實世界中,任何模型(例如 VGG / MobileNet 等)都必須依賴於具體的計算平台(例如 CPU / GPU / ASIC 等)才能展現自己的實力。此時,模型和計算平台的 "默契程度" 會決定模型的實際表現。Roofline Model 提出了使用 Operational Intensity(計算強度)進行定量分析的方法,並給出了模型在計算平台上所能達到理論計算性能上限公式。

有了 Roofline Model,我就可以知道模型在機器上能跑多快嘍~做夢都會笑出聲來~

1. 計算平台的兩個指標:算力與帶寬

算力:也稱為計算平台的性能上限,指的是一個計算平台傾盡全力每秒鐘所能完成的浮點運算數。單位是 FLOP/s。

帶寬:也即計算平台的帶寬上限,指的是一個計算平台傾盡全力每秒所能完成的內存交換量。單位是Byte/s。

計算強度上限兩個指標相除即可得到計算平台的計算強度上限。它描述的是在這個計算平台上,單位內存交換最多用來進行多少次計算。單位是FLOP/Byte。

註:這裡所說的 「內存」 是廣義上的內存。對於 CPU 計算平台而言指的就是真正的內存;而對於 GPU 計算平台指的則是顯存。


2. 模型的兩個指標:計算量 與 訪存量

計算量:指的是輸入單個樣本(對於 CNN 而言就是一張圖像),模型進行一次完整的前向傳播所發生的浮點運算個數,也即模型的時間複雜度。單位是FLOPS。其中卷積層的計算量公式如下(具體分析詳見我的另一篇文章:http://suo.im/465ECp)

訪存量:指的是輸入單個樣本,模型完成一次前向傳播過程中所發生的內存交換總量,也即模型的空間複雜度。在理想情況下(即不考慮片上緩存),模型的訪存量就是模型各層權重參數的內存佔用(Kernel Mem)與每層所輸出的特徵圖的內存佔用(Output Mem)之和。單位是Byte。由於數據類型通常為float32 ,因此需要乘以四。

模型的計算強度由計算量除以訪存量就可以得到模型的計算強度,它表示此模型在計算過程中,每Byte內存交換到底用於進行多少次浮點運算。單位是FLOP/Byte。可以看到,模計算強度越大,其內存使用效率越高。

模型的理論性能我們最關心的指標,即模型在計算平台上所能達到的每秒浮點運算次數(理論值)。單位是 FLOP/s。下面我們即將介紹的 Roof-line Model 給出的就是計算這個指標的方法。終於可以進入正題了。


3. Roof-line Model

其實 Roof-line Model 說的是很簡單的一件事:模型在一個計算平台的限制下,到底能達到多快的浮點計算速度。更具體的來說,Roof-line Model 解決的,是 「計算量為 A 且訪存量為 B 的模型在算力為 C 且帶寬為 D 的計算平台所能達到的理論性能上限 E 是多少」 這個問題。

3.1 Roof-line 的形態

所謂 「Roof-line」,指的就是由計算平台的算力和帶寬上限這兩個參數所決定的 「屋頂」 形態,如下圖所示。

算力決定 「屋頂」 的高度(綠色線段)

帶寬決定 「房檐」 的斜率(紅色線段)


3.2 Roof-line 劃分出的兩個瓶頸區域

計算瓶頸區域 Compute-Bound

不管模型的計算強度有多大,它的理論性能最大只能等於計算平台的算力。當模型的計算強度大於計算平台的計算強度上限時,模型在當前計算平台處於 Compute-Bound狀態,即模型的理論性能受到計算平台算力的限制,無法與計算強度成正比。但這其實並不是一件壞事,因為從充分利用計算平台算力的角度上看,此時模型已經 100% 的利用了計算平台的全部算力。可見,計算平台的算力越高,模型進入計算瓶頸區域後的理論性能也就越大。


帶寬瓶頸區域 Memory-Bound

當模型的計算強度小於計算平台的計算強度上限時,由於此時模型位於 「房檐」 區間,因此模型理論性能的大小完全由計算平台的帶寬上限(房檐的斜率)以及模型自身的計算強度所決定,因此這時候就稱模型處於 Memory-Bound 狀態。可見,在模型處於帶寬瓶頸區間的前提下,計算平台的帶寬越大(房檐越陡),或者模型的計算強度越大,模型的理論性能可呈線性增長。


4. 模型實例分析

下面讓我們先分別給出 VGG16 和 MobileNet 的計算量和訪存量統計表格,然後再用 Roof-line Model 理論來對比分析一下下。很有意思哦!


4.1 VGG16

VGG-16

VGG 可以說是在計算強度上登峰造極的一個模型系列,簡約不簡單。以 VGG16 為例,從上表可以看到,僅包含一次前向傳播的計算量就達到了 15GFLOPs,如果包含反向傳播,則需要再乘二。訪存量則是 Kernel Mem 和 Output Mem 之和再乘以四,大約是 600MB。因此 VGG16 的計算強度就是 25 FLOP/Byte。

另外如果把模型頂端那兩個碩大無比的全鏈接層(其參數量占整個模型的 80% 以上)替換為 GAP 以降低訪存量(事實證明這樣修改並不會影響準確率),那麼它的實際計算強度可以再提升四倍以上,簡直突破天際。

註:以上分析僅限於前向傳播計算過程(即模型預測)。如果涵蓋反向傳播(即模型訓練),則計算量和訪存量都要考慮梯度更新的具體方式,例如計算 Momentum 幾個變數時引入的時間和空間複雜度。


4.2 MobileNet

MobileNet V1

MobileNet 是以輕量著稱的小網路代表(最近新出了 V2 版本,分析見這裡:https://zhuanlan.zhihu.com/p/33075914)。相比簡單而龐大的 VGG16 結構,MobileNet 的網路更為細長,加入了大量的 BN,每一層都通過 DW + PW 的方式降低了計算量,同時也付出了計算效率低的代價。從上面超級長的表格就能有一個感性的的認識。

MobileNet 的計算量只有大約 0.5 GFLOPS(VGG16 則是 15 GFLOPS),其訪存量也只有 19 MB(VGG16 則是 600 MB)。這樣看上去確實輕量了很多,但是由於計算量和訪存量都下降了,而且相比之下計算量下降的更厲害,因此 MobileNet 的計算強度只有 7 FLOP/Byte。


4.3 兩個模型在 1080Ti 上的對比

作為性價比之王的 1080Ti,我們的兩個模型 VGG16 和 MobileNet 的性能將分別位於這個計算平台 Roof-line Model 的什麼位置呢?

1080Ti 的算力

1080Ti 的帶寬

因此 1080Ti 計算平台的最大計算強度

VGG16 的計算強度

MobileNet 的計算強度

Roof-line Model : VGG16 vs MobileNet

由上圖可以非常清晰的看到,

MobileNet 處於Memory-Bound區域。在 1080Ti 上的理論性能只有 3.3 TFLOP/s。

VGG16 剛好邁入Compute-Bound區域。完全利用 1080Ti 的全部算力

雖然 MobileNet 進行前向傳播的計算量只有 VGG 的三十分之一,但是由於計算平台的帶寬限制,它不能像 VGG 那樣完全利用 1080Ti 這個計算平台的全部算力,因此它在 1080Ti 上每秒鐘可以進行的浮點運算數只能達到 VGG 的 30%,因此理論上的運行速度大約是 VGG 的十倍(實際上會因為各方面其他因素的限制而使得差別更小)。

MobileNet 這類小型網路更適合運行在嵌入式平台之上。首先這類輕量級的計算平台根本就放不下也運行不起來 VGG 這種大模型。更重要的是,由於這類計算平台本身的計算強度上限就很低,可能比 MobileNet 的計算強度還要小,因此 MobileNet 運行在這類計算平台上的時候,它就不再位於 Memory-Bound 區域,而是農奴翻身把歌唱的進入了 Compute-Bound 區域,此時 MobileNet 和 VGG16 一樣可以充分利用計算平台的算力,而且內存消耗和計算量都小了一兩個數量級,同時分類準確率只下降了 1%,所以大家才願意用它。

所以說,屠龍時用屠龍刀,日常吃雞用小刀就可以了,否則只會弄巧成拙。


5. 結語

本文系統的介紹了:

計算平台的兩個指標:算力和帶寬。

模型的兩個指標:計算量和訪存量。

使用 Roof-line Model 分析模型在計算平台上所能達到的理論計算性能,並分析模型在計算平台上的兩種互斥狀態:計算受限狀態和帶寬受限狀態。

以 VGG16 和 MobileNet 為例,在 1080Ti 計算平台上分析對比它們的計算性能。

歡迎大家指正。

Michael Yuan:卷積神經網路的複雜度分http://suo.im/465ECp

Momenta:Paper Reading | 讓深度學習更高效運行的兩個視角http://suo.im/1G3SqZ

https://zhuanlan.zhihu.com/p/34204282

NLP 工程師入門實踐班:基於深度學習的自然語言處理

三大模塊,五大應用,手把手快速入門 NLP

海外博士講師,豐富項目經驗

演算法 + 實踐,搭配典型行業應用

隨到隨學,專業社群,講師在線答疑

新人福利

關注 AI 研習社(okweiwu),回復1領取

【超過 1000G 神經網路 / AI / 大數據,教程,論文】

Quora Question Pairs 競賽冠軍經驗分享:採用 4 層堆疊,經典模型比較給力

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 AI研習社 的精彩文章:

YOLO,一種簡易快捷的目標檢測演算法
DeepMind 推出分散式訓練框架 IMPALA,開啟智能體訓練新時代

TAG:AI研習社 |