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 等外部工具。您可能需要手动为模型的某些部分添加转换逻辑。

转换库的替代方案

编写特定于框架的转换器的替代方法是使用标准协议来促进跨多个库的代码可重用性。其中一个协议是 Array API 标准,它标准化了 NumPy、JAX、PyTorch 和 CuPy 等多个库中的数组操作。

nd​​onnx

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

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