Pytorch模型定義和模型權重暫時不支持打包在一起,這在推理時候需要先用模型定義代碼構建模型,再加載模型權重,比較麻煩。
借助於onnx格式轉換可以把模型打包一起,在ONNX Runtime中運行推理,ONNX Runtime 是針對 ONNX 模型的以性能為中心的引擎,可大大提升模型的性能。
另外,onnx模型支持在不同框架之間轉換,也支持tensorRT加速
采用ONNX+TensorRT應該是目前最成熟、最優化的方案。假如你的target是一些嵌入式芯片,那么采用MNN也是可以通過onnx輕松實現CPU嵌入式端快速推理的。
既然ONNX和TensorRT這么好,為什么都不用呢?為什么都還在用Python寫難看的推理的代碼呢?原因也很簡單:
-
入門太難,C++一般人玩不來;
-
既要懂模型的每一層輸入輸出,又要懂TensorRT的API,至少要很熟悉。
上面的是將pytorch首先轉化為onnx,然后讓TensorRT解析onnx從而構建TensorRT引擎。那么我們如何讓TensorRT直接加載引擎文件呢,
也就是說,我們先把onnx轉化為TensorRT的trt文件,然后讓c++環境下的TensorRT直接加載trt文件,從而構建engine。