ONNX_day5
摘要:本文是 ONNX 部署学习路线的 Step 5,讲解如何将 ONNX 模型转换为 TensorRT Engine 并在 NVIDIA GPU 上高效推理。内容涵盖 TensorRT 与 ONNX Runtime 的定位差异、Engine 核心概念、FP32/FP16/INT8 精度支持、与 TFLM INT8 的区别、MacBook Air 的硬件限制,以及从 trtexec 命令行工具到 Python API 的完整实践路径,最终通过 6 个小步骤带你跑通 ONNX → TensorRT 全流程。好。按照你前面的学习路线,Step 5:ONNX → TensorRT很适合放在 Step 4(ONNX → ARM Linux)之后。不过这里要先明确一个关键点:TensorRT 主要面向 NVIDIA GPU,不是 ARM CPU。所以这一阶段我们先在你的Intel MacBook Air上学习 TensorRT 的工作流程和概念;真正运行 TensorRT inference,建议使用NVIDIA GPU Linux 环境,例如 Ubuntu + NVIDIA GPU,或者后面使用 Jetson。Step 5:ONNX → TensorRT整个路线可以理解成:Training │ ▼ PyTorch Model │ │export▼ model.onnx │ │ TensorRT ▼ TensorRT Engine(.engine / .plan)│ ▼ NVIDIA GPU │ ▼ Inference和你前面的路线对应起来:Step1PyTorch ↓ ONNX ↓ ONNX Runtime ↓ Linux/x86 Step2ONNX ↓ ONNX Runtime ↓ ARM Linux Step3ONNX ↓ INT8 Quantization Step4ONNX ↓ ARM Linux Step5ONNX ↓ TensorRT ↓ NVIDIA GPU5.1 TensorRT 到底是什么?可以把:ONNX Runtime和TensorRT理解成两种不同的 inference runtime。ONNX Runtime 更强调:通用性TensorRT 更强调:NVIDIA GPU 上的性能TensorRT 会对 ONNX 模型进行进一步优化,例如:ONNX Model │ ▼ TensorRT Parser │ ▼ Graph Optimization │ ├── Layer Fusion ├── Kernel Selection ├── Precision Optimization └── Memory Optimization │ ▼ TensorRT Engine最终得到一个针对特定 NVIDIA GPU 优化的 inference engine。5.2 最重要的概念:Engine这是 Step 5 最需要理解的东西。ONNX:model.onnx本质上是一个:神经网络计算图 + 权重 + 模型信息而 TensorRT 最终产生:model.engine或者:model.plan它更接近:已经针对 NVIDIA GPU 优化好的可执行 inference engine因此:ONNX │ │ TensorRT build ▼ Engine这个过程叫:Engine Building5.3 TensorRT 的基本工作流程典型流程:这里要特别区分:BuildONNX → EngineRuntimeEngine → Inference也就是说:TensorRT Builder │ │ build once ▼ model.engine │ │ run manytimes▼ TensorRT Runtime5.4 TensorRT 支持哪些 Precision?这是你前面学习 INT8 Quantization 后非常重要的一环。TensorRT 常见 precision:FP32 │ ├── FP16 │ └── INT8例如:FP32ONNX ↓ TensorRT ↓ FP32 EngineFP16ONNX ↓ TensorRT ↓ FP16 EngineINT8ONNX ↓ Calibration / Quantization ↓ TensorRT ↓ INT8 Engine因此你前面学的:ONNX → INT8并不是只能用于 CPU/ARM。它同样是进入:TensorRT INT8 inference的重要基础。5.5 TensorRT INT8 和 TFLM INT8 的区别这个对你的学习路线非常重要。你已经做过:model.keras ↓ TFLite ↓ Full Integer INT8 ↓ TFLM ↓ STM32F303RE现在 TensorRT:model.keras ↓ ONNX ↓ TensorRT ↓ INT8 Engine ↓ NVIDIA GPU虽然都叫 INT8,但是:TFLM INT8 ↓ MCU ↓ 极低功耗 ↓ CPU而:TensorRT INT8 ↓ NVIDIA GPU ↓ 高吞吐量 ↓ AI inference这是两个完全不同的优化方向。5.6 你的 MacBook Air 有一个问题你现在的机器是:MacBook AirIntel CPUmacOS所以:不适合直接做 TensorRT GPU inference。TensorRT 的核心目标平台是 NVIDIA GPU。你的 Mac 可以用于:PyTorch ↓ ONNX ↓ ONNX inspection ↓ ONNX Runtime CPU但 TensorRT 最终测试最好放到:UbuntuNVIDIA GPUCUDATensorRT例如:Ubuntu22.04│ ├── NVIDIA Driver ├── CUDA ├── cuDNN └── TensorRT │ ▼ model.onnx │ ▼ model.engine │ ▼ NVIDIA GPU5.7 我建议你的 Step 5 实验不要一开始就搞复杂模型我们继续使用你之前的简单 Sine 模型。例如:input │ ▼ Dense │ ▼ ReLU │ ▼ Dense │ ▼ output然后完整走:PyTorch/Keras ↓ ONNX ↓ ONNX Runtime ↓ TensorRT ↓ FP32 Engine ↓ FP16 Engine ↓ INT8 Engine最后比较:Accuracy Latency ONNX Runtime ─── ─── TensorRT FP32 ─── ─── TensorRT FP16 ─── ─── TensorRT INT8 ─── ───这样你会真正理解 TensorRT 的价值,而不是只会执行一个命令。