跳至主要内容

使用 MLflow 的定制 PyFuncs - Notebooks

如果您想完整查看本指南中的 notebooks,可以直接在下方查看或下载每个 notebook。

使用 MLflow 的 Pyfunc 创建定制 Python 模型的基础知识

简介

在本入门教程中,我们将向您介绍 MLflow pyfunc 的基础概念。我们将演示在 MLflow 生态系统中创建、保存和调用定制 Python 函数模型的简单性和适应性。结束时,您将亲身体验一个将指定数值添加到 DataFrame 列的模型,从而突出 pyfunc 风格固有的灵活性。

您将学到什么

  • 定制 PyFunc 模型的简单性:掌握 PythonModel 类的基本结构以及它如何构成 MLflow 中定制模型的骨干。
  • 模型持久化:了解保存和检索定制模型的简单过程。
  • 调用预测:学习如何使用加载的定制 pyfunc 模型进行预测的机制。

分步指南

  1. 模型定义:首先构建一个 Python 类,封装我们简单的“Add N”模型的逻辑。
  2. 模型持久化:利用 MLflow 的功能保存已定义的模型,确保以后可以检索。
  3. 模型检索:从保存位置加载模型,并准备进行预测。
  4. 模型评估:在样本数据上使用检索到的模型,以验证其功能。

总结

通过本教程,您将体会到 MLflow 的定制 pyfunc 即使对于最简单的模型也能提供的便捷性和一致性。它为后续教程中可能探索的更高级功能和用例奠定了基础。

查看 Notebook

构建基本的定制 Python 模型

简介

在本教程中,我们将深入理解 MLflow 的定制 Pyfunc。PythonModel 类是基石,允许您使用定制 PyFunc 模型进行定义、保存、加载和预测。我们将开发一个非常规的模型;一个生成绘图的模型,以展示定制 PyFunc 模型的灵活性。到本教程结束时,我们将拥有一个功能性的李萨如图生成器,并在 Pyfunc 框架内进行封装和管理。

您将学到什么

  • 定义定制 PyFunc 模型:探索 PythonModel 类的结构及其重要方法。
  • 理解 Pyfunc 组件:了解 Pyfunc 风格的基础构建模块。
  • 保存和加载模型:体验 MLflow 存储和检索功能的无缝集成。
  • 使用定制逻辑进行预测:与加载的定制 Pyfunc 交互,生成有趣的李萨如图。

PythonModel

MLflow 对灵活性和标准化的承诺在 PythonModel 类中得到了体现。这个类对于 Pyfunc 风格至关重要,提供了定义定制逻辑、加载资源和进行预测所需的框架。

创建 PythonModel 实例主要有两种方式:

  1. 基于类的方法:定义一个包含必要方法的类,并将其用作模型的蓝图。
  2. 基于函数的方法:将整个预测逻辑封装在一个函数中,其余部分交给 MLflow 处理。

在本教程中,我们将重点关注基于类的方法,深入研究 load_contextpredict 等方法,并理解它们在整个生态系统中的作用。

李萨如图

作为我们理解的载体,我们将使用李萨如图——一种正弦参数曲线,其形状和方向由参数决定。这种数学曲线将展示 Pyfunc 风格的多功能性和强大之处,而非传统的机器学习模型。

分步指南

  1. 定义定制 PyFunc 模型:首先创建一个 Python 类,封装生成李萨如图的逻辑。
  2. 保存模型:定义好模型后,我们利用 MLflow 的功能保存它,以确保未来的可复现性。
  3. 加载模型:从存储中检索模型,并准备进行预测。
  4. 生成曲线:使用加载的模型创建并可视化李萨如图,展示 Pyfunc 风格的端到端功能。

总结

通过这个实际示例,MLflow 定制 Pyfunc 的强大功能和灵活性显而易见。无论您是使用传统机器学习模型还是李萨如图生成器这样的独特用例,Pyfunc 都能确保标准化、可复现且高效的工作流程。

查看 Notebook

覆盖模型的预测方法

简介

本教程深入探讨 MLflow 定制 PyFuncs 的领域,解决模型部署中的一个常见挑战:在序列化和部署后保留和定制模型的预测方法行为。利用 MLflow 的 PyFunc 风格的强大功能,我们将学习如何覆盖默认的 predict 行为,确保模型在不同环境中部署时保留其所有原始功能。

您将学到什么

  • 默认 PyFunc 的挑战:认识到默认 PyFunc 行为在处理复杂模型时的局限性,尤其是在 predict 以外的方法至关重要时。
  • 定制 Predict 方法:发现覆盖默认 predict 方法的技术,以支持各种预测方法。
  • 将 Joblib 与 PyFunc 结合使用:理解为什么对于序列化 scikit-learn 模型,joblib 优于 pickle,以及如何将其与 PyFunc 集成。
  • 通过参数进行动态预测:学习通过接受参数来指定预测类型,从而使 predict 方法更具通用性。

为什么要覆盖 predict

模型,尤其是在 scikit-learn 等库中的模型,通常带有多种预测方法,例如 predictpredict_probapredict_log_proba。部署此类模型时,保留动态选择预测方法的灵活性至关重要。本节阐明了这种灵活性的必要性以及默认 PyFunc 部署所面临的挑战。

创建定制 PyFunc

着手解决问题,我们通过扩展 MLflow 的 PythonModel 来构建一个定制 PyFunc。这个定制类充当原始模型的包装器,提供了一个灵活的 predict 方法,可以根据提供的参数模拟各种原始方法的行为。

分步指南

  1. 准备一个基础模型:使用 Iris 数据集创建一个简单的逻辑回归模型,说明不同的预测方法。
  2. 默认部署的挑战:认识到将模型部署为默认 PyFunc 时的局限性。
  3. 构建定制 PyFunc:设计一个 ModelWrapper 类,可以在预测方法之间动态切换。
  4. 保存和加载定制模型:与 MLflow 集成以保存定制 PyFunc 并加载它进行预测。
  5. 动态预测:测试加载的模型,确保它支持所有原始预测方法。

总结

本教程克服了默认部署的挑战,展示了 MLflow 定制 PyFuncs 的强大功能。覆盖和定制预测方法的能力确保我们部署的模型与其原始形态一样通用且功能强大。随着 ML 工作流程变得越来越复杂,这种定制变得至关重要,可确保我们的部署具有鲁棒性和适应性。

查看 Notebook

在您的环境中运行 Notebooks

此外,如果您想在本地下载一份以在自己的环境中运行,可以点击本指南中每个 notebook 的相应链接进行下载。

下载介绍 notebook

下载基础 Pyfunc notebook

下载 Predict Override notebook

注意

为了运行这些 notebooks,请确保您已启动本地 MLflow Tracking Server,或修改 mlflow.set_tracking_uri() 的值以指向正在运行的 MLflow Tracking Server 实例。为了与 MLflow UI 交互,请确保您正在本地运行 UI 服务器,或者已配置并部署了您可以访问的 MLflow UI 服务器。