精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MegEngine 大 Kernel 卷積工程優(yōu)化實踐

開發(fā)
本篇整理自 3.19 日 “Large Kernel Makes CNN Great Again” 專題 Meetup 中《MegEngine 大 Kernel 卷積工程優(yōu)化實踐》分享。

從卷積到矩陣乘

矩陣乘(GEMM)具有計算密度大和易并行等優(yōu)良特點,傳統(tǒng)領(lǐng)域例如芯片產(chǎn)業(yè)和高性能計算領(lǐng)域往往將 GEMM 作為 benchmark 并已經(jīng)將其優(yōu)化到接近硬件理論峰值。 為了獲得更好的性能收益,im2col 算法將 GEMM 帶進了卷積神經(jīng)網(wǎng)絡(luò)的工程優(yōu)化領(lǐng)域。Implicit GEMM 算法進一步解決了 im2col 固有的多余顯存占用和冗余的前后處理問題,這在存儲受限的硬件例如 GPU 上尤為重要,使得 GEMM 在卷積優(yōu)化中的重要性進一步提升。加之硬件廠商也開始越來越多的對矩陣乘提供硬件支持,例如各種 MMA 指令和 TensorCore 的加入,這些原因共同促使現(xiàn)有很多優(yōu)化算法庫已經(jīng)將 im2col/Implicit GEMM 作為其默認的卷積優(yōu)化方案。

im2col 算法

本文中假設(shè)卷積的輸入 shape 為 (n, ic, ih, iw),kernel 為 (oc, ic, kh, kw),output 為 (n, oc, oh, ow)。im2col 算法的過程如下圖所示,簡單的將 kernel reshape 一下就得到了一個行 M = oc,列 K = ic*kh*kw 的矩陣記作矩陣 A。用 kernel 大小的立方體在 input 上做滑窗,每次將一個小立方體的數(shù)據(jù)按照 chw 的順序展開成一列。從上到下,從左到右滑完整個 input 之后將會得到一個行 K = ic*kh*kw,列 N = n*oh*ow 的矩陣記作矩陣 B。此時我們計算 GEMM(A, B) 就可以得到卷積的結(jié)果矩陣 C,其行 M = oc,列 N = n*oh*ow。

在 GEMM 的計算過程中,根據(jù) m, n 和 k 三個維度下標可以推導(dǎo)出數(shù)據(jù)在卷積的輸入輸出以及 kernel 中的下標。所以可以將 im2col 和 GEMM 兩個過程融合在一起從而達到降低顯存占用和性能加速的效果,這其實就是 Implicit GEMM 的原理。本文不過多介紹,感興趣的可以閱讀之前的技術(shù)文章。

Implicit Batched GEMM

上一篇文章主要介紹了 MegEngine 大 kernel depthwise 卷積優(yōu)化的背景和動機,本篇文章將介紹具體的優(yōu)化思路和工程實踐。借助 im2col/Implicit GEMM 算法,GEMM 在傳統(tǒng)的針對 dense 卷積的優(yōu)化中表現(xiàn)出來了優(yōu)良的性能。所以針對大 kernel depthwise 卷積也應(yīng)該嘗試使用 GEMM 實現(xiàn)。如前文分析,直接使用和 dense 卷積一樣的方法將 im2col 算法應(yīng)用到大 kernel depthwise 卷積將會產(chǎn)生一個 Batched GEMV,這很難達到硬件浮點計算峰值。顯然為了將 GEMM 應(yīng)用在大 kernel depthwise 卷積上,我們應(yīng)該轉(zhuǎn)變一下思維。如下圖所示,dense 卷積一般用 kernel 去卷 input 并算得 output,但當 kernel size 很大甚至可能比 input 還大時,此時其實應(yīng)該用 input 去卷 kernel 并算得 output。

回想一下 dense 卷積用 kernel 去卷 input,對 input 做 im2col 變換。現(xiàn)在大 kernel depthwise 卷積用 input 去卷 kernel,所以此時應(yīng)該對 kernel 做 im2col 變換。算法過程沒有本質(zhì)區(qū)別,只需要在 im2col 中將 kernel 看做 input,將 input 看做 kernel 即可。由于 depthwise 卷積是逐通道做卷積的,因此 im2col 變換也需要逐通道做。如下圖所示,每個通道變換之后都會產(chǎn)生一個 M = n, N = oh*ow, K = ih*iw 的 GEMM。根據(jù)上一篇文章的分析,Batched GEMM 相比于 Batched GEMV 更容易打滿硬件設(shè)備的浮點計算峰值。

CUTLASS 是 NVIDIA 的開源模板庫,它旨在提供一種用較小的成本寫出一個性能不是那么差的 GEMM 的能力。CUTLASS 內(nèi)置了針對 GEMM 的 meta schedule,能夠讓計算盡量掩蓋訪存延遲從而達到不錯的性能。曠視早在 CUTLASS 官方開源其卷積實現(xiàn)之前就基于 CUTLASS 做出了自己的卷積實現(xiàn),時至今日已經(jīng)打磨出了一個更適合內(nèi)部業(yè)務(wù)的曠視版 CUTLASS。此處的 Implicit Batched GEMM 也是基于曠視版 CUTLASS 實現(xiàn)的,代碼已經(jīng)隨 MegEngine v1.8.2 開源出來了,實現(xiàn)細節(jié)就不過多介紹了。如下圖的實驗數(shù)據(jù)顯示隨著 kernel size 的增加,Implicit Batched GEMM 的性能大致是呈線性增長的,部分情況下可以逼近理論峰值。

Implicit Batched GEMM 的優(yōu)點一方面是可以復(fù)用成熟的 GEMM 優(yōu)化思路和基礎(chǔ)設(shè)施,還可以方便使用 TensorCore 進行加速;另一方面如果在推理的時候不要求可變 shape 的話,對 kernel 的 im2col 變換可以提前算好進一步加速。當然它的缺點也很明顯,比如小 batch 情況下依然會退化成 Bacthed GEMV。如果用 M*N*K*2 來近似 GEMM 的計算量的話,不難發(fā)現(xiàn) Implicit Batched GEMM 的計算量相比 dense 卷積轉(zhuǎn)成的 GEMM 增大了 $\frac{ih*iw}{kh*kw}$ 倍,這意味著 Implicit Batched GEMM 在 input 顯著大于 kernel size 時性能不佳。如下圖所示的實驗結(jié)果也顯示著當 input 大于 kernel size 時,隨著 input 的增加 Implicit Batched GEMM 的性能有明顯下滑。需要一種新的優(yōu)化方法來迎合下游如檢測、分割等業(yè)務(wù)里的大 input size 的需求,這種方法在小 batch size 或者大輸入下的性能表現(xiàn)也要足夠好。

Direct Conv

由于大 kernel depthwise 卷積的計算密度比較高,所以其實簡單實現(xiàn)一版性能基本都能達到峰值性能的 70%-80%。Driect Conv 的寫法其實有很多,這里只提供一種寫法思路供參考。如下圖所示,為了更好的利用 CUDA 的多級存儲以最大利用帶寬,Direct Conv 采用多級分塊策略。每個 Thread Block 負責計算 output 的一個分塊,然后每個 Warp 對 Thread Block Tile 按行進一步做分塊。為了適應(yīng)更大的 kernel size,我們在 Thread level 上不僅針對 output 做了分塊,還對 kernel 做了分塊。

簡單舉個例子介紹 Thread level 的分塊策略。假設(shè) Thread Block size 是 128,Thread 被組織成 32×4 的形式,每一行的 4 個線程負責計算 output 的一行。將 kernel 也切分成四列,每一行的 4 個線程分別負責讀取 kernel 的一列。如下圖所示,Thread 0 讀取 kernel 的第 0 列和 input 的第 0-3 列,計算得到 4 個 output;Thread 1 讀取 kernel 的第 2 列和 input 的第 1-4 列,計算得到 4 個 output。Thread 2 和 Thread 3 以此類推。

由于對 kernel 做了分塊,所以每行的 4 個線程計算完畢之后每個 Thread 持有的是 output 的部分和,需要將 4 個線程各自的結(jié)果規(guī)約到一起才是最終結(jié)果。此處借助了 Warp Shuffle API__shuffle_xor_sync,它實現(xiàn)了一種蝶形規(guī)約,其原理如下圖所示。由于只需要將每 4 個線程的結(jié)果規(guī)約到一起就行了,所以只需要進行 2 次 __shuffle_xor_sync 即可,最后將 outupt 寫回。

實驗數(shù)據(jù)顯示在 input 大小為 48 時 Direct Conv 的性能已經(jīng)略高于 Implicit Batched GEMM 了,intput 為 64 時 Direct Conv 的性能會顯著高于 Implicit Batched GEMM。得益于 MegEngine 的算子自動選擇機制,用戶使用的時候不用指定具體的實現(xiàn)方式,MegEngine 會自動選擇最佳實現(xiàn)。

運行時間

為了衡量算子的優(yōu)劣,前面的實驗都是從算子絕對性能和硬件理論峰值相比的角度設(shè)計的。為了讓用戶有更直觀的感受,我們同樣測試了大 kernel depthwise 卷積的運行時間。實驗環(huán)境為 2080Ti @ cuda10.1 + cudnn7.6.3,所用的數(shù)據(jù)類型為 fp32, batch size 為 64,channel 為 384,用 24 個 layer 進行前向和反向計算。從下圖可見 MegEngine 比 PyTorch(with cudnn) 最高快 10 倍以上,優(yōu)化后的 MegEngine 在 31×31 的 kernel size 上和 PyTorch 9×9 的訓(xùn)練時間相當。

如下圖所示,只測試一個 layer 的前向推理,其他的配置和訓(xùn)練保持一致。經(jīng)過優(yōu)化后的 MegEngine 比 cudnn 最高快 8 倍多,并且 fp16 相比 fp32 也有 2 倍多加速,歡迎嘗試一下混合精度訓(xùn)練。代碼已經(jīng)隨著 MegEngine v1.8.2 開源,使用 v1.9 (即將發(fā)布)效果更佳~

? ?

責任編輯:張燕妮 來源: segmentfault
相關(guān)推薦

2022-10-08 13:11:56

LinuxLinux內(nèi)核

2024-12-03 11:12:47

2020-12-14 09:00:00

云計算公有云工具

2023-08-24 07:46:21

服務(wù)器JVM

2021-10-13 09:45:54

Serverless 應(yīng)用調(diào)試

2022-04-07 09:01:52

神經(jīng)網(wǎng)絡(luò)人工智能

2024-04-10 10:28:47

2020-03-23 15:15:57

MySQL性能優(yōu)化數(shù)據(jù)庫

2013-03-27 09:17:17

Android開發(fā)AndroidList

2014-09-04 13:57:24

APMAJAXWeb 2.0

2024-06-25 08:00:00

ChatGPTLLM人工智能

2023-04-11 15:14:57

2014-12-17 09:46:30

AndroidListView最佳實踐

2020-07-17 19:55:50

Vue前端性能優(yōu)化

2017-01-23 21:05:00

AndroidApp啟動優(yōu)化

2025-06-19 09:53:30

Spring性能優(yōu)化服務(wù)器

2022-06-06 12:19:08

抖音功耗優(yōu)化Android 應(yīng)用

2010-07-06 09:07:09

2023-08-25 08:06:04

項目布局LazyRow?

2024-05-24 10:23:25

點贊
收藏

51CTO技術(shù)棧公眾號

日韩一区二区三区xxxx| 欧美日韩加勒比精品一区| 国产精自产拍久久久久久蜜| 国产午夜精品理论片在线| 日韩三级久久| 欧美色另类天堂2015| 台湾成人av| 成人av手机在线| 久久精品导航| 久久久成人av| 四季av综合网站| 精品美女一区| 亚洲成人高清在线| 亚洲一区二区在| 凸凹人妻人人澡人人添| 久久国产精品72免费观看| 97精品国产97久久久久久免费| 夜夜春很很躁夜夜躁| 91夜夜蜜桃臀一区二区三区| 欧美在线播放高清精品| 男的插女的下面视频| 成年人免费在线视频| 99久久伊人网影院| 亚洲999一在线观看www| 国产成人自拍偷拍| 精品av久久久久电影| 91精品99| 一区二区三区在线免费视频| 明星裸体视频一区二区| hs视频在线观看| 日韩国产欧美在线播放| 国外成人免费在线播放| 亚洲综合图片一区| 狠狠做六月爱婷婷综合aⅴ | 成人av中文字幕| 国产精品麻豆va在线播放| 精品无码人妻一区二区三区品| 成人三级视频| 亚洲欧美日韩国产成人| 插我舔内射18免费视频| 九色精品蝌蚪| 91精品国产综合久久精品麻豆| 国产成人综合一区| 在线天堂新版最新版在线8| 亚洲色图视频网| 亚洲国产精品一区二区第一页| 日韩三级电影网| 99国产精品国产精品毛片| 国产日韩精品推荐| 欧美 日韩 国产 在线| 高清久久久久久| 91在线精品观看| 国产黄色高清视频| 国产精品一卡二卡| 亚洲影院色无极综合| 国产情侣激情自拍| 国产麻豆一精品一av一免费| 国产在线精品播放| 国产又粗又大又黄| 精品一区二区免费视频| 91精品在线一区| 国产男女裸体做爰爽爽| 国产一区二区视频在线播放| 国产欧美日韩免费| 91精品国产综合久久香蕉922| 男人的天堂久久久| 欧美三区美女| 久久久久亚洲精品国产| 九九热精品免费视频| 国产综合自拍| 18性欧美xxxⅹ性满足| 狠狠躁夜夜躁人人爽天天高潮| 亚洲激情社区| 人九九综合九九宗合| 无码一区二区三区| 蜜臀av性久久久久av蜜臀妖精 | 国产精品传媒麻豆hd| 欧美性xxxxxx少妇| 天天做天天干天天操| 天堂久久av| 日韩精品欧美激情| 久久亚洲AV无码专区成人国产| 成人写真视频| 国产亚洲欧洲在线| 美国黄色小视频| 亚洲二区免费| 国产精品久久久久久中文字| 国产色片在线观看| 99久久精品一区| 日韩欧美精品一区二区三区经典| 黄色成年人视频在线观看| 亚洲在线观看免费视频| 欧美精品第三页| 成人看片在线观看| 欧美一区二区女人| 亚洲视频 中文字幕| 久久99国产精品视频| www.久久久久久.com| 日韩成人一区二区三区| 麻豆精品视频在线观看视频| 成人黄色片视频网站| 蜜芽tv福利在线视频| 亚洲精品国久久99热| 欧在线一二三四区| 日韩视频1区| 永久免费毛片在线播放不卡| 成人免费视频网站入口::| 模特精品在线| 91在线免费播放| 国产成人欧美在线观看| 国产福利免费视频| 国产日产欧美一区| 99久久国产综合精品五月天喷水| 丁香婷婷久久| 日韩经典一区二区三区| 中文字幕av播放| 男女精品视频| 国产伦精品一区二区三区高清版| 在线免费看黄| 日韩欧美在线视频日韩欧美在线视频| 182午夜视频| 精品日本12videosex| 久久免费视频在线| 国产婷婷一区二区三区久久| 美国美女黄色片| 日本黄在线观看| 国产精品成人在线观看| 国产老熟妇精品观看| 亚洲国产aⅴ精品一区二区三区| 日韩大陆毛片av| 激情五月少妇a| 国产中文字幕精品| 一本一道久久久a久久久精品91| 国产精选在线| 日韩欧美电影一二三| 美女视频久久久| 日韩成人精品视频| 欧美日本韩国在线| 男人的天堂免费在线视频| 欧美成人三级电影在线| 夫妻性生活毛片| 免费欧美日韩国产三级电影| 欧美日韩一区二区三区在线视频 | 日韩中文字幕国产| 在线观看亚洲黄色| 国产女同性恋一区二区| 成人观看免费完整观看| 色综合久久中文| 97免费视频在线播放| 男人天堂手机在线观看| 亚洲综合色丁香婷婷六月图片| 五月天开心婷婷| 亚洲h色精品| 成人精品视频在线| 超碰免费公开在线| 日韩一区二区在线播放| 青青草国产在线观看| 国产资源在线一区| 无码毛片aaa在线| 亚洲91网站| 午夜精品久久久久久久99热| 天堂av手机版| 色综合天天综合狠狠| 国产激情第一页| 中文亚洲免费| 欧美日韩一区在线播放| 电影一区二区| 日韩网站在线观看| 国产成人精品一区二区无码呦| 一片黄亚洲嫩模| 成人性生活免费看| 日本中文字幕一区二区视频| 亚洲综合首页| 57pao国产一区二区| 69影院欧美专区视频| 国产日韩一区二区三区| caoporn免费在线| 精品粉嫩超白一线天av| 九九九在线观看| 中文字幕欧美日本乱码一线二线 | 澳门黄色一级片| 成人高清视频在线观看| 国产成人无码一二三区视频| 欧美少妇性xxxx| 91欧美日韩一区| 日本高清在线观看| 日韩精品视频免费专区在线播放| 国产亚洲欧美在线精品| 国产精品久久久久一区二区三区 | 伊人久久大香线蕉av一区二区| 中文字幕久久久久| 一区二区三区四区激情| 久久久亚洲av波多野结衣| 久久精品72免费观看| 日韩 欧美 视频| 精品一区毛片| 国产精品视频一区国模私拍 | 尤物av一区二区| 噜噜噜在线视频| 精品一区二区久久| 免费超爽大片黄| 久久精品国产www456c0m| 91黄在线观看| 色成人免费网站| 欧美交受高潮1| 欧洲日本在线| 亚洲欧美日韩高清| 丰满人妻av一区二区三区| 91极品视觉盛宴| 国产午夜福利一区二区| 一区二区中文字幕在线| 国产伦精品一区三区精东| 精品一区二区国语对白| 国产熟人av一二三区| 极品尤物久久久av免费看| 影音先锋欧美在线| 免费黄色成人| 极品尤物一区二区三区| 精品一区二区三区亚洲| 国产精品亚发布| 国产成人精品123区免费视频| 久久久久久国产精品| 欧美精品日韩少妇| 中文字幕av一区二区三区谷原希美 | 黄色成人精品网站| 欧美性受黑人性爽| 日韩精品免费| 日韩精品一区二区三区色偷偷| 好吊妞国产欧美日韩免费观看网站 | 蜜臀av色欲a片无码精品一区| 欧美3p在线观看| 久久久久99精品久久久久| 色婷婷精品久久二区二区密| 国产乱子伦视频一区二区三区| 精品久久久久av| 国产精品综合| 人人妻人人添人人爽欧美一区| 欧美视频网站| 久久亚洲国产成人精品无码区| 天天射综合网视频| 亚洲人久久久| 欧美日韩高清| 天堂一区二区三区| 欧美日韩国产高清电影| 欧美日韩一区二区三区在线视频 | 久久电影tv| 欧美在线亚洲一区| 在线观看福利电影| 欧美亚洲激情在线| 欧美日韩大片| 国产第一区电影| 亚洲电影有码| 国产女人精品视频| 视频91a欧美| 91精品视频免费| 日韩一区网站| 国产伦精品一区二区三区免| 成人性生交大片免费看96| 粉嫩av四季av绯色av第一区| 视频一区中文字幕精品| 国产高清在线一区二区| 欧美jizz19性欧美| 欧美日韩国产精品一卡| 操欧美老女人| 中文字幕一区二区三区乱码| 久久精品亚洲人成影院 | 天天躁日日躁aaaa视频| 国产欧美综合色| 四虎永久免费网站| 国产精品天堂| 精品国产一区二区在线| 99热国产在线| 97精品在线视频| 无人区在线高清完整免费版 一区二| 国产精品久久av| 国产 日韩 欧美| 国产欧美一区二区在线播放| 国产免费播放一区二区| 综合一区中文字幕| 激情视频一区| 九九热免费精品视频| 国产一区二区三区四区五区入口| 最新中文字幕日本| 2欧美一区二区三区在线观看视频 337p粉嫩大胆噜噜噜噜噜91av | www在线免费观看视频| 欧美日韩福利电影| 成人欧美大片| 亚洲自拍高清视频网站| 香蕉精品久久| 日本在线视频www色| 在线视频日韩| 国内自拍第二页| 久久女同互慰一区二区三区| 91精品少妇一区二区三区蜜桃臀| 亚洲高清中文字幕| 中文字幕免费高清在线观看| 精品国产免费人成在线观看| 精品久久久久一区二区三区 | 亚洲小少妇裸体bbw| 国产欧美日韩免费| 欧美有码在线| 亚洲AV无码成人精品一区| 国产农村妇女精品一区二区| 国产精品自在自线| 久久婷婷成人综合色| 欧美激情国产精品免费| 欧美性色综合网| 亚洲 欧美 自拍偷拍| 久久这里有精品| 国产v综合v| 狠狠色综合色区| 欧美一区亚洲| xxww在线观看| 久久久久国产精品人| 免费一级特黄特色大片| 欧美日韩国产精选| 欧美老女人性开放| 国内自拍欧美激情| 一区二区在线免费播放| 影音先锋欧美资源| 日本伊人精品一区二区三区观看方式| 中文在线字幕观看| 亚洲人成精品久久久久久| 波多野结衣高清视频| 亚洲高清在线观看| 七七成人影院| 91精品入口蜜桃| 我不卡手机影院| 午夜激情av在线| 国产日韩成人精品| 中文字幕手机在线视频| 日韩av在线最新| 国产偷倩在线播放| 99久久一区三区四区免费| 婷婷色综合网| 日韩av片专区| 1区2区3区欧美| 一区二区www| 日韩亚洲欧美成人| 久久久精品一区二区毛片免费看| 日本一区二区三区免费看| 老鸭窝亚洲一区二区三区| 黄色国产在线观看| 欧美性黄网官网| 三级在线电影| 国产第一区电影| 日韩理论电影大全| 亚洲一区日韩精品| 亚洲三级在线观看| 国产福利小视频| 久久久久久久国产精品视频| 国产精品1luya在线播放| 在线观看视频欧美| a视频免费在线观看| 精品中文字幕在线| 国产精品极品| 免费看日本毛片| 久久久久国产免费免费| 国产精品无码一区| 色偷偷噜噜噜亚洲男人| 国产日韩中文在线中文字幕| 国产91在线亚洲| 成人免费毛片aaaaa**| 天堂网av手机版| 中文字幕av一区中文字幕天堂| 精品176极品一区| 成人在线观看毛片| av中文字幕一区| 69亚洲精品久久久蜜桃小说| 中文字幕在线精品| 日韩成人在线观看视频| 国产精品久久中文字幕| 国产色一区二区| 国产日韩一级片| 91高潮精品免费porn| 加勒比久久综合| 亚洲一区二区图片| 五月开心婷婷久久| av在线之家电影网站| 亚洲自拍在线观看| 亚洲综合精品四区| youjizz亚洲女人| 日韩欧美国产电影| 欧美日韩美女| www.亚洲一区二区| 91热门视频在线观看| 一区二区自拍偷拍| 久久久久女教师免费一区| 国产剧情一区| 国产调教打屁股xxxx网站| 欧美日韩中文字幕在线视频| 在线免费黄色| 国产一区二区在线网站| 美国毛片一区二区三区| 久久久久久久久97| 尤物九九久久国产精品的特点| 日韩免费成人| 亚洲第一狼人区| 精品久久久久久国产91| 蜜芽在线免费观看|