熬了幾個通宵,我寫了份CUDA新手入門代碼

極市導(dǎo)讀
作者自己編寫了一份新手入門神經(jīng)網(wǎng)絡(luò)調(diào)用CUDA的示例,能夠幫助解決CUDA編寫以及python調(diào)用CUDA算子等問題。>>加入極市CV技術(shù)交流群,走在計算機視覺的最前沿
在用PyTorch或者TensorFlow搭積木的時候,你是不是也遇到過下面這些情況:
自帶的算子及其組合都無法滿足你超(bian)常(tai)的計算需求。 自帶的算子不可導(dǎo),需要自己定義反向傳播的梯度,例如argmax。 自帶的算子太慢了,嚴(yán)重影響了你發(fā)paper的速度。

這時候你就會想,要是能自己實現(xiàn)一個速度又快、又能滿足需求的算子就好了。
你想到了CUDA,自己寫一個CUDA算子不就完事了嘛!
然后問題又來了,寫是寫完了,怎么用python代碼調(diào)用它呢?
還有一個問題,這個算子它沒梯度啊,自動求導(dǎo)機制不頂用了!
你去網(wǎng)上各種搜索,方法倒是全有,但是源碼都好復(fù)雜,你一個新手怎么可能有心思看完那么復(fù)雜的教程?

這時候,你突然看到了這篇文章,看完后你驚呼:“怎么會有這么簡潔的示例代碼,這就是我想要的!”
沒錯,這就是我熬了好幾個通宵,查了無數(shù)bug后,寫出來的一份示例代碼。
話不多說,先上源碼好吧:
https://github.com/godweiyang/NN-CUDA-Example
我給它命名為“Neural Network CUDA Example”,簡稱“NN CUDA Example”,意思就是神經(jīng)網(wǎng)絡(luò)調(diào)用CUDA的示例。

那么這玩意到底有啥用呢?目前為止,它可以讓你學(xué)到下面這些東西:
最簡單的CUDA算子的寫法。 最簡潔的PyTorch和TensorFlow封裝CUDA算子的方法。 幾種編譯CUDA算子的方法。 python調(diào)用CUDA算子的幾種方式。 python中統(tǒng)計CUDA算子運行時間的正確方法。 PyTorch和TensorFlow自定義算子梯度的方法。

你直呼內(nèi)行,要是早點能看到這篇文章,能多發(fā)好幾篇論文啊。
看完代碼,有些細(xì)節(jié)你還是懵逼了,這這這都是啥意思啊,為啥這么寫???
這時候你又看到了幾篇教程,哦原來都有講解,那沒事了。
godweiyang:PyTorch自定義CUDA算子教程與運行時間分析
https://zhuanlan.zhihu.com/p/358220419
godweiyang:詳解PyTorch編譯并調(diào)用自定義CUDA算子的三種方式
https://zhuanlan.zhihu.com/p/358778742
godweiyang:三分鐘教你如何PyTorch自定義反向傳播
https://zhuanlan.zhihu.com/p/359524837

從那以后,你代碼能力飛速提升,一連發(fā)了好幾篇頂會。
然后你順手一鍵三連,把這篇文章轉(zhuǎn)給了身邊有需要的人,個個都夸你發(fā)現(xiàn)了寶藏。
推薦閱讀
2021-03-27
2021-03-21
2021-01-21

# CV技術(shù)社群邀請函 #
備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測-深圳)
即可申請加入極市目標(biāo)檢測/圖像分割/工業(yè)檢測/人臉/醫(yī)學(xué)影像/3D/SLAM/自動駕駛/超分辨率/姿態(tài)估計/ReID/GAN/圖像增強/OCR/視頻理解等技術(shù)交流群
每月大咖直播分享、真實項目需求對接、求職內(nèi)推、算法競賽、干貨資訊匯總、與 10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動交流~

