模型部署之 TensorRT 初步入門

TensorRT 是 NVIDIA 提出的用于統(tǒng)一模型部署的加速器,可以應用于 NVIDIA 自家設(shè)計的硬件平臺比如 NVIDIA Tesla A100 顯卡帜慢,JETSON Xavier 開發(fā)板等隔披,它的輸入可以是來自各個流行的訓練框架泄鹏,比如 Tensorflow, Pytorch 等訓練得到的模型結(jié)果嫉沽。

官網(wǎng)定義:

TensorRT is built on CUDA, NVIDIA’s parallel programming model, and enables you to optimize inference for all deep learning frameworks leveraging libraries, development tools and technologies in CUDA-X for artificial intelligence, autonomous machines, high-performance computing, and graphics.

TensorRT包括 推理優(yōu)化(inference optimization) 和 runtime 兩部分呀潭,類似于 MicroSoft 提出的 ONNX Runtime昔逗,但 ONNX Runtime 一般只能接收 ONNX 格式的模型降传,而TensorRT可以接受包括ONNX,Pytorch, Tensorflow等基本上所有框架的模型


TensorRT在對模型優(yōu)化時主要進行了5個調(diào)整:

1. Layer and tensor fusion

kernel fusion

kernel fusion 的主要目的是提高GPU的利用效率,減少 kernel 的數(shù)目勾怒,因為每增加一個算子就會增加一份數(shù)據(jù)讀寫婆排,而數(shù)據(jù)讀寫是相對比較耗時的,同時增加一個算子也會增加一次計算

  • 因此將可以融合的模塊比如 conv-bn-relu三個模塊就可以融合成一個模塊這就可以減少數(shù)據(jù)讀寫和多次計算
  • 對于具有同一個輸入笔链,且模塊內(nèi)容相同的模塊段只,但是輸出不一樣的,如上圖左的 3 個 1x1 模塊卡乾,就可以利用并行parallel進行計算翼悴,再輸出到不同的節(jié)點。具體的實現(xiàn)方法后續(xù)跟進

When you have identical kernels which take the same input but just use different weights, you can combine the kernels by making a single kernel wider in a sense that is processes more of these operations in parallel. The output from these horizontally fused kernels will be automatically split up if they feed to different kernels further down the graph。

2. Precision Calibration

校準精度鹦赎,由于這里 inference 過程只需要 forward谍椅,并不需要 backward, 因此就不需要 32位的浮點數(shù)來進行計算,因此可以合理的采用 fp16 或者 int8 來進行 forward, 這樣可以是的模型存儲空間更小古话,更低的內(nèi)存占用和延遲



具體的實現(xiàn)方法后續(xù)跟進雏吭,引用如下:

TensorRT achieved this by using an automated parameter-free calibration step to change the weighs and activation tensors into lower precision using a representative input sample and this is done such that the model minimizes the accuracy loss.

3. Kernel Auto-tuning

對于同一個操作(卷積等)有很多不同的底層實現(xiàn),TensorRT 可以根據(jù)你的參數(shù) 比如 batch-size, filter-size, input data size 等或者部署平臺去選擇最優(yōu)的實現(xiàn)方法陪踩。


4. Dynamic Tensor Memory

dynamic tensor memory ensures that memory is allocated for each tensor only for the duration of its usage. This naturally reduces memory footprint and improves memory reuse.

5. Multi-Stream Execution

Multi-stream execution is essential when you scale the inference to multiple clients. This is achieved by allowing multiple input streams to use the same model in parallel on a single device


代碼:

可以使用 TRTorch, torch2trt, 或者TF-TRT對模型進行轉(zhuǎn)換
TRTorch, torch2trt

image.png

pytorch 舉例:

import torch
from torch2trt import torch2trt
from torchvision.models.alexnet import alexnet

# create some regular pytorch model...
model = alexnet(pretrained=True).eval().cuda()

# create example data
x = torch.ones((1, 3, 224, 224)).cuda()

# convert to TensorRT feeding sample data as input
model_trt = torch2trt(model, [x])

y = model(x)
y_trt = model_trt(x)

# check the output against PyTorch
print(torch.max(torch.abs(y - y_trt)))

模型保存和加載:

torch.save(model_trt.state_dict(), 'alexnet_trt.pth')
from torch2trt import TRTModule
model_trt = TRTModule()
model_trt.load_state_dict(torch.load('alexnet_trt.pth'))

Webinar: Deploying Models with TensorRT

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末杖们,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子肩狂,更是在濱河造成了極大的恐慌摘完,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件傻谁,死亡現(xiàn)場離奇詭異孝治,居然都是意外死亡,警方通過查閱死者的電腦和手機审磁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門谈飒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人态蒂,你說我怎么就攤上這事杭措。” “怎么了钾恢?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵手素,是天一觀的道長。 經(jīng)常有香客問我赘那,道長刑桑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任募舟,我火速辦了婚禮祠斧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拱礁。我一直安慰自己琢锋,他們只是感情好,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布呢灶。 她就那樣靜靜地躺著吴超,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鸯乃。 梳的紋絲不亂的頭發(fā)上鲸阻,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天跋涣,我揣著相機與錄音,去河邊找鬼鸟悴。 笑死陈辱,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的细诸。 我是一名探鬼主播沛贪,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼震贵!你這毒婦竟也來了利赋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤猩系,失蹤者是張志新(化名)和其女友劉穎媚送,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寇甸,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡季希,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了幽纷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡博敬,死狀恐怖友浸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情偏窝,我是刑警寧澤收恢,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站祭往,受9級特大地震影響伦意,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜硼补,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一驮肉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧已骇,春花似錦离钝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至鲤竹,卻和暖如春浪读,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工碘橘, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留互订,地道東北人。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓蛹屿,卻偏偏與公主長得像屁奏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子错负,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

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