最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

【pytorch模型轉onnx模型】一些模型轉化和加速推理的知識

2022-04-08 19:09 作者:深度之眼官方賬號  | 我要投稿

來源:投稿 作者:王浩

編輯:學姐


最近,學習了一些模型轉化和加速推理的知識,本文是對學習成果的總結。


對模型的轉化,本文實現了pytorch模型轉onnx模型和onnx轉TensorRT,在轉為TensorRT模型的過程中,實現了模型單精度的壓縮。


對于加速推理,本文實現GPU環(huán)境下的onnxruntime推理、? TensorRT動態(tài)推理和TensorRT靜態(tài)推理。


希望本文能幫助大家。


環(huán)境配置

  • CUDA版本:11.3.1

  • cuDNN版本:8.2.1

  • TensorRT版本:8.0.3.4

  • 顯卡:1650

  • pytorch:1.10.2

模型的轉化和推理對版本有要求,如果版本對應不上很可能出現千奇百怪的問題,所以我把我的版本信息列出來給大家做參考。


ONNX

ONNX,全稱: Open Neural Network Exchange(ONNX,開放神經網絡交換),是一個用于表 示深度學習模型的標準,可使模型在不同框架之間進行轉移。


ONNX是一種針對機器學習所設計的開放式的文件格式,用于存儲訓練好的模型。它使得不同的人工智能框架(如Pytorch, MXNet)可以采用相同格式存儲模型數據并交互。ONNX的規(guī)范及代碼主要由微軟,亞馬遜 ,Facebook 和 IBM 等公司共同開發(fā),以開放源代碼的方式托管在Github上。目前官方支持加載ONNX模型并進行推理的深度學習框架有:Caffe2, PyTorch,MXNet,ML.NET,TensorRT和Microsoft CNTK,并且TensorFlow也非官方的支持ONNX。---維基百科


onnx模型可以看作是模型轉化之間的中間模型,同時也是支持做推理的。一般來說,onnx的推理 速度要比pytorch快上一倍。


模型轉化

? ?

onnx模型轉換和推理需要安裝Python包,如下:


? ??

新建模型轉換腳本pytorch2onnx.py。


導入需要的包。

打印pytorch版本。

定義input_name和output_name變量。

定義輸入格式。

加載pytorch模型。

導出onnx模型,這里注意一下參數opset_version在8.X版本中設置為13,在7.X版本中設置為12。

yolov5中這么寫的。



查看轉化后的模型,如下圖:



推理的寫法有兩種,一種直接寫,另一種將其封裝為通用的推理類。


第一種推理寫法


先看第一種寫法,新建test_onnx.py,插入下面的代碼:

? ?

導入包

定義get_test_transform函數,實現圖像的歸一化和resize。


讀取圖像


??

對圖像做resize和歸一化。

增加一維batchsize。

將圖片轉為數組。

定義onnx_model_path模型的路徑。

加載onnx模型。

定義輸入。

執(zhí)行推理。

獲取預測結果。

到這里第一種寫法就完成了,是不是很簡單,接下來看第二種寫法。


第二種推理寫法


新建onnx.py腳本,加入以下代碼:

調用onnx.py實現推理,新建test_onnx1.py插入代碼:

輸出結果如下:


TensorRT

????????????????????????????????????????????????

TensorRT是英偉達推出的一個高性能的深度學習推理(Inference)優(yōu)化器,可以為深度學習應用提供低延遲、高吞吐率的部署推理。


TensorRT可用于對超大規(guī)模數據中心、嵌入式平臺或自動駕駛平臺 進行推理加速。


TensorRT現已能支持TensorFlow、Caffe、Mxnet、Pytorch等幾乎所有的深度學習框架,將TensorRT和NVIDIA的GPU結合起來,能在幾乎所有的框架中進行快速和高效的部署推理。


TensorRT 是一個C++庫,從 TensorRT 3 開始提供C++ API和Python API,主要用來針對 NVIDIA GPU進行 高性能推理(Inference)加速。


TensorRT的安裝可以參考我以前的文章:

https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/120360288。


本次用的8.X版本的,安裝方式一樣。


本文實現Python版本的 TensorRT 推理加速,需要安裝tensorrt包文件。這個文件不能直接通過pip下載,我在下載的TensorRT安裝包里,不過我下載的8.0.3.4版本中并沒有,在8.2.1.8的版本中存在這個包文件。



所以我安裝了8.2.1.8中的whl文件。


安裝方式,進入模型所在的目錄,執(zhí)行:



模型推理用到了pycuda,執(zhí)行安裝命令:


模型轉化


將onnx模型轉為TensorRT 模型,新建onnx2trt.py,插入代碼:



build_engine函數共有三個參數:

onnx_file_path: onnx模型的路徑。

engine_file_path:TensorRT模型的路徑。

half:是否使用單精度。


單精度的模型速度更快,所以我選擇使用單精度。


通過上面的代碼就可以完成模型的轉化,下面開始實現推理部分,推理分為動態(tài)推理和靜態(tài)推理。


動態(tài)推理


新建test_trt,py文件,插入代碼:

導入需要的包。



定義load_engine函數和get_test_transform函數。

load_engine用于加載TensorRT模型。

get_test_transform實現圖像的resize和歸一化。


圖片的預處理,和onnx一樣,最后轉為數組。


輸出結果:



靜態(tài)推理


靜態(tài)推理和動態(tài)推理的代碼差不多,唯一不同的是不需要



運行結果:



【pytorch模型轉onnx模型】一些模型轉化和加速推理的知識的評論 (共 條)

分享到微博請遵守國家法律
奉新县| 柘城县| 闻喜县| 蒙自县| 新田县| 永仁县| 怀远县| 仙游县| 西畴县| 长宁区| 隆化县| 上高县| 江油市| 新泰市| 襄垣县| 如皋市| 新蔡县| 象山县| 青龙| 海南省| 大丰市| 昌都县| 涡阳县| 武山县| 古田县| 伊宁县| 宝应县| 年辖:市辖区| 尚义县| 浮山县| 开封县| 靖州| 北安市| 河西区| 松原市| 滨州市| 南溪县| 枞阳县| 辉县市| 农安县| 郯城县|