ONNX - 转换库



ONNX(开放神经网络交换)是一种开源格式,用于表示机器学习模型,实现模型在各种框架之间的交换。通过将模型转换为 ONNX,您可以使用单个运行时来部署它们,从而增强跨平台的灵活性和可移植性。

在本教程中,我们将学习 ONNX 中的转换库,探索不同机器学习框架中可用的工具。

转换库简介

一个转换库是一个工具,它可以帮助将模型的逻辑从其原始框架(如 TensorFlow 或 scikit-learn)转换为 ONNX 格式。这些库确保转换后的模型的预测结果与原始模型的预测结果完全相同或非常接近。

如果没有这些转换器,您将不得不手动重写模型的部分内容,这将需要大量的时间和精力。

为什么转换库很重要?

  • 简化模型转换:转换库自动化了将机器学习模型的预测转换为 ONNX 格式的复杂任务。
  • 准确性:这些库旨在在转换后保持模型预测的准确性。
  • 节省时间:手动在 ONNX 中实现模型部分可能非常耗时。转换库通过自动处理大部分转换来加快此过程。
  • 模型部署灵活性:转换后为ONNX格式后,模型可以在各种平台和设备上运行,从而更容易在生产环境中部署它们。

可用的转换库

不同的机器学习框架需要不同的转换工具。以下是一些常用的库:

  • sklearn-onnx 将 scikit-learn 模型转换为 ONNX 格式。如果您有一个 scikit-learn 模型,此工具确保该模型在 ONNX 格式下也能正常工作。
  • tensorflow-onnx 此库将 TensorFlow 模型转换为 ONNX 格式。它简化了使用 TensorFlow 构建的深度学习模型的转换过程。
  • onnxmltools 此库可以转换来自各种库的模型,包括 LightGBM、XGBoost、PySpark 和 LibSVM。
  • torch.onnx 它将 PyTorch 模型转换为 ONNX 格式。PyTorch 用户可以使用 ONNX 运行时转换他们的模型以进行跨平台部署。

转换中的常见挑战

这些库需要频繁更新以匹配 ONNX 的新版本以及它们支持的原始框架。为了保持兼容性,这每年可能发生 3-5 次。

  • 框架特定工具:每个转换器都设计用于与特定框架一起工作。例如,tensorflow-onnx 仅适用于 TensorFlow,而 sklearn-onnx 仅适用于 scikit-learn。
  • 自定义组件:如果您的模型具有自定义层,您可能需要编写自定义代码来在转换过程中处理这些层。这可能会使过程更加困难。
  • 非深度学习模型:转换来自 scikit-learn 等库的模型可能很棘手,因为它们依赖于 NumPy 或 SciPy 等外部工具。您可能需要手动为模型的某些部分添加转换逻辑。

转换库的替代方案

编写框架特定转换器的替代方法是使用标准协议,这些协议可以提高多个库的代码可重用性。一个这样的协议是数组 API 标准,它标准化了 NumPy、JAX、PyTorch 和 CuPy 等多个库中的数组操作。

ndonnx

支持使用 ONNX 后端执行,并为符合数组 API 标准的代码提供即时 ONNX 导出功能。对于希望以最少的自定义代码集成 ONNX 导出功能的用户来说,它是理想的选择。

它减少了对框架特定转换器的需求。提供了一种简单、类似 NumPy 的方法来构建 ONNX 模型。

广告