别人的代码是火箭,我的代码是乌龟……
秋招正卷時(shí),AI算法人才熱度與需求減少,AI工程人才熱度與需求激增,這是當(dāng)下AI的現(xiàn)狀。隨著開(kāi)源之風(fēng)刮起,當(dāng)下各大企業(yè)逐漸意識(shí)到,與其花重金養(yǎng)一個(gè)博士算法團(tuán)隊(duì),不如多招一些工程能力強(qiáng)的本科或者碩士生。
畢竟各家算法精度相差無(wú)幾,并且絕大多數(shù)落地場(chǎng)景對(duì)精度的要求并不苛刻(87%與85%,沒(méi)太大區(qū)別)。更為重要的是算法思想再好,能實(shí)際落地才行。而實(shí)際落地時(shí),需要考慮的因素更多,比如運(yùn)算效率、內(nèi)存占用等。
近期學(xué)弟原本開(kāi)開(kāi)心心地做算法,突然領(lǐng)導(dǎo)交給了一個(gè)算法部署的任務(wù)...
學(xué)弟:小組長(zhǎng)讓部署一個(gè)視覺(jué)模型,爭(zhēng)取適配不同平臺(tái)要求,同時(shí)提高模型運(yùn)行的速度,可愁死了,咋辦啊,學(xué)長(zhǎng)?
我:TensorFlow、PyTorch這些框架的模型,都可以轉(zhuǎn)到ONNX模型格式,然后再做個(gè)模型量化,或者精度轉(zhuǎn)化,這不是很輕松么?
學(xué)弟:學(xué)長(zhǎng),你可別說(shuō)了。能試的我都試過(guò)了,小組長(zhǎng)要求,不僅實(shí)現(xiàn)加速,而且性能最好也有所提高,這可咋整啊???
我絞盡腦汁,突然靈光一閃,說(shuō)道:要不重寫(xiě)一下算法模型算子,這樣肯定可以加速運(yùn)行。
學(xué)弟頓時(shí)來(lái)勁了:學(xué)長(zhǎng),啥方法這么厲害!趕緊分享一下,兩頓飯如何?
我笑了笑:簡(jiǎn)單啊,用CUDA重寫(xiě)一下模型算子,這樣不就能實(shí)現(xiàn)模型加速。
學(xué)弟苦笑了一下:學(xué)長(zhǎng),用CUDA寫(xiě)算子做模型加速,太難了!于是推薦了一份學(xué)習(xí)cuDNN的資料給學(xué)弟。
資源條件有限,如何模型推理加速?
沒(méi)過(guò)幾天,學(xué)弟又愁眉苦臉來(lái)找我。
“cuDNN倒是沒(méi)問(wèn)題,小組長(zhǎng)說(shuō),光訓(xùn)練不行啊,還有嵌入式或者邊緣計(jì)算設(shè)備,只能來(lái)推理,這樣咋做模型加速呢?”
我也被問(wèn)住了,咋辦呀,還能咋辦,問(wèn)大佬唄。經(jīng)過(guò)我軟磨硬泡,終于又套來(lái)了一份大佬的資料,又甩給了學(xué)弟。
學(xué)弟開(kāi)心的跳起來(lái)說(shuō):學(xué)長(zhǎng),這TensorRT又是啥神器啊?
我解釋道:TensorRT是NVIDIA針對(duì)自家平臺(tái)做的加速包,只負(fù)責(zé)模型的推理(inference)過(guò)程,一般不用TensorRT來(lái)訓(xùn)練模型的,而是用于部署時(shí)加速模型運(yùn)行速度。主要功能包括:
??算子融合(層與張量融合):簡(jiǎn)單來(lái)說(shuō)就是通過(guò)融合一些計(jì)算op或者去掉一些多余op來(lái)減少數(shù)據(jù)流通次數(shù)以及顯存的頻繁使用來(lái)提速;
??量化:量化即IN8量化或者FP16以及TF32等不同于常規(guī)FP32精度的使用,這些精度可以顯著提升模型執(zhí)行速度并且不會(huì)保持原先模型的精度;
??內(nèi)核自動(dòng)調(diào)整:根據(jù)不同的顯卡構(gòu)架、SM數(shù)量、內(nèi)核頻率等(例如1080TI和2080TI),選擇不同的優(yōu)化策略以及計(jì)算方式,尋找最合適當(dāng)前構(gòu)架的計(jì)算方式;
??動(dòng)態(tài)張量顯存:我們都知道,顯存的開(kāi)辟和釋放是比較耗時(shí)的,通過(guò)調(diào)整一些策略可以減少模型中這些操作的次數(shù),從而可以減少模型運(yùn)行的時(shí)間;
??多流執(zhí)行:使用CUDA中的stream技術(shù),最大化實(shí)現(xiàn)并行操作。
知識(shí)點(diǎn)很多,但在學(xué)習(xí)時(shí)沒(méi)有實(shí)操案例,這里推薦一門深藍(lán)學(xué)院開(kāi)設(shè)了『CUDA入門與深度神經(jīng)網(wǎng)絡(luò)加速』課程,可以去聽(tīng)聽(tīng)。
課程大綱
課程收獲
1.掌握CUDA并行計(jì)算系統(tǒng)的分析、開(kāi)發(fā)、調(diào)試與優(yōu)化方法;
2.熟悉CUDA的基本概念以及主流的并行運(yùn)算;
3.了解cuDNN與TensorRT兩個(gè)深度學(xué)習(xí)模型加速的主流工具;
4.具備動(dòng)手實(shí)踐深度學(xué)習(xí)模型的加速的能力。
搶占學(xué)習(xí)名額
掃碼備注【流】
咨詢奕木 了解CUDA
總結(jié)
以上是生活随笔為你收集整理的别人的代码是火箭,我的代码是乌龟……的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 12nm 制程、Zen+ 微架构 AMD
- 下一篇: mysql数据库赋予权限 版本语法差异