使用 ONNX Runtime 在边缘设备上部署 PyCaret 模型
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
👉 什么是 PyCaret 以及如何入门?
👉 模型格式有哪些类型(pickle, onnx, pmml 等)?
👉 什么是 ONNX(读作 ONEX)以及它的优势是什么?
👉 使用 PyCaret 训练机器学习模型并将其转换为 ONNX,以便在边缘设备上部署。
特点
你需要为本教程安装以下库。安装只需几分钟。
在我介绍 ONNX 和其优势之前,让我们先看看目前有哪些可用于部署的模型格式。
预测模型标记语言(PMML)是另一种机器学习模型格式,相对而言不如 Pickle 常见。PMML 自 1997 年问世以来,已有大量应用利用该格式。SAP **和 PEGA CRM 等应用能够利用特定版本的 PMML。有一些开源库可以将 scikit-learn 模型(PyCaret)转换为 PMML。PMML 格式最大的缺点是它不支持所有的机器学习模型。
ONNX 得到广泛支持,可在许多框架、工具和硬件中找到。实现不同框架之间的互操作性,并简化从研究到生产的路径,有助于提高 AI 社区的创新速度。ONNX 有助于解决与 AI 模型相关的硬件依赖性挑战,并能够将相同的 AI 模型部署到多个硬件加速目标上。
来源:Microsoft
有许多优秀的机器学习库,涵盖各种语言——PyTorch、TensorFlow、scikit-learn、PyCaret 等。其理念是你可以使用任何工具、语言或框架训练模型,然后使用另一种语言或应用进行推理和预测。例如,假设你有一个使用 .Net 构建的 Web 应用、一个 Android 应用,甚至是边缘设备,并且你想将机器学习模型的预测集成到这些下游系统中。你可以通过将模型转换为 ONNX 格式来实现。使用 Pickle 或 PMML 格式无法做到这一点。
使用你偏好的框架进行开发,无需担心下游推理的影响。ONNX 使你能够将偏好的框架与选择的推理引擎配合使用。
ONNX 使访问硬件优化变得更容易。使用与 ONNX 兼容的运行时和库,这些库旨在最大限度地提高跨硬件的性能。这意味着如果你关心延迟,甚至可以在 GPU 上使用 ONNX 模型进行推理。
现在数据已准备好用于建模,让我们使用 compare_models 函数开始训练过程。它将训练模型库中所有可用的算法,并使用 k 折交叉验证评估多个性能指标。
基于交叉验证指标,最佳模型是 Gradient Boosting Regressor。你可以使用 save_model 函数将模型保存为 Pickle 文件。
这将把模型保存为 Pickle 格式。
你可以使用 load_model 函数将保存的模型加载回 Python 环境,并使用 predict_model 函数生成推理。
到目前为止,我们看到的是以 Pickle 格式保存和加载训练好的模型(这是 PyCaret 的默认格式)。然而,使用 skl2onnx 库,我们可以将模型转换为 ONNX
我们还可以将 model_onnx 保存到本地驱动器
现在,为了从 insurance.onnx 生成推理,我们将使用 Python 中的 onnxruntime 库(仅为演示)。本质上,你现在可以在任何其他平台或环境中使用这个 insurance.onnx 文件。
请注意,predictions_onnx 的输出是一个 numpy 数组,而我们使用 PyCaret 的 predict_model 函数时得到的是 pandas DataFrame,但如果你比对数值,所有数字都是相同的(使用 ONNX 时,有时会发现在小数点后第 4 位之后有微小差异 — 这种情况非常罕见)。
任务完成!
使用这个轻量级的 Python 工作流自动化库,你可以实现无限可能。如果你觉得这有用,请别忘了在我们的 GitHub 仓库上给我们点 ⭐️。
在本教程中,我将向你展示如何使用——一个开源、低代码的 Python 机器学习库——并将其转换为 ONNX 格式,以便在边缘设备或任何其他非 Python 环境中部署。例如,你可以使用 Python 中的 PyCaret 训练机器学习模型,然后在 R、Java 或 C 中部署它们。本教程的学习目标是
是一个开源、低代码的机器学习库,也是一个内置于 Python 中的端到端模型管理工具,用于自动化机器学习工作流。PyCaret 以其易用性、简单性以及快速高效地构建和部署端到端机器学习 Pipeline 的能力而闻名。要了解更多关于 PyCaret 的信息,请查看其.
是一个开源项目,用于将 scikit-learn 模型转换为 ONNX。一旦转换为 ONNX 格式,你就可以使用 ONNX Runtime 等工具进行高性能推理。该项目于 2017 年由 Microsoft 的工程师和数据科学家启动。要了解更多关于此项目的信息,请查看其.
这是最常见的格式,也是许多 Python 库(包括 PyCaret)将模型对象保存到文件的默认方式。将 Python 对象转换为比特流,并允许将其存储到磁盘并在以后重新加载。它提供了一种很好的格式来存储机器学习模型,前提是推理应用也是用 Python 构建的。
,开放神经网络交换格式(Open Neural Network Exchange Format)是一种开放格式,支持在不同库和语言之间存储和移植机器学习模型。这意味着你可以使用任何语言的任何框架训练机器学习模型,然后将其转换为 ONNX,以便在任何环境(无论是 Java、C、.Net、Android 等)中生成推理。ONNX 的这种语言无关能力使其比其他格式(例如,你无法在 Python 之外的任何其他语言中使用保存为 Pickle 文件的模型)强大得多。
是一种开放格式,用于表示深度学习模型和传统模型。借助 ONNX,AI 开发者可以更轻松地在最先进的工具之间迁移模型,并选择最适合他们的组合。ONNX 由 Microsoft、Facebook 和 AWS 等合作伙伴社区开发和支持。
在本教程中,我将使用 PyCaret 仓库中的一个回归数据集,名为 insurance。你可以从.
下周我将深入探讨 ONNX 转换,并讨论如何将整个机器学习 Pipeline(包括 imputers 和 transformers)转换为 ONNX。如果你想自动收到通知,可以在以下平台关注我:, ,和.
要了解更多关于 PyCaret 的信息,请在以下平台关注我们和.
加入我们的 Slack 频道。邀请链接.