《一》TensorRT之基本概念


以下內容根據個人理解整理而成,如有錯誤,歡迎指出,不勝感激。

0. 寫在前面

由於近期的工作需要用到TensorRT和TensorRT Inference Server,自己也是第一次接觸,因此在這里記錄下相關的學習和使用筆記,內容主要來自於官方相關文檔,如TensorRT Developer Guide等。
本文主要記錄TensorRT相關的基礎知識,主要包括以下幾個方面:

  • 什么是TensorRT
  • TensorRT的工作原理
  • TensorRT學習資源總結

1. 什么是TensorRT

可以把TensorRT看做一個“深度學習框架”,不同於常用的TensorFlow、PyTorch和Caffe等深度學習框架,TensorRT的目的不是如何訓練我們的深度學習模型,而是考慮如何將那些使用其他框架訓練好的模型進行高效快速的Inference。

官方的這張圖可以很明確的說明TensorRT的作用:用於模型訓練完之后的部署階段,以進行高效低延時的Inference:

要注意,TensorRT是NVIDIA配套其相關GPU提供的,並不支持在CPU和其他GPU上使用。

2. TensorRT的工作原理

這里會有疑問:直接使用TensorFlow和PyTorch等模型進行部署不可以嗎?
這當然是可以的,只是TensorRT是一個專用的Inference工具,使用它進行部署會使模型運行更高效。

TensorRT對一個模型主要進行了以下幾點優化(翻譯自官方教程):

  • 去除輸出沒有被使用的層
  • 去除那些相當於沒用的操作
  • 將卷積、偏置和ReLU操作融合在一起
  • 聚合那些相似的操作
  • 融合殘差層
    (以上這些操作中有些並不清楚具體實現原理,后面在使用到時再具體學習)

除了上述對模型整體的優化外,在TensorRT中還可以直接設置權值的精度,如可以進行INT8FP16精度的運算,默認是FP32精度。當然,低精度帶來速度提升的同時,必然會帶來准確度的損失,在模型部署時可根據需要來權衡。

了解了上述概念,需要考慮下一個問題:通過其他框架訓練好的模型,如何導入到TensorRT中使用?
TensorRT支持TensorFlow、PyTorch,MXNet和Caffe等主流框架模型的導入,支持方式是通過一些通用的模型交換格式作為中間媒介。

TensorRT中有三個Parser用於模型的導入:

  • Caffe Parser: 支持Caffe框架模型的導入
  • UFF Parser:通用框架格式(UFF)是描述DNN的執行圖的數據格式
  • ONNX Parser:通用模型交換格式(ONNX)是一種開放式的文件格式,用於存儲訓練好的模型

需要清楚的是,各種框架間模型的轉換,需要的僅僅是模型的定義及權值。
通過將模型保存為以上三個Parser可以解析的格式,則基本上就可以將模型導入到TensorRT中。

接下來的問題是:模型如何在TensorRT執行Inference?
事實上,一個模型從導入到執行,會經過下面三個階段:

  • Network Definition: 這一階段在TensorRT中定義網絡模型,可以使用TensorRT提供的Parser導入已有模型進行定義,也可以使用TensorRT中提供的網絡層來編程定義(這一步應該也需要准備好相關的權值)
  • Builder:前面提到過,TensorRT會對模型進行優化,這一步就是配置各項優化參數,並能生成可執行Inference的Engine
  • Engine:Engine可理解為一個Builder的實例,是我們導入的模型經過Builder的配置所生成的一個優化過的Inference執行器,所有的Inference可直接調用Engine來執行

通過上面的分析可以有這樣的理解:一個導入的模型可根據不同的Builder配置來生成不同的Engine來執行Inference(同一個Builder可生成多個Engine?)

一個模型從導入到生成Engine是需要花費一些時間的,因此TensorRT提供了Engine的序列化和反序列化操作,一旦我們確定了一個Engine,可以對其進行序列化操作,下次執行Inference時直接反序列化該Engine即可。

3. 其他零碎的東西:

  • TensorRT提供了C++接口和Python接口,官方建議使用C++接口
  • 一個Engine的建立是根據特定GPU和CUDA版本來的,所以在一個機器上序列化的Engine到另一個機器上不一定能使用,因此在使用Builder生成Engine前,要注意自己的環境配置
  • TensorRT可結合DALI(加速數據讀取)和DLA(加速某些層的運算)一起使用
  • 對於TensorRT中不支持的層,需要自己編寫相應的文件,TensorRT提供了相關支持

4. TensorRT的獲取及相關學習資源

個人認為使用TensorRT最好的方式就是使用其docker鏡像,需要以下三個步驟:

關於TensorRT的學習資源,個人認為官方的一些文檔寫的很詳細,值得學習,個人的這些Blog也大多數來自官方文檔,主要如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM