前面我们花了很多力气在TAO上面训练模型,其最终目的就是要部署到推理设备上发挥功能。除了将模型训练过程进行非常大幅度的简化,以及整合迁移学习等功能之外,TAO还有一个非常重要的任务,就是让我们更轻松获得TensorRT加速引擎。
将一般框架训练的模型转换成TensorRT引擎的过程并不轻松,但是TensorRT所带来的性能红利又是如此吸引人,如果能避开麻烦又能享受成果,这是多么好的福利!
下图是将一般模型转成TesnorRT的标准步骤,在中间”Builder”右边的环节是相对单纯的,比较复杂的是”Builder”左边的操作过程。
下图就上图 ”Network Definition” 比较深入的内容,TensorRT提供Caffe、uff与ONNX三种解析器,其中Caffe框架已淡出市场、uff仅支持TensorFlow框架,其他的模型就需要透过ONNX交换格式进行转换。
这里以TensorRT所提供的YOLOv3范例来做范例,在安装Jetpack 4.6版本的Jetson Nano设备上进行体验,请进入到TesnorRT的YOLOv3范例中:
$ |
cd /usr/src/tensorrt/samples/python/yolov3_onnx |
根据项目的README.md指示,我们需要先为工作环境添加依赖库,不过由于部分库的版本关系,请先将requirements.txt的第1、3行进行以下的修改:
1 2 3 4 5 6 |
numpy==1.19.4 protobuf>=3.11.3 onnx==1.10.1 Pillow; 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://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工具所训练、修剪并汇出的.etlt文件,可以跳过上述过程,直接在推理设备上转换成TensorRT加速引擎,我们完全不需要了解神经网络的任何结构与算法内容,直接将.etlt文件复制到推理设备上,然后用TAO所提供的转换工具进行转换就可以。
这里总共需要执行三个步骤:
请根据以下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-converter与README.txt两个文件,再根据README.txt的指示执行以下步骤:
$ |
sudo apt install libssl-dev |
|
export TRT_LIB_PATH=/usr/lib/aarch64-linux-gnu export TRT_INCLUDE_PATH=/usr/include/aarch64-linux-gnu |
$ $ $ |
source ~/.bashrc chmod +x tao-converter sudo cp tao-converter /usr/local/bin |
这是TensorRT的开源插件,项目在https://github.com/NVIDIA/TensorRT,下面提供的安装说明非常复杂,我们将繁琐的步骤整理之后,就是下面的步骤:
$ $ $ $ $ $ $
$ $
$ |
export ARCH=请根据设备进行设置,例如Nano为53、NX为72、Xavier为62 export TRTVER=请根据系统的TensorRT版本,例如Jetpack 4.6为8.0.1 git clone -b $TRTVER https://github.com/nvidia/TensorRT TRToss cd TRToss/ git checkout -b $TRTVER && git submodule update --init --recursive mkdir -p build && cd build cmake .. \ -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.2 make nvinfer_plugin -j$(nproc) sudo mv /usr/lib/aarch64-linux-gnu/libnvinfer_plugin.so.8.0.1 /usr/lib/aarch64-linux-gnu/libnvinfer_plugin.so.8.0.1.bak sudo cp libnvinfer_plugin.so.8.0.1 /usr/lib/aarch64-linux-gnu/libnvinfer_plugin.so.8.0.1 |
这样就能开始用tao-converter来将 .etlt文件转换成TensorRT加速引擎了。
$ $ |
%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加速引擎文件,整个过程比传统方式要简便许多。【完】
好文章,需要你的鼓励
这项研究提出了ORV(占用中心机器人视频生成)框架,利用4D语义占用作为中间表示来生成高质量的机器人操作视频。与传统方法相比,ORV能提供更精确的语义和几何指导,实现更高的时间一致性和控制精度。该框架还支持多视角视频生成(ORV-MV)和模拟到真实的转换(ORV-S2R),有效弥合了虚拟与现实之间的差距。实验结果表明,ORV在多个数据集上的表现始终优于现有方法,为机器人学习和模拟提供了强大工具。
这项研究由Writer公司团队开发的"反思、重试、奖励"机制,通过强化学习教导大型语言模型生成更有效的自我反思内容。当模型回答错误时,它会生成反思并二次尝试,若成功则奖励反思过程。实验表明,该方法在函数调用和数学方程解题上带来显著提升,最高分别改善18.1%和34.7%。令人惊讶的是,经训练的小模型甚至超越了同家族10倍大的模型,且几乎不存在灾难性遗忘问题。这种自我改进技术为资源受限环境下的AI应用开辟了新方向。
FuseLIP是一项突破性研究,提出了通过早期融合离散标记实现多模态嵌入的新方法。与传统CLIP模型使用独立编码器不同,FuseLIP采用单一编码器同时处理图像和文本标记,实现了更自然的模态交互。研究证明,这种早期融合方法在多种多模态任务上表现优异,特别是在需要理解图像结构而非仅语义内容的任务上。研究还开发了创新的数据集和评估任务,为多模态嵌入研究提供了宝贵资源。
ByteDance与浙江大学合作开发的MERIT是首个专为多语言多条件语义检索设计的基准数据集,包含320,000条跨5种语言的查询和135,000个产品。研究发现现有模型在处理多条件查询时过度关注全局语义而忽略特定条件元素,为此提出CORAL框架,通过嵌入重建和对比学习相结合的方式,使检索性能提升45.9%。这项研究不仅识别了现有方法的关键局限性,还为多条件交错语义检索领域的未来研究奠定了基础。