ONNX(开放神经网络交换)是一种开源格式,旨在以标准化方式表示机器学习模型。 它允许在一个框架(如 PyTorch 或 TensorFlow)中训练的模型导出并在其他框架或环境中使用,而无需进行重大的返工。 ONNX 通过充当通用的“中间地带”来解决不同工具和平台之间的互操作性问题。 例如,可以在 PyTorch 中构建模型,然后将其转换为 ONNX,然后使用针对移动设备、云服务或专用硬件(如 GPU 或 NPU)优化的运行时来部署。 这消除了为每个部署场景从头开始重建模型的需求。
ONNX 的主要用例是简化从模型开发到生产的过渡。 开发人员通常在研究友好的框架(例如,PyTorch 的灵活性)中训练模型,但需要在针对性能或特定硬件优化的环境中部署它们(例如,用于低延迟推理的 ONNX Runtime)。 ONNX 通过提供一致的方式来序列化模型架构、权重和操作来弥合这一差距。 例如,可以使用 tf2onnx
等工具将 TensorFlow 模型转换为 ONNX,然后使用 ONNX Runtime 进行优化,以实现更快的推理。 这在边缘计算等场景中特别有用,在这些场景中,模型必须在资源受限的设备上高效运行,或者在将 ML 集成到使用非 Python 堆栈(例如,C++ 或 JavaScript)构建的应用程序中时。
ONNX 的生态系统包括用于模型转换、优化和执行的工具。 PyTorch 和 TensorFlow 等主要框架支持导出到 ONNX,而 ONNX Runtime 等库提供跨平台推理,并具有量化或算子融合等性能优化。 该格式是可扩展的,允许用于小众用例的自定义算子。 例如,开发人员可能会在 PyTorch 中训练视觉转换器,将其转换为 ONNX,然后使用 ONNX Runtime 的 ARM64 构建将其部署在 IoT 设备上。 通过减少对单个框架的依赖,ONNX 使团队能够在 ML 生命周期的每个阶段选择最佳工具,同时避免供应商锁定。 其社区驱动的治理还确保了广泛的兼容性和持续的更新,以支持新型号和硬件。