1. 程式人生 > 其它 >曠視MegEngine是如何將31*31的大核卷積計算速度提高10倍的

曠視MegEngine是如何將31*31的大核卷積計算速度提高10倍的

2021年提議的Vision Transformer(VIT)已成為計算機視覺深度學習領域的一個有前途的研究主題。隨著VIT的研究變得更加深入,一些研究人員受到VIT的大型接收領域的啟發,將卷積網路也改造成具有更大的接收場來提高效率。根據有效的接收場(ERF)理論,ERF的大小與核心大小和模型深度的平方根成正比。這意味著通過堆疊層來實現大ERF的有效性不如增加捲積核心大小。因此,研究人員提出了包含大型卷積核心新的CNN結構。該網路可以達到與VIT相同的準確性。“大核心的cnn可以勝過小核心的cnn”這可能是今年來對於CNN研究最大的成果了。

核心帶來了更多的計算和引數

CNN中最常見的卷積核心大小是3x3、5x5、7x7。一般情況下如果卷積核心的大小超過9x9就將其確定為“大”。卷積核心的大小增加了n,引數數量和浮點操作(FLOPS)的數量將大約增加n平方。這就是研究人員在探索CNN新結構時首先不考慮大型核心卷積的主要原因。如下圖所示,逐通道卷積(又稱深度卷積)可以將FLOPs和引數數量減少到密集卷積的1/(輸入通道數量)。這就是為什麼大多數研究人員將大核卷積設計為深度卷積,這樣既可以獲得大核卷積的好處,又不需要大幅增加引數和FLOPs。

但是在相同的FLOPs限制下,研究人員發現,他們的大核深度卷積神經網路比傳統的網路執行得慢得多。

MegEngine團隊發現,通過適當的優化,當核心尺寸越來越大時,深度卷積幾乎不需要任何成本。本文就是對他們研究成果的介紹。

如何尋找大核卷積的優化空間?

為了回答這個問題,我們需要將Roofline 模型作為背景。如下圖所示,roofline模型用於描述在計算平臺的算力和頻寬的限制下,程式所能達到的理論效能上界。

roofline模型的示意圖,有三個重要概念:

  • 算力:每秒所完成的浮點運算次數,單位為FLOP/s或GFLOP/s
  • 頻寬:每秒所完成的記憶體讀取量,單位為Byte/s或GByte/s
  • 計算密度:又稱訪存比,是算力與頻寬的比值,即每位元組讀取所完成的浮點運算量,單位為FLOP/Byte

“roofline”是指TP對IM的圖的形狀。裝置的理論峰決定了“屋頂”的高度(藍線)。同時,“屋頂”(紅線)的斜率是裝置的最大訪問頻寬。這兩條彩色線的連線也分隔兩種型別的應用,計算結合和記憶體結合的瓶頸的分離。

當應用程式的計算密度I超過最大IM時,其效能只能達到計算裝置的理論峰值TP。應用程式的最大效能P顯然與計算密度I成正比。這種型別的應用程式稱為計算繫結。當應用程式的計算密度小於IM時,效能是由裝置的最大頻寬和計算密度確定的。這種型別的應用程式稱為記憶體繫結。與計算繫結方案相反,增加裝置頻寬或增加記憶體繫結應用程式的計算密度可能會導致應用程式效能的線性增加。

完整文章

https://avoid.overfit.cn/post/abc028ff6f594075a69f177550f56dfc