将 MLflow 模型部署为 Azure Web 服务
本文介绍如何将 MLflow 模型部署为 Azure Web 服务,以便你可以利用 Azure 机器学习模型管理和数据偏移检测功能,并将它们应用于生产模型。 有关其他的 MLflow 和 Azure 机器学习功能集成,请参阅 MLflow 和 Azure 机器学习。
Azure 机器学习提供用于以下项的部署配置:
- Azure 容器实例 (ACI),适用于快速开发测试部署。
- Azure Kubernetes 服务 (AKS),建议用于可缩放的生产部署。
注意
Azure 机器学习终结点 (v2) 提供了经过改进的简化部署体验。 终结点同时支持实时和批量推理场景。 终结点提供了一个统一的接口,以用于跨计算类型调用和管理模型部署。 请参阅什么是 Azure 机器学习终结点?。
提示
本文档中的信息主要面向想要将其 MLflow 模型部署到 Azure 机器学习 Web 服务终结点的数据科学家和开发人员。 如果你是一名管理员并想要了解如何监视 Azure 机器学习的资源使用情况和事件(例如配额、已完成的训练运行或已完成的模型部署),请参阅监视 Azure 机器学习。
MLflow 与 Azure 机器学习部署
MLflow 是一个开放源代码库,用于管理机器学习试验的生命周期。 它与 Azure 机器学习的集成使你可以将此管理从模型训练扩展到生产模型的部署阶段。
下图演示了通过 MLflow 部署 API 和 Azure 机器学习,你可以将使用常用框架(如 PyTorch、Tensorflow、scikit-learn 等)创建的模型部署为 Azure Web 服务,并在工作区中对其进行管理。
先决条件
- 一个机器学习模型。 如果没有训练的模型,请在此存储库中找到最适合你的计算场景的笔记本示例,并按照其说明进行操作。
- 设置 MLflow 跟踪 URI 以连接 Azure 机器学习。
- 安装
azureml-mlflow
包。- 此包会自动引入 Azure 机器学习 Python SDK 的
azureml-core
,它为 MLflow 访问工作区提供了连接。
- 此包会自动引入 Azure 机器学习 Python SDK 的
- 查看在工作区中执行 MLflow 操作所需的访问权限。
部署到 Azure 容器实例 (ACI)
若要将 MLflow 模型部署到 Azure 机器学习 Web 服务,必须使用 MLflow 跟踪 URI 设置模型以连接 Azure 机器学习。
无需定义任何部署配置即可部署到 ACI,未提供配置时,服务默认进行 ACI 部署。 然后,使用 Azure 机器学习的 MLflow deploy 方法一步注册和部署模型。
from mlflow.deployments import get_deploy_client
# set the tracking uri as the deployment client
client = get_deploy_client(mlflow.get_tracking_uri())
# set the model path
model_path = "model"
# define the model path and the name is the service name
# the model gets registered automatically and a name is autogenerated using the "name" parameter below
client.create_deployment(name="mlflow-test-aci", model_uri='runs:/{}/{}'.format(run.id, model_path))
自定义部署配置
如果不希望使用默认值,可以使用部署 config json 文件设置部署配置,该文件使用 deploy_configuration() 方法中的参数作为参考。
对于部署 config json 文件,需要以字典的形式定义每个部署配置参数。 下面是一个示例。 详细了解部署配置 json 文件可包含的内容。
Azure 容器实例部署配置架构
{"computeType": "aci",
"containerResourceRequirements": {"cpu": 1, "memoryInGB": 1},
"location": "chinanorth2"
}
然后,可以使用 json 文件创建部署。
# set the deployment config
deploy_path = "deployment_config.json"
test_config = {'deploy-config-file': deploy_path}
client.create_deployment(model_uri='runs:/{}/{}'.format(run.id, model_path),
config=test_config,
name="mlflow-test-aci")
部署到 Azure Kubernetes 服务 (AKS)
若要将 MLflow 模型部署到 Azure 机器学习 Web 服务,必须使用 MLflow 跟踪 URI 设置模型以连接 Azure 机器学习。
若要部署到 AKS,请先创建 AKS 群集。 使用 ComputeTarget.create() 方法创建 AKS 群集。 创建新群集可能需要 20-25 分钟。
from azureml.core.compute import AksCompute, ComputeTarget
# Use the default configuration (can also provide parameters to customize)
prov_config = AksCompute.provisioning_configuration()
aks_name = 'aks-mlflow'
# Create the cluster
aks_target = ComputeTarget.create(workspace=ws,
name=aks_name,
provisioning_configuration=prov_config)
aks_target.wait_for_completion(show_output = True)
print(aks_target.provisioning_state)
print(aks_target.provisioning_errors)
使用 deploy_configuration() 方法值作为参考来创建部署配置 JSON。 只需将每个部署配置参数定义为字典即可。 下面是一个示例:
{"computeType": "aks", "computeTargetName": "aks-mlflow"}
然后,使用 MLflow 的部署客户端通过一个步骤来注册并部署模型。
from mlflow.deployments import get_deploy_client
# set the tracking uri as the deployment client
client = get_deploy_client(mlflow.get_tracking_uri())
# set the model path
model_path = "model"
# set the deployment config
deploy_path = "deployment_config.json"
test_config = {'deploy-config-file': deploy_path}
# define the model path and the name is the service name
# the model gets registered automatically and a name is autogenerated using the "name" parameter below
client.create_deployment(model_uri='runs:/{}/{}'.format(run.id, model_path),
config=test_config,
name="mlflow-test-aci")
服务部署可能需要几分钟的时间。
清理资源
如果不打算使用已部署的 Web 服务,请使用 service.delete()
将其从笔记本中删除。 有关详细信息,请参阅 WebService.delete() 的文档。
示例笔记本
将 MLflow 与 Azure 机器学习笔记本配合使用演示了本文中所述的概念,并在这些概念的基础上有所延伸。
注意
可在 https://github.com/Azure/azureml-examples 找到使用 mlflow 的社区主导的示例存储库。
后续步骤
- 管理模型。
- 监视生产模型中的数据偏移。
- 使用 MLflow 跟踪 Azure Databricks 运行。