第一章:环境搭建——把工具箱备齐

做模型量化,说白了就是给训练好的模型「瘦身」。但瘦身前,你得先把工具备好。我刚开始接触量化时,光装环境就折腾了两天——版本不对、依赖冲突、CUDA 没配上……嗯,这些坑我替你们踩过了。

这一章,咱们把 PyTorch、ONNX Runtime、TensorRT、Intel OpenVINO 这四个核心工具装好,再验证一下环境是否跑得通。我个人习惯用 conda 管理环境,省心。

1.1 安装 PyTorch

PyTorch 是整个量化流程的起点。模型训练、导出、精度验证都离不开它。我建议直接用官方推荐的 pip 安装方式,别自己编译源码——除非你想体验一下什么叫「编译两小时,报错三分钟」。

核心命令:

# 创建一个干净的环境
conda create -n quant_env python=3.9
conda activate quant_env

# 安装 PyTorch(以 CUDA 11.8 为例)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

小技巧: 不确定自己的 CUDA 版本?运行 nvidia-smi 查看右上角的 CUDA Version。我遇到过有人装了 CUDA 12 的 PyTorch,结果显卡只支持 11.8——跑起来直接报错。

1.2 安装 ONNX Runtime

ONNX Runtime 是模型格式转换的「桥梁」。你把 PyTorch 模型导出成 ONNX 格式后,就得靠它来推理。我个人习惯装两个版本:CPU 版用来调试,GPU 版用来加速。

# CPU 版本
pip install onnxruntime

# GPU 版本(需要 CUDA)
pip install onnxruntime-gpu

注意: ONNX Runtime 的 GPU 版本对 CUDA 版本有严格限制。比如 1.15 版本只支持 CUDA 11.8。装错了会提示「找不到 cudart64_110.dll」——别问我怎么知道的。

1.3 安装 TensorRT

TensorRT 是 NVIDIA 的推理优化神器。量化后的模型用 TensorRT 跑,速度能翻好几倍。但安装过程有点绕——它不像 PyTorch 那样 pip 一下就行。

我建议走 tar 包安装,别用 deb 包。deb 包容易和系统库冲突,tar 包更灵活。

# 下载 TensorRT 8.6 GA(需要注册 NVIDIA 账号)
# 解压后设置环境变量
export TRT_PATH=/path/to/TensorRT-8.6.1.6
export LD_LIBRARY_PATH=$TRT_PATH/lib:$LD_LIBRARY_PATH
export PATH=$TRT_PATH/bin:$PATH

# 安装 Python 包
pip install $TRT_PATH/python/tensorrt-8.6.1-cp39-none-linux_x86_64.whl

避坑指南: 我曾经因为 TensorRT 版本和 PyTorch 的 ONNX 导出版本不匹配,折腾了一整天。建议用 TensorRT 8.5 以上版本,对量化支持更友好。

1.4 安装 Intel OpenVINO

如果你用的是 Intel 的 CPU 或集成显卡,OpenVINO 是量化部署的好选择。它能把模型优化成 Intel 硬件最擅长的格式。

# 安装 OpenVINO 开发包
pip install openvino-dev

# 验证安装
python -c "from openvino.runtime import Core; print('OpenVINO OK')"

OpenVINO 的安装相对简单,但要注意它和 PyTorch 的版本兼容性。我遇到过 PyTorch 2.0 导出的模型,OpenVINO 2022.3 解析不了——升级到 2023.0 就好了。

1.5 验证环境

装完不等于能用。我习惯写一个简单的验证脚本,把四个工具都跑一遍。这样能一次性发现所有问题。

import torch
import onnxruntime
import tensorrt as trt
from openvino.runtime import Core

print(f"PyTorch version: {torch.__version__}")
print(f"ONNX Runtime version: {onnxruntime.__version__}")
print(f"TensorRT version: {trt.__version__}")
print(f"OpenVINO version: {Core().get_versions('CPU')['CPU'].description}")

# 简单推理测试
x = torch.randn(1, 3, 224, 224)
print(f"PyTorch inference OK: {x.shape}")

print("All environments are ready!")

预期输出:

PyTorch version: 2.0.1+cu118
ONNX Runtime version: 1.15.1
TensorRT version: 8.6.1
OpenVINO version: OpenVINO 2023.0.0
PyTorch inference OK: torch.Size([1, 3, 224, 224])
All environments are ready!

如果哪个工具报错,别慌。先检查版本兼容性,再确认 CUDA 路径。我遇到过最奇葩的问题——TensorRT 报错是因为系统里装了多个 CUDA 版本,环境变量乱掉了。

知识体系总览

下面这张图,帮你理清这四个工具在量化流程中的位置:

模型量化工具链环境架构 PyTorch 模型 ONNX 格式 TensorRT NVIDIA GPU 加速 OpenVINO Intel CPU/GPU 加速 ONNX Runtime 作为中间桥梁,连接 PyTorch 与推理引擎

从图上你能看到:PyTorch 模型先导出为 ONNX 格式,然后 ONNX Runtime 可以直跑,也可以再转成 TensorRT 或 OpenVINO 的专用格式。说白了,ONNX 就是那个「万能中间人」。

我的建议: 刚开始学量化,先用 ONNX Runtime 跑通流程。等熟悉了,再上 TensorRT 和 OpenVINO 做深度优化。一步到位容易踩坑。

好了,环境搭好了。下一章咱们开始动手——把第一个模型量化掉。


专注资料整理