【5】基于 Docker + YOLOv8 环境实现模型量化(GTX1660S + Ubuntu22.04)

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

PyTorch模型
    ↓
ONNX
    ↓
FP16 / INT8量化
    ↓
TensorRT部署

适合人群:

  • 想学习 AI 模型部署优化
  • 想降低显存占用
  • 想提升推理速度
  • 想学习 INT8 / FP16
  • 想部署到边缘设备

本文环境:

项目版本
Ubuntu22.04
GPUGTX1660S
Docker最新版
CUDA容器内置
PyTorchnvcr官方镜像
YOLOv8ultralytics

一、什么是模型量化?

模型量化(Quantization):

降低模型计算精度

例如:

原始类型量化后
FP32FP16
FP32INT8

本质:

用更小的数据类型
表示神经网络参数

二、为什么需要量化?

深度学习模型默认:

FP32(32位浮点)

问题:

  • 显存占用大
  • 推理速度慢
  • 功耗高

因此:

需要低精度推理

三、量化后的优势

1. 模型更小

例如:

精度模型大小
FP32100%
FP1650%
INT825%

2. 推理更快

特别:

TensorRT INT8

加速非常明显。

TensorRT 支持 INT8/FP8/FP4 等低精度推理。


3. 显存更低

尤其:

  • 边缘设备
  • Jetson
  • 小显卡

非常重要。


四、量化的缺点

量化不是没有代价。

通常:

精度会下降

尤其:

INT8

比:

FP16

掉点更多。


五、本文使用环境

1. Docker 镜像

沿用之前博客环境:

nvcr.io/nvidia/pytorch:24.12-py3

优势:

  • 已内置 CUDA
  • 已内置 PyTorch
  • GPU 环境稳定

NVIDIA 官方 PyTorch 容器:


六、启动 Docker

docker run -it --gpus all \
    --shm-size=16g \
    --name yolov8-quant \
    -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 .

八、准备模型

这里使用:

yolov8n.pt

原因:

  • 模型小
  • GTX1660S 更适合
  • 转换速度快

下载:

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

九、量化的两种主流方式

1. PTQ(Post Training Quantization)

训练完成后:

直接量化

优点:

  • 简单
  • 快速
  • 工程常用

缺点:

精度可能下降

TensorRT 支持 PTQ 校准流程。


2. QAT(Quantization Aware Training)

量化感知训练:

训练时模拟INT8误差

优点:

  • 精度更高

缺点:

  • 训练复杂
  • 时间更长

十、GTX1660S 推荐哪种?

你的环境:

GTX1660S

推荐:

类型推荐
FP16强烈推荐
INT8可学习
QAT后期再学

因为:

1660S没有完整INT8 Tensor Core优势

所以:

FP16收益通常更明显

十一、YOLOv8 导出 FP16 ONNX

YOLOv8 官方已经支持:

FP16导出

1. 导出命令

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

参数:

参数作用
half=TrueFP16量化

十二、推荐完整 ONNX 导出命令

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

作用:

参数作用
imgsz输入尺寸
halfFP16
dynamic动态batch
simplify简化ONNX

十三、FP16 的优势

FP16:

几乎不掉精度

但:

速度明显提升

因此:

工业界大量使用FP16

十四、YOLOv8 转 TensorRT FP16

1. 直接导出 engine

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

生成:

yolov8n.engine

十五、INT8 量化

INT8:

8位整数推理

优点:

  • 更小
  • 更快
  • 更低显存

十六、INT8 的问题

INT8:

精度下降更明显

尤其:

  • 小目标
  • 检测任务
  • YOLO

对量化更敏感。

研究中也提到:

INT8通常会有3~7%mAP下降

尤其在目标检测任务中更明显。


十七、INT8 需要 Calibration

INT8 不是直接转换。

需要:

Calibration(校准)

作用:

统计激活值范围

TensorRT PTQ 流程核心就是 Calibration。


十八、导出 TensorRT INT8

YOLOv8 已支持:

yolo export \
    model=yolov8n.pt \
    format=engine \
    int8=True \
    data=coco128.yaml

参数:

参数作用
int8=True开启INT8
data校准数据集

十九、为什么需要 data?

INT8:

需要真实图片做校准

否则:

精度会崩

二十、INT8 校准原理

TensorRT 会:

统计每层激活分布

然后:

映射到INT8范围

ONNX Runtime 与 TensorRT 都采用 scale + zero_point 的量化方式。


二十一、FP16 vs INT8

项目FP16INT8
精度损失很小较明显
推理速度更快
部署难度简单较复杂
校准需求不需要需要

二十二、GTX1660S 推荐方案

推荐:

优先FP16

原因:

  • 精度稳定
  • 转换简单
  • 兼容性好

INT8:

更适合Jetson/数据中心

二十三、ONNX Runtime 量化

除了 TensorRT:

ONNX Runtime 也支持:

INT8量化

官方提供 quantize API。


二十四、ONNX Runtime 量化示例

安装:

pip install onnxruntime onnxruntime-tools

量化脚本

from onnxruntime.quantization import quantize_dynamic
from onnxruntime.quantization import QuantType

quantize_dynamic(
    "yolov8n.onnx",
    "yolov8n_int8.onnx",
    weight_type=QuantType.QInt8
)

print("INT8量化完成")

二十五、查看模型大小变化

FP32

12MB

FP16

6MB

INT8

3MB

二十六、真实部署中的量化流程

工业界常见:

PyTorch训练
    ↓
ONNX
    ↓
FP16
    ↓
TensorRT

高端场景:

再进一步INT8

二十七、量化后的性能提升

社区测试中:

TensorRT FP16
通常可提升2~4倍

INT8:

还能进一步提升5~15%

尤其:

  • Jetson
  • Orin
  • NVIDIA GPU

效果明显。


二十八、为什么 YOLO 更适合 FP16?

YOLO:

检测头对量化敏感

INT8:

容易:

  • bbox漂移
  • 小目标丢失

因此:

很多生产环境优先FP16

二十九、量化 + 裁剪 + 蒸馏

工业界常见组合:

蒸馏
 + 裁剪
 + 量化

最终:

小模型
高速度
低功耗

三十、完整 AI 优化路线

推荐学习路线:

YOLOv8训练
    ↓
ONNX
    ↓
FP16
    ↓
INT8
    ↓
TensorRT
    ↓
DeepStream

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


三十一、常见问题

1. INT8 精度掉太多

解决:

增加Calibration数据

社区实践中:

校准数据越真实
精度越稳定

2. 导出失败

升级:

pip install -U ultralytics onnx onnxruntime

3. TensorRT 不支持某些层

解决:

升级TensorRT

4. FP16 没加速

检查:

nvidia-smi

确认:

GPU支持FP16

三十二、总结

本文基于:

  • Ubuntu22.04
  • Docker
  • GTX1660S
  • YOLOv8

实现了:

  • FP16量化
  • INT8量化
  • ONNX量化
  • TensorRT量化
  • Calibration校准

核心思想:

降低精度
提升速度

这是 AI 推理部署中最核心的优化技术之一。


后续进阶方向

后面推荐继续学习:

QAT
    ↓
TensorRT INT8
    ↓
DeepStream
    ↓
Jetson部署

这是目前非常主流的工业部署路线。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值