【6】基于 Docker + YOLOv8 的模型部署实战(GTX1660S + Ubuntu22.04)

本文基于之前博客中的 YOLOv8 Docker 训练环境,完整讲解:

复制代码
复制代码
模型训练
    ↓
ONNX导出
    ↓
TensorRT加速
    ↓
Python推理
    ↓
Docker部署
    ↓
API服务化

适合人群:

  • 想学习 AI 模型部署
  • 想做 YOLOv8 推理优化
  • 想学习 TensorRT
  • 想学习 ONNX Runtime
  • 想做工业 AI 部署

本文环境:

项目 版本
Ubuntu 22.04
GPU GTX1660S
Docker 最新版
CUDA 容器内置
PyTorch NVIDIA NGC
YOLOv8 ultralytics

一、什么是模型部署?

模型部署:

复制代码
复制代码
让训练好的模型真正运行起来

例如:

  • 摄像头检测
  • 视频分析
  • Web API
  • 工业检测
  • 边缘AI

训练:

复制代码
复制代码
只是开始

真正上线:

复制代码
复制代码
部署才是重点

二、YOLOv8 为什么适合部署?

YOLO 系列最大的优势:

复制代码
复制代码
实时检测

特点:

特性 说明
推理快 FPS高
精度高 mAP优秀
模型小 易部署
导出方便 ONNX/TensorRT

YOLOv8 采用 Anchor-Free 与解耦检测头设计,更适合现代部署优化。


三、工业界主流部署流程

现在最常见:

复制代码
复制代码
PyTorch
    ↓
ONNX
    ↓
TensorRT
    ↓
Docker
    ↓
服务化API

原因:

技术 作用
ONNX 通用模型格式
TensorRT NVIDIA推理加速
Docker 环境隔离
FastAPI API服务

四、本文部署方案

本文采用:

复制代码
复制代码
YOLOv8n
 + ONNX
 + TensorRT FP16
 + FastAPI
 + Docker

因为:

GTX1660S:

  • 显存只有6GB
  • 更适合轻量模型
  • FP16收益明显

五、Docker 环境准备

1. 拉取 NVIDIA PyTorch 镜像

复制代码
复制代码
docker pull nvcr.io/nvidia/pytorch:24.12-py3

NVIDIA 官方 NGC PyTorch 镜像:
NVIDIA NGC PyTorch Container


六、启动容器

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

参数说明:

参数 作用
--gpus all 使用GPU
--shm-size 增加共享内存
-v 挂载目录

七、安装 YOLOv8

1. 克隆项目

复制代码
复制代码
cd /workspace

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

cd ultralytics

官方项目:
Ultralytics YOLO Github


2. 安装依赖

复制代码
复制代码
pip install -e .

八、准备模型

这里直接使用官方模型:

复制代码
复制代码
yolov8n.pt

下载:

复制代码
复制代码
wget https://github.com/ultralytics/assets/releases/download/v8.3.0/yolov8n.pt

九、为什么部署前要转 ONNX?

PyTorch:

复制代码
复制代码
更适合训练

但:

复制代码
复制代码
不一定适合生产部署

ONNX:

  • 跨平台
  • 更容易优化
  • 支持 TensorRT
  • 支持 ONNX Runtime

Ultralytics 官方也推荐先导出 ONNX 再进行生产部署。


十、导出 ONNX

1. 最简单导出

复制代码
复制代码
yolo export \
    model=yolov8n.pt \
    format=onnx

生成:

复制代码
复制代码
yolov8n.onnx

十一、推荐生产导出参数

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

参数说明:

参数 作用
half=True FP16
dynamic=True 动态batch
simplify=True ONNX简化

十二、为什么推荐 FP16?

GTX1660S:

复制代码
复制代码
支持FP16

FP16:

  • 显存减半
  • 推理更快
  • 精度损失很小

Ultralytics 部署文档中也推荐 NVIDIA GPU 使用 TensorRT FP16。


十三、ONNX Runtime 推理

1. 安装 ONNX Runtime

复制代码
复制代码
pip install onnxruntime-gpu

2. 推理代码

创建:

复制代码
复制代码
touch infer_onnx.py

十四、ONNX Runtime 推理脚本

复制代码
复制代码
import cv2
import numpy as np
import onnxruntime as ort

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

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

img = cv2.imread("test.jpg")

img = cv2.resize(img, (640, 640))

img = img.transpose(2, 0, 1)

img = np.expand_dims(img, axis=0)

img = img.astype(np.float32) / 255.0

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

print(outputs[0].shape)

十五、TensorRT 部署

TensorRT:

复制代码
复制代码
NVIDIA官方推理加速框架

特点:

  • GPU优化极强
  • FP16/INT8支持
  • 延迟低
  • 吞吐高

TensorRT 可比原始 PyTorch 推理快数倍。


十六、直接导出 TensorRT Engine

YOLOv8 已支持:

复制代码
复制代码
yolo export \
    model=yolov8n.pt \
    format=engine \
    half=True

生成:

复制代码
复制代码
yolov8n.engine

十七、TensorRT 推理代码

复制代码
复制代码
from ultralytics import YOLO

model = YOLO("yolov8n.engine")

results = model("test.jpg")

results[0].show()

十八、部署速度对比

典型情况:

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

Ultralytics 官方测试中,TensorRT 往往比原始 PyTorch 更快。


十九、为什么工业界喜欢 TensorRT?

因为:

复制代码
复制代码
GPU利用率高

TensorRT 会:

  • 图优化
  • Kernel融合
  • 自动FP16
  • 内存优化

二十、FastAPI 服务化部署

实际生产中:

复制代码
复制代码
模型
 ≠ 真正服务

通常需要:

复制代码
复制代码
HTTP API

二十一、安装 FastAPI

复制代码
复制代码
pip install fastapi uvicorn python-multipart

二十二、创建 API 服务

创建:

复制代码
复制代码
touch app.py

二十三、完整 FastAPI 部署代码

复制代码
复制代码
from fastapi import FastAPI, UploadFile
from ultralytics import YOLO
import shutil

app = FastAPI()

model = YOLO("yolov8n.engine")

@app.post("/predict")

async def predict(file: UploadFile):

    path = file.filename

    with open(path, "wb") as buffer:
        shutil.copyfileobj(file.file, buffer)

    results = model(path)

    result = results[0].boxes.xyxy.tolist()

    return {
        "result": result
    }

二十四、启动服务

复制代码
复制代码
uvicorn app:app \
    --host 0.0.0.0 \
    --port 8000

浏览器访问:

复制代码
复制代码
http://IP:8000/docs

即可看到 Swagger API。


二十五、测试 API

curl 测试

复制代码
复制代码
curl -X POST \
  -F "file=@test.jpg" \
  http://127.0.0.1:8000/predict

二十六、Docker 化部署

真正生产:

复制代码
复制代码
必须Docker化

原因:

  • 易迁移
  • 易扩容
  • 易运维
  • 环境一致

二十七、创建 Dockerfile

复制代码
复制代码
FROM nvcr.io/nvidia/pytorch:24.12-py3

WORKDIR /app

COPY . .

RUN pip install -e .
RUN pip install fastapi uvicorn python-multipart

CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]

二十八、构建镜像

复制代码
复制代码
docker build -t yolov8-api .

二十九、运行部署容器

复制代码
复制代码
docker run -it --gpus all \
    -p 8000:8000 \
    yolov8-api

三十、真实工业部署架构

很多公司:

复制代码
复制代码
摄像头
   ↓
RTSP
   ↓
YOLO推理
   ↓
FastAPI
   ↓
前端展示

或者:

复制代码
复制代码
Triton Server

三十一、Triton Inference Server

NVIDIA 官方:

复制代码
复制代码
Triton推理服务器

支持:

  • TensorRT
  • ONNX
  • PyTorch
  • 多模型
  • 动态Batch

Ultralytics 官方已提供 Triton 集成方案。


三十二、为什么 Triton 很强?

特点:

功能 说明
多模型管理 支持多个模型
自动Batch 提高吞吐
GPU调度 自动优化
HTTP/gRPC 高性能接口

三十三、GTX1660S 部署建议

1660S:

  • 6GB显存
  • 更适合轻量模型

推荐:

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

三十四、部署中的常见问题

1. CUDA 不可见

检查:

复制代码
复制代码
nvidia-smi

2. Docker GPU 无法使用

检查:

复制代码
复制代码
docker run --gpus all

3. ONNX Runtime GPU 不生效

检查:

复制代码
复制代码
print(ort.get_available_providers())

应包含:

复制代码
复制代码
CUDAExecutionProvider

4. TensorRT 导出失败

升级:

复制代码
复制代码
pip install -U ultralytics

三十五、完整 AI 部署路线

推荐学习路线:

复制代码
复制代码
YOLOv8训练
    ↓
ONNX
    ↓
TensorRT
    ↓
FastAPI
    ↓
Docker
    ↓
Triton

这是目前 NVIDIA GPU 非常主流的部署路线。


三十六、总结

本文基于:

  • Ubuntu22.04
  • Docker
  • GTX1660S
  • YOLOv8

实现了:

  • ONNX部署
  • TensorRT部署
  • FastAPI服务化
  • Docker部署
  • GPU推理优化

核心思想:

复制代码
复制代码
训练只是开始
部署才是真正落地

后续进阶方向

后面推荐继续学习:

复制代码
复制代码
INT8量化
    ↓
DeepStream
    ↓
Triton
    ↓
Jetson部署

这是目前工业视觉 AI 的主流方向。

相关推荐
密瓜智能6 小时前
HAMi 正式接入 Kubernetes DRA:下一代 GPU 资源模型实践指南
云原生·容器·kubernetes
魔极客6 小时前
1panel面析中Ollama Docker配置错误解析与修复
运维·docker·容器
我是谁??6 小时前
【1】基于 GTX1660 Super + Docker + YOLOv8 的目标检测训练完整实践(Ubuntu22.04)
人工智能·yolo·目标检测
JAVA社区6 小时前
Java进阶全套教程(八)—— Docker超详细实战详解
java·运维·开发语言·docker·容器·面试·职场和发展
我是谁??6 小时前
【5】基于 Docker + YOLOv8 环境实现模型量化(GTX1660S + Ubuntu22.04)
yolo·docker·容器
我是谁??7 小时前
【4】基于 Docker + YOLOv8 环境将模型转换为 ONNX(GTX1660S + Ubuntu22.04)
yolo·docker·容器
万里侯7 小时前
云原生API网关:管理微服务流量的最佳实践
微服务·容器·k8s
李李李li7 小时前
debian13.3安装k8s
云原生·容器·kubernetes
大江东去浪淘尽千古风流人物7 小时前
【Polaris-VIO】Docker 镜像跨硬件分发的隐藏陷阱:AVX-512、-march=native 与 CPU 指令集解耦边界
运维·docker·容器·slam·vio·avx-512