為什麼 MobileNet ShuffleNet 在理論上速度很快,工程上並沒有特別大的提公升?

時間 2021-05-12 05:26:03

1樓:王二的石鍋拌飯

Google的MobileNet與曠世的ShuffleNet網路單元都是深度可分離卷積,題主所說的沒有提公升,是在GPU上的表現,這兩個網路本來就是針對移動端cpu設計的,我們知道在理論上深度可分離卷積是減少了十分之一的計算量,但是相應的層數增多了,在cpu是一般的計算是採用序列計算的方式,層數的增多換來的較高的快取命中率,就會加速計算速度,但是在gpu上,採用平行計算,有足夠大的視訊記憶體,並不會有提公升

2樓:跌宕的月光

對於GPU上跑的演算法而言,主要有兩個因素制約著:

1、記憶體(GPU板卡上的 DDR)頻寬

2、運算量

相比CPU,GPU通常有數千核心,Cache平均分配到每乙個核心上就相對少很多。因此記憶體頻寬很影響效能。

有乙個比較粗略的估計方法:如果需要讀取儲存的資料量是O(N^p),計算量是O(N^q),如果p>=q,那麼基本上就是memory bounded演算法,好好調好記憶體load store方式是加速的核心。

如果p至於mobilenet,計算量雖然小了乙個數量級,但需要讀取的資料量沒有發生特別大的變化,因此在GPU上看不到巨大的提公升。

3樓:次元碎片

正如上面大佬提到的,這些網路的計算強度較小,也就是相同訪存量之下計算量較小,因此容易陷入記憶體訪問瓶頸。

統計記憶體訪問的方法我也挺想知道,能想到的是cpu模擬器執行這些模型,獲取trace資訊。

至於解決方式,自然是緩解訪存瓶頸,具體實現跟架構相關。基本思路是利用區域性儲存,增加資料的復用,減少對外存的訪問。

4樓:章佳傑

一句話解釋:因為 CPU 和 GPU 的計算方式不一樣

CPU 讀取資料不是每次都從記憶體(RAM)拿的,會有快取,快取的讀取速度比記憶體快很多很多。兩個時間複雜度一樣的演算法,如果乙個快取命中率高,那可能實際跑起來比另乙個快上十倍二十倍也不稀奇。尤其是計算卷積這種包含大量迴圈的操作,快取命中率顯得尤為重要。

而在 GPU 上資料傳輸讀取的方式是不一樣的,所謂的快取命中也是完全不一樣的概念。粗略講在小卷積核卷積這種操作情況下是不受快取影響的(相對 CPU 而言)。

mobilenet 就是利用了分離的技巧,用更多的層數換取了更高的快取命中率,所以對 CPU 計算更友好。為什麼要這樣?從名字看出來,mobilenet 是希望提高移動端計算的速度,目前為止移動端神經網路推理大多數情況下還是使用 CPU 進行。

雖然很多手機廠商大吹特吹什麼 NPU,畢竟還是不夠成熟,廣大第三方開發者很難直接使用。那 GPU 呢?桌面端有 CUDA,cuDNN 給你鋪好路了,移動端可啥都沒有啊,連 OpenGL ES 3.

0 支援都零零落落,還指望有神經網路相關的驅動?做夢呢。所以這就是為什麼 Google 研究出各種神奇吊炸天的演算法,也只用在自家的 pixel 手機上,畢竟自家的手機,硬體好統一,驅動能跟上。

插個題外話,這兩天又到校招季,知乎上也多了很多提問。有抱怨的,有忿忿不平的,有覺得做演算法為什麼要懂工程的。那這個問題就是乙個例子了。

如果你知道一些計算機底層的機制,自然知道為什麼,知道為什麼也就能動手把你的模型改造成適合移動端計算的形式。相比於整個替換 backbone 重新訓練,也許只要改改某些層就能讓計算速度獲得極大提公升。

舉個簡單栗子,兩個矩陣相乘,簡單直白的三重迴圈就搞定,時間複雜度 O(mnk),可是同樣是三重迴圈,實際執行速度可以差好多倍。簡單調換一下三重迴圈的內外順序,就可以做到。是不是很神奇?

我打賭現在大批做演算法的同學,聽都沒聽過這種事情。這在以前,可是學計算機要掌握的基礎知識啊。

我一直說一句話,演算法工程師也是工程師,工程師是解決問題的。模型結果可以很酷炫,但用不到產品中去,不能給公司帶來收益,那都是花架子。

我作為面試官,如果候選人拿出手機給我演示了乙個他的模型使用的 demo,哪怕網路模型本身毫無創新點,只要在手機上流暢執行起來,我就會毫不猶豫給出乙個高分。

再插個題外話,同樣的模型,只要調整一些區域性順序就可以大幅提高運算速度。有人也許會不屑,知道了又有什麼用?吶,這就是你和陳天奇這樣的大佬的差距了。

看看大佬的 TVM,就是在做這樣一件事呀。tvm

5樓:馬屁哥哥

建議看一下這篇文章,詳細講了Roofline Model,用計算強度的概念來定量分析。

簡單的說就是,MobileNet在GPU上達不到GPU計算強度的上限,記憶體交換速度(頻寬)成為了瓶頸。在CPU上可以MobileNet可以達到上限,所以mobilenet在cpu上會有優勢。

為什麼要重男輕女,為什麼?

Stunk 簡單說說國內重男輕女的假象 嫁出去的女兒潑出去的水 這是一句俗話,深入人心 現代社會,物質生產跟上來了,女兒們開始反哺原生家庭了,於是也出現了農村地區殺男嬰的故事 先說說古代為何 重男輕女 因為女兒不顧原生家庭 在物質匱乏的古代,生存本來就是一件難事,讓女人來顧家是不可能的 怎麼得出這個...

為什麼那麼焦慮?為什麼那麼勢利?為什麼那麼急於成功?

個人感覺最重要的是人在社會中的安全感。其實真不是每個人都那麼地渴望成功,而且成功的定義本來就是多種多樣的。但在中國,如果你沒有達到廣泛定義上的 成功 你可能會有以下的結果 你可能在城市中會隨時沒有安身之所,你可能會遭受不公但投訴無門,你的父母至親可能患病也得不到最基本救助,你的孩子可能得不到平等的教...

我為什麼是我?為什麼?

主角戲 馬克思說過,人是所有社會關係的總和,所以首先,你作為人來說,你只是你周圍所有關係的總和,你的偏執,你的瘋狂,你的愛情,你的孝順,你的所有人生觀,價值觀,世界觀,宇宙觀,形成了你。但是你錯誤的把這些當成了你,其實這些都是人的錯誤認識,心 的本體,也就是能生萬物,能生萬法的這個東西沒有被發現之前...