tensorRT介紹

1-什么是算力

TOPS是Tera Operations Per Second的縮寫(xiě)
1TOPS代表處理器每秒鐘可進(jìn)行一萬(wàn)億次(10^12)操作
GOPS(Giga Operations Per Second:1GOPS代表處理器每秒鐘可進(jìn)行十億次(10^9)操作
MOPS(Million Operation Per Second):1MOPS代表處理器每秒鐘可進(jìn)行一百萬(wàn)次(10^6)操作

一個(gè)MFLOPS(megaFLOPS)等于每秒一百萬(wàn)(=10^6)次的浮點(diǎn)運(yùn)算
一個(gè)GFLOPS(gigaFLOPS)等于每秒十億(=10^9)次的浮點(diǎn)運(yùn)算
一個(gè)TFLOPS(teraFLOPS)等于每秒一萬(wàn)億(=10^12)次的浮點(diǎn)運(yùn)算注簿,(1太拉)
一個(gè)PFLOPS(petaFLOPS)等于每秒一千萬(wàn)億(=10^15)次的浮點(diǎn)運(yùn)算

2-什么TensorRT

高吞吐率凤优、低響應(yīng)時(shí)間煌往、低資源消耗以及簡(jiǎn)便的部署流程要求,因此TensorRT就是用來(lái)解決推理所帶來(lái)的挑戰(zhàn)以及影響的部署級(jí)的解決方案英支。TensorRT 是nvidia 自己開(kāi)發(fā)的,主要作用就是對(duì)算法進(jìn)行優(yōu)化杖挣,然后進(jìn)行了部署

TensorRT 部署流程:


第一步

第二步

TensorRT的部署分為兩個(gè)部分:

  • 優(yōu)化訓(xùn)練好的模型并生成計(jì)算流圖
  • 使用TensorRT Runtime部署計(jì)算流圖
TensorRT支持類型
  • 輸入篇之網(wǎng)絡(luò)框架:TensorRT3支持所有常見(jiàn)的深度學(xué)習(xí)框架包括Caffe慢洋、Chainer、CNTK匾效、MXnet搏予、PaddlePaddle、Pytorch弧轧、TensorFlow以及Theano雪侥。
  • 輸入篇之接口方式:TensorRT3支持模型導(dǎo)入方式包括C++ API、Python API精绎、NvCaffeParser和NvUffParser
  • 輸出篇之支持系統(tǒng)平臺(tái):TensorRT3支持的平臺(tái)包括Linux x86速缨、Linux aarch64、Android aarch64和QNX aarch64代乃。
  • 輸出篇之支持硬件平臺(tái):TensorRT3可以運(yùn)行在每一個(gè)GPU平臺(tái)旬牲,從數(shù)據(jù)中心的Tesla P4/V100到自動(dòng)駕駛和嵌入式平臺(tái)的DrivePX及TX1/TX2。

3-TensorRT優(yōu)化方式

  • 層間融合或張量融合(Layer & Tensor Fusion)
    如下圖左側(cè)是GoogLeNetInception模塊的計(jì)算圖搁吓。這個(gè)結(jié)構(gòu)中有很多層原茅,在部署模型推理時(shí),這每一層的運(yùn)算操作都是由GPU完成的堕仔,但實(shí)際上是GPU通過(guò)啟動(dòng)不同的CUDA(Compute unified device architecture)核心來(lái)完成計(jì)算的擂橘,CUDA核心計(jì)算張量的速度是很快的,但是往往大量的時(shí)間是浪費(fèi)在CUDA核心的啟動(dòng)和對(duì)每一層輸入/輸出張量的讀寫(xiě)操作上面摩骨,這造成了內(nèi)存帶寬的瓶頸和GPU資源的浪費(fèi)通贞。TensorRT通過(guò)對(duì)層間的橫向或縱向合并(合并后的結(jié)構(gòu)稱為CBR,意指 convolution, bias, and ReLU layers are fused to form a single layer)恼五,使得層的數(shù)量大大減少昌罩。橫向合并可以把卷積、偏置和激活層合并成一個(gè)CBR結(jié)構(gòu)灾馒,只占用一個(gè)CUDA核心茎用。縱向合并可以把結(jié)構(gòu)相同睬罗,但是權(quán)值不同的層合并成一個(gè)更寬的層轨功,也只占用一個(gè)CUDA核心。合并之后的計(jì)算圖(圖4右側(cè))的層次更少了傅物,占用的CUDA核心數(shù)也少了夯辖,因此整個(gè)模型結(jié)構(gòu)會(huì)更小,更快董饰,更高效蒿褂。


  • 數(shù)據(jù)精度校準(zhǔn)(Weight &Activation Precision Calibration)
    大部分深度學(xué)習(xí)框架在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí)網(wǎng)絡(luò)中的張量(Tensor)都是32位浮點(diǎn)數(shù)的精度(Full 32-bit precision圆米,F(xiàn)P32),一旦網(wǎng)絡(luò)訓(xùn)練完成啄栓,在部署推理的過(guò)程中由于不需要反向傳播娄帖,完全可以適當(dāng)降低數(shù)據(jù)精度,比如降為FP16或INT8的精度昙楚。更低的數(shù)據(jù)精度將會(huì)使得內(nèi)存占用和延遲更低近速,模型體積更小。
    如下表為不同精度的動(dòng)態(tài)范圍:
    Precision Dynamic Range
    FP32 -3.4×10^{38} ~ +3.4×10^{38}
    FP16 -65504 ~ +65504
    INT8 -128 ~ +127

INT8只有256個(gè)不同的數(shù)值堪旧,使用INT8來(lái)表示 FP32精度的數(shù)值削葱,肯定會(huì)丟失信息,造成性能下降淳梦。不過(guò)TensorRT會(huì)提供完全自動(dòng)化的校準(zhǔn)(Calibration )過(guò)程析砸,會(huì)以最好的匹配性能將FP32精度的數(shù)據(jù)降低為INT8精度,最小化性能損失爆袍。關(guān)于校準(zhǔn)過(guò)程首繁,后面會(huì)專門(mén)做一個(gè)探究。

  • Kernel Auto-Tuning
    網(wǎng)絡(luò)模型在推理計(jì)算時(shí)陨囊,是調(diào)用GPU的CUDA核進(jìn)行計(jì)算的弦疮。TensorRT可以針對(duì)不同的算法,不同的網(wǎng)絡(luò)模型蜘醋,不同的GPU平臺(tái)胁塞,進(jìn)行 CUDA核的調(diào)整(怎么調(diào)整的還不清楚),以保證當(dāng)前模型在特定平臺(tái)上以最優(yōu)性能計(jì)算堂湖。
    TensorRT will pick the implementation from a library of kernels that delivers the best performance for the target GPU, input data size, filter size, tensor layout, batch size and other parameters.

  • Dynamic Tensor Memory
    在每個(gè)tensor的使用期間闲先,TensorRT會(huì)為其指定顯存,避免顯存重復(fù)申請(qǐng)无蜂,減少內(nèi)存占用和提高重復(fù)使用效率。

  • Multi-Stream Execution
    Scalable design to process multiple input streams in parallel蒙谓,這個(gè)應(yīng)該就是GPU底層的優(yōu)化了斥季。

優(yōu)化結(jié)果:

4-TensorRT運(yùn)行一個(gè)demo

使用了nvidia 板子,使用了sdkmanager 安裝累驮,板子已經(jīng)安裝了下面軟件


遇到問(wèn)題:
第一步:
cd /usr/src/tensorrt/samples/sampleMNIST
查看README.md,在該目錄下make
生產(chǎn)的bin 的路徑是:
/usr/src/tensorrt/bin/sample_mnist
執(zhí)行指令:
sudo ./sample_mnist [-h] [–datadir=/usr/src/tensorrt/data/mnist] [–useDLA=1] [–int8]

上面指令運(yùn)行錯(cuò)誤酣倾,找不到*.pgm
cd  /usr/src/tensorrt/data/mnist/
sudo python3 download_pgms.py
沒(méi)有任何響應(yīng),稍等之后谤专,下載有*.pgm

可能遇到的錯(cuò)誤:
pip install pillow
Traceback (most recent call last):
  File "download_pgms.py", line 2, in <module>
    from PIL import Image
ModuleNotFoundError: No module named 'PIL

處理方式:
nvidia@nvidia-desktop:/usr/bin$ ls -l python
lrwxrwxrwx 1 root root 9 9?. 24 19:42 python -> python3.6
nvidia@nvidia-desktop:/usr/bin$ python -V
Python 3.6.9
下面運(yùn)行指令可以安裝pillow:
pip install pillow

sudo apt-get install python-pip
sudo apt-get install python3-pip

運(yùn)行結(jié)果:


REF:
https://mp.weixin.qq.com/s/E5qbMsuc7UBnNmYBzq__5Q##
https://arleyzhang.github.io/articles/7f4b25ce/
https://www.pianshen.com/article/3389187425/
https://zhuanlan.zhihu.com/p/84125533
nvidia 官方參考文檔:
https://docs.nvidia.com/deeplearning/tensorrt/quick-start-guide/index.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末躁锡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子置侍,更是在濱河造成了極大的恐慌映之,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異芥颈,居然都是意外死亡歪玲,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)蠢甲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)僵刮,“玉大人,你說(shuō)我怎么就攤上這事鹦牛「愀猓” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵曼追,是天一觀的道長(zhǎng)寞宫。 經(jīng)常有香客問(wèn)我,道長(zhǎng)拉鹃,這世上最難降的妖魔是什么辈赋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮膏燕,結(jié)果婚禮上钥屈,老公的妹妹穿的比我還像新娘。我一直安慰自己坝辫,他們只是感情好篷就,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著近忙,像睡著了一般竭业。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上及舍,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天未辆,我揣著相機(jī)與錄音,去河邊找鬼锯玛。 笑死咐柜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的攘残。 我是一名探鬼主播拙友,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼歼郭!你這毒婦竟也來(lái)了遗契?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤病曾,失蹤者是張志新(化名)和其女友劉穎牍蜂,沒(méi)想到半個(gè)月后漾根,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捷兰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年立叛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贡茅。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡秘蛇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出顶考,到底是詐尸還是另有隱情赁还,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布驹沿,位于F島的核電站艘策,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏渊季。R本人自食惡果不足惜朋蔫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望却汉。 院中可真熱鬧驯妄,春花似錦、人聲如沸合砂。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)翩伪。三九已至微猖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缘屹,已是汗流浹背凛剥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留囊颅,地道東北人当悔。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像踢代,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子嗅骄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容