91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

TensorRT的Python API的基本用法和接口解析

星星科技指導(dǎo)員 ? 來(lái)源:NVIDIA ? 作者:Ken He ? 2022-05-13 15:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本章說(shuō)明 Python API 的基本用法,假設(shè)您從 ONNX 模型開(kāi)始。onnx_resnet50.py示例更詳細(xì)地說(shuō)明了這個(gè)用例。

Python API 可以通過(guò)tensorrt模塊訪問(wèn):

import tensorrt as trt

4.1. The Build Phase

要?jiǎng)?chuàng)建構(gòu)建器,您需要首先創(chuàng)建一個(gè)記錄器。 Python 綁定包括一個(gè)簡(jiǎn)單的記錄器實(shí)現(xiàn),它將高于特定嚴(yán)重性的所有消息記錄到stdout。

logger = trt.Logger(trt.Logger.WARNING)

或者,可以通過(guò)從ILogger類(lèi)派生來(lái)定義您自己的記錄器實(shí)現(xiàn):

class MyLogger(trt.ILogger):
    def __init__(self):
       trt.ILogger.__init__(self)

    def log(self, severity, msg):
        pass # Your custom logging implementation here

logger = MyLogger()

然后,您可以創(chuàng)建一個(gè)構(gòu)建器:

builder = trt.Builder(logger)

4.1.1. Creating a Network Definition in Python

創(chuàng)建構(gòu)建器后,優(yōu)化模型的第一步是創(chuàng)建網(wǎng)絡(luò)定義:

network = builder.create_network(1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH))

為了使用 ONNX 解析器導(dǎo)入模型,需要EXPLICIT_BATCH標(biāo)志。有關(guān)詳細(xì)信息,請(qǐng)參閱顯式與隱式批處理部分。

4.1.2. Importing a Model using the ONNX Parser

現(xiàn)在,需要從 ONNX 表示中填充網(wǎng)絡(luò)定義。您可以創(chuàng)建一個(gè) ONNX 解析器來(lái)填充網(wǎng)絡(luò),如下所示:

parser = trt.OnnxParser(network, logger)

然后,讀取模型文件并處理任何錯(cuò)誤:

success = parser.parse_from_file(model_path)
for idx in range(parser.num_errors):
    print(parser.get_error(idx))

if not success:
    pass # Error handling code here

4.1.3. Building an Engine

下一步是創(chuàng)建一個(gè)構(gòu)建配置,指定 TensorRT 應(yīng)該如何優(yōu)化模型:

config = builder.create_builder_config()

這個(gè)接口有很多屬性,你可以設(shè)置這些屬性來(lái)控制 TensorRT 如何優(yōu)化網(wǎng)絡(luò)。一個(gè)重要的屬性是最大工作空間大小。層實(shí)現(xiàn)通常需要一個(gè)臨時(shí)工作空間,并且此參數(shù)限制了網(wǎng)絡(luò)中任何層可以使用的最大大小。如果提供的工作空間不足,TensorRT 可能無(wú)法找到層的實(shí)現(xiàn):

config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, 1 << 20) # 1 MiB

指定配置后,可以使用以下命令構(gòu)建和序列化引擎:

serialized_engine = builder.build_serialized_network(network, config)

將引擎保存到文件以供將來(lái)使用可能很有用。你可以這樣做:

with open(“sample.engine”, “wb”) as f:
    f.write(serialized_engine)

4.2. Deserializing a Plan

要執(zhí)行推理,您首先需要使用Runtime接口反序列化引擎。與構(gòu)建器一樣,運(yùn)行時(shí)需要記錄器的實(shí)例。

runtime = trt.Runtime(logger)

然后,您可以從內(nèi)存緩沖區(qū)反序列化引擎:

engine = runtime.deserialize_cuda_engine(serialized_engine)

如果您需要首先從文件加載引擎,請(qǐng)運(yùn)行:

with open(“sample.engine”, “rb”) as f:
    serialized_engine = f.read()

4.3. Performing Inference

引擎擁有優(yōu)化的模型,但要執(zhí)行推理需要額外的中間激活狀態(tài)。這是通過(guò)IExecutionContext接口完成的:

context = engine.create_execution_context()

一個(gè)引擎可以有多個(gè)執(zhí)行上下文,允許一組權(quán)重用于多個(gè)重疊的推理任務(wù)。 (當(dāng)前的一個(gè)例外是使用動(dòng)態(tài)形狀時(shí),每個(gè)優(yōu)化配置文件只能有一個(gè)執(zhí)行上下文。)

要執(zhí)行推理,您必須為輸入和輸出傳遞 TensorRT 緩沖區(qū),TensorRT 要求您在 GPU 指針列表中指定。您可以使用為輸入和輸出張量提供的名稱(chēng)查詢引擎,以在數(shù)組中找到正確的位置:

input_idx = engine[input_name]
output_idx = engine[output_name]

使用這些索引,為每個(gè)輸入和輸出設(shè)置 GPU 緩沖區(qū)。多個(gè) Python 包允許您在 GPU 上分配內(nèi)存,包括但不限于 PyTorch、Polygraphy CUDA 包裝器和 PyCUDA。

然后,創(chuàng)建一個(gè) GPU 指針列表。例如,對(duì)于 PyTorch CUDA 張量,您可以使用data_ptr()方法訪問(wèn) GPU 指針;對(duì)于 PolygraphyDeviceArray,使用ptr屬性:

buffers = [None] * 2 # Assuming 1 input and 1 output
buffers[input_idx] = input_ptr
buffers[output_idx] = output_ptr

填充輸入緩沖區(qū)后,您可以調(diào)用 TensorRT 的execute_async方法以使用 CUDA 流異步啟動(dòng)推理。

首先,創(chuàng)建 CUDA 流。如果您已經(jīng)有 CUDA 流,則可以使用指向現(xiàn)有流的指針。例如,對(duì)于 PyTorch CUDA 流,即torch.cuda.Stream(),您可以使用cuda_stream屬性訪問(wèn)指針;對(duì)于 Polygraphy CUDA 流,使用ptr屬性。 接下來(lái),開(kāi)始推理:

context.execute_async_v2(buffers, stream_ptr)

通常在內(nèi)核之前和之后將異步memcpy()排入隊(duì)列以從 GPU 中移動(dòng)數(shù)據(jù)(如果數(shù)據(jù)尚不存在)。

要確定內(nèi)核(可能還有memcpy() )何時(shí)完成,請(qǐng)使用標(biāo)準(zhǔn) CUDA 同步機(jī)制,例如事件或等待流。例如,對(duì)于 Polygraphy,使用:

stream.synchronize()

如果您更喜歡同步推理,請(qǐng)使用execute_v2方法而不是execute_async_v2。

關(guān)于作者

Ken He 是 NVIDIA 企業(yè)級(jí)開(kāi)發(fā)者社區(qū)經(jīng)理 & 高級(jí)講師,擁有多年的 GPU 和人工智能開(kāi)發(fā)經(jīng)驗(yàn)。自 2017 年加入 NVIDIA 開(kāi)發(fā)者社區(qū)以來(lái),完成過(guò)上百場(chǎng)培訓(xùn),幫助上萬(wàn)個(gè)開(kāi)發(fā)者了解人工智能和 GPU 編程開(kāi)發(fā)。在計(jì)算機(jī)視覺(jué),高性能計(jì)算領(lǐng)域完成過(guò)多個(gè)獨(dú)立項(xiàng)目。并且,在機(jī)器人無(wú)人機(jī)領(lǐng)域,有過(guò)豐富的研發(fā)經(jīng)驗(yàn)。對(duì)于圖像識(shí)別,目標(biāo)的檢測(cè)與跟蹤完成過(guò)多種解決方案。曾經(jīng)參與 GPU 版氣象模式GRAPES,是其主要研發(fā)者。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • gpu
    gpu
    +關(guān)注

    關(guān)注

    28

    文章

    5196

    瀏覽量

    135508
  • python
    +關(guān)注

    關(guān)注

    57

    文章

    4877

    瀏覽量

    90076
  • CUDA
    +關(guān)注

    關(guān)注

    0

    文章

    127

    瀏覽量

    14482
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Python存儲(chǔ)數(shù)據(jù)詳解

    用的存儲(chǔ)方式,Python標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)接口Python DB-API,Python DB-API
    發(fā)表于 03-29 15:47

    python代碼示例之基于Python的日歷api調(diào)用代碼實(shí)例

    本文檔的主要內(nèi)容詳細(xì)介紹的是python代碼示例之基于Python的日歷api調(diào)用代碼實(shí)例。
    發(fā)表于 09-06 14:25 ?43次下載
    <b class='flag-5'>python</b>代碼示例之基于<b class='flag-5'>Python</b>的日歷<b class='flag-5'>api</b>調(diào)用代碼實(shí)例

    API-Shop-OCR-營(yíng)業(yè)執(zhí)照識(shí)別API接口Python調(diào)用示例代碼說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是API-Shop-OCR-營(yíng)業(yè)執(zhí)照識(shí)別API接口Python調(diào)用示例代碼說(shuō)明
    發(fā)表于 01-10 11:48 ?6次下載
    <b class='flag-5'>API</b>-Shop-OCR-營(yíng)業(yè)執(zhí)照識(shí)別<b class='flag-5'>API</b><b class='flag-5'>接口</b><b class='flag-5'>Python</b>調(diào)用示例代碼說(shuō)明

    TensorRT的功能與應(yīng)用分析

      Polygraphy 是一個(gè)工具包,旨在幫助在 TensorRT 和其他框架中運(yùn)行和調(diào)試深度學(xué)習(xí)模型。它包括一個(gè)Python API和一個(gè)使用此 API 構(gòu)建的命令行界面 (CLI
    的頭像 發(fā)表于 05-13 15:37 ?2544次閱讀

    TensorRT的C++接口解析

    CUDA 上下文會(huì)在 TensorRT 第一次調(diào)用 CUDA 時(shí)自動(dòng)創(chuàng)建,如果在該點(diǎn)之前不存在。通常最好在第一次調(diào)用 TensoRT 之前自己創(chuàng)建和配置 CUDA 上下文。 為了說(shuō)明對(duì)象的生命周期,本章中的代碼不使用智能指針;但是,建議將它們與 TensorRT
    的頭像 發(fā)表于 05-13 15:41 ?4029次閱讀

    python中text的用法

    可以使用text(字符串)進(jìn)行各種操作,例如創(chuàng)建、訪問(wèn)、修改、連接、比較和搜索等。下面將詳細(xì)介紹Python中使用text的各種用法。 創(chuàng)建和訪問(wèn)文本: 在Python中,我們可以使用單引號(hào)或雙引號(hào)來(lái)
    的頭像 發(fā)表于 11-23 15:46 ?5876次閱讀

    split在python中的用法

    split在python中的用法 split()是Python中一個(gè)非常常用的字符串函數(shù),它能夠根據(jù)指定的分隔符將一個(gè)字符串分割成多個(gè)子字符串,并返回一個(gè)包含這些子字符串的列表。本文將詳細(xì)介紹
    的頭像 發(fā)表于 12-25 15:12 ?3555次閱讀

    產(chǎn)品添加與上架API接口設(shè)計(jì)指南

    ? 在現(xiàn)代電商或庫(kù)存管理系統(tǒng)中,產(chǎn)品添加與上架是關(guān)鍵流程。通過(guò)API接口實(shí)現(xiàn)自動(dòng)化操作,能顯著提升效率。本文將分步解析如何設(shè)計(jì)和使用“產(chǎn)品添加”與“產(chǎn)品上架”API
    的頭像 發(fā)表于 07-24 14:45 ?680次閱讀
    產(chǎn)品添加與上架<b class='flag-5'>API</b><b class='flag-5'>接口</b>設(shè)計(jì)指南

    深度解析淘寶API接口:功能、限制與最佳實(shí)踐

    在當(dāng)今日益繁榮的電商領(lǐng)域,淘寶作為中國(guó)最大的電子商務(wù)平臺(tái)之一,其API接口為開(kāi)發(fā)者提供了豐富的功能和數(shù)據(jù)資源。本文將深入解析淘寶API接口
    的頭像 發(fā)表于 10-20 13:48 ?438次閱讀

    Python調(diào)用API教程

    隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,API(Application Programming Interface)的應(yīng)用越來(lái)越廣泛。API是指一系列預(yù)先定義好的接口,用于以標(biāo)準(zhǔn)化的形式、規(guī)范的方式、安全高效地完成
    的頭像 發(fā)表于 11-03 09:15 ?896次閱讀

    淘寶商品詳情API接口技術(shù)解析與實(shí)戰(zhàn)應(yīng)用

    出發(fā),系統(tǒng)解析淘寶商品詳情API接口的調(diào)用機(jī)制、數(shù)據(jù)結(jié)構(gòu)及典型應(yīng)用場(chǎng)景,并附上基于Python的完整調(diào)用示例,助力開(kāi)發(fā)者高效集成商品數(shù)據(jù)服務(wù)。 關(guān)鍵詞 淘寶開(kāi)放平臺(tái);商品詳情
    的頭像 發(fā)表于 11-04 09:50 ?354次閱讀

    深度解析淘寶拍立淘按圖搜索API接口與JSON數(shù)據(jù)示例參考

    引言 淘寶拍立淘是淘寶推出的一項(xiàng)基于圖像識(shí)別的搜索功能,用戶可以通過(guò)上傳圖片來(lái)搜索相似商品。淘寶開(kāi)放平臺(tái)提供了拍立淘按圖搜索API接口,幫助開(kāi)發(fā)者實(shí)現(xiàn)圖像搜索功能。本文將深度解析淘寶拍立淘按圖搜索
    的頭像 發(fā)表于 11-06 13:43 ?316次閱讀

    解析淘寶拍立淘按圖搜索API接口與JSON數(shù)據(jù)示例參考

    應(yīng)用。 獲取API權(quán)限和密鑰(App Key、App Secret)。 使用Python調(diào)用API的示例代碼。 3. JSON數(shù)據(jù)示例與解析 返回的JSON數(shù)據(jù)結(jié)構(gòu)
    的頭像 發(fā)表于 11-11 13:19 ?342次閱讀

    微店商品列表API接口指南

    本文介紹關(guān)于微店商品列表 API 接口的完整指南,包含前言、接口概述、Python 請(qǐng)求示例和結(jié)語(yǔ)四個(gè)核心部分,我會(huì)按照這個(gè)結(jié)構(gòu)為你提供專(zhuān)業(yè)、易上手的指南,覆蓋
    的頭像 發(fā)表于 01-07 11:38 ?989次閱讀

    1688 商品詳情 API 調(diào)用與數(shù)據(jù)解析 Python 實(shí)戰(zhàn)

    你想要的是 1688 商品詳情 APIPython 調(diào)用與數(shù)據(jù)解析實(shí)戰(zhàn)方案,核心是完成 API 憑證配置、接口請(qǐng)求(含簽名)、響應(yīng)數(shù)據(jù)
    的頭像 發(fā)表于 02-10 11:23 ?273次閱讀