本文基于之前博客中的 YOLOv8 Docker 环境,详细讲解:

PyTorch模型
    ↓
导出ONNX
    ↓
ONNX Runtime推理
    ↓
TensorRT部署

适合人群:

  • YOLOv8 初学者
  • 想学习 AI 模型部署
  • 想学习 ONNX
  • 想做 TensorRT 加速
  • 想部署到边缘设备

本文环境:

项目 版本
Ubuntu 22.04
GPU GTX1660S
Docker 最新版
CUDA 容器内置
PyTorch nvcr官方镜像
YOLOv8 ultralytics

一、什么是 ONNX?

ONNX(Open Neural Network Exchange):

一种通用模型交换格式

作用:

  • 让不同框架互通
  • 方便部署
  • 方便 TensorRT 加速

例如:

PyTorch
    ↓
ONNX
    ↓
TensorRT / OpenVINO / ONNXRuntime

ONNX 已成为深度学习部署领域的重要标准。(onnx.ai)


二、为什么需要 ONNX?

因为:

PyTorch 更适合训练

但:

部署并不是最快

实际生产部署:

部署方式 速度
PyTorch 普通
ONNX Runtime 更快
TensorRT 非常快

因此通常:

训练:
PyTorch

部署:
ONNX/TensorRT

三、本文使用的环境

1. Docker 镜像

沿用之前博客环境:

nvcr.io/nvidia/pytorch:24.12-py3

优势:

  • 自带 CUDA
  • 自带 PyTorch
  • GPU 环境完整
  • 避免宿主机污染

NVIDIA 官方 PyTorch 容器:(catalog.ngc.nvidia.com)


四、启动 Docker

1. 启动容器

docker run -it --gpus all \
    --shm-size=16g \
    --name yolov8-onnx \
    -v /home/workspace:/workspace \
    nvcr.io/nvidia/pytorch:24.12-py3

五、安装 YOLOv8

1. 克隆源码

cd /workspace

git clone https://github.com/ultralytics/ultralytics.git

cd ultralytics

官方项目:Ultralytics YOLOv8 Github


2. 安装依赖

pip install -e .

3. 验证安装

yolo version

六、准备模型

这里直接使用官方预训练模型:

yolov8n.pt

原因:

  • 模型小
  • 转换快
  • GTX1660S 更容易测试

下载:

wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8n.pt

七、YOLOv8 导出 ONNX

YOLOv8 官方已经内置 ONNX 导出。

非常方便。


八、最简单的导出方式

1. 导出 ONNX

yolo export \
    model=yolov8n.pt \
    format=onnx

导出完成后:

yolov8n.onnx

九、导出参数详解

1. 指定输入尺寸

yolo export \
    model=yolov8n.pt \
    format=onnx \
    imgsz=640

2. 使用 FP16

减少模型大小。

yolo export \
    model=yolov8n.pt \
    format=onnx \
    half=True

注意:

FP16需要GPU支持

GTX1660S 支持 FP16。


3. 动态 Batch

部署推荐。

yolo export \
    model=yolov8n.pt \
    format=onnx \
    dynamic=True

作用:

支持不同batch size

4. 简化 ONNX

推荐开启。

yolo export \
    model=yolov8n.pt \
    format=onnx \
    simplify=True

作用:

  • 删除冗余节点
  • 减少模型大小
  • 提高推理性能

十、推荐完整导出命令

推荐:

yolo export \
    model=yolov8n.pt \
    format=onnx \
    imgsz=640 \
    half=True \
    dynamic=True \
    simplify=True

这是最常见的生产导出方式。


十一、导出成功日志

正常会看到:

ONNX: export success
Saved as yolov8n.onnx

十二、查看 ONNX 模型

1. 安装 ONNX 工具

pip install onnx

2. 查看模型

import onnx

model = onnx.load("yolov8n.onnx")

print(model)

十三、验证 ONNX 模型

1. 安装 onnxruntime

pip install onnxruntime-gpu

2. 编写测试脚本

创建:

touch test_onnx.py

十四、ONNX 推理代码

import onnxruntime as ort
import numpy as np

session = ort.InferenceSession(
    "yolov8n.onnx",
    providers=["CUDAExecutionProvider"]
)

input_name = session.get_inputs()[0].name

dummy = np.random.randn(
    1, 3, 640, 640
).astype(np.float32)

outputs = session.run(
    None,
    {input_name: dummy}
)

print("推理成功")
print(outputs[0].shape)

运行:

python test_onnx.py

十五、ONNX Runtime 为什么更快?

因为:

ONNX Runtime做了图优化

包括:

  • 算子融合
  • Kernel优化
  • Tensor优化
  • CUDA加速

ONNX Runtime 官方介绍:(onnxruntime.ai)


十六、ONNX 的核心优势

1. 跨平台

支持:

  • Linux
  • Windows
  • ARM
  • Jetson

2. 跨框架

支持:

  • PyTorch
  • TensorFlow
  • Paddle
  • MXNet

3. 更适合部署

尤其:

工业AI
边缘AI
推理服务器

十七、后续 TensorRT 加速

通常:

PyTorch
    ↓
ONNX
    ↓
TensorRT Engine

TensorRT:

  • NVIDIA 官方推理框架
  • GPU 加速极强

很多 YOLO 部署最终都会转 TensorRT。

TensorRT 官方:(developer.nvidia.com)


十八、GTX1660S 部署建议

1660S:

  • 6GB 显存
  • 无 Tensor Core INT8
  • FP16 性能不错

推荐:

项目 推荐
模型 yolov8n/s
batch 1
FP16 开启
imgsz 640

十九、常见问题

1. CUDA 不可用

检查:

nvidia-smi

2. onnxruntime GPU 无法使用

检查:

print(ort.get_available_providers())

应包含:

CUDAExecutionProvider

3. 导出失败

升级:

pip install -U ultralytics onnx onnxsim

4. Docker GPU 不可见

检查:

docker run --gpus all

二十、ONNX 与 TensorRT 的关系

很多新手会误解:

ONNX ≠ TensorRT

关系:

ONNX:
模型交换格式

TensorRT:
NVIDIA推理引擎

通常:

TensorRT读取ONNX
生成engine

二十一、完整 AI 部署流程

真实项目中:

PyTorch训练
    ↓
导出ONNX
    ↓
TensorRT加速
    ↓
Docker部署
    ↓
FastAPI/Flask服务化

这是目前非常主流的工业部署方案。


二十二、总结

本文基于:

  • Ubuntu22.04
  • GTX1660S
  • Docker
  • YOLOv8

实现了:

  • YOLOv8 环境部署
  • ONNX 导出
  • ONNX Runtime 推理
  • GPU ONNX 加速

核心命令:

yolo export \
    model=yolov8n.pt \
    format=onnx

这是学习:

  • TensorRT
  • 模型部署
  • AI推理优化

最重要的一步。


后续进阶方向

推荐继续学习:

ONNX
    ↓
TensorRT
    ↓
FP16
    ↓
INT8量化
    ↓
DeepStream

这是 NVIDIA GPU 部署主流路线。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐