0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深度学习模型转成TensorRT引擎的流程

NVIDIA英伟达企业解决方案 来源:NVIDIA英伟达企业解决方案 作者:NVIDIA英伟达企业解 2022-05-25 11:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前面我们花了很多力气在 TAO 上面训练模型,其最终目的就是要部署到推理设备上发挥功能。除了将模型训练过程进行非常大幅度的简化,以及整合迁移学习等功能之外,TAO 还有一个非常重要的任务,就是让我们更轻松获得 TensorRT 加速引擎。

将一般框架训练的模型转换成 TensorRT 引擎的过程并不轻松,但是 TensorRT 所带来的性能红利又是如此吸引人,如果能避开麻烦又能享受成果,这是多么好的福利!

下图是将一般模型转成 TesnorRT 的标准步骤,在中间 “Builder” 右边的环节是相对单纯的,比较复杂的是 “Builder” 左边的操作过程

9d325b6e-db60-11ec-ba43-dac502259ad0.png

下图就上图 “NetworkDefinition” 比较深入的内容,TensorRT 提供 Caffe、uff 与 ONNX 三种解析器,其中 Caffe 框架已淡出市场、uff 仅支持 TensorFlow 框架,其他的模型就需要透过 ONNX 交换格式进行转换。

9d87b744-db60-11ec-ba43-dac502259ad0.png

这里以 TensorRT 所提供的 YOLOv3 范例来做范例,在安装 Jetpack 4.6 版本的 Jetson Nano 设备上进行体验,请进入到 TesnorRT 的 YOLOv3 范例中:

cd  /usr/src/tensorrt/samples/python/yolov3_onnx

根据项目的 README.md 指示,我们需要先为工作环境添加依赖库,不过由于部分库的版本关系,请先将 requirements.txt 的第 1、3 行进行以下的修改:

numpy==1.19.4protobuf>=3.11.3onnx==1.10.1Pillow; python_version<"3.6"Pillow==8.1.2; python_version>="3.6"pycuda<2021.1

然后执行以下指令进行安装:

python3 -m pip install -r requirements.txt

接下来需要先下载 download.yml 里面的三个文件,

wget https://pjreddie.com/media/files/yolov3.weights wget https://raw.githubusercontent.com/pjreddie/darknet/f86901f6177dfc6116360a13cc06ab680e0c86b0/cfg/yolov3.cfg wgethttps://github.com/pjreddie/darknet/raw/f86901f6177dfc6116360a13cc06ab680e0c86b0/data/dog.jpg

然后就能执行以下指令,将 yolov3.weights 转成 yolov3.onnx

./yolov3_to_onnx.py  -d  /usr/src/tensorrt

这个执行并不复杂,是因为 TensorRT 已经提供 yolov3_to_onnx.py 的 Python 代码,但如果将代码打开之后,就能感受到这 750+ 行代码要处理的内容是相当复杂,必须对 YOLOv3 的结构与算法有足够了解,包括解析 yolov3.cfg 的 788 行配置。想象一下,如果这个代码需要自行开发的话,这个难度有多高!

接下去再用下面指令,将 yolov3.onnx 转成 yolov3.trt 加速引擎:

./onnx_to_tensorrt.py  -d  /usr/src/tensorrt

以上是从一般神经网络模型转成 TensorRT 加速引擎的标准步骤,这需要对所使用的神经网络的结构层、数学公式、参数细节等等都有相当足够的了解,才有能力将模型先转换成 ONNX 文件,这是技术门槛比较高的环节。

  • TAO 工具训练的模型转成 TensorRT 引擎的工具

用 TAO 工具所训练、修剪并汇出的 .etlt 文件,可以跳过上述过程,直接在推理设备上转换成 TensorRT 加速引擎,我们完全不需要了解神经网络的任何结构与算法内容,直接将 .etlt 文件复制到推理设备上,然后用 TAO 所提供的转换工具进行转换就可以。

这里总共需要执行三个步骤:

1、下载 tao-converter 工具,并调试环境:

请根据以下 Jetpack 版本,下载对应的 tao-converter 工具:

Jetpack 4.4:https://developer.nvidia.com/cuda102-trt71-jp44-0 Jetpack 4.5:https://developer.nvidia.com/cuda110-cudnn80-trt72-0 Jetpack 4.6:https://developer.nvidia.com/jp46-20210820t231431z-001zip

下载压缩文件后执行解压缩,就会生成 tao-converterREADME.txt 两个文件,再根据 README.txt 的指示执行以下步骤:

(1)安装 libssl-dev 库:

sudo  apt  install  libssl-dev

(2) 配置环境,请在 ~/.bashrc 最后面添加两行设置:

export TRT_LIB_PATH=/usr/lib/aarch64-linux-gnuexportTRT_INCLUDE_PATH=/usr/include/aarch64-linux-gnu

(3) 将 tao-convert 变成可执行文件:

source ~/.bashrcchmod  +x  tao-convertersudocptao-converter/usr/local/bin

2、安装 TensorRT 的 OSS (Open Source Software)

这是 TensorRT 的开源插件,项目在 https://github.com/NVIDIA/TensorRT,下面提供的安装说明非常复杂,我们将繁琐的步骤整理之后,就是下面的步骤:

export  ARCH=请根据设备进行设置,例如Nano为53、NX为72、Xavier为62export  TRTVER=请根据系统的TensorRT版本,例如Jetpack 4.6为8.0.1git  clone  -b  $TRTVER  https://github.com/nvidia/TensorRT  TRToss cd  TRToss/git checkout  -b  $TRTVER  &&  git  submodule  update  --init  --recursivemkdir  -p  build  &&  cd  buildcmake .. -DGPU_ARCHS=$ARCH-DTRT_LIB_DIR=/usr/lib/aarch64-linux-gnu/-DCMAKE_C_COMPILER=/usr/bin/gcc-DTRT_BIN_DIR=`pwd`/out-DTRT_PLATFORM_ID=aarch64-DCUDA_VERSION=10.2make  nvinfer_plugin  -j$(nproc)sudomv/usr/lib/aarch64-linux-gnu/libnvinfer_plugin.so.8.0.1  /usr/lib/aarch64-linux-gnu/libnvinfer_plugin.so.8.0.1.baksudocplibnvinfer_plugin.so.8.0.1/usr/lib/aarch64-linux-gnu/libnvinfer_plugin.so.8.0.1

这样就能开始用 tao-converter 来将 .etlt 文件转换成 TensorRT 加速引擎了。

3、用 tao-converter 进行转换

(1)首先将 TAO 最终导出 (export) 的文件复制到 Jetson Nano 上,例如前面的实验中最终导出的文件 ssd_resnet18_epoch_080.etlt

(2)在 Jetson Nano 上执行 TAO 的 ssd.ipynb 最后所提供的转换指令,如下:

%set_env KEY=tao converter  -k  $KEY -d  3,300,300     -o  NMS     -e  ssd_resnet18_epoch_080.trt   # 自己设定输出名称    -m  16     -t  fp16                       # 使用export时相同精度    -i  nchw ssd_resnet18_epoch_080.etlt

这样就能生成在 Jetson Nano 上的 ssd_resnet18_epoch_080.trt 加速引擎文件,整个过程比传统方式要简便许多。

原文标题:NVIDIA Jetson Nano 2GB系列文章(64):将模型部署到Jetson设备

文章出处:【微信公众号:NVIDIA英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    5496

    浏览量

    109063
  • 深度学习
    +关注

    关注

    73

    文章

    5590

    浏览量

    123895
  • 模型训练
    +关注

    关注

    0

    文章

    21

    浏览量

    1523

原文标题:NVIDIA Jetson Nano 2GB系列文章(64):将模型部署到Jetson设备

文章出处:【微信号:NVIDIA-Enterprise,微信公众号:NVIDIA英伟达企业解决方案】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    NVIDIA TensorRT LLM 1.0推理框架正式上线

    TensorRT LLM 作为 NVIDIA 为大规模 LLM 推理打造的推理框架,核心目标是突破 NVIDIA 平台上的推理性能瓶颈。为实现这一目标,其构建了多维度的核心实现路径:一方面,针对需
    的头像 发表于 10-21 11:04 747次阅读

    DeepSeek R1 MTP在TensorRT-LLM中的实现与优化

    。我们在之前的博客[1] 中介绍了 DeepSeek-R1 模型实现超低推理延迟的关键优化措施。本文将深入探讨 TensorRT-LLM 中的 MTP 实现与优化。
    的头像 发表于 08-30 15:47 3956次阅读
    DeepSeek R1 MTP在<b class='flag-5'>TensorRT</b>-LLM中的实现与优化

    自动驾驶中Transformer大模型会取代深度学习吗?

    [首发于智驾最前沿微信公众号]近年来,随着ChatGPT、Claude、文心一言等大语言模型在生成文本、对话交互等领域的惊艳表现,“Transformer架构是否正在取代传统深度学习”这一话题一直被
    的头像 发表于 08-13 09:15 3913次阅读
    自动驾驶中Transformer大<b class='flag-5'>模型</b>会取代<b class='flag-5'>深度</b><b class='flag-5'>学习</b>吗?

    RK3128 Android 7.1 进入深度休眠流程分析

    RK3128 Android 7.1 进入深度休眠流程分析RK3128是瑞芯微电子推出的一款低功耗四核Cortex-A7处理器,运行Android 7.1系统时进入深度休眠(Deep Sleep
    发表于 07-22 10:45

    信而泰×DeepSeek:AI推理引擎驱动网络智能诊断迈向 “自愈”时代

    DeepSeek-R1:强大的AI推理引擎底座DeepSeek是由杭州深度求索人工智能基础技术研究有限公司开发的新一代AI大模型。其核心优势在于强大的推理引擎能力,融合了自然语言处理(
    发表于 07-16 15:29

    宁畅与与百度文心大模型展开深度技术合作

    近日,百度正式开源文心大模型4.5系列模型。作为文心开源合作伙伴,宁畅在模型开源首日即实现即刻部署,做到“开源即接入、发布即可用”。据悉,文心4.5开源系列全部基于飞桨深度
    的头像 发表于 07-07 16:26 639次阅读

    如何在魔搭社区使用TensorRT-LLM加速优化Qwen3系列模型推理部署

    TensorRT-LLM 作为 NVIDIA 专为 LLM 推理部署加速优化的开源库,可帮助开发者快速利用最新 LLM 完成应用原型验证与产品部署。
    的头像 发表于 07-04 14:38 1734次阅读

    模型推理显存和计算量估计方法研究

    随着人工智能技术的飞速发展,深度学习模型在各个领域得到了广泛应用。然而,大模型的推理过程对显存和计算资源的需求较高,给实际应用带来了挑战。为了解决这一问题,本文将探讨大
    发表于 07-03 19:43

    使用NVIDIA Triton和TensorRT-LLM部署TTS应用的最佳实践

    针对基于 Diffusion 和 LLM 类别的 TTS 模型,NVIDIA Triton 和 TensorRT-LLM 方案能显著提升推理速度。在单张 NVIDIA Ada Lovelace
    的头像 发表于 06-12 15:37 1297次阅读
    使用NVIDIA Triton和<b class='flag-5'>TensorRT</b>-LLM部署TTS应用的最佳实践

    如何使用Docker部署大模型

    随着深度学习和大模型的快速发展,如何高效地部署这些模型成为了一个重要的挑战。Docker 作为一种轻量级的容器化技术,能够将模型及其依赖环境
    的头像 发表于 05-24 16:39 795次阅读

    模型时代的深度学习框架

    作者:算力魔方创始人/英特尔创新大使刘力 在 CNN时代 ,AI模型的参数规模都在百万级别,仅需在单张消费类显卡上即可完成训练。例如,以业界知名的CNN模型: ResNet50 为例,模型参数
    的头像 发表于 04-25 11:43 652次阅读
    大<b class='flag-5'>模型</b>时代的<b class='flag-5'>深度</b><b class='flag-5'>学习</b>框架

    用树莓派搞深度学习?TensorFlow启动!

    介绍本页面将指导您在搭载64位Bullseye操作系统的RaspberryPi4上安装TensorFlow。TensorFlow是一个专为深度学习开发的大型软件库,它消耗大量资源。您可以在
    的头像 发表于 03-25 09:33 959次阅读
    用树莓派搞<b class='flag-5'>深度</b><b class='flag-5'>学习</b>?TensorFlow启动!

    聆思CSK6大模型语音开发板接入DeepSeek资料汇总(包含深度求索/火山引擎/硅基流动华为昇腾满血版)

    调用DeepSeek节点,最终将大模型输出的结果进行语音合成实现端侧播报 下载工程模板导入,配置参数后绑定开发板ID即可。 关键参数说明(以火山引擎版为例): HOST
    发表于 03-06 17:02

    在OpenVINO™工具套件的深度学习工作台中无法导出INT8模型怎么解决?

    无法在 OpenVINO™ 工具套件的深度学习 (DL) 工作台中导出 INT8 模型
    发表于 03-06 07:54

    Flexus X 实例 ultralytics 模型 yolov10 深度学习 AI 部署与应用

    前言: ���深度学习新纪元,828 B2B 企业节 Flexus X 实例特惠!想要高效训练 YOLOv10 模型,实现精准图像识别?Flexus X 以卓越算力,助您轻松驾驭大规模数据集,加速
    的头像 发表于 12-24 12:24 1293次阅读
    Flexus X 实例 ultralytics <b class='flag-5'>模型</b> yolov10 <b class='flag-5'>深度</b><b class='flag-5'>学习</b> AI 部署与应用