将自定义 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_requirements
或 conda_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:提供你的模型
当模型注册表中提供了包含这些包的新模型版本时,你可以将此模型版本添加到模型服务的某个终结点。