Tensorrt安装及使用(python版本)

这篇具有很好参考价值的文章主要介绍了Tensorrt安装及使用(python版本)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

官方的教程

tensorrt的安装:Installation Guide :: NVIDIA Deep Learning TensorRT Documentation

视频教程:TensorRT 教程 | 基于 8.6.1 版本 | 第一部分_哔哩哔哩_bilibili

代码教程:trt-samples-for-hackathon-cn/cookbook at master · NVIDIA/trt-samples-for-hackathon-cn (github.com)

Tensorrt的安装

官方的教程:

安装指南 :: NVIDIA Deep Learning TensorRT Documentation --- Installation Guide :: NVIDIA Deep Learning TensorRT Documentation

Tensorrt的安装方法主要有:

1、使用 pip install 进行安装;

2、下载 tar、zip、deb 文件进行安装;

3、使用docker容器进行安装:TensorRT Container Release Notes

Windows系统

首先选择和本机nVidia驱动、cuda版本、cudnn版本匹配的Tensorrt版本。

我使用的:cuda版本:11.4;cudnn版本:11.4

建议下载 zip 进行Tensorrt的安装,参考的教程:

windows安装tensorrt - 知乎 (zhihu.com)

Ubuntu系统

首先选择和本机nVidia驱动、cuda版本、cudnn版本匹配的Tensorrt版本。

我使用的:cuda版本:11.7;cudnn版本:8.9.0

1、使用 pip 进行安装:

pip install tensorrt==8.6.1

我这边安装失败

2、下载 deb 文件进行安装

os="ubuntuxx04" 
tag="8.x.x-cuda-x.x" 
sudo dpkg -i nv-tensorrt-local-repo-${os}-${tag}_1.0-1_amd64.deb 
sudo cp /var/nv-tensorrt-local-repo-${os}-${tag}/*-keyring.gpg /usr/share/keyrings/ 
sudo apt-get update sudo apt-get install tensorrt

我这边同样没安装成功

3、使用 tar 文件进行安装(推荐)

推荐使用这种方法进行安装,成功率较高

下载对应的版本:developer.nvidia.com/tensorrt-download

Tensorrt安装及使用(python版本),python,开发语言,深度学习,人工智能

下载后

tar -xzvf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-11.8.tar.gz # 解压文件 
# 将lib添加到环境变量里面 
vim ~/.bashrc 
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./TensorRT-8.6.1.6/lib 
source ~/.bashrc 

# 或 直接将 TensorRT-8.6.1.6/lib 添加到 cuda/lib64 里面 
cp -r ./lib/* /usr/local/cuda/lib64/ 

# 安装python的包 
cd TensorRT-8.6.1.6/python 
pip install tensorrt-xxx-none-linux_x86_64.whl

下载成功后验证:

# 验证是否安装成功: 
python 
>>>import tensorrt 
>>>print(tensorrt.__version__) 
>>>assert tensorrt.Builder(tensorrt.Logger())

如果没有报错说明安装成功

使用方法

我这边的使用的流程是:pytorch -> onnx -> tensorrt

选择resnet18进行转换

pytorch转onnx

安装onnx,onnxruntime安装一个就行

pip install onnx 
pip install onnxruntime 
pip install onnxruntime-gpu # gpu版本

将pytorch模型转成onnx模型

import torch
import torchvision

model = torchvision.models.resnet18(pretrained=False)

device = 'cuda' if torch.cuda.is_available else 'cpu'

dummy_input = torch.randn(1, 3, 224, 224, device=device)
model.to(device)
model.eval()
output = model(dummy_input)

print("pytorch result:", torch.argmax(output))

import torch.onnx

torch.onnx.export(model, dummy_input, './model.onnx', input_names=["input"], output_names=["output"], do_constant_folding=True, verbose=True, keep_initializers_as_inputs=True, opset_version=14, dynamic_axes={"input": {0: "nBatchSize"}, "output": {0: "nBatchSize"}})

# 一般情况
# torch.onnx.export(model, torch.randn(1, c, nHeight, nWidth, device="cuda"), './model.onnx', input_names=["x"], output_names=["y", "z"], do_constant_folding=True, verbose=True, keep_initializers_as_inputs=True, opset_version=14, dynamic_axes={"x": {0: "nBatchSize"}, "z": {0: "nBatchSize"}})

import onnx
import numpy as np
import onnxruntime as ort

model_onnx_path = './model.onnx'
# 验证模型的合法性
onnx_model = onnx.load(model_onnx_path)
onnx.checker.check_model(onnx_model)
# 创建ONNX运行时会话
ort_session = ort.InferenceSession(model_onnx_path, providers=['CUDAExecutionProvider', 'CPUExecutionProvider'])
# 准备输入数据
input_data = {
    'input': dummy_input.cpu().numpy()
}
# 运行推理
y_pred_onnx = ort_session.run(None, input_data)
print("onnx result:", np.argmax(y_pred_onnx[0]))

Tensorrt安装及使用(python版本),python,开发语言,深度学习,人工智能

onnx转tensorrt

Window使用zip安装后使用 TensorrtRT-8.6.1.6/bin/trtexec.exe 文件生成 tensorrt 模型文件

Ubuntu使用tar安装后使用 TensorrtRT-8.6.1.6/bin/trtexec 文件生成 tensorrt 模型文件

./trtexec --onnx=model.onnx --saveEngine=model.trt --fp16 --workspace=16 --shapes=input:2x3x224x224

其中的参数:

--fp16:是否使用fp16

--shapes:输入的大小。tensorrt支持 动态batch 设置,感兴趣可以尝试

tensorrt的使用

nVidia的官方使用方法:

trt-samples-for-hackathon-cn/cookbook at master · NVIDIA/trt-samples-for-hackathon-cn (github.com)

打印转换后的tensorrt的模型的信息

import tensorrt as trt
# 加载TensorRT引擎
logger = trt.Logger(trt.Logger.INFO)
with open('./model.trt', "rb") as f, trt.Runtime(logger) as runtime:
    engine = runtime.deserialize_cuda_engine(f.read())
for idx in range(engine.num_bindings):
    name = engine.get_tensor_name(idx)
    is_input = engine.get_tensor_mode(name)
    op_type = engine.get_tensor_dtype(name)
    shape = engine.get_tensor_shape(name)
    print('input id: ',idx, '\tis input: ', is_input, '\tbinding name: ', name, '\tshape: ', shape, '\ttype: ', op_type)

Tensorrt安装及使用(python版本),python,开发语言,深度学习,人工智能

测试转换后的tensorrt模型,来自nVidia的 cookbook/08-Advance/MultiStream/main.py

from time import time
import numpy as np
import tensorrt as trt
from cuda import cudart  # 安装 pip install cuda-python

np.random.seed(31193)
nWarmUp = 10
nTest = 30

nB, nC, nH, nW = 1, 3, 224, 224

data = dummy_input.cpu().numpy()

def run1(engine):
    input_name = engine.get_tensor_name(0)
    output_name = engine.get_tensor_name(1)

    output_type = engine.get_tensor_dtype(output_name)
    output_shape = engine.get_tensor_shape(output_name)
    
    context = engine.create_execution_context()
    context.set_input_shape(input_name, [nB, nC, nH, nW])
    _, stream = cudart.cudaStreamCreate()

    inputH0 = np.ascontiguousarray(data.reshape(-1))
    outputH0 = np.empty(output_shape, dtype=trt.nptype(output_type))
    _, inputD0 = cudart.cudaMallocAsync(inputH0.nbytes, stream)
    _, outputD0 = cudart.cudaMallocAsync(outputH0.nbytes, stream)

    # do a complete inference
    cudart.cudaMemcpyAsync(inputD0, inputH0.ctypes.data, inputH0.nbytes, cudart.cudaMemcpyKind.cudaMemcpyHostToDevice, stream)
    context.execute_async_v2([int(inputD0), int(outputD0)], stream)
    cudart.cudaMemcpyAsync(outputH0.ctypes.data, outputD0, outputH0.nbytes, cudart.cudaMemcpyKind.cudaMemcpyDeviceToHost, stream)
    cudart.cudaStreamSynchronize(stream)

    # Count time of memory copy from host to device
    for i in range(nWarmUp):
        cudart.cudaMemcpyAsync(inputD0, inputH0.ctypes.data, inputH0.nbytes, cudart.cudaMemcpyKind.cudaMemcpyHostToDevice, stream)

    trtTimeStart = time()
    for i in range(nTest):
        cudart.cudaMemcpyAsync(inputD0, inputH0.ctypes.data, inputH0.nbytes, cudart.cudaMemcpyKind.cudaMemcpyHostToDevice, stream)
    cudart.cudaStreamSynchronize(stream)
    trtTimeEnd = time()
    print("%6.3fms - 1 stream, DataCopyHtoD" % ((trtTimeEnd - trtTimeStart) / nTest * 1000))

    # Count time of inference
    for i in range(nWarmUp):
        context.execute_async_v2([int(inputD0), int(outputD0)], stream)

    trtTimeStart = time()
    for i in range(nTest):
        context.execute_async_v2([int(inputD0), int(outputD0)], stream)
    cudart.cudaStreamSynchronize(stream)
    trtTimeEnd = time()
    print("%6.3fms - 1 stream, Inference" % ((trtTimeEnd - trtTimeStart) / nTest * 1000))

    # Count time of memory copy from device to host
    for i in range(nWarmUp):
        cudart.cudaMemcpyAsync(outputH0.ctypes.data, outputD0, outputH0.nbytes, cudart.cudaMemcpyKind.cudaMemcpyDeviceToHost, stream)

    trtTimeStart = time()
    for i in range(nTest):
        cudart.cudaMemcpyAsync(outputH0.ctypes.data, outputD0, outputH0.nbytes, cudart.cudaMemcpyKind.cudaMemcpyDeviceToHost, stream)
    cudart.cudaStreamSynchronize(stream)
    trtTimeEnd = time()
    print("%6.3fms - 1 stream, DataCopyDtoH" % ((trtTimeEnd - trtTimeStart) / nTest * 1000))

    # Count time of end to end
    for i in range(nWarmUp):
        context.execute_async_v2([int(inputD0), int(outputD0)], stream)

    trtTimeStart = time()
    for i in range(nTest):
        cudart.cudaMemcpyAsync(inputD0, inputH0.ctypes.data, inputH0.nbytes, cudart.cudaMemcpyKind.cudaMemcpyHostToDevice, stream)
        context.execute_async_v2([int(inputD0), int(outputD0)], stream)
        cudart.cudaMemcpyAsync(outputH0.ctypes.data, outputD0, outputH0.nbytes, cudart.cudaMemcpyKind.cudaMemcpyDeviceToHost, stream)
    cudart.cudaStreamSynchronize(stream)
    trtTimeEnd = time()
    print("%6.3fms - 1 stream, DataCopy + Inference" % ((trtTimeEnd - trtTimeStart) / nTest * 1000))

    cudart.cudaStreamDestroy(stream)
    cudart.cudaFree(inputD0)
    cudart.cudaFree(outputD0)

    print("tensorrt result:", np.argmax(outputH0))


if __name__ == "__main__":
    cudart.cudaDeviceSynchronize()
    f = open("./model.trt", "rb")     # 读取trt模型
    runtime = trt.Runtime(trt.Logger(trt.Logger.WARNING))   # 创建一个Runtime(传入记录器Logger)
    engine = runtime.deserialize_cuda_engine(f.read())      # 从文件中加载trt引擎
    run1(engine)  # do inference with single stream
    print(dummy_input.shape, dummy_input.dtype)

Tensorrt安装及使用(python版本),python,开发语言,深度学习,人工智能文章来源地址https://www.toymoban.com/news/detail-852360.html

到了这里,关于Tensorrt安装及使用(python版本)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 跟着李沐学AI(动手学深度学习 PyTorch版)学习笔记——03安装(环境配置d2l、pytorch)(python3.7版本+Windows+各种问题解决措施)

    1.下载Miniconda下载地址 2.在安装过程中需要勾选“Add Anaconda to the system PATH environment variable”选项 3.检验win+R,输入cmd,在文本框输入conda --version 1.点击该链接+点击jupyter记事本下载压缩包 2.解压该压缩包 3.在解压后的文件夹地址栏输入cmd回车进入命令模式。 1.conda和pip默认使⽤

    2024年02月12日
    浏览(38)
  • 【深度学习】SDXL tensorRT 推理,Stable Diffusion 转onnx,转TensorRT

    juggernautXL_version6Rundiffusion.safetensors文件是pth pytroch文件,需要先转为diffusers 的文件结构。 FP16在后面不好操作,所以最好先是FP32: 有了diffusers 的文件结构,就可以转onnx文件。 项目:https://huggingface.co/docs/diffusers/optimization/onnx stabilityai/stable-diffusion-xl-1.0-tensorrt 项目:https://hug

    2024年01月19日
    浏览(44)
  • 【opencv C++版本】安装和学习 ==Windows下使用VSCode配置OpenCV开发环境

    ref:https://opencv.org/releases/ ref:https://www.cnblogs.com/ticlab/p/16817542.html c_cpp_properties.json 照着ref 没安装成功,先写个二分查找把 ref:https://docs.opencv.org/4.x/df/d65/tutorial_table_of_content_introduction.html nnd,用这个ref在ubuntu20.04 上安装成功了!!!咳咳咳 ref:https://blog.csdn.net/weixin_4479667

    2024年02月14日
    浏览(41)
  • jetson nx目标检测环境配置遇到的一万个坑,安装v1.12.0版本的pytorch和v0.13.0版本的vision torchvision,以及使用TensorRT部署YOLOv5.

    本文参考了许多官网和博客,肯定是存在抄袭的,请各位大哥不要喷我啊。 自己工作找到的是医学信号方向的算法工程师,所以以后和CV可能无缘了,将自己一个多星期的心血历程发表出来,希望大家接起我的CV火炬,接着前行,各位加油!(后面也学习了yolov5-6.0 yolov7的模型

    2024年02月05日
    浏览(34)
  • 深度学习模型部署综述(ONNX/NCNN/OpenVINO/TensorRT)

    点击下方 卡片 ,关注“ 自动驾驶之心 ”公众号 ADAS巨卷干货,即可获取 今天自动驾驶之心很荣幸邀请到 逻辑牛 分享深度学习部署的入门介绍,带大家盘一盘ONNX、NCNN、OpenVINO等框架的使用场景、框架特点及代码示例。如果您有相关工作需要分享,请在文末联系我们! 点击

    2024年02月08日
    浏览(38)
  • 深度学习模型部署(六)TensorRT工作流and入门demo

    官方给出的步骤: 总结下来可以分为两大部分: 模型生成:将onnx经过一系列优化,生成tensorrt的engine模型 选择batchsize,选择精度precision,模型转换 模型推理:使用python或者C++进行推理 生成trt模型: 然后就坐等输出模型,我们可以根据log信息看一下tensorRT都干了什么: 得到

    2024年03月13日
    浏览(40)
  • 【深度学习】Windows10中下安装多版本CUDA及其切换

    大多数情况下可以在anaconda虚拟环境中安装独立的cuda/cudnn,这中方式可以为用户提供多个互相独立的cuda版本,但anaconda并不支持部分版本的cuda/cudnn,因此需要在本地上配置多个版本的cuda/cudnn,并根据需求完成切换。 右键电脑–属性–高级系统设置–环境变量 当前已经安装两

    2024年02月04日
    浏览(51)
  • 【深度学习】YOLOv5实例分割 数据集制作、模型训练以及TensorRT部署

    yolov5-seg:官方地址:https://github.com/ultralytics/yolov5/tree/v6.2 TensorRT:8.x.x 语言:C++ 系统:ubuntu18.04 前言:由于yolo仓中提供了标准coco的json文件转txt代码,因此需要将labelme的json文件转为coco json. labelme JSON 转COCO JSON 使用labelme的CreatePolygons按钮开始绘制多边形,然后保存为json格式。

    2024年02月06日
    浏览(40)
  • ubuntu 安装 jax jaxlib cpu 和 gpu 版本 以及 tensorflow tensorRT的安装

    需要事先安装较新版本的 cuda 和cudnn ,例如11.8 + 8.8 在已经安装过cuda的机器上安装新版cuda sdk 和 cudnn 可参考前述: ubuntu 安装 多版本 cuda 11.4 11.8_Eloudy的博客-CSDN博客 一,安装python3 和 pip3 二,安装 cpu版本的 jax 和 jaxlib      使用pip官方源安装 jax:       使用pip清华源安装

    2024年02月06日
    浏览(35)
  • 快速解决深度学习推理过程cuda或tensorRT推理速度变慢的办法【亲测有效】

    各位朋友,好久不见,距离上一次更博已经过去三月有余。这段时间里博主基于LabVIEW探索开发了一些工具包,包括OpenVIN工具包、TensoRT工具包以及一键训练工具包,这几天会整理一下分享给大家,今天要和大家分享的是好多朋友私信问我的深度学习推理过程中cuda或tensorRT变慢

    2024年02月09日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包