2、环境搭建:Python虚拟环境配置、ONNX Runtime安装、PyTorch/TensorFlow环境准备

好,咱们正式开始动手了。

这一章,说白了就是「把家伙事儿备齐」。我见过太多同学,模型精度对不齐,最后发现是环境版本搞错了——这种坑,踩一次就够了。所以咱们花点时间,把环境搭得干干净净。

2.1 Python虚拟环境——为什么必须用?

你可能觉得:「我直接 pip install 不就行了?」

嗯,我以前也这么想。直到有一次,我同时维护三个项目,一个要 PyTorch 1.8,一个要 1.12,还有一个死活要 TensorFlow 2.4。结果呢?装一个崩一个,最后重装了系统。

虚拟环境就是干这个的——每个项目一个独立空间,互不干扰。

核心原则:每个 ONNX 项目,单独建一个虚拟环境。别偷懒。

2.2 创建虚拟环境(conda 和 venv 两种方式)

我个人习惯用 conda,因为它管理 Python 版本更方便。但如果你不想装 Anaconda,用 Python 自带的 venv 也完全够用。

方式一:conda(推荐)

# 创建环境,指定 Python 3.9
conda create -n onnx_env python=3.9

# 激活环境
conda activate onnx_env

# 退出环境
conda deactivate

为什么选 Python 3.9?我踩过坑。Python 3.11 对某些 ONNX 算子支持不太好,3.8 又太老。3.9 是目前最稳的版本。

方式二:venv(轻量级)

# 创建环境
python -m venv onnx_env

# 激活(Windows)
onnx_env\Scripts\activate

# 激活(Linux/Mac)
source onnx_env/bin/activate

小技巧:我习惯在项目根目录下建一个 env_setup.sh 脚本,把环境创建和依赖安装写在一起。这样换机器时,一行命令搞定。

2.3 ONNX Runtime 安装

ONNX Runtime 是微软开源的推理引擎。说白了,它就是用来跑 .onnx 模型的。

安装很简单,但要注意版本匹配。我曾经因为装了最新版 ONNX Runtime,结果模型导出时用的 ONNX opset 版本太低,跑都跑不起来。

# 安装 CPU 版本(最常用)
pip install onnxruntime

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

# 指定版本(推荐)
pip install onnxruntime==1.15.1
场景 推荐版本 说明
CPU 推理 onnxruntime 1.15.x 稳定,兼容性好
GPU 推理 onnxruntime-gpu 1.15.x 需要 CUDA 11.8+
移动端 onnxruntime-mobile 轻量级,适合 ARM

注意:onnxruntime 和 onnxruntime-gpu 不能同时装。我试过,会冲突。如果你需要切换,建议建两个虚拟环境。

2.4 PyTorch 环境准备

PyTorch 是咱们导出 ONNX 模型的主力框架。安装时,我建议直接去官网选命令,别自己拼。

# CPU 版本
pip install torch torchvision torchaudio

# GPU 版本(CUDA 11.8)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

这里有个坑:PyTorch 版本和 ONNX opset 版本是绑定的。比如 PyTorch 2.0 默认用 opset 17,而 PyTorch 1.13 用 opset 16。如果你要导出模型给老版本 ONNX Runtime 用,就得手动指定 opset。

我的建议:PyTorch 2.0 + ONNX Runtime 1.15,这个组合我用了大半年,没出过兼容问题。

2.5 TensorFlow 环境准备

虽然我个人更常用 PyTorch,但工作中难免遇到 TensorFlow 模型转 ONNX 的情况。TensorFlow 的环境,说实话,比 PyTorch 麻烦一点。

# 安装 TensorFlow 2.x
pip install tensorflow==2.12.0

# 安装 tf2onnx(转换工具)
pip install tf2onnx

记得,TensorFlow 2.x 和 1.x 的 API 差别很大。如果你还在用 TF 1.x,建议先升级。我去年帮一个客户迁移老模型,TF 1.15 转 ONNX,折腾了两天——有些算子 tf2onnx 根本不支持。

避坑指南:我曾经因为 TensorFlow 和 PyTorch 装在同一个环境里,导致 CUDA 版本冲突。后来学乖了——TensorFlow 一个环境,PyTorch 另一个环境,ONNX Runtime 单独一个环境。各玩各的,谁也不碍谁。

2.6 验证环境是否装好

装完了,怎么知道对不对?写几行代码验证一下。

# 验证 ONNX Runtime
import onnxruntime
print(onnxruntime.__version__)
print(onnxruntime.get_device())  # 输出 CPU 或 GPU

# 验证 PyTorch
import torch
print(torch.__version__)
print(torch.cuda.is_available())  # GPU 是否可用

# 验证 TensorFlow
import tensorflow as tf
print(tf.__version__)
print(tf.config.list_physical_devices('GPU'))  # GPU 列表

如果都能正常输出,恭喜你,环境搭好了。

嗯,这里要提醒一句:别急着跑大模型。先拿一个简单的 .onnx 文件试试推理,比如一个 3x3 的卷积网络。我见过有人装完环境直接上 ResNet-152,结果报错半天找不到原因——其实是某个依赖版本不对。

2.7 本章小结

环境搭建这事儿,看着简单,但细节不少。总结一下我的经验:

  • 虚拟环境必须用,别嫌麻烦
  • 版本要匹配,PyTorch、ONNX、ONNX Runtime 三者版本要对应
  • 先验证再干活,跑通一个最小示例再上复杂模型

下一章,咱们开始真正接触 ONNX 模型——怎么导出、怎么看结构、怎么验证精度。准备好了吗?