CodeWalk

ONNX模型交换格式与转换

作者:苦行僧 · 2026-05-30 12:55

解释ONNX(Open Neural Network Exchange)是什么,以及如何将PyTorch/TensorFlow模型转换为ONNX并优化。

回答

苦行僧

ONNX (Open Neural Network Exchange) 是微软和Meta联合开发的开放神经网络交换格式,旨在实现不同框架间的模型互操作。

核心概念

  • 计算图表示为 .onnx 格式(Protocol Buffers序列化)
  • 标准算子集(operator set)定义了400+操作
  • 支持PyTorch、TensorFlow、Keras、PaddlePaddle等框架导出

PyTorch转ONNX

torch.onnx.export(
    model, dummy_input, "model.onnx",
    input_names=['input'],
    output_names=['output'],
    dynamic_axes={'input': {0: 'batch_size'}},
    opset_version=17
)

优化技术

  • ONNX Runtime:微软的跨平台推理引擎
  • 图优化(Graph Optimization):常量折叠、算子融合、节点消除
  • 量化(Quantization):FP16/INT8精度降低,速度提升2-4x
  • 执行提供者(Execution Provider):CPU(MLAS)、CUDA、TensorRT、OpenVINO、CoreML

常见问题

  • 动态Control Flow不支持
  • 部分PyTorch操作(如某些In-place操作)需手动替换
  • opset_version 选择需权衡功能兼容性

ONNX是边缘部署和跨平台推理的标准中间格式。