別人的代碼是火箭,我的代碼是烏龜……
秋招正卷時,AI算法人才熱度與需求減少,AI工程人才熱度與需求激增,這是當下AI的現(xiàn)狀。隨著開源之風(fēng)刮起,當下各大企業(yè)逐漸意識到,與其花重金養(yǎng)一個博士算法團隊,不如多招一些工程能力強的本科或者碩士生。
畢竟各家算法精度相差無幾,并且絕大多數(shù)落地場景對精度的要求并不苛刻(87%與85%,沒太大區(qū)別)。更為重要的是算法思想再好,能實際落地才行。而實際落地時,需要考慮的因素更多,比如運算效率、內(nèi)存占用等。
近期學(xué)弟原本開開心心地做算法,突然領(lǐng)導(dǎo)交給了一個算法部署的任務(wù)...
學(xué)弟:小組長讓部署一個視覺模型,爭取適配不同平臺要求,同時提高模型運行的速度,可愁死了,咋辦啊,學(xué)長?
我:TensorFlow、PyTorch這些框架的模型,都可以轉(zhuǎn)到ONNX模型格式,然后再做個模型量化,或者精度轉(zhuǎn)化,這不是很輕松么?
學(xué)弟:學(xué)長,你可別說了。能試的我都試過了,小組長要求,不僅實現(xiàn)加速,而且性能最好也有所提高,這可咋整啊???

我絞盡腦汁,突然靈光一閃,說道:要不重寫一下算法模型算子,這樣肯定可以加速運行。
學(xué)弟頓時來勁了:學(xué)長,啥方法這么厲害!趕緊分享一下,兩頓飯如何?
我笑了笑:簡單啊,用CUDA重寫一下模型算子,這樣不就能實現(xiàn)模型加速。


沒過幾天,學(xué)弟又愁眉苦臉來找我。
“cuDNN倒是沒問題,小組長說,光訓(xùn)練不行啊,還有嵌入式或者邊緣計算設(shè)備,只能來推理,這樣咋做模型加速呢?”
我也被問住了,咋辦呀,還能咋辦,問大佬唄。經(jīng)過我軟磨硬泡,終于又套來了一份大佬的資料,又甩給了學(xué)弟。
學(xué)弟開心的跳起來說:學(xué)長,這TensorRT又是啥神器???
我解釋道:TensorRT是NVIDIA針對自家平臺做的加速包,只負責(zé)模型的推理(inference)過程,一般不用TensorRT來訓(xùn)練模型的,而是用于部署時加速模型運行速度。主要功能包括:
? 算子融合(層與張量融合):簡單來說就是通過融合一些計算op或者去掉一些多余op來減少數(shù)據(jù)流通次數(shù)以及顯存的頻繁使用來提速;
? 量化:量化即IN8量化或者FP16以及TF32等不同于常規(guī)FP32精度的使用,這些精度可以顯著提升模型執(zhí)行速度并且不會保持原先模型的精度;
? 內(nèi)核自動調(diào)整:根據(jù)不同的顯卡構(gòu)架、SM數(shù)量、內(nèi)核頻率等(例如1080TI和2080TI),選擇不同的優(yōu)化策略以及計算方式,尋找最合適當前構(gòu)架的計算方式;
? 動態(tài)張量顯存:我們都知道,顯存的開辟和釋放是比較耗時的,通過調(diào)整一些策略可以減少模型中這些操作的次數(shù),從而可以減少模型運行的時間;
? 多流執(zhí)行:使用CUDA中的stream技術(shù),最大化實現(xiàn)并行操作。





2.熟悉CUDA的基本概念以及主流的并行運算;
3.了解cuDNN與TensorRT兩個深度學(xué)習(xí)模型加速的主流工具;
4.具備動手實踐深度學(xué)習(xí)模型的加速的能力。

掃碼備注【流】
咨詢奕木 了解CUDA
