首页/新闻资讯/正文详情

Model Optimizer FAR3D ONNX 后训练量化实战:INT8/FP8 编码器 + TensorRT 11.1 部署与 Argoverse 2 精度评估

发布时间:2026/9/26 10:11:31 来源:云帆数科 栏目:资讯中心
Model Optimizer FAR3D ONNX 后训练量化实战:INT8/FP8 编码器 + TensorRT 11.1 部署与 Argoverse 2 精度评估
【免费下载链接】Model-OptimizerA unified library of SOTA model optimization techniques like quantization, distillation, pruning, neural architecture search, speculative decoding, etc. It compresses deep learning models for downstream deployment frameworks like TensorRT-LLM, TensorRT, vLLM, etc. to optimize inference speed.项目地址https://gitcode.com/GitHub_Trending/te/Model-Optimizer点击查看免费下载本文基于 Model Optimizer 仓库中的 FAR3D 示例examples/onnx_ptq/far3d完整介绍一套面向自动驾驶 3D 目标检测场景的端到端 ONNX 量化工作流将 FAR3D 的 VoVNet 图像编码器后训练量化为 INT8 或 FP8解码器保持导出时的混合 FP16/FP32 精度在 TensorRT 11.1 下构建引擎并在 Argoverse 2 验证集上评估 mAP 与加速比。读完本文你将掌握 FAR3D Argoverse 2 环境搭建、元数据与校准数据准备、AutoCast 与 Model Optimizer PTQ 量化、TensorRT 引擎构建以及精度/性能评估的完整实操方案。一、工作流总览FAR3D 示例属于 Model Optimizer 仓库中 ONNX 后训练量化PTQ工具链的一部分参见 examples/onnx_ptq/README.md与 PETR、BEVFormer 等自动驾驶感知示例并列。其核心思路是只量化编码器FAR3D 中开销最大的 VoVNet 图像编码器被量化为 INT8 或 FP8保留解码器精度解码器沿用 ONNX 导出时的混合 FP16/FP32 精度避免引入额外误差两容器分工evaluator 容器负责数据准备、ONNX 导出、校准数据生成与精度评估ModelOpt 容器负责 AutoCast、量化与 TensorRT 引擎构建真实数据集评估在 Argoverse 2 传感器验证集上以 mAP 和归一化加速比作为最终指标。该工作流沿用了 NVIDIA DL4AGX 仓库中 FAR3D TensorRT 方案 的既定流程本示例为其补充了 Model Optimizer 的量化与精度评估环节。1.1 双容器分工与构建PETR 与 FAR3D 共享同一个 Dockerfile 的两个构建目标见 examples/onnx_ptq/Dockerfileevaluator 目标基于 digest 固定的nvcr.io/nvidia/pytorch:22.06-py3包含 OpenMMLab 旧版技术栈mmcv-full1.7.0、mmdet2.28.2、torch1.13.1cu117见 requirements-evaluator.txt用于源设置、元数据、导出、校准与精度评估modelopt 目标基于nvcr.io/nvidia/pytorch:26.07-py3安装Model-Optimizer[onnx]与onnxruntime-gpu[cuda,cudnn]~1.24.2并强制固定tensorrt11.1.0.106用于 AutoCast、量化与 TensorRT 引擎构建。从仓库根目录构建docker build --target evaluator -f examples/onnx_ptq/Dockerfile -t modelopt-onnx-evaluator . docker build --target modelopt -f examples/onnx_ptq/Dockerfile -t modelopt-onnx-trt11 .两个容器需挂载同一个工作区以便交接 ONNX 模型、校准 batch 与 TensorRT 引擎。容器内运行前需设置以下环境变量export CUDNN_LIB_DIR/usr/lib/x86_64-linux-gnu/ export LD_LIBRARY_PATH${CUDNN_LIB_DIR}:${LD_LIBRARY_PATH}注意TensorRT 引擎必须在 TensorRT 11.1.0.106 上构建并在同一 GPU 架构上评估序列化引擎不跨 TensorRT 版本或 GPU 架构移植详见下文。二、第 1 步准备 FAR3D 与 Argoverse 22.1 下载数据集并启动 evaluator在宿主机下载 Argoverse 2 传感器验证集然后以只读方式挂载原始数据集、以可写方式挂载工作区启动 evaluator 容器docker run --rm -it --gpusall --ipchost \ --user $(id -u):$(id -g) -e HOME/tmp \ -e USER$(id -un) -e LOGNAME$(id -un) \ -v /path/to/workspace:/workspace \ -v /path/to/av2_sensor:/data/av2:ro \ modelopt-onnx-evaluator这里把原始数据集以:ro只读挂载保证验证过程不会被意外改动。2.2 克隆固定版本 DL4AGX 并打补丁克隆 pinned 的 DL4AGX 树并应用其官方 FAR3D 导出补丁这是整个工作流中唯一一处源码补丁git clone https://github.com/NVIDIA/DL4AGX.git /workspace/DL4AGX git -C /workspace/DL4AGX checkout 9f7b29104c253d5bc68334e7b83b3eecb72d4572 git -C /workspace/DL4AGX submodule update --init \ AV-Solutions/far3d-trt/dependencies/Far3D \ AV-Solutions/far3d-trt/dependencies/mmdetection3d git -C /workspace/DL4AGX/AV-Solutions/far3d-trt/dependencies/Far3D \ apply ../../patch/far3d.patch同时下载 FAR3D 官方 checkpointiter_82548.pth。推荐的目录布局是原始数据集保持只读生成的元数据存到工作区/workspace/DL4AGX/AV-Solutions/far3d-trt/ ├── data/av2/ │ └── val - /data/av2/val └── weights/iter_82548.pthcd /workspace/DL4AGX/AV-Solutions/far3d-trt # 替换 DL4AGX 的数据集根目录符号链接使生成的元数据保留在工作区 unlink data/av2 mkdir -p data/av2 weights ln -s /data/av2/val data/av2/val这样data/av2/val指向只读的原始验证集而prepare_metadata.py生成的元数据文件落在工作区可在容器间共享。三、第 2 步元数据、ONNX 导出与校准数据3.1 生成 Argoverse 2 验证元数据prepare_metadata.pyexamples/onnx_ptq/far3d/prepare_metadata.py接收数据集根目录做两件事调用 DL4AGX 的create_av2_infos生成av2_val_infos.pkl先写入av2_val_infos_mini.pkl再改名避免覆盖冲突遍历val/*/annotations.feather为每帧标注追加log_id后合并输出val_anno.feather。该脚本对已存在的输出文件会主动抛出FileExistsError拒绝覆盖保证结果可复现。运行方式cd /workspace/DL4AGX/AV-Solutions/far3d-trt export PYTHONPATH$PWD/dependencies/Far3D python /opt/Model-Optimizer/examples/onnx_ptq/far3d/prepare_metadata.py data/av23.2 导出 ONNX使用 DL4AGX 自带的导出脚本将 FAR3D 的编码器导出为far3d.encoder.onnx、解码器导出为far3d.decoder.onnxpython tools/export_onnx.py \ dependencies/Far3D/projects/configs/far3d.py \ weights/iter_82548.pth3.3 从数据加载器直接生成校准数据prepare_calibration.pyexamples/onnx_ptq/far3d/prepare_calibration.py直接从验证集数据加载器生成校准 batch无需临时 TensorRT 引擎或解码器校准数据。关键参数参数默认值说明config—必填FAR3D 的 mmcv 配置文件路径encoder_onnx—必填编码器 ONNX 路径用于推导输入规格output_dir—必填校准 batch 输出目录--num-samples512期望生成的校准 batch 数--sample-skip-interval20采样间隔按(interval-1, num*interval, interval)步长取样运行python /opt/Model-Optimizer/examples/onnx_ptq/far3d/prepare_calibration.py \ dependencies/Far3D/projects/configs/far3d.py \ far3d.encoder.onnx calibration/encoder脚本底层用到了 examples/onnx_ptq/quantization_utils.py 中的NpzCalibrationWriter它会先读取 ONNX 图输入dtype 与形状校验每次写入的 batch 与输入规格严格匹配多一维或少一维都会报错再以batch_0000.npz递增编号落盘最终以batch_0000.npz至batch_0511.npz共 512 个文件结束。若最终数量不等于--num-samples脚本会抛出RuntimeError杜绝静默缺数据。四、第 3 步AutoCast 与 PTQ 量化、引擎构建切换到modelopt-onnx-trt11容器并挂载同一工作区后进入工程目录执行量化。4.1 AutoCast生成 FP16 对照基线首先用 Model Optimizer 的 AutoCast 工具把编码器从 FP32 转换到混合 FP16作为精度与性能的对照基线python -m modelopt.onnx.autocast \ --onnx_path far3d.encoder.onnx \ --output_path far3d.encoder.fp16.onnx \ --calibration_data calibration/encoder/batch_0000.npz \ --low_precision_type fp16 --keep_io_types --providers cuda:0 cpuAutoCast 的 CLI 入口见 modelopt/onnx/autocast/main.py--low_precision_type别名-t指定目标精度仅支持fp16/bf16默认fp16--calibration_data别名-d支持单 batch NPZ 文件、多 batch NPZ 目录或 Polygraphy JSON多 batch 会聚合统计量使转换决策更稳健--keep_io_types保留模型输入输出数据类型不变--providers cuda:0 cpu指定参考运行的执行提供者顺序另有--nodes_to_exclude/--op_types_to_exclude/--nodes_to_include/--op_types_to_include等正则匹配选项可精确控制哪些节点/算子留在 FP32 或强制进入低精度见 convert.py 中convert_to_mixed_precision与autocast的实现FP16 需要 opset ≥ 13BF16 需要 opset ≥ 22。4.2 用 Model Optimizer 量化 VoVNet 编码器quantize_vovnet.pyexamples/onnx_ptq/quantize_vovnet.py是 FAR3D/PETR 共用的 VoVNet 编码器量化脚本内部调用modelopt.onnx.quantization.quantizefor precision in int8 fp8; do python /opt/Model-Optimizer/examples/onnx_ptq/quantize_vovnet.py \ far3d.encoder.onnx calibration/encoder \ --precision $precision --output far3d.encoder.${precision}.onnx done该脚本的关键实现点源码可核对 quantize_vovnet.py--precision限定int8或fp8默认int8校准方法固定为max执行提供者为[cuda:0, cpu]通过 quantization_utils.py 中的find_vovnet_nodes_to_exclude自动定位精度敏感节点VoVNet OSA4_5 阶段以及 FPNlateral_convs下游的全部节点将其从量化范围中排除保持 FP16从而保住小目标检测精度使用NpzCalibrationReader流式读取batch_*.npz避免一次性载入全部校准数据量化在 ONNX 的临时副本上进行temporary_onnx_copy保证外部数据相对路径有效且不污染源模型。补充说明本仓库通用的 PTQ 入口是python -m modelopt.onnx.quantization见 examples/onnx_ptq/README.md支持fp8/int8/int4与max/entropy/awq_clip/rtn_dq等校准方法并可用--calibrate_per_node对大模型做逐节点校准以降低显存占用quantize_vovnet.py是针对 VoVNet 编码器做了节点排除与数据流适配的专用封装。4.3 用 trtexec 构建引擎对 FP16/INT8/FP8 三种编码器精度和解码器分别构建引擎for precision in fp16 int8 fp8; do trtexec --onnxfar3d.encoder.${precision}.onnx \ --saveEnginefar3d.encoder.${precision}.engine --skipInference done trtexec --onnxfar3d.decoder.onnx \ --saveEnginefar3d.decoder.mixed.engine --skipInference两个要点TensorRT 11.1 使用 typed ONNX 图因此无需--fp16或--stronglyTyped这类显式标记序列化引擎不可跨 TensorRT 版本或 GPU 架构移植换环境必须重新构建。五、第 4 步在 evaluator 容器中评估用相同挂载重启modelopt-onnx-evaluator对三种精度组合逐一评估cd /workspace/DL4AGX/AV-Solutions/far3d-trt export PYTHONPATH$PWD/dependencies/Far3D for precision in fp16 int8 fp8; do python /opt/Model-Optimizer/examples/onnx_ptq/far3d/evaluate.py \ dependencies/Far3D/projects/configs/far3d.py \ far3d.encoder.${precision}.engine far3d.decoder.mixed.engine doneevaluate.pyexamples/onnx_ptq/far3d/evaluate.py的评估逻辑值得展开编码器与解码器均通过 trt_runner.py 的TensorRTRunner加载反序列化引擎、枚举 IO tensor 并映射到 torch dtype、分配 256 字节对齐的 CUDA 缓冲区通过execute_async_v3在独立 CUDA 流上异步执行解码器由Far3DDecoderRunner驱动它维护memory_embedding、memory_reference_point、memory_egopose、memory_velo、memory_timestamp五组时序状态跨场景切换时自动重置并回读*_out输出更新状态从而正确复现 FAR3D 的递归解码每个 batch 的相机内外参、ego pose、lidar2img 等被搬到 CUDA 后送入 pipeline编码器输出特征直接拼接进解码器输入结果以LiDARInstance3DBoxes组织后交给dataset.evaluate输出 3D 检测 mAP。冒烟测试加上--max-samples 2可只跑 2 个样本同时覆盖递归解码器状态的执行路径。完整验证集包含 23,522 帧如果未跑满整个数据集脚本会打印已处理样本数并跳过数据集级指标。六、参考精度与性能文档给出的参考数据基于TensorRT 11.1.0.106、NVIDIA RTX 6000 Ada Generation GPU、512 个校准 batch测得6.1 精度Argoverse 2 验证集 mAPEncoderDecodermAPFP16Mixed FP16/FP320.241INT8Mixed FP16/FP320.235FP8Mixed FP16/FP320.239可见 INT8 与 FP8 相对 FP16 基线的 mAP 损失都很小约 0.002–0.006其中 FP8 更接近 FP16。6.2 性能归一化到 FP16 管线性能测量仅在引擎层面进行并归一化到 FP16 管线每次比较 一次编码器前向 同一导出解码器前向只改变编码器精度。测量方式为 TensorRT 11.1.0.106 RTX 6000 Ada每个引擎组件交错运行 5 次取trtexec报告的 GPU Compute Time 中位数关闭数据传输、开启 CUDA Graphs各组件时间求和后再归一化只报告加速比PipelineINT8 speedup vs. FP16FP8 speedup vs. FP16FAR3D1.69x1.40x七、仓库中的支撑实现与延伸阅读通用 ONNX PTQ 工具链与高级特性逐节点校准、自定义算子量化、Autotune 等examples/onnx_ptq/README.md共享的校准数据读写与 VoVNet 精度敏感节点识别examples/onnx_ptq/quantization_utils.pyTensorRT 引擎的通用运行时封装含状态张量与对齐缓冲区管理examples/onnx_ptq/trt_runner.py双目标 Dockerfile 与依赖固定examples/onnx_ptq/Dockerfile、requirements-evaluator.txt同类的自动驾驶 3D 检测量化示例PETR、BEVFormerAutoCast 精度转换的实现细节modelopt/onnx/autocast/main.py、convert.py。适用前提与限制本工作流依赖 digest 固定的两个容器镜像、TensorRT 11.1.0.106 与特定 GPU 架构数据准备依赖 DL4AGX 的固定 commit9f7b2910...与官方导出补丁换用其他 TensorRT 版本、GPU 或 FAR3D 版本时需要重新验证量化配置与参考指标。赞分享【免费下载链接】Model-OptimizerA unified library of SOTA model optimization techniques like quantization, distillation, pruning, neural architecture search, speculative decoding, etc. It compresses deep learning models for downstream deployment frameworks like TensorRT-LLM, TensorRT, vLLM, etc. to optimize inference speed.项目地址https://gitcode.com/GitHub_Trending/te/Model-Optimizer点击查看免费下载相关推荐Model-Optimizer ONNX 后训练量化PTQ实战指南从 INT8/FP8/INT4 量化到 TensorRT 部署Model Optimizer ONNX 后训练量化PTQ实战指南从 INT8/FP8/INT4 量化到 TensorRT 部署 导读 本文围绕 exam使用 Model Optimizer 对 Hugging Face 模型进行后训练量化PTQNVFP4/FP8/INT4/INT8 全流程实战指南使用 Model Optimizer 对 Hugging Face 模型进行后训练量化PTQNVFP4/FP8/INT4/INT8 全流程实战指南 本文以Model Optimizer 实战从 NVIDIA Hugging Face Model Hub 一键部署 FP8 量化模型到 TensorRT-LLM、vLLM 与 SGLangModel Optimizer 实战从 NVIDIA Hugging Face Model Hub 一键部署 FP8 量化模型到 TensorRT LLM、v上一篇FoundationDB 4.0 版本发布说明深度解析API 400 新特性、fdbcli 增强与事务子系统优化下一篇BiliTools哔哩哔哩工具箱2026年最强大的跨平台B站资源管理工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

手搓Claude Code-第十章 system_prompt:从零构建可复用的系统提示词配置骨架
手搓Claude Code-第十章 system_prompt:从零构建可复用的系统提示词配置骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 10:11:31

量化因子筛选实战:相关性去重与RFE递归特征消除
量化因子筛选实战:相关性去重与RFE递归特征消除

做量化策略的时候,我经常遇到一种尴尬:因子库越堆越厚,可模型效果不升反降。一开始我以为是模型不够强,后来把特征相关性矩阵打出来看,才发现有一堆"换皮"特征——动量类指标换了周期就再算一遍,… · 2026/9/26 10:11:25

研究生英语综合教程上配套资源:课后答案、课文翻译与听力音频全解析
研究生英语综合教程上配套资源:课后答案、课文翻译与听力音频全解析

1. 这套资源到底解决了什么问题第一次拿到《研究生英语综合教程 上》的配套资源时,我正帮一个师弟整理考博英语的复习材料。他手里只有一本纸质教材,课后习题的答案对不上,听力音频也找不到,更别提课文翻译和重点词汇的整理了。这… · 2026/9/26 10:11:25

AST反混淆JS还原工具2.2:让OB混淆代码可读可运行
AST反混淆JS还原工具2.2:让OB混淆代码可读可运行

简介:面向JS逆向与前端安全分析人员的AST反混淆还原工具2.2,基于丁仔大佬的开源还原方案二次开发,旨在保证原始JS文件可执行性的前提下,将ob混淆等代码还原为更接近源码的可读形式,适合有一定逆向基础、需要批量处理混… · 2026/9/26 11:31:22

PyTorch实战:MNIST手写数字识别从训练到部署全流程
PyTorch实战:MNIST手写数字识别从训练到部署全流程

简介:这是一份面向Python初学者与深度学习入门者的手写数字识别实战资源,围绕卷积神经网络(CNN)识别手写数字这一经典计算机视觉任务展开,帮助读者理解图像特征提取与分类的完整流程。压缩包共13个文件,约6… · 2026/9/26 11:31:22

从源码编译安装GCC 11.4.0:tar.gz下载、configure配置与排错指南
从源码编译安装GCC 11.4.0:tar.gz下载、configure配置与排错指南

简介:GCC 11.4.0 源码压缩包(gcc-11.4.0.tar.gz)是 GNU 编译器套件 11.4 分支的完整源代码,面向需要在多操作系统环境下编译、安装及研究 GCC 的开发者,也可用于学习编译原理、构建工具链或定制编译器行为。资源共 200… · 2026/9/26 11:31:15

UE项目如何接入大语言模型:Qwen3.8 27B本地部署与云端模型选择指南
UE项目如何接入大语言模型:Qwen3.8 27B本地部署与云端模型选择指南

如果你的日常开发工作已经离不了大语言模型,那么最近这段时间你一定会陷入一种“选择困难”:本地能跑的模型越来越强,云端 API 的版本迭代越来越快,而你的实际场景又往往是“要在一个具体的引擎或工具链里把模型用起来”&#xff… · 2026/9/26 11:31:15

学生选课信息管理系统Java实现:从数据库设计到事务与并发控制
学生选课信息管理系统Java实现:从数据库设计到事务与并发控制

简介:面向数据库课程设计的学生与开发者,这份学生选课信息管理系统源代码及设计报告基于Java与MySQL实现,采用C/S架构,完整覆盖学生、教师、管理员三类核心角色。学生端支持修改个人信息、查询课程、选课退课、成绩查询与打印、奖… · 2026/9/26 11:31:15

微信小程序+Spring Boot图书馆座位预约系统:前后端联调实战指南
微信小程序+Spring Boot图书馆座位预约系统:前后端联调实战指南

简介:基于微信小程序图书馆座位预约系统设计与实现的完整源码包,面向毕业设计、课程设计及微信小程序入门者,覆盖用户登录、座位查看、预约选座、时间管理、后台管理等典型功能模块,前后端代码与数据库脚本齐备,适合需… · 2026/9/26 11:31:15

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码