带有 UNET 的 TAO Converter
tao-converter
工具与 TAO 一起提供,以方便在 TensorRT 和/或 Deepstream 上部署 TAO 训练的模型。本节详细阐述了如何使用 tao-converter
生成 TensorRT 引擎。
对于具有基于 x86 的 CPU 和独立 GPU 的部署平台,tao-converter
在 TAO docker 中分发。因此,我们建议使用 docker 生成引擎。但是,这要求用户遵守与 docker 分发的 TensorRT 次要版本相同的版本。TAO docker 包括 TensorRT 8.0 版本。
对于具有独立 GPU 的 x86 平台,默认的 TAO 软件包包含为 TensorRT 8.2.5.1 构建的 tao-converter
,带有 CUDA 11.4 和 CUDNN 8.2。但是,对于任何其他版本的 CUDA 和 TensorRT,请参阅 概述 部分进行下载。下载 tao-converter
后,请按照以下说明生成 TensorRT 引擎。
在目标机器上解压缩 zip 文件。
使用以下命令安装 OpenSSL 软件包
sudo apt-get install libssl-dev
导出以下环境变量
$ export TRT_LIB_PATH=”/usr/lib/x86_64-linux-gnu”
$ export TRT_INC_PATH=”/usr/include/x86_64-linux-gnu”
使用以下示例命令运行
tao-converter
并生成引擎。有关在 Jetson 上构建 TensorRT OSS 的说明,请参见上面的 TensorRT OSS on x86 部分或此 GitHub 仓库。
确保遵循各个模型的导出模型部分中提到的输出节点名称。
对于 Jetson 平台,tao-converter
可在 NVIDIA 开发者专区下载。您可以选择您希望下载的版本,如 概述 部分所列。下载 tao-converter
后,请按照以下说明生成 TensorRT 引擎。
在目标机器上解压缩 zip 文件。
使用以下命令安装 OpenSSL 软件包
sudo apt-get install libssl-dev
导出以下环境变量
$ export TRT_LIB_PATH=”/usr/lib/aarch64-linux-gnu”
$ export TRT_INC_PATH=”/usr/include/aarch64-linux-gnu”
对于 Jetson 设备,TensorRT 预装在 Jetpack 中。如果您使用的是旧版本的 JetPack,请升级到 JetPack-5.0DP。
有关在 Jetson 上构建 TensorRT OSS 的说明,请参见上面的 TensorRT OSS on Jetson (ARM64) 部分或此 GitHub 仓库。
使用以下示例命令运行
tao-converter
并生成引擎。
确保遵循各个模型的 导出模型
部分中提到的输出节点名称。
tao-converter [-h] -k <encryption_key>
-p <optimization_profiles>
[-d <input_dimensions>]
[-o <comma separated output nodes>]
[-c </path/to/calibration/cache_file>]
[-e </path/to/output/engine>]
[-b <calibration batch size>]
[-m <maximum batch size of the TRT engine>]
[-t <engine datatype>]
[-w <maximum workspace size of the TRT Engine>]
[-i <input dimension ordering>]
[-s]
[-u <DLA_core>]
input_file
必需参数
input_file
:使用export
导出的.etlt
模型的路径。-p
:具有动态形状的.etlt
模型的优化配置文件。使用逗号分隔的优化配置文件形状列表,格式为<input_name>,<min_shape>,<opt_shape>,<max_shape>
,其中每个形状的格式为:<n>x<c>x<h>x<w>
。如果模型有多个输入张量,则可以多次指定此参数。-k
:用于在训练时编码.tlt
模型的密钥
可选参数
-e
:保存引擎的路径。默认路径为./saved.engine
。使用.engine
或.trt
作为引擎路径的扩展名。-t
:所需的引擎数据类型。此选项在 INT8 模式下生成校准缓存。默认值为fp32
。选项为fp32
、fp16
和int8
。-w
:TensorRT 引擎的最大工作区大小。默认值为1073741824(1<<30)
。-i
:输入维度顺序。默认值为nchw
。选项为nchw
、nhwc
和nc
。对于 UNet,您可以省略此参数。-s
:一个布尔值,指定在构建 TensorRT 引擎时是否应用 TensorRT 严格类型约束。-u
:在 Jetson 设备上构建 TensorRT 引擎时,指定 DLA 核心索引。-d
:一个逗号分隔的输入维度列表,应与用于export
的维度匹配。-o
:一个逗号分隔的输出 blob 名称列表,应与用于export
的输出配置匹配。
INT8 模式参数
-c
:INT8 模式的校准缓存文件的路径。默认路径为./cal.bin
。-b
:在 INT8 校准缓存生成的export
步骤中使用的批次大小(默认值:8
)。-m
:TensorRT 引擎的最大批次大小。默认值为16
。如果遇到内存不足问题,请相应地减小批次大小。对于使用动态形状生成的.etlt
模型(仅适用于 TAO 3.21.08 中引入的新模型),此参数不是必需的。
示例输出日志
以下是导出 UNet 模型的示例日志。
tao-converter -k $KEY
-c $USER_EXPERIMENT_DIR/export/isbi_cal.bin
-e $USER_EXPERIMENT_DIR/export/trt.int8.tlt.isbi.engine
-t int8
-p input_1,1x1x572x572,4x1x572x572,16x1x572x572
/workspace/tao-experiments/faster_rcnn/resnet18_pruned.epoch45.etlt
..
[INFO] Some tactics do not have sufficient workspace memory to run. Increasing workspace size may increase performance, please check verbose output.
[INFO] Detected 1 inputs and 2 output network tensors.
要使用 TAO 软件包中提供的默认 tao-converter
,请将 tao
附加到 此处 提到的 tao_converter
的示例用法。
用于 shufflenet 主干的输入名称是 input_2:0。对于所有其他主干,要使用的输入名称是 input_1:0