2. 环境准备:安装ONNX、ONNX Runtime、PyTorch/TensorFlow

说实话,环境配置这件事,看着简单,但坑是真不少。我见过太多同学花了一整天装环境,最后发现版本对不上,或者装完跑不起来。这一章,咱们就把这事一次性搞定。

我会带着你一步步装好ONNX、ONNX Runtime,还有PyTorch和TensorFlow。最后再跑个验证脚本,确保所有东西都能正常干活。

2.1 整体架构:这些工具到底怎么配合?

先别急着装东西。咱们得搞清楚这些组件之间的关系。我画了张图,你看一眼就明白了。

ONNX 模型转换与推理环境架构 PyTorch torch.onnx.export() TensorFlow tf2onnx.convert() ONNX 模型 (.onnx) 中间表示格式,框架无关 ONNX Runtime CPU / CUDA / TensorRT / OpenVINO 执行后端 训练框架 → ONNX 模型 → ONNX Runtime 推理,这是最标准的工作流

说白了,流程就三步:

  • PyTorch/TensorFlow 负责训练模型
  • ONNX 作为中间桥梁,把模型转成统一格式
  • ONNX Runtime 负责加载并加速推理

嗯,这里要注意:ONNX 本身不是推理引擎,它只是个模型描述格式。真正干活的是 ONNX Runtime。

2.2 安装Python环境

我个人习惯用 conda 管理环境。为什么?因为项目多了,版本冲突是家常便饭。conda 能帮你隔离得干干净净。

我的建议:每个项目建一个独立环境,别图省事全装 base 里。我曾经因为偷懒,把两个项目的依赖混在一起,调试了整整两天才找到冲突原因。

创建环境:

conda create -n onnx_env python=3.9 -y
conda activate onnx_env

Python 版本选 3.8-3.10 都行。我个人推荐 3.9,兼容性最好,踩坑最少。

2.3 安装ONNX核心库

ONNX 的安装其实很简单。但版本选择有讲究。

pip install onnx==1.15.0

为什么指定版本?因为 ONNX 的 op 集版本和框架版本是绑定的。装太新的 ONNX,老框架可能导不出模型;装太旧的,新算子又不支持。

ONNX 版本 op 集版本 推荐 PyTorch 版本 推荐 TensorFlow 版本
1.13.x 18 1.13 - 2.0 2.10 - 2.12
1.14.x 19 2.0 - 2.1 2.12 - 2.13
1.15.x 20 2.1 - 2.2 2.13 - 2.14
1.16.x 21 2.3+ 2.15+
注意:ONNX 版本和框架版本不匹配,导出时会报算子不支持的错。这是新手最容易踩的坑。建议先确定框架版本,再反推 ONNX 版本。

2.4 安装ONNX Runtime

ONNX Runtime 分好几个版本。你想想看,你的模型最终跑在什么设备上?

  • CPU 推理:装 onnxruntime
  • GPU 推理:装 onnxruntime-gpu
  • 边缘设备:装 onnxruntime-tensorrt 或 onnxruntime-openvino

我建议你两个都装上,调试时用 CPU,上线时切 GPU。

# CPU 版本
pip install onnxruntime==1.16.3

# GPU 版本(需要 CUDA 11.8 + cuDNN 8.6)
pip install onnxruntime-gpu==1.16.3
避坑指南:我曾经在项目里装了 onnxruntime-gpu,但忘了装 CUDA 驱动。结果模型一直在 CPU 上跑,我还纳闷为什么这么慢。检查方法很简单:print(onnxruntime.get_device()),输出 "GPU" 才算成功。

2.5 安装PyTorch

PyTorch 的安装,我建议去官网查命令。因为 CUDA 版本不同,命令也不一样。

# CPU 版本
pip install torch==2.1.0 torchvision==0.16.0 --index-url https://download.pytorch.org/whl/cpu

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

# GPU 版本(CUDA 12.1)
pip install torch==2.1.0 torchvision==0.16.0 --index-url https://download.pytorch.org/whl/cu121

装完后验证一下:

import torch
print(torch.__version__)        # 2.1.0
print(torch.cuda.is_available()) # True 表示 GPU 可用

2.6 安装TensorFlow

TensorFlow 2.x 的安装也类似。不过要注意,TF 2.13 之后对 CUDA 版本要求更严格了。

# CPU 版本
pip install tensorflow==2.13.0

# GPU 版本
pip install tensorflow==2.13.0

# 额外安装 tf2onnx 用于导出
pip install tf2onnx==1.15.1

验证:

import tensorflow as tf
print(tf.__version__)               # 2.13.0
print(tf.config.list_physical_devices('GPU'))  # 能看到 GPU 设备

2.7 完整环境验证

所有东西装完后,跑一个完整的验证脚本。这一步不能省。

import onnx
import onnxruntime
import torch
import tensorflow as tf

print("=" * 50)
print("环境验证报告")
print("=" * 50)

# 1. ONNX 版本
print(f"ONNX 版本: {onnx.__version__}")

# 2. ONNX Runtime 版本和设备
print(f"ONNX Runtime 版本: {onnxruntime.__version__}")
print(f"ONNX Runtime 设备: {onnxruntime.get_device()}")

# 3. PyTorch 版本和 GPU
print(f"PyTorch 版本: {torch.__version__}")
print(f"PyTorch GPU 可用: {torch.cuda.is_available()}")

# 4. TensorFlow 版本和 GPU
print(f"TensorFlow 版本: {tf.__version__}")
print(f"TensorFlow GPU 可用: {len(tf.config.list_physical_devices('GPU')) > 0}")

print("=" * 50)
print("环境验证完成!")
print("=" * 50)

输出示例:

==================================================
环境验证报告
==================================================
ONNX 版本: 1.15.0
ONNX Runtime 版本: 1.16.3
ONNX Runtime 设备: GPU
PyTorch 版本: 2.1.0
PyTorch GPU 可用: True
TensorFlow 版本: 2.13.0
TensorFlow GPU 可用: True
==================================================
环境验证完成!
==================================================

关键检查点:

  • ONNX Runtime 设备显示 "GPU" 而不是 "CPU"
  • PyTorch 和 TensorFlow 的 GPU 都显示可用
  • 版本号和你预期的一致

任何一个不满足,都说明环境有问题。别跳过这步,我见过太多人装完就跑,结果跑模型时才发现问题。

2.8 常见问题速查

问题 原因 解决方案
onnxruntime-gpu 导入报错 CUDA/cuDNN 版本不匹配 检查 CUDA 版本,重新安装匹配的 onnxruntime-gpu
torch.onnx.export 报算子不支持 ONNX 版本太旧,不支持新算子 升级 ONNX 到 1.15+,或降低 PyTorch 版本
tf2onnx.convert 报错 TensorFlow 和 tf2onnx 版本不匹配 升级 tf2onnx 到最新版,或降级 TensorFlow
ONNX Runtime 推理结果全为 0 输入数据预处理不对 检查输入张量的 shape、dtype、归一化方式