Jetson学习笔记(三):多种模型文件的调用部署

简介: 文章介绍了如何在Jetson平台上使用torch2trt和onnx2trt工具来部署和调用TensorRT模型。

在这里插入图片描述

1.torch2trt–trt模型调用

通过torch2trt的官方代码找到加载这个trt文件封装好了的函数TRTModule,可直接通过model_trt.load_state_dict(torch.load(‘mode.trt’))得到。

from torch import TRTModule
engine_path='./trt模型地址'
def read_model():
    model_trt=TRTModule()
    model_trt.load_State_dict(torch.load(engine_path))
    return model_trt

2.onnx2trt–trt模型调用

import pycuda.driver as cuda
import pycuda.autoinit
import cv2,time
import numpy as np
import os
import tensorrt as trt

TRT_LOGGER = trt.Logger()
engine_file_path = "/home/z/Documents/face_detect_yolov4_yolov4tiny_ssd-master/yolov4-tiny.trt"

class HostDeviceMem(object):
    def __init__(self, host_mem, device_mem):
        self.host = host_mem
        self.device = device_mem

    def __str__(self):
        return "Host:\n" + str(self.host) + "\nDevice:\n" + str(self.device)

    def __repr__(self):
        return self.__str__()
# Allocates all buffers required for an engine, i.e. host/device inputs/outputs. 分配引擎所需的所有缓冲区
def allocate_buffers(engine):
    inputs = []
    outputs = []
    bindings = []
    stream = cuda.Stream()
    for binding in engine:
        size = trt.volume(engine.get_binding_shape(binding)) * engine.max_batch_size
        dtype = trt.nptype(engine.get_binding_dtype(binding))
        # Allocate host and device buffers
        host_mem = cuda.pagelocked_empty(size, dtype)
        device_mem = cuda.mem_alloc(host_mem.nbytes)
        # Append the device buffer to device bindings.
        bindings.append(int(device_mem))
        # Append to the appropriate list.
        if engine.binding_is_input(binding):
            inputs.append(HostDeviceMem(host_mem, device_mem))
        else:
            outputs.append(HostDeviceMem(host_mem, device_mem))
    return inputs, outputs, bindings, stream

def do_inference_v2(context, bindings, inputs, outputs, stream):
    # Transfer input data to the GPU.
    [cuda.memcpy_htod_async(inp.device, inp.host, stream) for inp in inputs]
    # Run inference.
    context.execute_async_v2(bindings=bindings, stream_handle=stream.handle)
    # Transfer predictions back from the GPU.
    [cuda.memcpy_dtoh_async(out.host, out.device, stream) for out in outputs]
    # Synchronize the stream
    stream.synchronize()
    # Return only the host outputs.
    return [out.host for out in outputs]

with open(engine_file_path, "rb") as f, trt.Runtime(TRT_LOGGER) as runtime,\
runtime.deserialize_cuda_engine(f.read()) as engine, engine.create_execution_context() as context:
    inputs, outputs, bindings, stream = allocate_buffers(engine)
    #print('Len of inputs:',len(inputs))
    #print('Len of outputs:',len(outputs))

    image = cv2.imread('4.jpg',cv2.IMREAD_GRAYSCALE)
    image=cv2.resize(image,(28,28))
    print(image.shape)
    image=image[np.newaxis,np.newaxis,:,:].astype(np.float32)
    inputs[0].host = image
    print('开始推理')
    start = time.time()
    trt_outputs =do_inference_v2(context, bindings=bindings, \
        inputs=inputs, outputs=outputs, stream=stream)
    finish = time.time()
    #print('inference time {} sec'.format(finish - start))
    print(trt_outputs)
目录
相关文章
|
1月前
|
PyTorch 算法框架/工具
Jetson学习笔记(四):pth(torch模型文件)转trt(tensorrt引擎文件)实操
关于如何使用torch2trt工具将PyTorch模型转换为TensorRT引擎文件的实操指南。
44 1
Jetson学习笔记(四):pth(torch模型文件)转trt(tensorrt引擎文件)实操
|
15天前
|
开发者 异构计算
现在,一行命令使用Ollama运行任意魔搭GGUF模型
为了让开发者更方便地把这些模型用起来,社区最近支持了Ollama框架和ModelScope平台的链接,通过简单的 ollama run命令,就能直接加载运行ModelScope模型库上的GGUF模型。
|
3月前
|
机器学习/深度学习 IDE 开发工具
超越笔记本:JupyterLab 的功能扩展
【8月更文第29天】随着数据科学和机器学习的发展,交互式计算环境的需求也日益增长。Jupyter Notebook 作为这一领域的领头羊,已经得到了广泛的应用。然而,为了满足更加复杂的工作流需求,Jupyter 开发者们推出了 JupyterLab —— 一个下一代的交互式计算环境。本文将探讨 JupyterLab 相对于传统 Jupyter Notebook 的增强功能,并通过具体示例展示这些新特性如何提升工作效率。
89 1
|
3月前
|
Linux 测试技术 API
Ollama+Qwen2,轻松搭建支持函数调用的聊天系统
本文介绍如何通过Ollama结合Qwen2,搭建OpenAI格式的聊天API,并与外部函数结合来拓展模型的更多功能。
|
4月前
|
Serverless API 监控
函数计算操作报错合集之部署了SD,但是OpenPose报错,是什么导致的
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
5月前
|
存储 运维 Cloud Native
函数计算产品使用问题之SD常用模型插件是否都需要自己下载模型或者上传吗
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
|
Linux 开发者 iOS开发
|
5月前
|
机器学习/深度学习 运维 监控
函数计算产品使用问题之如何解决SD插件安装后不显示的问题
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
[UE 虚幻引擎] DTLoadFbx 运行时加载FBX本地模型插件说明
该插件支持在运行时动态加载FBX模型,无需预先打包。通过新建Actor并添加DT Runtime Fbx Component,然后调用LoadFile函数加载模型路径(不支持动画)。加载时可选择是否创建碰撞体,该组件基于UProceduralMeshComponent,提供与PMC相似的设置。启用异步计算(Use Async Cooking)可加速碰撞体生成。
121 0
|
6月前
|
数据可视化 前端开发 JavaScript
利用千帆大模型写一个vbs的图形化win11简便操作项目(未成功)
利用千帆大模型写一个vbs的图形化win11简便操作项目(未成功)
53 0