tensorrt, batch
trtexec位址
參考官方的說明,進行項目編譯
pytorch->onnx的時候,需要在動态尺寸上定義好,例如:
這裡就是定義batch的數值為動态的。
導出成onnx後,可以看一下輸入的shape:batch_size×3×480×640

trtexec模型轉換
直接可以用以下指令進行模型轉換
說明:
onnx: 輸入的onnx模型
saveEngine:轉換好後儲存的tensorrt engine
workspace:使用的gpu記憶體,有時候不夠,需要手動增大點
minShapes:動态尺寸時的最小尺寸,格式為NCHW,需要給定輸入node的名字,
optShapes:推理測試的尺寸,trtexec會執行推理測試,該shape就是測試時的輸入shape
maxShapes:動态尺寸時的最大尺寸,這裡隻有batch是動态的,其他次元都是寫死的
fp16:float16推理
推理指令
由上一節的介紹,動态batch推理時,通過改變optShapes的參數就可以實作不同batch的推理。例如:
耗時情況
trtexec會列印出很多時間,這裡需要對每個時間的含義進行解釋,然後大家各取所需,進行評測。總的列印如下:
Host Latency gpu: 輸入+計算+輸出 三部分的耗時
Enqueue Time:CPU異步的時間(該時間不具有參考意義,因為GPU的計算可能還沒有完成)
GPU Compute:GPU計算的耗時
綜上,去了Enqueue Time時間都是有意義的
這裡附上個人的測試。
裝置
模型
model
batch
gpu 計算耗時/ms
3080pc
ddrnet23_ocr
fp16
1
1.70512
2
2.70069
4
4.78706
8
9.03271
16
16.1414
可以看到tensorrt的batch推理有線性增長的問題