1. 程式人生 > >筆記|初步瞭解TensorRT

筆記|初步瞭解TensorRT

1. 什麼是TensorRT?

眾所周知神經網路在CV等領域有著非常出眾的表現,但是現實部署往往面臨網路模型inference時間過大等問題,各類加速尤其是針對inference階段的加速手段被提出。TensorRT是NVIDIA針對神經網路inference階段提供的加速器。

2. TensorRT 做了哪些優化?

相對於訓練過程,網路推斷時模型結構及引數都已經固定,batchsize一般較小,對於精度的要求相較於訓練過程也較低,這就給了很大的優化空間。具體到TensorRT,主要在一下幾個方面進行了優化:

  1. 合併某些層
    有時制約計算速度的並不僅僅是計算量,而是網路對於記憶體的讀寫花費太大,TensorRT中將多個層的操作合併為同一個層,這樣就可以一定程度的減少kernel launches和記憶體讀寫。例如conv和relu等操作一次做完。

另外,對於相同輸入及相同filtersize的層會合併為同一層,利用preallocating buffers等消除了concat層

  1. 支援FP16 或者INT8的資料型別
    訓練時由於梯度等對於計算精度要求較高,但是inference階段可以利用精度較低的資料型別加速運算,降低模型的大小

  2. Kernel Auto-Tuning
    TensorRT針對不同的超引數有一寫演算法層面的優化,比如會根據卷積核的大小、輸入大小等超引數確定使用哪種演算法進行卷積運算

  3. Dynamic Tensor Memory
    TensorRT經過優化減少記憶體開銷,提高記憶體的reuse

  4. 多支並行運算
    對於同一輸入的多個分支可以進行並行運算