算法崗平時(shí)需要自己寫cuda嗎?
鏈接:https://www.zhihu.com/question/436008648 編輯:深度學(xué)習(xí)與計(jì)算機(jī)視覺 聲明:僅做學(xué)術(shù)分享,侵刪

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

https://www.zhihu.com/question/436008648/answer/1683251210
真實(shí)的故事:我同事,再來英偉達(dá)前申請的G社,二輪電話面試被刷。原因是不能熟練的擼一個b樹被刷。該同事的背景是當(dāng)時(shí)德國某校Assistant Professor,出版兩本CUDA和并行編程書,可以熟練擼PTX。當(dāng)時(shí)人家還跟G社爭吵說可以提供性能相當(dāng)?shù)亩鏄銫UDA實(shí)現(xiàn),被拒絕并說不需要。
我只能說,前世界上95%的算法和碼農(nóng)崗位都不需要你能夠GPU編程,刷好題比這些都重要。
評論圈有人說既然選了G社,就應(yīng)該知道需要刷題,這屬于準(zhǔn)備不善。確實(shí),我同事后來也是這么說的,當(dāng)時(shí)根本就沒有準(zhǔn)備刷題,因?yàn)楸旧硪矝]準(zhǔn)備去做碼農(nóng),抱著試試看的心理去了。
至于這類數(shù)據(jù)結(jié)構(gòu)和算法輪子,大家千萬不要認(rèn)為用不到刷的題屬于無用功。其實(shí)即便是用pytorch寫煉丹算法還是要注意這些的。比如什么情況會造成新分配內(nèi)存啊,何時(shí)內(nèi)存會被copy啊,等等。輪子的基礎(chǔ)越深,最后的車的舒適度,性能也越好,這是肯定的。
https://www.zhihu.com/question/436008648/answer/1649590705
而大部分自定義算子無論是tensorflow還是pytorch都可以通過現(xiàn)階段豐富的基本算子庫來workaround。
再不濟(jì)就是利用動態(tài)圖的性質(zhì)由numpy、py_func等實(shí)現(xiàn)然后手動定義反向梯度函數(shù)。
這里相對更重要的反而是算法工程師定義反傳的能力。雖然不是什么特別難的工作,但不少算法崗的同學(xué)可能也沒仔細(xì)思考過最基礎(chǔ)的矩陣乘法怎么定義grad,或者不清楚tensorflow或者pytorch的autograd機(jī)制而導(dǎo)致無從下手。
然后提到CUDA最大的關(guān)心點(diǎn)必然是性能。無論是速度還是顯存都有可能通過CUDA開發(fā)來過得極大的提升,一般體現(xiàn)在訪存效率、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)、算子融合等技巧上。事實(shí)上從個人經(jīng)驗(yàn)來說,有時(shí)候自己實(shí)現(xiàn)的算子庫跑模型很容易比native的tensorflow快兩到三倍,如果是一些特殊情況,十幾甚至極限情況上百倍也有可能。并且合理的設(shè)計(jì)比起生硬的用原生算子能夠大大減少顯存開銷,這對于訓(xùn)練和推理都是有極大益處的。
https://www.zhihu.com/question/436008648/answer/1746022828
一般工作中用不到手?jǐn)]cuda,但這位大神卻時(shí)時(shí)刻刻在我們身邊,每天在各種三方庫中都能夠見到,就是不大會直接去調(diào)用cuda函數(shù)。但是如果遇到性能瓶頸了,可能就得請cuda大神出場了。
比如,現(xiàn)在要優(yōu)化模型推理性能,剪枝,蒸餾,量化一大通操作下來,模型純推理時(shí)間由30ms降到15ms,性能翻倍,感覺不錯,但是一看數(shù)據(jù)預(yù)處理,耗時(shí)10ms,模型后處理耗時(shí)15ms,算下來處理數(shù)據(jù)花的時(shí)間比我模型推理花的時(shí)間還要長。這時(shí)候,cuda大神就可以上場了,我們把預(yù)處理和后處理搬到cuda上,一測,預(yù)處理,后處理共5ms就搞定了。這時(shí)候,報(bào)告一寫,模型推理時(shí)間55ms降低到20ms,領(lǐng)導(dǎo)看后一頓夸,心里美滋滋,升職加薪不是夢。
再比如,最近模型指標(biāo)一直上不去,看著三年前的老模型,一臉嫌棄,感覺是時(shí)候擁抱新模型了。然后各種頂會,博客看下來,找到了個三個月前剛發(fā)表的新論文,華麗的辭藻,sota的指標(biāo)讓你按捺不住,想趕快把它用在自己的工程中,結(jié)果github上沒找到開源代碼。這時(shí)候,cuda大神又可以上場了,熬幾個通宵,把論文中跳動的字符轉(zhuǎn)換成cuda實(shí)現(xiàn)的美麗算子,然后模型一訓(xùn),數(shù)據(jù)一測,指標(biāo)提了3個點(diǎn),老板看后又一頓夸,心里又美滋滋,升職加薪又不是夢。
cuda的作用很多,水也很深,一般做cv方向手?jǐn)]cuda的機(jī)會還真不多,但是真的用上的時(shí)候,大概率是用來解決重大問題的時(shí)候。多了解了解,用的6確實(shí)可以算是自己很大的加分項(xiàng)。
https://www.zhihu.com/question/436008648/answer/1730191107
往期精彩:
講解視頻來了!機(jī)器學(xué)習(xí) 公式推導(dǎo)與代碼實(shí)現(xiàn)開錄!
更新!《機(jī)器學(xué)習(xí):公式推導(dǎo)與代碼實(shí)現(xiàn)》1-16章PPT下載
《機(jī)器學(xué)習(xí) 公式推導(dǎo)與代碼實(shí)現(xiàn)》隨書PPT示例
時(shí)隔一年!深度學(xué)習(xí)語義分割理論與代碼實(shí)踐指南.pdf第二版來了!
新書首發(fā) | 《機(jī)器學(xué)習(xí) 公式推導(dǎo)與代碼實(shí)現(xiàn)》正式出版!
