使用自定义 PyFunc 模型在单个端点上提供多个模型服务
本教程解决机器学习中的常见场景:通过单个端点服务多个模型。利用 Sagemaker 的多模型端点等服务,您可以在一个端点下托管大量模型,从而简化部署并降低成本。我们将使用任何 MLflow 兼容服务结合自定义 PyFunc 实现来复制此功能。
提示
MLflow 2.12.2 引入了“代码模型”功能,通过使用脚本序列化极大地简化了自定义模型的序列化和部署过程。虽然本教程作为参考点很有价值,但我们强烈建议将自定义模型实现迁移到这种新范式。您可以在代码模型指南中了解更多关于代码模型的信息。
以下是一些考虑这种设计的原因
- 简化推理:我们将维护单个模型端点,而不是每个模型一个端点,这大大降低了维护和配置的复杂性。
- 降低服务成本:端点需要付费!如果您的托管服务按计算量而不是内存量收费,这将为您节省资金。
本教程内容
本指南将引导您完成从单个端点服务多个模型的步骤,将过程分解为
- 创建许多演示 sklearn 模型,每个模型都使用与一周中某一天相对应的数据进行训练。
- 将这些模型封装在自定义 PyFunc 模型中,以支持多模型推理。
- 对自定义 PyFunc 模型执行推理。
- 本地服务自定义 PyFunc 模型并查询我们的端点。
完成本教程后,您将能够高效地从单个端点服务多个模型。
什么是 PyFunc?
自定义 PyFunc 模型是 MLflow 的强大功能,允许用户在缺少命名风格时自定义模型功能。接下来我们假设您对 PyFunc 有基本的了解,因此如果您不熟悉,请查看创建自定义 PyFunc 教程。
我需要做什么?
要创建 MME,您将创建 PythonModel
的子实现。更具体地说,我们需要关注以下组件...
PythonModel.load_context()
:此方法定义了可由predict()
在评估输入时使用的指定 PythonModelContext 中的工件。当使用 load_model() 加载 MLflow 模型时,此方法在构造 PythonModel 后立即调用。在我们的示例中,此方法将从 MLflow 模型注册表中加载我们的模型。PythonModel.predict()
:此方法评估一个 pyfunc 兼容的输入并生成一个 pyfunc 兼容的输出。在我们的示例中,它分析输入负载,并根据其参数选择并应用适当的模型来返回预测。ModelSignatures
:此类别定义了预期的输入、输出和参数格式。在我们的示例中,签名对象将在注册我们的自定义 PyFunc 模型时传递,模型的输入将根据签名进行验证。
准备好亲身体验了吗?查看随附的笔记本以获得实践经验。让我们深入了解!
查看 Notebook