使用 MLflow 自定义 PyFunc - 笔记本
如果您想完整查看本指南中的笔记本,可以直接在下方查看或下载每个笔记本。
创建 MLflow 自定义 Python 模型基础知识
简介
在本初步教程中,我们将向您介绍 MLflow pyfunc 的基础概念。我们将演示在 MLflow 生态系统中创建、保存和调用自定义 Python 函数模型的简便性和适应性。到最后,您将掌握一个将指定数值添加到 DataFrame 列的模型,这将突显 pyfunc flavor 的内在灵活性。
您将学到什么
- 自定义 PyFunc 模型简便性:掌握 PythonModel 类的基本结构以及它如何构成 MLflow 中自定义模型的主干。
- 模型持久化:了解保存和检索自定义模型的直接过程。
- 调用预测:学习如何使用已加载的自定义 pyfunc 模型进行预测的机制。
分步指南
- 模型定义:首先,创建封装我们简单的“加 N”模型逻辑的 Python 类。
- 模型持久化:使用 MLflow 的功能保存定义的模型,确保其以后可以被检索。
- 模型检索:从其保存位置加载模型,并准备进行预测。
- 模型评估:在样本数据上使用检索到的模型来观察其功能。
总结
通过本教程的结束,您将体会到 MLflow 自定义 pyfunc 提供的易用性和一致性,即使是最简单的模型也是如此。它为后续教程中您可能探索的更高级功能和用例奠定了基础。
查看 Notebook构建基础自定义 Python 模型
简介
在本教程中,我们将深入了解 MLflow 的自定义 PyFunc。PythonModel 类是基石,允许您定义、保存、加载和预测自定义 PyFunc 模型。我们将开发一个非常规的模型;一个生成绘图的模型,以展示自定义 PyFunc 模型的灵活性。到最后,我们将拥有一个功能齐全的李萨如图形生成器,该生成器被封装并管理在 Pyfunc 框架内。
您将学到什么
- 定义自定义 PyFunc 模型:探索 PythonModel类的结构及其基本方法。
- 理解 Pyfunc 组件:熟悉 Pyfunc flavor 的基本构建块。
- 保存和加载模型:体验 MLflow 存储和检索功能的无缝集成。
- 使用自定义逻辑进行预测:与已加载的自定义 Pyfunc 交互以生成有趣的李萨如图形。
PythonModel 类
MLflow 对灵活性和标准化的承诺体现在 PythonModel 类中。这个类对于 Pyfunc flavor 至关重要,它提供了定义自定义逻辑、加载资源和进行预测的必要框架。
创建 PythonModel 实例主要有两种方式:
- 基于类的实现:定义一个包含必要方法的类,并将其用作模型的蓝图。
- 基于函数的实现:将整个预测逻辑捕获在一个函数中,让 MLflow 处理其余部分。
在本教程中,我们将重点关注基于类的实现,深入研究 load_context 和 predict 等方法,并理解它们在更大生态系统中的作用。
李萨如图形
作为我们理解的载体,我们将使用李萨如图形——一种正弦参数曲线,其形状和方向由其参数决定。这而不是一个传统的机器学习模型,这个数学曲线将展示 Pyfunc flavor 的多功能性和强大功能。
分步指南
- 定义自定义 PyFunc 模型:我们首先创建一个封装李萨如图形生成逻辑的 Python 类。
- 保存模型:定义模型后,我们利用 MLflow 的功能来保存它,确保未来的可复现性。
- 加载模型:从存储中检索模型并准备进行预测。
- 生成图形:使用加载的模型创建和可视化李萨如图形,展示 Pyfunc flavor 的端到端功能。
总结
通过实际示例,MLflow 自定义 Pyfunc 的强大功能和灵活性显而易见。无论您是处理传统的机器学习模型还是李萨如图形生成器等独特的用例,Pyfunc 都能确保一个标准化、可复现且高效的工作流程。
查看 Notebook覆盖模型的预测方法
简介
深入了解 MLflow 的自定义 PyFunc,本教程解决了模型部署中的一个常见挑战:在序列化和部署模型后保留和定制模型预测方法的行为。利用 MLflow PyFunc flavor 的强大功能,我们将学习如何覆盖默认的predict行为,确保我们的模型在不同环境中部署时保留所有原始功能。
您将学到什么
- 默认 PyFunc 的挑战:认识到默认 PyFunc 在处理复杂模型时的局限性,特别是当 predict 以外的方法至关重要时。
- 定制 Predict 方法:发现覆盖默认predict方法的技术,从而支持各种预测方法。
- 利用 Joblib 进行 PyFunc:了解为什么 joblib 比 pickle 更适合序列化 scikit-learn 模型,以及如何将其与 PyFunc 集成。
- 动态预测(带参数):学习如何通过接受指示预测类型的参数来使predict方法更具通用性。
为什么覆盖predict?
模型,尤其是在 scikit-learn 等库中,通常具有多种预测方法,例如predict、predict_proba 和predict_log_proba。部署这些模型时,保留动态选择预测方法的灵活性至关重要。本节阐明了这种灵活性的必要性以及默认 PyFunc 部署的挑战。
创建自定义 PyFunc
在探索解决方案时,我们通过扩展 MLflow 的PythonModel来创建一个自定义 PyFunc。这个自定义类充当原始模型的包装器,提供了一个灵活的predict方法,该方法可以根据提供的参数模仿各种原始方法的行为。
分步指南
- 准备基础模型:使用 Iris 数据集创建一个简单的逻辑回归模型,以说明不同的预测方法。
- 默认部署的挑战:认识到将模型部署为默认 PyFunc 时的局限性。
- 构建自定义 PyFunc:设计一个 ModelWrapper 类,它可以动态地在预测方法之间切换。
- 保存和加载自定义模型:与 MLflow 集成以保存自定义 PyFunc 并加载它进行预测。
- 动态预测:测试已加载的模型,确保它支持所有原始预测方法。
总结
克服了默认部署的挑战,本教程展示了 MLflow 自定义 PyFunc 的强大功能。覆盖和定制预测方法的能力确保了我们部署的模型与其原始版本一样具有通用性和功能。随着 ML 工作流程的日益复杂,这种定制变得非常宝贵,可确保我们的部署健壮且适应性强。
查看 Notebook如果您想运行本教程系列中的笔记本,每个笔记本页面都有一个链接可将笔记本下载到您的本地计算机。
为了运行笔记本,请确保您已启动本地 MLflow 跟踪服务器,或者修改 mlflow.set_tracking_uri() 值以指向正在运行的 MLflow 跟踪服务器实例。为了与 MLflow UI 交互,请确保您正在本地运行 UI 服务器,或者有一个已配置的已部署 MLflow UI 服务器可供访问。