日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TensorRT8——ONNX转trt

發布時間:2023/12/20 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TensorRT8——ONNX转trt 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

TensorRT安裝

首先需要確保正確安裝CUDA,安裝后通過nvcc -V驗證是否安裝。

下載TensorRT
網址:https://developer.nvidia.com/nvidia-tensorrt-8x-download,下載最新版解壓

tar -xzvf TensorRT-8.4.0.6.Linux.x86_64-gnu.cuda-11.6.cudnn8.3.tar.gz

為了節省根目錄的內存,TensorRT我放在home下,添加環境變量

sudo vim ~/.bashrc export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/3D/TensorRT-8.4.0.6/lib source ~/.bashrc

接著,我們通過樣例程序判斷TRT能否正常工作。我們先是將sampleMNIST源碼進行編譯,此時會在bin目錄生成可執行文件,我們切換過去直接執行。

cd ~/3D/TensorRT-8.4.0.6/samples/sampleMNIST make cd ../../bin/ ./sample_mnist


如果輸出如下內容,最后顯示PASSED,表明樣例運行通過。

python支持

在上一部分中,雖然我們已經安裝了TensorRT,但是我們的Python環境還不能通過import tensorrt導入,所以需要通過安裝對應的.whl來實現。

pip install ../TensorRT-8.4.0.6/python/tensorrt-8.4.0.6-cp37-none-linux_x86_64.whl

ONNX部署

TensorRT是nvidia公司針對nvidia顯卡訓練的模型在特定平臺進行加速的推理優化庫,是一個c++庫,僅支持推理,不支持訓練;

進行推理,需要先創建IExecutionContext對象,要創建這個對象,就需要先創建一個ICudaEngine的對象(engine),兩種創建engine的方式:

  • 使用模型文件創建engine,并可把創建的engine序列化后存儲到硬盤以便后面直接使用;
  • 使用之前已經序列化存儲的engine,這種方式比較高效些,因為解析模型并生成engine還是挺慢的。

C++

TensorRT版本改動挺多的,大家可以直接查看API文檔

#include "NvInfer.h" #include "NvOnnxParser.h" #include "NvInferRuntimeCommon.h" #include <string> #include <iostream> #include <fstream>// Logger for TensorRT info/warning/errors class Logger : public nvinfer1::ILogger { public:Logger(Severity severity = Severity::kWARNING) : reportableSeverity(severity){}void log(Severity severity, char const* msg) noexcept// void log(Severity severity, const char* msg) noexcept{// suppress messages with severity enum value greater than the reportableif (severity > reportableSeverity)return;switch (severity){case Severity::kINTERNAL_ERROR:std::cerr << "INTERNAL_ERROR: ";break;case Severity::kERROR:std::cerr << "ERROR: ";break;case Severity::kWARNING:std::cerr << "WARNING: ";break;case Severity::kINFO:std::cerr << "INFO: ";break;default:std::cerr << "UNKNOWN: ";break;}std::cerr << msg << std::endl;}Severity reportableSeverity; };static Logger g_logger_;void onnxToTRTModel(const std::string &model_file, // name of the onnx modelnvinfer1::IHostMemory *&trt_model_stream) // output buffer for the TensorRT model {int verbosity = (int)nvinfer1::ILogger::Severity::kWARNING;// create the buildernvinfer1::IBuilder* builder = nvinfer1::createInferBuilder(g_logger_);// 創建INetworkDefinition 對象nvinfer1::INetworkDefinition* network = builder->createNetworkV2(1U <<static_cast<uint32_t>(nvinfer1::NetworkDefinitionCreationFlag::kEXPLICIT_BATCH));// 創建解析器auto parser = nvonnxparser::createParser(*network, g_logger_);// 解析onnx文件,并填充網絡if (!parser->parseFromFile(model_file.c_str(), verbosity)){std::string msg("failed to parse onnx file");g_logger_.log(nvinfer1::ILogger::Severity::kERROR, msg.c_str());exit(EXIT_FAILURE);}// Build the enginebuilder->setMaxBatchSize(1);// 創建iBuilderConfig對象nvinfer1::IBuilderConfig* iBuilderConfig = builder->createBuilderConfig();// 設置engine可使用的最大GPU臨時值iBuilderConfig ->setMaxWorkspaceSize(1 << 20);nvinfer1::ICudaEngine* engine = builder->buildEngineWithConfig(*network,*iBuilderConfig);// 將engine序列化,保存到文件中trt_model_stream = engine->serialize();// save enginestd::ofstream p("../model.trt", std::ios::binary);if (!p) {std::cerr << "could not open plan output file" << std::endl;}p.write(reinterpret_cast<const char *>(trt_model_stream->data()), trt_model_stream->size());parser->destroy();engine->destroy();network->destroy();builder->destroy();iBuilderConfig->destroy(); }int main() {nvinfer1::IHostMemory *trt_model_stream;onnxToTRTModel("../../config/pfe.onnx", trt_model_stream); }

CMakeLists.txt

cmake_minimum_required(VERSION 3.10) project(onnxToTensorRT) find_package(CUDA)SET(TENSORRT_PATH /home/xiaohu/3D/TensorRT-8.4.0.6/) SET(TENSORRT_LIB_PATH /home/xiaohu/3D/TensorRT-8.4.0.6/lib)include_directories(include${TENSORRT_PATH}/include${CUDA_INCLUDE_DIRS} )set(SOURCE_FILESonnxToTensorRT.cpp )file(GLOB TENSORRT_LIBS "${TENSORRT_LIB_PATH}/*.so") cuda_add_executable(${PROJECT_NAME} ${SOURCE_FILES}) target_link_libraries(${PROJECT_NAME}${TENSORRT_LIBS}${CUDA_LIBRARIES} )

python

############################################# # python api轉 ############################################# import sys import os import argparse import tensorrt as trtEXPLICIT_BATCH = 1 << (int)(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)if __name__ == "__main__":parser = argparse.ArgumentParser(description="PyTorch Object Detection Inference")parser.add_argument("--onnx_path", type=str,default='static_sim.onnx')parser.add_argument("--trt_path", type=str,default='static_sim.trt')args = parser.parse_args()onnx_file_path = args.onnx_pathengine_file_path = args.trt_pathprint('get start')TRT_LOGGER = trt.Logger()with trt.Builder(TRT_LOGGER) as builder, builder.create_network(EXPLICIT_BATCH) as network, trt.OnnxParser(network, TRT_LOGGER) as parser:config = builder.create_builder_config()config.max_workspace_size =( 1 << 30 ) * 2 # 2 GBbuilder.max_batch_size = 16config.set_flag(trt.BuilderFlag.FP16)# builder.fp16_mode = True# Parse model fileprint('Loading ONNX file from path {}...'.format(onnx_file_path))with open(onnx_file_path, 'rb') as model:print('Beginning ONNX file parsing')if not parser.parse(model.read()):print ('ERROR: Failed to parse the ONNX file.')for error in range(parser.num_errors):print (parser.get_error(error))print(f"raw shape of {network.get_input(0).name} is: ", network.get_input(0).shape)print(f"raw shape of {network.get_input(1).name} is: ", network.get_input(1).shape)print(f"raw shape of {network.get_input(2).name} is: ", network.get_input(2).shape)print('Completed parsing of ONNX file')print('Building an engine from file {}; this may take a while...'.format(onnx_file_path))engine = builder.build_engine(network,config)print("Completed creating Engine")with open(engine_file_path, "wb") as f:f.write(engine.serialize())

trtexec

TensorRT-8.4.3.1/targets/x86_64-linux-gnu/bin/trtexec --onnx=static_sim.onnx --explicitBatch --saveEngine= static_sim.trt --workspace=1024 歡迎大家關注筆者,你的關注是我持續更博的最大動力

總結

以上是生活随笔為你收集整理的TensorRT8——ONNX转trt的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日本综合视频 | 久操免费在线视频 | 免费色片 | 任我爽在线 | √天堂8资源中文在线 | 天堂影视在线观看 | 这里只有精品国产 | 日本一级黄色大片 | 午夜羞羞网站 | 亚洲精品国偷拍自产在线观看蜜桃 | 色婷婷aⅴ一区二区三区 | 午夜在线你懂的 | 欧美97| 日韩精品一区二区三区视频 | 亚洲成人精品久久久 | 日韩一二在线 | 在线成人黄色 | 张柏芝亚洲一区二区三区 | 亚洲春色av | 日本护士取精xxxxxhd | 日韩成人在线影院 | 91午夜视频在线观看 | 国产av一区二区三区精品 | 黄色草逼视频 | 粉嫩av网站 | 国产精品久久久91 | 久久成人午夜 | 日韩aⅴ在线观看 | 男人的天堂中文字幕 | 国产黄色精品 | 精品亚洲国产成人av制服丝袜 | 免费看欧美片 | 日本一级片免费看 | 亚洲免费视频一区二区三区 | 激情啪啪网 | 久久激情五月 | 欧美爱爱网址 | 正在播放国产一区 | 女人的天堂av | 国产人妻久久精品一区二区三区 | 午夜亚洲福利在线老司机 | 2019国产精品 | 日本在线色 | 天堂在线8 | 日本不卡二区 | 亚洲手机看片 | 久久香视频 | 久久在线观看 | 91肉色超薄丝袜脚交一区二区 | 羞羞在线观看 | 欧美自拍在线 | 日韩中文字幕在线视频 | 四虎精品一区 | 欧美一区二区在线免费观看 | 日韩小视频在线 | 男插女在线观看 | 青青青视频免费观看 | 亚洲综合插 | 亚洲视频欧洲视频 | 国产二区三区视频 | 手机看片日韩 | 亚洲欧美第一视频 | 成人在线观看一区二区三区 | 欧美日本一道本 | 国产在线毛片 | 成年人免费网站在线观看 | 国模私拍一区二区三区 | 国内成人免费视频 | 国产资源免费 | 亚洲熟女www一区二区三区 | 精品91视频| 一集毛片 | 欧美一级视频免费 | 久久免费一区 | 人人干天天干 | 91avcom| 成年男女免费视频网站 | 欧美双性人妖o0 | 色翁荡息又大又硬又粗又爽 | 中文字幕在线播出 | 肉大榛一进一出免费视频 | jizzjizz日本免费视频 | 婷婷在线网 | 1000部做爰免费视频 | 久久4 | 插少妇视频 | 91成人免费看 | 国产粉嫩白浆 | 久久精品国产亚洲av蜜臀色欲 | 中文在线天堂网 | 欧美xxxⅹ性欧美大片 | 简单av在线| 偷偷色噜狠狠狠狠的777米奇 | 性感美女一区二区三区 | 青青草偷拍视频 | 91欧美精品 | 国产精品人成 | 亚洲精选久久 | 国产精品福利在线观看 |