<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          深度學(xué)習(xí)算法崗平時需要自己寫cuda嗎?

          共 3121字,需瀏覽 7分鐘

           ·

          2021-04-28 07:45

          鏈接:https://www.zhihu.com/question/436008648

          編輯:機(jī)器學(xué)習(xí)實驗室

          聲明:僅做學(xué)術(shù)分享,侵刪

          工業(yè)界里面numba用的多嗎,還是說工業(yè)界主要還是直接寫cuda?

          作者:Chan Yu
          https://www.zhihu.com/question/436008648/answer/1649590705
          先放結(jié)論:基本上不需要,但是是很好的加分項!
          純算法崗的話接觸CUDA一般是需要實現(xiàn)一些非常規(guī)算子來滿足一些試驗性質(zhì)的算法嘗試。
          而大部分自定義算子無論是tensorflow還是pytorch都可以通過現(xiàn)階段豐富的基本算子庫來workaround。

          再不濟(jì)就是利用動態(tài)圖的性質(zhì)由numpy、py_func等實現(xiàn)然后手動定義反向梯度函數(shù)。

          這里相對更重要的反而是算法工程師定義反傳的能力。雖然不是什么特別難的工作,但不少算法崗的同學(xué)可能也沒仔細(xì)思考過最基礎(chǔ)的矩陣乘法怎么定義grad,或者不清楚tensorflow或者pytorch的autograd機(jī)制而導(dǎo)致無從下手。

          然后提到CUDA最大的關(guān)心點必然是性能。無論是速度還是顯存都有可能通過CUDA開發(fā)來過得極大的提升,一般體現(xiàn)在訪存效率、數(shù)據(jù)結(jié)構(gòu)設(shè)計、算子融合等技巧上。事實上從個人經(jīng)驗來說,有時候自己實現(xiàn)的算子庫跑模型很容易比native的tensorflow快兩到三倍,如果是一些特殊情況,十幾甚至極限情況上百倍也有可能。并且合理的設(shè)計比起生硬的用原生算子能夠大大減少顯存開銷,這對于訓(xùn)練和推理都是有極大益處的。

          但是,CUDA開發(fā)有些不小的成本,特別是對于算法研究,靈活性非常重要。可能要短時間里嘗試很多種不同的自定義算子,這時候堆機(jī)器能解決的話一般先不急著進(jìn)行深層次的優(yōu)化,而且在整個網(wǎng)絡(luò)結(jié)構(gòu)確定下來之前,很難進(jìn)行最終的優(yōu)化。除非有特別高頻使用的算子,優(yōu)化前后的差距非常明顯(比如對整體的影響5倍左右,無論是顯存還是速度)才可以考慮進(jìn)行個別算子的優(yōu)化。萬一一通CUDA操作下來,模型效果提升不明顯,最終的時間/人力成本不一定劃算。我更傾向于盡量先驗證算法再進(jìn)行優(yōu)化。

          此外,涉及到這么深層次的研究,并且CUDA優(yōu)化非常必要的情況,一般公司都會有專門的HPC組或者團(tuán)隊接手了,或者可能就該思考為什么通用的算子不能滿足需求。

          再說下CUDA開發(fā)的成本。C/CPP本身的編寫和調(diào)試難度就不提了,CUDA C基本就是小半個新語言,Debug邏輯也是全新的。如果為了極限性能進(jìn)行魔改然后遇到一些非法的顯存訪問更是頭疼,不過現(xiàn)在各類nv的可視化調(diào)試工具出來了應(yīng)該體驗會好很多。一些初入坑的同學(xué)可能會覺得把算子換成cudnn api就好了,但其實很多時候性能瓶頸是來自于訪存效率,這往往意味著需要寫新的kernal來融合算子,親自掌控顯存/緩存的管理。工作量特別是調(diào)試上會比想象的大很多。如果只是簡單換下cudnn,很可能反而增大了潛在的數(shù)據(jù)拷貝開銷導(dǎo)致性能變差。這里面的各方面經(jīng)驗需要長時間的積累,要不就交給專業(yè)的團(tuán)隊做,要不就自己長時間保持這方面的學(xué)習(xí)實踐。基本上不會作為一個算法工程師的必備素質(zhì)。

          但是如果擁有這樣的視野對于算法工程師來說是非常好的,即使沒有用到,平時也能在設(shè)計模型時保持從性能和效率的角度思考問題,而不是局限于模型效果。工業(yè)界對于成本是非常看重的。


          作者:DLing
          https://www.zhihu.com/question/436008648/answer/1746022828
          默認(rèn)cv崗哈!
          一般工作中用不到手?jǐn)]cuda,但這位大神卻時時刻刻在我們身邊,每天在各種三方庫中都能夠見到,就是不大會直接去調(diào)用cuda函數(shù)。但是如果遇到性能瓶頸了,可能就得請cuda大神出場了。

          比如,現(xiàn)在要優(yōu)化模型推理性能,剪枝,蒸餾,量化一大通操作下來,模型純推理時間由30ms降到15ms,性能翻倍,感覺不錯,但是一看數(shù)據(jù)預(yù)處理,耗時10ms,模型后處理耗時15ms,算下來處理數(shù)據(jù)花的時間比我模型推理花的時間還要長。這時候,cuda大神就可以上場了,我們把預(yù)處理和后處理搬到cuda上,一測,預(yù)處理,后處理共5ms就搞定了。這時候,報告一寫,模型推理時間55ms降低到20ms,領(lǐng)導(dǎo)看后一頓夸,心里美滋滋,升職加薪不是夢。

          再比如,最近模型指標(biāo)一直上不去,看著三年前的老模型,一臉嫌棄,感覺是時候擁抱新模型了。然后各種頂會,博客看下來,找到了個三個月前剛發(fā)表的新論文,華麗的辭藻,sota的指標(biāo)讓你按捺不住,想趕快把它用在自己的工程中,結(jié)果github上沒找到開源代碼。這時候,cuda大神又可以上場了,熬幾個通宵,把論文中跳動的字符轉(zhuǎn)換成cuda實現(xiàn)的美麗算子,然后模型一訓(xùn),數(shù)據(jù)一測,指標(biāo)提了3個點,老板看后又一頓夸,心里又美滋滋,升職加薪又不是夢。

          cuda的作用很多,水也很深,一般做cv方向手?jǐn)]cuda的機(jī)會還真不多,但是真的用上的時候,大概率是用來解決重大問題的時候。多了解了解,用的6確實可以算是自己很大的加分項。


          作者:知乎用戶
          https://www.zhihu.com/question/436008648/answer/1683251210
          95%的算法崗都不需要。
          真實的故事:我同事,再來英偉達(dá)前申請的G社,二輪電話面試被刷。原因是不能熟練的擼一個b樹被刷。該同事的背景是當(dāng)時德國某校Assistant Professor,出版兩本CUDA和并行編程書,可以熟練擼PTX。當(dāng)時人家還跟G社爭吵說可以提供性能相當(dāng)?shù)亩鏄銫UDA實現(xiàn),被拒絕并說不需要。

          我只能說,前世界上95%的算法和碼農(nóng)崗位都不需要你能夠GPU編程,刷好題比這些都重要。

          當(dāng)然了,前一陣G社回來反挖失敗那就是另一回事了。

          評論圈有人說既然選了G社,就應(yīng)該知道需要刷題,這屬于準(zhǔn)備不善。確實,我同事后來也是這么說的,當(dāng)時根本就沒有準(zhǔn)備刷題,因為本身也沒準(zhǔn)備去做碼農(nóng),抱著試試看的心理去了。

          至于這類數(shù)據(jù)結(jié)構(gòu)和算法輪子,大家千萬不要認(rèn)為用不到刷的題屬于無用功。其實即便是用pytorch寫煉丹算法還是要注意這些的。比如什么情況會造成新分配內(nèi)存啊,何時內(nèi)存會被copy啊,等等。輪子的基礎(chǔ)越深,最后的車的舒適度,性能也越好,這是肯定的。


          作者:知乎用戶 https://www.zhihu.com/question/436008648/answer/1651056548
          這個是基本功,逃不掉的。
          當(dāng)研究員的話,總會碰到現(xiàn)有op無法組合出新提出的算法的情況,有的時候可以強(qiáng)行組合但效率非常低,也是需要自己寫的。
          當(dāng)工程師的話,為了提高模型速度,會寫cuda,甚至?xí)?yōu)化cuda都是必備技能。

          作者:haichuan
          https://www.zhihu.com/question/436008648/answer/1768209276
          非深度學(xué)習(xí)的cv需要的。深度學(xué)習(xí)有通用的框架,各家大廠都有做自己的框架,例如騰訊的TNN。但是傳統(tǒng)的計算機(jī)視覺沒有這種框架,也沒有所謂的神經(jīng)網(wǎng)絡(luò),算法種類多種多樣,也不可能有人幫你開發(fā)推理框架。

          為了提升效率,需要在gpu上跑數(shù)據(jù)的,算法也是自己寫的,通常效率估計比不上專門寫框架的人,但是至少比在CPU上快好多倍。

           End 


          聲明:部分內(nèi)容來源于網(wǎng)絡(luò),僅供讀者學(xué)術(shù)交流之目的。文章版權(quán)歸原作者所有。如有不妥,請聯(lián)系刪除。


          瀏覽 91
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  思思热在线观看 | 成人网站大香蕉 | 91久久成人无码 | 澳门精品一区二区三区 | 久久丝袜足交视频 |