Artículo 08/14/2024
3 colaboradores
Comentarios
En este artículo
适用范围:Azure CLI ml 扩展 v2(最新版) Python SDK azure-ai-ml v2(最新版)
本文介绍如何在不造成任何中断的情况下,在生产环境中部署新版机器学习模型。 你将使用蓝绿部署策略(也称为安全推出策略)将新版 Web 服务引入生产环境。 使用此策略可以在全面推出新版 Web 服务之前,先向一小部分用户或请求者推出该版本。
本文假设使用联机终结点,即用于联机(实时)推理的终结点。 有两种类型的联机终结点:托管联机终结点和 Kubernetes 联机终结点。 有关终结点的详细信息以及托管联机终结点与 Kubernetes 联机终结点之间的差异,请参阅什么是 Azure 机器学习终结点? 。
本文中的主要示例使用托管联机终结点进行部署。 若要改用 Kubernetes 终结点,请参阅本文档中与托管联机终结点讨论内联的注释。
在本文中你将学到:
定义一个联机终结点,并定义一个名为“蓝色”的部署来为模型的版本 1 提供服务
扩展 blue 部署,使其能够处理更多请求
将模型的版本 2(名为“green”部署)部署到终结点,但不向部署发送任何实时流量
在隔离环境中测试 green 部署
将一部分实时流量镜像到 green 部署以验证部署
将一小部分实时流量发送到 green 部署
将所有实时流量发送到 green 部署
删除现已不再使用的 v1 blue 部署
先决条件
在按照本文中的步骤操作之前,请确保满足以下先决条件:
Azure 基于角色的访问控制 (Azure RBAC) 用于授予对 Azure 机器学习中的操作的访问权限。 若要执行本文中的步骤,必须为用户帐户分配 Azure 机器学习工作区的所有者 或参与者 角色,或者分配一个允许 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
的自定义角色。 有关详细信息,请参阅管理对 Azure 机器学习工作区的访问 。
(可选)若要在本地部署,必须在本地计算机上安装 Docker 引擎 。 强烈建议 选择此选项,以便更轻松地调试问题。
适用范围 :Python SDK azure-ai-ml v2(最新版)
在按照本文中的步骤操作之前,请确保满足以下先决条件:
Azure 机器学习工作区。 如果没有,请使用快速入门:创建工作区资源 一文中的步骤创建一个。
若要安装 Python SDK v2,请使用以下命令:
pip install azure-ai-ml azure-identity
要将 SDK 的现有安装更新到最新版本,请使用以下命令:
pip install --upgrade azure-ai-ml azure-identity
有关详细信息,请参阅安装适用于 Azure 机器学习的 Python SDK v2 。
Azure 基于角色的访问控制 (Azure RBAC) 用于授予对 Azure 机器学习中的操作的访问权限。 若要执行本文中的步骤,必须为用户帐户分配 Azure 机器学习工作区的所有者 或参与者 角色,或者分配一个允许 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
的自定义角色。 有关详细信息,请参阅管理对 Azure 机器学习工作区的访问 。
(可选)若要在本地部署,必须在本地计算机上安装 Docker 引擎 。 强烈建议 选择此选项,以便更轻松地调试问题。
在按照本文中的步骤操作之前,请确保满足以下先决条件:
Azure 订阅。 如果没有 Azure 订阅,可在开始前创建一个试用帐户。 尝试试用版订阅 。
一个 Azure 机器学习工作区和一个计算实例。 如果没有,请使用快速入门:创建工作区资源 一文中的步骤创建它们。
Azure 基于角色的访问控制 (Azure RBAC) 用于授予对 Azure 机器学习中的操作的访问权限。 若要执行本文中的步骤,必须为用户帐户分配 Azure 机器学习工作区的所有者 或参与者 角色,或者分配一个允许 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
的自定义角色。 有关详细信息,请参阅管理对 Azure 机器学习工作区的访问 。
准备你的系统
设置环境变量。
如果尚未为 Azure CLI 指定默认设置,则应保存默认设置。 若要避免多次传入订阅、工作区和资源组的值,请运行此代码:
az account set --subscription <subscription id>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
克隆示例存储库
若要按照本文的说明进行操作,请先克隆示例存储库 (azureml-examples) 。 然后转到存储库的 cli/
目录:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples
cd cli
提示
使用 --depth 1
以便仅克隆提交到存储库的最新内容。 这可以减少完成操作所需的时间。
本教程中的命令位于 cli
目录中的文件 deploy-safe-rollout-online-endpoints.sh
内,YAML 配置文件位于 endpoints/online/managed/sample/
子目录中。
注意
Kubernetes 联机终结点的 YAML 配置文件位于 endpoints/online/kubernetes/
子目录中。
克隆示例存储库
若要运行训练示例,请先克隆示例存储库 (azureml-examples) 。 然后进入 azureml-examples/sdk/python/endpoints/online/managed
目录:
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/sdk/python/endpoints/online/managed
提示
使用 --depth 1
以便仅克隆提交到存储库的最新内容。 这可以减少完成操作所需的时间。
本文中的信息基于 online-endpoints-safe-rollout.ipynb 笔记本。 该笔记本包含与本文相同的内容,尽管代码的顺序略有不同。
连接到 Azure 机器学习工作区
工作区 是 Azure 机器学习的顶级资源,为使用 Azure 机器学习时创建的所有项目提供了一个集中的处理位置。 在本部分,我们将连接到要在其中执行部署任务的工作区。
导入所需的库:
# import required libraries
from azure.ai.ml import MLClient
from azure.ai.ml.entities import (
ManagedOnlineEndpoint,
ManagedOnlineDeployment,
Model,
Environment,
CodeConfiguration,
)
from azure.identity import DefaultAzureCredential
注意
如果你使用的是 Kubernetes 联机终结点,请从 azure.ai.ml.entities
库导入 KubernetesOnlineEndpoint
和 KubernetesOnlineDeployment
类。
配置工作区详细信息并获取工作区句柄:
若要连接到工作区,我们需要提供标识符参数 — 订阅、资源组和工作区名称。 我们将在 azure.ai.ml
的 MLClient
中使用这些详细信息来获取所需 Azure 机器学习工作区的句柄。 此示例使用默认的 Azure 身份验证 。
# enter details of your AML workspace
subscription_id = "<SUBSCRIPTION_ID>"
resource_group = "<RESOURCE_GROUP>"
workspace = "<AML_WORKSPACE_NAME>"
# get a handle to the workspace
ml_client = MLClient(
DefaultAzureCredential(), subscription_id, resource_group, workspace
)
如果在本地计算机上安装了 Git,则可以按照说明克隆示例存储库。 否则,请按照说明从示例存储库下载文件。
克隆示例存储库
若要按照本文的说明进行操作,请先克隆示例存储库 (azureml-examples) ,然后将其更改为 azureml-examples/cli/endpoints/online/model-1
目录。
git clone --depth 1 https://github.com/Azure/azureml-examples
cd azureml-examples/cli/endpoints/online/model-1
提示
使用 --depth 1
仅克隆最新提交到存储库的内容,从而减少完成操作所需的时间。
从示例存储库下载文件
如果克隆了示例存储库,则本地计算机已有此示例的文件副本,你可以跳到下一部分。 如果未克隆存储库,则可以将其下载到本地计算机。
转到 https://github.com/Azure/azureml-examples/ 。
转到页面上的“<> 代码 ”按钮,然后从“本地 ”选项卡中选择“下载 ZIP ”。
找到第一个模型 model-1
的模型文件夹 /cli/endpoints/online/model-1/model
和评分脚本 /cli/endpoints/online/model-1/onlinescoring/score.py
。
找到第二个模型 model-2
的模型文件夹 /cli/endpoints/online/model-2/model
和评分脚本 /cli/endpoints/online/model-2/onlinescoring/score.py
。
定义终结点和部署
联机终结点用于联机(实时)推理。 联机终结点包含已准备好从客户端接收数据并可实时发回响应的部署。
定义终结点
下表列出了定义终结点时要指定的关键属性。
属性
描述
名称
必需。 终结点的名称。 在 Azure 区域中必须具有唯一性。 有关命名规则的详细信息,请参阅终结点限制 。
身份验证模式
终结点的身份验证方法。 在基于密钥的身份验证 key
和基于 Azure 机器学习令牌的身份验证 aml_token
之间进行选择。 密钥不会过期,但令牌会过期。 有关身份验证的详细信息,请参阅向联机终结点进行身份验证 。
说明
终结点的说明。
标记
终结点的标记字典。
交通
有关如何跨部署路由流量的规则。 将流量表示为键值对字典,其中键表示部署名称,值表示到该部署的流量百分比。 仅当终结点下的部署已创建时,才能设置流量。 创建部署后,你还可以更新联机终结点的流量。 有关如何使用镜像流量的详细信息,请参阅将一小部分实时流量分配给新部署 。
镜像流量
要镜像到部署的实时流量的百分比。 有关如何使用镜像流量的详细信息,请参阅使用镜像流量测试部署 。
若要查看可以在创建终结点时指定的完整属性列表,请参阅 CLI (v2) 联机终结点 YAML 架构 或 SDK (v2) ManagedOnlineEndpoint 类 。
定义部署
部署是一组资源,用于承载执行实际推理的模型。 下表描述了定义部署时要指定的关键属性。
属性
描述
名称
必需。 部署的名称。
终结点名称
必需。 要在其中创建部署的终结点的名称。
型号
要用于部署的模型。 此值可以是对工作区中现有版本受控模型的引用,也可以是对内联模型规范的引用。 本示例中有一个执行回归的 scikit-learn 模型。
代码路径
本地开发环境中目录的路径,其中包含用于为模型评分的所有 Python 源代码。 可以使用嵌套目录和包。
评分脚本
根据给定输入请求执行模型的 Python 代码。 此值可以是源代码目录中评分文件的相对路径。 评分脚本接收提交到已部署的 Web 服务的数据,并将此数据传递给模型。 然后,该脚本执行模型并将其响应返回给客户端。 评分脚本特定于你的模型,必须理解模型期望作为输入和作为输出返回的数据。 在此示例中,我们有一个 score.py 文件。 此 Python 代码必须具有 init()
函数和 run()
函数。 在创建或更新模型后将调用 init()
函数(例如,可以使用该函数在内存中缓存模型)。 每次调用终结点时,都将调用 run()
函数来执行实际评分和预测。
环境
必需。 用于承载模型和代码的环境。 此值可以是对工作区中现有版本受控环境的引用,也可以是对内联环境规范的引用。 环境可以是具有 Conda 依赖项、Dockerfile 或已注册环境的 Docker 映像。
实例类型
必需。 用于部署的 VM 大小。 有关支持的大小列表,请参阅托管联机终结点 SKU 列表 。
实例计数
必需。 用于部署的实例数。 请根据预期的工作负载确定值。 为实现高可用性,建议将值至少设置为 3
。 我们保留额外的 20% 来执行升级。 有关详细信息,请参阅联机终结点限制 。
若要查看可以在创建部署时指定的完整属性列表,请参阅 CLI (v2) 托管联机部署 YAML 架构 或 SDK (v2) ManagedOnlineDeployment 类 。
创建联机终结点
首先设置终结点的名称,然后对其进行配置。 在本文中,你将使用 endpoints/online/managed/sample/endpoint.yml 文件来配置终结点。 以下代码片段显示了文件的内容:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key
下表描述了 YAML 格式的终结点的参考资料。 若要了解如何指定这些属性,请参阅联机终结点 YAML 参考 。 如需了解与托管联机终结点相关的限制,请参阅联机终结点限制 。
密钥
说明
$schema
(可选)YAML 架构。 若要查看 YAML 文件的所有可用选项,可在浏览器中查看上述代码片段中的架构。
name
终结点的名称。
auth_mode
使用 key
可执行基于密钥的身份验证。 使用 aml_token
可执行基于 Azure 机器学习令牌的身份验证。 若要获取最新的令牌,请使用 az ml online-endpoint get-credentials
命令。
若要创建联机终结点,请执行以下操作:
设置终结点名称:
对于 Unix,请运行以下命令(将 YOUR_ENDPOINT_NAME
替换为唯一名称):
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
重要
Azure 区域中的终结点名称必须唯一。 例如,在 Azure chinanorth2
区域中,只能有一个名为 my-endpoint
的终结点。
在云中创建终结点:
运行以下代码,使用 endpoint.yml
文件配置终结点:
az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml
创建“blue”部署
在本文中,你将使用 endpoints/online/managed/sample/blue-deployment.yml 文件来配置部署的关键方面。 以下代码片段显示了文件的内容:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model:
path: ../../model-1/model/
code_configuration:
code: ../../model-1/onlinescoring/
scoring_script: score.py
environment:
conda_file: ../../model-1/environment/conda.yaml
image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1
若要为终结点创建名为 blue
的部署,请运行以下命令来使用 blue-deployment.yml
文件进行配置
az ml online-deployment create --name blue --endpoint-name $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
重要
az ml online-deployment create
中的 --all-traffic
标志会将 100% 的终结点流量分配给新创建的蓝色部署。
在 blue-deployment.yaml
文件中,我们以内联方式指定 path
(从中上传文件)。 CLI 会自动上传文件并注册模型和环境。 适用于生产的最佳做法是注册模型和环境,并在 YAML 中指定已注册的名称和版本。 使用格式 model: azureml:my-model:1
或 environment: azureml:my-env:1
。
若要执行注册,可以将 model
和 environment
的 YAML 定义提取到单独的 YAML 文件中,并使用命令 az ml model create
和 az ml environment create
。 若要详细了解这些命令,请运行 az ml model create -h
和 az ml environment create -h
。
有关将模型注册为资产的详细信息,请参阅使用 CLI 在机器学习中将模型注册为资产 。 若要详细了解如何创建环境,请参阅使用 CLI & SDK (v2) 管理 Azure 机器学习环境 。
创建联机终结点
若要创建托管联机终结点,请使用 ManagedOnlineEndpoint
类。 用户可以使用此类配置终结点的重要方面。
配置终结点:
# Creating a unique endpoint name with current datetime to avoid conflicts
import datetime
online_endpoint_name = "endpoint-" + datetime.datetime.now().strftime("%m%d%H%M%f")
# create an online endpoint
endpoint = ManagedOnlineEndpoint(
name=online_endpoint_name,
description="this is a sample online endpoint",
auth_mode="key",
tags={"foo": "bar"},
)
注意
若要创建 Kubernetes 联机终结点,请使用 KubernetesOnlineEndpoint
类。
创建终结点:
ml_client.begin_create_or_update(endpoint).result()
创建“blue”部署
若要为托管联机终结点创建部署,请使用 ManagedOnlineDeployment
类。 用户可以使用此类配置部署的重要方面。
下表描述了 deployment
的属性:
配置 blue 部署:
# create blue deployment
model = Model(path="../model-1/model/sklearn_regression_model.pkl")
env = Environment(
conda_file="../model-1/environment/conda.yml",
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04",
)
blue_deployment = ManagedOnlineDeployment(
name="blue",
endpoint_name=online_endpoint_name,
model=model,
environment=env,
code_configuration=CodeConfiguration(
code="../model-1/onlinescoring", scoring_script="score.py"
),
instance_type="Standard_DS2_v2",
instance_count=1,
)
在此示例中,我们以内联方式指定 path
(从何处上传文件)。 SDK 会自动上传文件并注册模型和环境。 适用于生产的最佳做法是注册模型和环境,并在代码中指定已注册的名称和版本。
有关将模型注册为资产的详细信息,请参阅使用 SDK 在机器学习中将模型注册为资产 。
若要详细了解如何创建环境,请参阅使用 CLI & SDK (v2) 管理 Azure 机器学习环境 。
注意
若要为 Kubernetes 联机终结点创建部署,请使用 KubernetesOnlineDeployment
类。
创建部署:
ml_client.begin_create_or_update(blue_deployment).result()
# blue deployment takes 100 traffic
endpoint.traffic = {"blue": 100}
ml_client.begin_create_or_update(endpoint).result()
在 Azure 机器学习工作室中创建托管联机终结点时,必须为该终结点定义初始部署。 在定义部署之前,工作区中必须有一个已注册的模型。 首先,让我们注册要用于部署的模型。
注册模型
模型注册是工作区中的逻辑实体。 此实体可以包含单个模型文件或具有多个文件的目录。 作为生产最佳做法,你应该注册模型和环境。 在本文中创建终结点和部署时,我们假设你已注册包含该模型的模型文件夹 。
若要注册示例模型,请执行以下步骤:
转到 Azure 机器学习工作室 。
在左侧导航栏中,选择“模型”页。
选择“注册 ”,然后选择“从本地文件 ”。
为“模型类型”选择“未指定的类型”。
选择“浏览 ”,然后选择“浏览文件夹 ”。
从之前克隆或下载的存储库的本地副本选择 \azureml-examples\cli\endpoints\online\model-1\model
文件夹。 出现提示时,请选择“上传 ”并等待上传完成。
文件夹上传完成后,请选择“下一步 ”。
为模型输入一个易记名称 。 本文中的步骤假定模型已命名为 model-1
。
选择“下一步”,然后选择“注册”以完成注册。
重复上述步骤,从之前克隆或下载的存储库本地副本中的 \azureml-examples\cli\endpoints\online\model-2\model
文件夹注册 model-2
。
若要详细了解如何使用已注册模型,请参阅注册并使用模型 。
有关在工作室中创建环境的信息,请参阅创建环境 。
创建托管联机终结点和“蓝色”部署
直接在浏览器中使用 Azure 机器学习工作室创建托管联机终结点。 在工作室中创建托管联机终结点时,必须定义初始部署。 不能创建空的托管联机终结点。
在工作室中创建托管联机终结点的一种方法是从“模型 ”页面创建。 此方法也提供将模型添加到现有托管联机部署的简单方法。 若要部署之前在“注册模型 ”部分中注册的名为 model-1
的模型,请执行以下操作:
转到 Azure 机器学习工作室 。
在左侧导航栏中,选择“模型”页。
通过选中名称旁边的圆圈来选择名为 model-1
的模型。
选择“部署” > “实时终结点”。
此操作将打开一个窗口,可在其中指定有关终结点的详细信息。
输入终结点名称 。
保留默认选择:对于计算类型为“托管 ”,对于身份验证类型为“基于密钥的身份验证 ”。
选择“下一步 ”,直到出现“部署”页。 在这里,请执行以下任务:
将部署命名为“蓝色”。
选中“启用 Application Insights 诊断和数据收集 ”框,以便稍后在工作室中查看终结点活动图。
选择“下一步 ”以转到“环境”页。 在此处执行以下步骤:
在“选择评分文件和依赖项”框中,浏览并从先前克隆或下载的存储库中选择 \azureml-examples\cli\endpoints\online\model-1\onlinescoring\score.py
文件。
开始在环境列表上方的搜索框中键入 sklearn
,然后选择“AzureML-sklearn-0.24 ”策展环境。
选择“下一步 ”以转到“计算”页。 在此处,保留虚拟机“Standard_DS3_v2”的默认选择,并将“实例计数 ”更改为 1。
选择“下一步 ”,接受蓝色部署的默认流量分配 (100%)。
查看你的部署设置,然后选择“创建 ”按钮。
或者,也可以通过工作室中的“终结点 ”页创建托管联机终结点。
转到 Azure 机器学习工作室 。
在左侧导航栏中,选择“终结点”页。
选择“+ 新建”。
此操作将打开一个窗口,供你指定有关终结点和部署的详细信息。 如前面的步骤 5-11 中所述,输入终结点和部署的设置,接受默认设置,直到系统提示创建 部署。
确认现有部署
确认现有部署的一种方法是调用终结点,以便它可以就给定输入请求为你的模型评分。 通过 CLI 或 Python SDK 调用终结点时,可以选择指定将接收传入流量的部署的名称。
注意
与 CLI 或 Python SDK 相比,Azure 机器学习工作室则略有不同,后者要求你在调用终结点时必须指定部署。
使用部署名称调用终结点
如果使用将接收流量的部署的名称调用终结点,Azure 机器学习会将终结点的流量直接路由到指定的部署并返回其输出。 可以使用 --deployment-name
选项(对于 CLI v2 )或 deployment_name
选项(对于 SDK v2 )来指定部署。
调用终结点而不指定部署
如果在调用终结点时未指定接收流量的部署,Azure 机器学习将根据流量控制设置将终结点的传入流量路由到终结点中的部署。
流量控制设置会将指定百分比的传入流量分配给终结点中的各个部署。 例如,如果流量规则指定终结点中的某个部署将在 40% 的时间内接收传入流量,则 Azure 机器学习会将终结点的 40% 的流量路由到该部署。
可以运行以下命令来查看现有终结点和部署的状态:
az ml online-endpoint show --name $ENDPOINT_NAME
az ml online-deployment show --name blue --endpoint $ENDPOINT_NAME
应会看到由 $ENDPOINT_NAME
标识的终结点,以及名为 blue
的部署。
使用示例数据测试终结点
可以使用 invoke
命令调用终结点。 我们将使用一个 json 文件发送示例请求。
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
检查状态,查看模型是否已部署且未出错:
ml_client.online_endpoints.get(name=online_endpoint_name)
使用示例数据测试终结点
使用之前创建的 MLClient
,我们将获取终结点的句柄。 可以使用具有以下参数的 invoke
命令调用终结点:
endpoint_name
- 终结点的名称
request_file
- 包含请求数据的文件
deployment_name
- 要在终结点中测试的特定部署的名称
我们将使用一个 json 文件发送示例请求。
# test the blue deployment with some sample data
ml_client.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
deployment_name="blue",
request_file="../model-1/sample-request.json",
)
查看托管联机终结点
可以在“终结点 ”页中查看所有托管联机终结点。 转到终结点的“详细信息 ”页查找关键信息,包括终结点 URI、状态、测试工具、活动监视器、部署日志和示例使用代码:
在左侧导航栏中,选择“终结点”。 在这里,可以看到工作区中所有终结点的列表。
(可选)创建一个基于“计算类型”的筛选器 ,以便仅显示“托管”计算类型。
选择一个终结点名称以查看该终结点的“详细信息 ”页。
使用示例数据测试终结点
使用终结点“详细信息”页中的“测试 ”选项卡来测试托管联机部署。 提供示例输入并查看结果。
在终结点的详细信息页中选择“测试”选项卡。 已在下拉菜单中选择蓝色部署。
从 json 文件复制示例输入
将示例输入粘贴到测试框中。
选择“测试”。
扩展现有部署以处理更多流量
在按使用联机终结点部署机器学习模型并为其评分 所述进行部署时,请在 yaml 部署文件中将 instance_count
设置为值 1
。 可以使用 update
命令进行横向扩展:
az ml online-deployment update --name blue --endpoint-name $ENDPOINT_NAME --set instance_count=2
注意
请注意,在以上命令中,我们使用 --set
重写部署配置。 你也可以更新 yaml 文件,并使用 --file
输入将它作为输入传递给 update
命令。
使用前面创建的 MLClient
,我们将获取部署的句柄。 可以通过增加或减少 instance_count
来缩放部署。
# scale the deployment
blue_deployment = ml_client.online_deployments.get(
name="blue", endpoint_name=online_endpoint_name
)
blue_deployment.instance_count = 2
ml_client.online_deployments.begin_create_or_update(blue_deployment).result()
获取终结点详细信息
# Get the details for online endpoint
endpoint = ml_client.online_endpoints.get(name=online_endpoint_name)
# existing traffic details
print(endpoint.traffic)
# Get the scoring URI
print(endpoint.scoring_uri)
使用以下说明,通过调整实例数来纵向扩展或缩减部署:
在终结点“详细信息”页中。 查找蓝色部署的卡。
选择蓝色部署卡标题中的编辑图标 。
将实例计数更改为 2。
选择“更新”。
部署新模型,但暂时不要向其发送任何流量
创建名为 green
的新部署:
az ml online-deployment create --name green --endpoint-name $ENDPOINT_NAME -f endpoints/online/managed/sample/green-deployment.yml
由于我们尚未将任何流量显式分配给 green
,因此分配给它的流量为零。 可使用以下命令对此进行验证:
az ml online-endpoint show -n $ENDPOINT_NAME --query traffic
测试新部署
尽管为 green
分配的流量为 0%,但你可以通过指定 --deployment
名称来直接调用它:
az ml online-endpoint invoke --name $ENDPOINT_NAME --deployment-name green --request-file endpoints/online/model-2/sample-request.json
如果要使用 REST 客户端直接调用部署而不经历流量规则处理过程,请设置以下 HTTP 头:azureml-model-deployment: <deployment-name>
。 下面的代码片段使用 curl
直接调用部署。 代码片段应在 Unix/WSL 环境中生效:
# get the scoring uri
SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)
# use curl to invoke the endpoint
curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --header "azureml-model-deployment: green" --data @endpoints/online/model-2/sample-request.json
为托管联机终结点创建新部署并将部署命名为 green
:
# create green deployment
model2 = Model(path="../model-2/model/sklearn_regression_model.pkl")
env2 = Environment(
conda_file="../model-2/environment/conda.yml",
image="mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04",
)
green_deployment = ManagedOnlineDeployment(
name="green",
endpoint_name=online_endpoint_name,
model=model2,
environment=env2,
code_configuration=CodeConfiguration(
code="../model-2/onlinescoring", scoring_script="score.py"
),
instance_type="Standard_DS2_v2",
instance_count=1,
)
# use MLClient to create green deployment
ml_client.begin_create_or_update(green_deployment).result()
注意
如果你要为 Kubernetes 联机终结点创建部署,请使用 KubernetesOnlineDeployment
类,并在 Kubernetes 群集中指定 Kubernetes 实例类型 。
测试新部署
虽然为 green
分配了 0% 的流量,但你仍可以使用 json 文件调用终结点和部署。
ml_client.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
deployment_name="green",
request_file="../model-2/sample-request.json",
)
创建要添加到你的托管联机终结点的新部署,并将该部署命名为 green
。
从“终结点详细信息”页
在终结点“详细信息”页中选择“+ 添加部署 ”按钮。
选择“部署模型 ”。
选择“下一步 ”以转到“模型”页,然后选择模型 model-2 。
选择“下一步 ”以转到“部署”页并执行以下任务:
将部署命名为“green”。
启用 Application Insights 诊断和数据收集。
选择“下一步 ”以转到“环境”页。 在此处执行以下步骤:
在“选择评分文件和依赖项”框中,浏览并从先前克隆或下载的存储库中选择 \azureml-examples\cli\endpoints\online\model-2\onlinescoring\score.py
文件。
开始在环境列表上方的搜索框中键入 sklearn
,然后选择“AzureML-sklearn-0.24 ”策展环境。
选择“下一步 ”以转到“计算”页。 在此处,保留虚拟机“Standard_DS3_v2”的默认选择,并将“实例计数 ”更改为 1。
选择“下一步 ”以转到“流量”页。 在这里,保留部署的默认流量分配(“蓝色”为 100% 流量,“绿色”为 0% 流量)。
选择“下一步 ”以查看部署设置。
选择“创建 ”以创建部署。
或者,可以使用“模型”页添加部署:
在左侧导航栏中,选择“模型”页。
通过选中模型名称旁边的圆圈来选择该模型。
选择“部署 ”>“实时终结点 ”。
选择部署到现有的托管联机终结点。
按照前面的步骤 3 到 9 完成绿色部署的创建。
注意
向终结点添加新部署时,可以在“流量”页上调整部署之间的流量平衡。 但此时应保留对部署的默认流量分配(“蓝色”为 100% 流量,“绿色”为 0% 流量)。
测试新部署
虽然为 green
分配了 0% 流量,但你仍可以调用终结点和部署。 使用终结点“详细信息”页中的“测试 ”选项卡来测试托管联机部署。 提供示例输入并查看结果。
在终结点的详细信息页中选择“测试”选项卡。
从下拉菜单中选择绿色部署。
从 json 文件复制示例输入。
将示例输入粘贴到测试框中。
选择“测试”。
使用镜像流量测试部署
测试 green
部署后,可以将一定百分比的实时流量镜像 (或复制)到该部署。 流量镜像(也称为影子处理)不会更改返回给客户端的结果 - 请求仍 100% 流向 blue
部署。 流量的镜像百分比将复制并提交到 green
部署,以便你可以收集指标和日志记录,而不会影响客户端。 如果要验证新部署而不影响客户端,则可使用镜像。 例如,可以使用镜像来检查延迟是否在可接受的范围内,或者检查是否没有 HTTP 错误。 使用流量镜像/影子处理测试新部署也称为影子测试 。 接收镜像流量的部署(在本例中为 green
部署)也可以称为影子部署 。
镜像具有以下限制:
CLI (v2)(版本 2.4.0 或更高版本)和 Python SDK (v2)(版本 1.0.0 或更高版本)支持镜像。 如果使用旧版 CLI/SDK 更新终结点,则会丢失镜像流量设置。
Kubernetes 联机终结点目前不支持镜像。
只能将流量镜像到终结点中的一个部署。
可以镜像的最大流量百分比为 50%。 此限制旨在降低对终结点带宽配额 (默认 5 MBPS)的影响 - 如果超过分配的配额,终结点带宽将受到限制。 若要了解如何监视带宽限制,请参阅监视托管联机终结点 。
另请注意以下行为:
部署可以配置为仅接收实时流量或镜像流量,而不能同时接收两者。
调用终结点时,你可以指定其任何部署的名称(甚至是影子部署)以返回预测。
使用将接收传入流量的部署名称调用终结点时,Azure 机器学习不会将流量镜像到影子部署。 如果未指定部署,Azure 机器学习会将发送到终结点的流量镜像到影子部署。
现在,让我们将绿色部署设置为接收 10% 的镜像流量。 客户端仍将仅接收来自蓝色部署的预测。
以下命令将 10% 的流量镜像到 green
部署:
az ml online-endpoint update --name $ENDPOINT_NAME --mirror-traffic "green=10"
你可以通过多次调用终结点而不指定用于接收传入流量的部署来测试镜像流量:
for i in {1..20} ; do
az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json
done
可以通过查看来自部署的日志,来确认具体将多少百分比的流量发送到了 green
部署:
az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
测试后,可以将镜像流量设置为零以禁用镜像:
az ml online-endpoint update --name $ENDPOINT_NAME --mirror-traffic "green=0"
以下命令将 10% 的流量镜像到 green
部署:
endpoint.mirror_traffic = {"green": 10}
ml_client.begin_create_or_update(endpoint).result()
你可以通过多次调用终结点而不指定用于接收传入流量的部署来测试镜像流量:
# You can test mirror traffic by invoking the endpoint several times
for i in range(20):
ml_client.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
request_file="../model-1/sample-request.json",
)
可以通过查看来自部署的日志,来确认具体将多少百分比的流量发送到了 green
部署:
ml_client.online_deployments.get_logs(
name="green", endpoint_name=online_endpoint_name, lines=50
)
测试后,可以将镜像流量设置为零以禁用镜像:
ml_client.online_deployments.get_logs(
name="green", endpoint_name=online_endpoint_name, lines=50
)
若要将 10% 的流量镜像到 green
部署,请执行以下操作:
从终结点“详细信息”页,选择“更新流量 ”。
滑动按钮可启用镜像流量。
在“部署名称”下拉菜单中选择绿色 部署。
将默认流量分配保留为 10%。
选择“更新”。
终结点“详细信息”页现在显示 10% 的镜像流量分配到 green
部署。
若要测试镜像流量,请查看 Azure CLI 或 Python 选项卡以多次调用终结点。 然后,通过查看来自部署的日志,确认具体将多少百分比的流量发送到了 green
部署。 你可以从终结点的“部署日志”选项卡访问部署日志。还可以使用指标和日志来监视镜像流量的性能。 有关详细信息,请参阅监视联机终结点 。
测试后,可以禁用镜像:
从终结点“详细信息”页,选择“更新流量 ”。
再次滑动“启用镜像流量”旁边的按钮可禁用镜像流量。
选择“更新”。
将一小部分实时流量分配给新部署
测试 green
部署后,为其分配一小部分流量:
az ml online-endpoint update --name $ENDPOINT_NAME --traffic "blue=90 green=10"
测试 green
部署后,为其分配一小部分流量:
endpoint.traffic = {"blue": 90, "green": 10}
ml_client.begin_create_or_update(endpoint).result()
测试 green
部署后,为其分配一小部分流量:
在终结点“详细信息”页中,选择“更新流量 ”。
通过将 10% 分配给绿色部署,将 90% 分配给蓝色部署来调整部署流量。
选择“更新”。
提示
总流量百分比之和必须要么是 0%(禁用流量),要么是 100%(启用流量)。
现在,green
部署会接收所有实时流量的 10%。 客户端将从 blue
和 green
部署接收预测。
将所有流量发送到新部署
对 green
部署完全满意后,将所有流量切换到该部署。
az ml online-endpoint update --name $ENDPOINT_NAME --traffic "blue=0 green=100"
对 green
部署完全满意后,将所有流量切换到该部署。
endpoint.traffic = {"blue": 0, "green": 100}
ml_client.begin_create_or_update(endpoint).result()
对 green
部署完全满意后,将所有流量切换到该部署。
在终结点“详细信息”页中,选择“更新流量 ”。
通过将 100% 分配给绿色部署,将 0% 分配给蓝色部署来调整部署流量。
选择“更新”。
删除旧部署
使用以下步骤从托管联机终结点中删除单个部署。 删除单个部署会影响托管联机终结点中的其他部署:
az ml online-deployment delete --name blue --endpoint $ENDPOINT_NAME --yes --no-wait
ml_client.online_deployments.begin_delete(
name="blue", endpoint_name=online_endpoint_name
).result()
注意
无法删除已分配了实时流量的部署。 在删除部署之前,必须先将其流量分配设置 为 0%。
在终结点“详细信息”页中,找到蓝色部署。
选择部署名称旁边的删除图标 。
删除终结点和部署
如果不打算使用终结点和部署,则应该删除它们。 删除终结点时,你还会删除其所有基础部署。
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
如果不打算使用终结点和部署,则应该删除它们。 删除终结点时,你还会删除其所有基础部署。
ml_client.online_endpoints.begin_delete(name=online_endpoint_name).result()
如果不打算使用终结点和部署,则应该删除它们。 删除终结点时,你还会删除其所有基础部署。
转到 Azure 机器学习工作室 。
在左侧导航栏中,选择“终结点”页。
通过选中模型名称旁边的圆圈来选择终结点。
选择“删除”。
或者,可以通过选择终结点“详细信息”页中的“删除 ”图标,直接删除托管联机终结点。
相关内容