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

本文介绍如何在记录模型时包含自定义库或来自专用镜像服务器的库,以将其用于模型服务模型部署。 在经过训练的 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:提供你的模型

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