使用MLflow的自定义PyFunc - 笔记本
如果您想完整地查看本指南中的笔记本,可以直接在下方查看或下载每个笔记本。
MLflow Pyfunc 创建自定义Python模型的基础知识
简介
在本入门教程中,我们将向您介绍MLflow pyfunc 的基础概念。我们将演示在MLflow生态系统中创建、保存和调用自定义Python函数模型的简便性和适应性。最后,您将对一个为DataFrame列添加指定数值的模型有实际操作的理解,这将突显 pyfunc 功能的内在灵活性。
您将学到什么
- 自定义PyFunc模型的简便性:掌握 PythonModel 类的基本结构以及它如何构成MLflow中自定义模型的基础。
- 模型持久化:理解保存和检索自定义模型的简单过程。
- 调用预测:学习如何使用已加载的自定义 pyfunc 模型进行预测的机制。
分步指南
- 模型定义:首先,创建一个Python类来封装我们简单的“Add N”模型的逻辑。
- 模型持久化:使用MLflow的功能来保存定义的模型,确保以后可以检索它。
- 模型检索:从其保存位置加载模型,并准备好进行预测。
- 模型评估:在示例数据上使用检索到的模型来观察其功能。
总结
通过本教程的结束,您将体会到MLflow自定义 pyfunc 即使对于最简单的模型也提供了便捷性和一致性。这为后续教程中您可能探索的更高级的功能和用例奠定了基础。
查看 Notebook构建一个基本的自定义Python模型
简介
在本教程中,我们将加深对MLflow自定义PyFunc的理解。 PythonModel 类是基石,它允许您定义、保存、加载和预测自定义PyFunc模型。我们将开发一个非常非标准的模型;一个生成绘图的模型,以展示自定义PyFunc模型的灵活性。最后,我们将拥有一个功能齐全的李萨如图形生成器,它被封装并管理在Pyfunc框架内。
您将学到什么
- 定义自定义PyFunc模型:探索
PythonModel类的结构及其基本方法。 - 理解Pyfunc组件:熟悉Pyfunc功能的构建块。
- 保存和加载模型:体验MLflow存储和检索功能的无缝集成。
- 使用自定义逻辑进行预测:与加载的自定义Pyfunc交互以生成有趣的李萨如图形。
PythonModel 类
MLflow对灵活性和标准化 的承诺通过 PythonModel 类得以体现。该类是Pyfunc功能的核心,提供了定义自定义逻辑、加载资源和进行预测所需的框架。
创建PythonModel实例主要有两种方法
- 基于类的方法:定义一个具有必要方法的类,并将其用作模型的蓝图。
- 基于函数的方法:将整个预测逻辑封装在一个函数中,让MLflow处理其余部分。
在本教程中,我们将重点关注基于类的方法,深入研究 load_context 和 predict 等方法,并理解它们在整个生态系统中的作用。
李萨如图形
作为我们理解的载体,我们将使用李萨如图形——一种正弦参数曲线,其形状和方向由其参数决定。它不是一个传统的机器学习模型,而这个数学曲线将展示Pyfunc功能的通用性和强大功能。
分步指南
- 定义自定义PyFunc模型:我们首先创建一个Python类来封装生成李萨如图形的逻辑。
- 保存模型:定义模型后,我们利用MLflow的功能来保存它,确保未来的可重现性。
- 加载模型:从存储中检索模型并准备进行预测。
- 生成图形:使用加载的模型创建和可视化李萨如图形,展示Pyfunc功能的端到端能力。
总结
通过一个实际示例,MLflow自定义Pyfunc的强大功能和灵活性显而易见。无论您是处理传统的机器学习模型还是像李萨如图形生成器这样的独特用例,Pyfunc都能确保一个标准化、可重现且高效的工作流程。
查看 Notebook重写模型的预测方法
简介
深入研究MLflow的自定义PyFunc领域,本教程解决了模型部署中的一个常见挑战:在序列化和部署模型后保留和自定义其预测方法的行为。利用MLflow PyFunc功能的强大功能,我们将学习如何重写默认的predict行为,确保我们的模型在不同环境中部署时保留所有原始功能。
您将学到什么
- 默认PyFuncs的挑战:认识到默认PyFunc行为对于复杂模型可能存在的局限性,特别是当predict以外的方法至关重要时。
- 自定义Predict方法:发现重写默认predict方法的技巧,从而支持各种预测方法。
- 利用Joblib与PyFunc:理解为什么joblib比pickle更适合序列化scikit-learn模型,以及如何将其与PyFunc集成。
- 使用Params进行动态预测:学习如何通过接受决定预测类型的参数来使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服务器可供您访问。