【4】基于 Docker + YOLOv8 环境将模型转换为 ONNX(GTX1660S + Ubuntu22.04)

本文基于之前博客中的 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 部署主流路线。

相关推荐
java知路3 小时前
linux yum 下载docker安装包及依赖安装包,并离线安装
linux·运维·docker
没有退路那我就不要散步3 小时前
kube-proxy优化
docker·容器·kubernetes
YOLO数据集集合4 小时前
无人机航拍街道巡检数据集 | 空中视角车辆检测、交通流量统计、违停识别、智能交通YOLO数据集10399期
深度学习·yolo·目标检测·无人机
ai产品老杨4 小时前
解耦安防碎片化:基于 Docker 与边缘计算的 AI 视频管理平台架构演进(附 GB28181/RTSP 统一接入与源码交付实践)
人工智能·docker·边缘计算
ai产品老杨5 小时前
基于 Docker 与边缘计算的智能安防架构:解耦 GB28181/RTSP 多协议接入与异构芯片部署(附源码交付与 95% 降本实践)
docker·架构·边缘计算
xiami_world5 小时前
私有化部署协同白板选型指南:从Docker容器化到信创全栈适配的架构实践
运维·人工智能·docker·ai·持续部署
丑过三八线6 小时前
Kubernetes 常用命令速查手册
云原生·容器·kubernetes
bloglin999996 小时前
docker镜像构建及部署样例
运维·docker·容器
stsdddd6 小时前
YOLO系列目标检测数据集大全【第二十期】
yolo·目标检测·目标跟踪
SLD_Allen7 小时前
基于docker搭建sub2api图文教程
运维·docker·容器