将自定义 Python 库与模型服务配合使用

本文介绍如何在记录模型时从专用镜像服务器包含自定义库或库,以便可以将它们与 马赛克 AI 模型服务 模型部署配合使用。 在经过训练的 ML 模型准备好部署之后,创建 Azure Databricks 模型服务终结点之前,你应完成本指南中详述的步骤。

模型开发通常需要使用自定义 Python 库,其中包含用于预处理或后处理的函数、自定义模型定义和其他共享实用工具。 此外,许多企业安全团队建议使用专用 PyPi 镜像(例如 Nexus 或 Artifactory),以减少供应链攻击风险。 Azure Databricks 原生支持在 Azure Databricks 工作区中安装自定义库和来自专用镜像的库。

要求

  • MLflow 1.29 或更高版本

步骤 1:上传依赖项文件

Databricks 建议将依赖项文件上传到 Unity Catalog 。 或者,可以使用 Azure Databricks UI 将其上传到 Databricks 文件系统 (DBFS)

要确保你的库可供笔记本使用,需要使用 %pip% 安装它。 使用 %pip 在当前笔记本中安装库,并将依赖项下载到群集。

步骤 2:记录包含自定义库的模型

重要

如果通过指向自定义 PyPi 镜像来安装专用库,则不需要遵循本部分的指导。

安装好库并将 Python wheel 文件上传到 Unity Catalog 卷或 DBFS 后,请在脚本中包含以下代码。 在 extra_pip_requirements 中,指定依赖项文件的路径。

mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements=["/volume/path/to/dependency.whl"])

对于 DBFS,请使用以下项:

mlflow.sklearn.log_model(model, "sklearn-model", extra_pip_requirements=["/dbfs/path/to/dependency.whl"])

如果你有自定义库,则在配置日志记录时,必须指定与模型关联的所有自定义 Python 库。 可以使用 log_model() 中的 extra_pip_requirementsconda_env 参数执行此操作。

重要

如果在使用 DBFS,则在记录 extra_pip_requirements 时,请确保在 dbfs 路径之前加入一个正斜杠 /。 在使用 Azure Databricks 上的文件中详细了解 DBFS 路径。

from mlflow.utils.environment import _mlflow_conda_env
conda_env =  _mlflow_conda_env(
            additional_conda_deps= None,
            additional_pip_deps= ["/volumes/path/to/dependency"],
            additional_conda_channels=None,
)
mlflow.pyfunc.log_model(..., conda_env = conda_env)

步骤 3:更新包含 Python wheel 文件的 MLflow 模型

MLflow 提供了 add_libraries_to_model() 实用工具来记录你的模型及其所有作为 Python wheel 文件预先打包的依赖项。 这会将自定义库与模型一起打包,此外还会打包指定为模型依赖项的所有其他库。 这可以保证模型使用的库正是可从训练环境访问的库。

在以下示例中,model_uri 使用语法 models:/<model-name>/<model-version> 引用模型注册表。

当你使用模型注册表 URI 时,此实用工具会在现有的已注册模型下生成一个新版本。

import mlflow.models.utils
mlflow.models.utils.add_libraries_to_model(<model-uri>)

步骤 4:提供你的模型

当模型注册表中提供了包含这些包的新模型版本时,你可以将此模型版本添加到模型服务的某个终结点。