以下內容根據個人理解整理而成,如有錯誤,歡迎指出,不勝感激。由於近期的工作需要用到tensorrt和tensorrt inference server,自己也是第一次接觸,因此在這裡記錄下相關的學習和使用筆記,內容主要來自於官方相關文件,如tensorrt developer guide等。
本文主要記錄tensorrt相關的基礎知識,主要包括以下幾個方面:
可以把tensorrt看做乙個「深度學習框架」,不同於常用的tensorflow、pytorch和caffe等深度學習框架,tensorrt的目的不是如何訓練我們的深度學習模型,而是考慮如何將那些使用其他框架訓練好的模型進行高效快速的inference。
官方的這張圖可以很明確的說明tensorrt的作用:用於模型訓練完之後的部署階段,以進行高效低延時的inference:
要注意,tensorrt是nvidia配套其相關gpu提供的,並不支援在cpu和其他gpu上使用。
這裡會有疑問:直接使用tensorflow和pytorch等模型進行部署不可以嗎?
這當然是可以的,只是tensorrt是乙個專用的inference工具,使用它進行部署會使模型執行更高效。
tensorrt對乙個模型主要進行了以下幾點優化(翻譯自官方教程):
除了上述對模型整體的優化外,在tensorrt中還可以直接設定權值的精度,如可以進行int8
或fp16
精度的運算,預設是fp32
精度。當然,低精度帶來速度提公升的同時,必然會帶來準確度的損失,在模型部署時可根據需要來權衡。
tensorrt支援tensorflow、pytorch,mxnet和caffe等主流框架模型的匯入,支援方式是通過一些通用的模型交換格式作為中間媒介。
tensorrt中有三個parser用於模型的匯入:
需要清楚的是,各種框架間模型的轉換,需要的僅僅是模型的定義及權值。
通過將模型儲存為以上三個parser可以解析的格式,則基本上就可以將模型匯入到tensorrt中。
接下來的問題是:模型如何在tensorrt執行inference?
事實上,乙個模型從匯入到執行,會經過下面三個階段:
通過上面的分析可以有這樣的理解:乙個匯入的模型可根據不同的builder配置來生成不同的engine來執行inference(同乙個builder可生成多個engine?)
乙個模型從匯入到生成engine是需要花費一些時間的,因此tensorrt提供了engine的序列化和反序列化操作,一旦我們確定了乙個engine,可以對其進行序列化操作,下次執行inference時直接反序列化該engine即可。
個人認為使用tensorrt最好的方式就是使用其docker映象,需要以下三個步驟:
關於tensorrt的學習資源,個人認為官方的一些文件寫的很詳細,值得學習,個人的這些blog也大多數來自官方文件,主要如下:
一 基本概念
資料 程式的操作物件,用於描述客觀事物 資料元素 組成資料的基本單位 資料項 乙個資料元素由若干個資料項組成 資料物件 性質相同的資料元素的集合 陣列,鍊錶 struct person 一種資料型別 int main void 資料項 p1.age 0 資料項 線性結構 元素之間的關係為一對一 圖形...
機器學習(一)之基本概念
機器學習的前言研究 這裡我想先提出5個問題?然後通過學習依次來解決它們?使用日常生活中的例子說明 機器學習所對應的哪些問題 任務?以路徑規劃 高德地圖 為例,說明機器學習演算法與傳統的演算法相比,其優勢是什麼?機器學習 資料探勘 人工智慧 大資料的聯絡和區別是什麼?機器學習現在很火,以後會降溫嗎?為...
基本概念 C 基本概念
由於工作中需要用到c 編寫的一些工具,有時候需要根據需求修改或者定製工具,所以現在不得不學習一下c 的基礎語法,此為筆記,不成章法!機器語言 組合語言 高階語言 面向過程的程式設計方法 物件導向的程式設計方法 泛型程式設計方法 1 演算法設計 2 源程式編輯 3 編譯 4 連線 5 執行除錯 輸入裝...