电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python api構(gòu)建tensorrt加速模型的步驟詳解

瀏覽:14日期:2022-08-07 08:24:30
目錄一、創(chuàng)建TensorRT有以下幾個(gè)步驟:二、Python api和C++ api在實(shí)現(xiàn)網(wǎng)絡(luò)加速有什么區(qū)別?三、構(gòu)建TensorRT加速模型 3.1 加載tensorRT3.2 創(chuàng)建網(wǎng)絡(luò)3.3 ONNX構(gòu)建engine一、創(chuàng)建TensorRT有以下幾個(gè)步驟:

1.用TensorRT中network模塊定義網(wǎng)絡(luò)模型2.調(diào)用TensorRT構(gòu)建器從網(wǎng)絡(luò)創(chuàng)建優(yōu)化的運(yùn)行時(shí)引擎3.采用序列化和反序列化操作以便在運(yùn)行時(shí)快速重建4.將數(shù)據(jù)喂入engine中進(jìn)行推理

二、Python api和C++ api在實(shí)現(xiàn)網(wǎng)絡(luò)加速有什么區(qū)別?

個(gè)人看法1.python比c++更容易讀并且已經(jīng)有很多包裝很好的科學(xué)運(yùn)算庫(kù)(numpy,scikit等),2.c++是接近硬件的語(yǔ)言,運(yùn)行速度比python快很多很多,因?yàn)閜ython是解釋性語(yǔ)言c++是編譯型語(yǔ)言

三、構(gòu)建TensorRT加速模型 3.1 加載tensorRT

1.import tensorrt as trt2.為tensorrt實(shí)現(xiàn)日志報(bào)錯(cuò)接口方便報(bào)錯(cuò),在下面的代碼我們只允許警告和錯(cuò)誤消息才打印,TensorRT中包含一個(gè)簡(jiǎn)單的日志記錄器Python綁定。

TRT_LOGGER = trt.Logger(trt.Logger.WARNING)

3.2 創(chuàng)建網(wǎng)絡(luò)

簡(jiǎn)單來(lái)說(shuō)就是用tensorrt的語(yǔ)言來(lái)構(gòu)建模型,如果自己構(gòu)建的話,主要是靈活但是工作量so large,一般還是用tensorrt parser來(lái)構(gòu)建(1)Caffe框架的模型可以直接用tensorrt內(nèi)部解釋器構(gòu)建(2)除caffe,TF模型以外其他框架,先轉(zhuǎn)成ONNX通用格式,再用ONNX parser來(lái)解析(3)TF可以直接通過(guò)tensorrt內(nèi)部的UFF包來(lái)構(gòu)建,但是tensorrt uff包中并支持所有算子(4)自己將wts放入自己構(gòu)建的模型中,工作量so large,但是很靈活。

3.3 ONNX構(gòu)建engine

因?yàn)椴┲饔玫腛NNXparser來(lái)構(gòu)建engine的,下面就介紹以下ONNX構(gòu)建engine,步驟如下:(1)導(dǎo)入tensorrt

import tensorrt as trt

(2)創(chuàng)建builder,network和相應(yīng)模型的解釋器,這里是onnxparser

EXPLICIT_BATCH = 1 << (int)(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)with builder = trt.Builder(TRT_LOGGER) as builder,builder.create_network(EXPLICIT_BATCH) as network, trt.OnnxParser(network, TRT_LOGGER) as parser:with open(model_path, ’rb’) as model:parser.parse(model.read())

這個(gè)代碼的主要意思是,構(gòu)建報(bào)錯(cuò)日志,創(chuàng)建build,network和onnxparser,然后用parser讀取onnx權(quán)重文件。

3.3.1 builder介紹

builder功能之一是搜索cuda內(nèi)核目錄,找到最快的cuda以求獲得最快的實(shí)現(xiàn),因此有必要使用相同的GPU進(jìn)行構(gòu)建(相同的操作,算子進(jìn)行融合,減少IO操作),engine就是在此基礎(chǔ)上運(yùn)行的,builder還可以控制網(wǎng)絡(luò)以什么精度運(yùn)行(FP32,FP16,INT8),還有兩個(gè)特別重要的屬性是最大批處理大小和最大工作空間大小。

builder.max_batch_size = max_batch_sizebuilder.max_workspace_size = 1 << 20

3.3.2序列化模型

序列化和反序列化模型的主要是因?yàn)閚etwork和定義創(chuàng)建engine很耗時(shí),因此可以通過(guò)序列化一次并在推理時(shí)反序列化一次來(lái)避免每次應(yīng)用程序重新運(yùn)行時(shí)重新構(gòu)建引擎。note:序列化引擎不能跨平臺(tái)或TensorRT版本移植。引擎是特定于它們所構(gòu)建的GPU模型(除了平臺(tái)和TensorRT版本)代碼如下:

#序列化模型到模型流serialized_engine = engine.serialize()#反序列化模型流去執(zhí)行推理,反序列化需要?jiǎng)?chuàng)建一個(gè)運(yùn)行時(shí)對(duì)象with trt.Runtime(TRT_LOGGER) as runtime:engine = runtime.deserialize_cuda_engine(serialized_engine)#也可以將序列化模型writewith open(“sample.engine”, “wb”) as f:f.write(engine.serialize())#然后再讀出來(lái)進(jìn)行反序列化with open(“sample.engine”, “rb”) as f, trt.Runtime(TRT_LOGGER) as runtime:engine = runtime.deserialize_cuda_engine(f.read())

3.3.3執(zhí)行推理過(guò)程

note:下面過(guò)程的前提是已經(jīng)創(chuàng)建好了engine

# 為輸入和輸出分配一些主機(jī)和設(shè)備緩沖區(qū):#確定尺寸并創(chuàng)建頁(yè)面鎖定內(nèi)存緩沖區(qū)h_input = cuda.pagelocked_empty(trt.volume(engine.get_binding_shape(0)),dtype=np.float32)h_output =cuda.pagelocked_empty(trt.volume(engine.get_binding_shape(1)),dtype=np.float32)#為輸入和輸出分配設(shè)備內(nèi)存d_input = cuda.mem_alloc(h_input.nbytes)d_output = cuda.mem_alloc(h_output.nbytes)#創(chuàng)建一個(gè)流,在其中復(fù)制輸入/輸出并運(yùn)行推斷stream = cuda.Stream()

# 創(chuàng)建一些空間來(lái)存儲(chǔ)中間激活值,因?yàn)閑ngine保存了network定義和訓(xùn)練時(shí)的參數(shù),這些都是構(gòu)建的上下文執(zhí)行的。with engine.create_execution_context() as context: # 輸入數(shù)據(jù)傳入GPUcuda.memcpy_htod_async(d_input, h_input, stream) # 執(zhí)行推理. context.execute_async(bindings=[int(d_input), int(d_output)], stream_handle=stream.handle) # 將推理后的預(yù)測(cè)結(jié)果從GPU上返回. cuda.memcpy_dtoh_async(h_output, d_output, stream) # 同步流 stream.synchronize() # 返回主機(jī)輸出 return h_output

note:一個(gè)engine可以有多個(gè)執(zhí)行上下文,允許一組權(quán)值用于多個(gè)重疊推理任務(wù)。例如,可以使用一個(gè)引擎和一個(gè)上下文在并行CUDA流中處理圖像。每個(gè)上下文將在與引擎相同的GPU上創(chuàng)建。

到此這篇關(guān)于Python api構(gòu)建tensorrt加速模型的文章就介紹到這了,更多相關(guān)Python api tensorrt加速模型內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 无纺布包装机|径向缠绕包装机|缠绕膜打包机-上海晏陵智能设备有限公司 | 【法利莱住人集装箱厂家】—活动集装箱房,集装箱租赁_大品牌,更放心 | 全自动烧卖机厂家_饺子机_烧麦机价格_小笼汤包机_宁波江北阜欣食品机械有限公司 | 滑板场地施工_极限运动场地设计_滑板公园建造_盐城天人极限运动场地建设有限公司 | 冷轧机|两肋冷轧机|扁钢冷轧机|倒立式拉丝机|钢筋拔丝机|收线机-巩义市华瑞重工机械制造有限公司 | 飞行者联盟-飞机模拟机_无人机_低空经济_航空技术交流平台 | 深圳货架厂_仓库货架公司_重型仓储货架_线棒货架批发-深圳市诺普泰仓储设备有限公司 | PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | 赛尔特智能移动阳光房-阳光房厂家-赛尔特建筑科技(广东)有限公司 | 升降炉_真空气氛炉_管式电阻炉厂家-山东中辰电炉有限公司 | 全自动包装机_灌装机生产厂家-迈驰包装设备有限公司 | 航拍_专业的无人机航拍摄影门户社区网站_航拍网 | 谈股票-今日股票行情走势分析-牛股推荐排行榜| 耐破强度测试仪-纸箱破裂强度试验机-济南三泉中石单品站 | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 温室大棚建设|水肥一体化|物联网系统| 超细|超微气流粉碎机|气流磨|气流分级机|粉体改性机|磨粉机|粉碎设备-山东埃尔派粉体科技 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 齿式联轴器-弹性联轴器-联轴器厂家-江苏诺兴传动联轴器制造有限公司 | 车辆定位管理系统_汽车GPS系统_车载北斗系统 - 朗致物联 | 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | 高空重型升降平台_高空液压举升平台_高空作业平台_移动式升降机-河南华鹰机械设备有限公司 | 科威信洗净科技,碳氢清洗机,超声波清洗机,真空碳氢清洗机 | 减速机三参数组合探头|TSM803|壁挂式氧化锆分析仪探头-安徽鹏宸电气有限公司 | 高铝矾土熟料_细粉_骨料_消失模_铸造用铝矾土_铝酸钙粉—嵩峰厂家 | 南溪在线-南溪招聘找工作、找房子、找对象,南溪综合生活信息门户! | 衬氟止回阀_衬氟闸阀_衬氟三通球阀_衬四氟阀门_衬氟阀门厂-浙江利尔多阀门有限公司 | 消防泵-XBD单级卧式/立式消防泵-上海塑泉泵阀(集团)有限公司 | 爱科技iMobile-专业的科技资讯信息分享网站 | 石家庄律师_石家庄刑事辩护律师_石家庄取保候审-河北万垚律师事务所 | 政府回应:200块在义乌小巷能买到爱情吗?——揭秘打工族省钱约会的生存智慧 | 伺服电机维修、驱动器维修「安川|三菱|松下」伺服维修公司-深圳华创益 | 玉米深加工机械,玉米加工设备,玉米加工机械等玉米深加工设备制造商-河南成立粮油机械有限公司 | 硅胶布|电磁炉垫片|特氟龙胶带-江苏浩天复合材料有限公司 | 美名宝起名网-在线宝宝、公司、起名平台| 压缩空气检测_气体_水质找上海京工-服务专业、价格合理 | 网架支座@球铰支座@钢结构支座@成品支座厂家@万向滑动支座_桥兴工程橡胶有限公司 | 仿古瓦,仿古金属瓦,铝瓦,铜瓦,铝合金瓦-西安东申景观艺术工程有限公司 | 气动隔膜阀_气动隔膜阀厂家_卫生级隔膜阀价格_浙江浙控阀门有限公司 | 软文发布-新闻发布推广平台-代写文章-网络广告营销-自助发稿公司媒介星 | 光伏支架成型设备-光伏钢边框设备-光伏设备厂家 |