天天看點

TensorRT 學習(1)

在DL模型的實際部署中,考慮到應用場景和對latency的高要求,出現了inference engine的概念,需要将訓練好的各架構的模型部署到inference engine中提升模型的推理效率,可以充分利用硬體計算能力提升裝置潛力,TensorRT就是NVIDIA針對GPU開發出的一款inference engine;

TensorRT基礎概念

TensorRT 學習(1)
  • 關于DL model training和inference過程的差別:
    • 在模型的training過程中,主要包括forward和backward兩個階段,由于需要反向傳播誤差來更新權重,期間需要存儲大量的中間結果,常用的加速訓練的方式主要是多GPU分布式訓練,這是很消耗計算資源的成本很高;
    • inference過程比較單一,不需要存儲中間結果,模型隻需要順序做一次計算就行,在實際部署中對計算資源需求不大,但是目前很多場景對實時性要求很高,是以希望在計算裝置上inference盡可能地快,TensorRT的出現就是為了優化提升inference的性能;
  • TensorRT的作用域和部署結構:
    • TensorRT是一個隻做inference的deep learning架構,其輸入為各深度學習架構的訓練模型;
    • TensorRT會對模型結構進行解析,并對模型進行優化和結構重組;
    • TensorRT的輸出為deployment-ready runtime engine,配合着TensorRT的Runtime可以将優化後的推理模型部署到GPU各硬體平台;
TensorRT 學習(1)
  • TensorRT優化政策:
    • Layer & Tensor Fusion:在inference過程中輸入輸出資料的讀寫占用大量的時間,此時資料搬運的帶寬就成了計算性能的瓶頸,同時GPU的計算資源也沒有得到充分的利用,是以采用layer fusion的方式來減少layer數目,不僅可以提升CUDA core的使用率同時精簡了整個模型結構使得inference更高效;
    • Kernel Auto-Tuning:這部分的優化政策涉及到CUDA core的具體調用,是指TensorRT在針對不同模型不同硬體環境自動調整CUDA core的計算調用進而達到最優的計算性能;
    • Multi-Stream Execution:TensorRT針對GPU的底層優化,可以并行處理輸入資料流;
    • Dynamic Tensor Memory:TensorRT會在inference階段為每一個Tensor指定顯存,可以優化顯存的占用提高顯存複用率;
    • Precision Calibration:在訓練過程中tensor通常都是FP32,這樣可以保證訓練時候的反向傳播的精度,在inference階段可以在保證計算精度很小損失的情況下降低資料精度,進而減少模型資料量記憶體占用量提升latency時間,将FP32轉換成FP16和INT8肯定是有精度損失的,但是TensorRT可以自動化進行模型的校準,保證在FP32轉INT8的過程中最小化性能損失;
TensorRT 學習(1)

TensorRT的 interface

  • Network Definition:主要功能是為定義優化網絡提供接口;
  • Builder:主要功能是從定義的網絡建立一個優化engine;
  • Engine:主要功能是允許應用程式執行inference過程;
  • TensorRT的Parser:CaffeParser、UFFParser、ONNXParser

TensorRT workflow

TensorRT 學習(1)
TensorRT 學習(1)
  • TensorRT主要有build engine和engine deployment兩個階段:
    • build:輸入訓練好的模型檔案,經過優化和進度校準輸出針對目前GPU平台和網絡結構的TensorRT模型;
    • deploy:加載TensorRT模型構造一個runtime engine并建立執行context,輸入資料完成inference;

繼續閱讀