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

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

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

适合人群:

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

本文环境:

项目版本
Ubuntu22.04
GPUGTX1660S
Docker最新版
CUDA容器内置
PyTorchNVIDIA NGC
YOLOv8ultralytics

一、什么是模型部署?

模型部署:

 
让训练好的模型真正运行起来

例如:

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

训练:

 
只是开始

真正上线:

 
部署才是重点

二、YOLOv8 为什么适合部署?

YOLO 系列最大的优势:

 
实时检测

特点:

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

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


三、工业界主流部署流程

现在最常见:

 
PyTorch
    ↓
ONNX
    ↓
TensorRT
    ↓
Docker
    ↓
服务化API

原因:

技术作用
ONNX通用模型格式
TensorRTNVIDIA推理加速
Docker环境隔离
FastAPIAPI服务

四、本文部署方案

本文采用:

 
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=TrueFP16
dynamic=True动态batch
simplify=TrueONNX简化

十二、为什么推荐 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
batch1
FP16开启
imgsz640

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

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 的主流方向。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值