适用范围: Azure CLI ml 扩展 v2(最新版) Python SDK azure-ai-ml v2(最新版)
本文介绍如何在生产环境中部署新版本的机器学习模型,而不会造成任何中断。 使用蓝绿部署策略(也称为安全推出策略)将新版本的 Web 服务引入生产环境。 使用此策略时,可以在完全推出 Web 服务之前,将新版本的 Web 服务推广到一小部分用户或请求。
本文假定你使用联机终结点或用于联机(实时)推理的终结点。 有两种类型的联机终结点:托管联机终结点和 Kubernetes 联机终结点。 有关终结点的详细信息以及终结点类型之间的差异,请参阅 托管联机终结点与 Kubernetes 联机终结点 。
本文使用托管联机终结点进行部署。 但它还包括注释,说明如何利用 Kubernetes 终结点而不是托管联机终结点。
在本文中,你将了解如何:
定义一个在线端点,通过名为 blue
的部署来服务模型的第一个版本。
扩展blue
部署,使其能够处理更多请求。
将第二个版本的模型(称为 green
部署)部署到终结点,但不向该部署发送实时流量。
在隔离环境中测试 green
部署。
将一部分实时流量镜像到 green
部署以验证部署。
将一小部分实时流量发送到 green
部署。
将所有实时流量发送到 green
部署。
删除未使用的 blue
部署。
至少具有以下 Azure 基于角色的访问控制(Azure RBAC)角色之一的用户帐户:
Azure 机器学习工作区的所有者角色
Azure 机器学习工作区的贡献者角色
具有 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/*
权限的自定义角色
有关详细信息,请参阅管理对 Azure 机器学习工作区的访问 。
(可选)在本地安装并运行 Docker 引擎 。 强烈建议使用此先决条件。 您需要它来在本地部署模型,它还有助于调试。
适用范围 :Python SDK azure-ai-ml v2(最新版)
Azure 机器学习工作区。 有关创建工作区的步骤,请参阅 “创建工作区 ”。
适用于 Python v2 的 Azure 机器学习 SDK。 若要安装 SDK,请使用以下命令:
pip install azure-ai-ml azure-identity
要将 SDK 的现有安装更新到最新版本,请使用以下命令:
pip install --upgrade azure-ai-ml azure-identity
有关详细信息,请参阅 适用于 Python 的 Azure 机器学习包客户端库 。
至少具有以下 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-name>
若要按照本文的说明进行操作,请先克隆示例存储库 (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 directory:
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 机器学习时创建的所有项目。 本节中,你将连接到工作区,执行部署任务。 若要继续学习该内容,请打开 online-endpoints-safe-rollout.ipynb 笔记本。
导入所需的库:
# 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 联机终结点,请从KubernetesOnlineEndpoint
库导入KubernetesOnlineDeployment
和azure.ai.ml.entities
类。
配置工作区设置并获取工作区的控制权。
若要连接到工作区,需要标识符参数,即订阅、资源组和工作区名称。 使用 MLClient
模块的 azure.ai.ml
类中的信息来获取所需的 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 ”。
联机终结点用于联机(实时)推理。 联机终结点包含已准备好从客户端接收数据并可实时发回响应的部署。
下表列出了定义终结点时要指定的关键属性。
展開資料表
属性
必需还是可选
描述
名称
必选
终结点的名称。 它在其 Azure 区域中必须是唯一的。 有关命名规则的详细信息,请参阅 Azure 机器学习联机终结点和批处理终结点 。
身份验证模式
可选
终结点的身份验证方法。 可以在基于密钥的身份验证 key
和基于 Azure 机器学习令牌的身份验证 aml_token
之间进行选择。 密钥不会过期,但令牌会过期。 有关身份验证的详细信息,请参阅 对联机终结点的客户端进行身份验证 。
描述
可选
终结点的说明。
标记
可选
终结点的标记字典。
交通
可选
有关如何跨部署路由流量的规则。 您将流量表示为键值对形式的字典,其中键代表部署名称,值代表该部署流量的百分比。 仅当终结点下的部署创建后,才能设置流量。 创建部署后,还可以更新联机终结点的流量。 有关如何使用镜像流量的详细信息,请参阅 将少量实时流量分配给新部署 。
镜像流量
可选
要镜像到部署的实时流量的百分比。 有关如何使用镜像流量的详细信息,请参阅 使用镜像流量测试部署 。
若要查看可以在创建终结点时指定的属性的完整列表,请参阅 CLI (v2) 联机终结点 YAML 架构 。 有关适用于 Python 的 Azure 机器学习 SDK 版本 2,请参阅 ManagedOnlineEndpoint 类 。
部署 是托管执行实际推理的模型所需的一组资源。 下表描述了定义部署时要指定的关键属性。
展開資料表
属性
必需还是可选
描述
名称
必选
部署的名称。
终结点名称
必选
用于创建部署的终结点名称。
型号
可选
要用于部署的模型。 此值可以是对工作区中现有版本受控模型的引用,也可以是对内联模型规范的引用。 在本文的示例中, scikit-learn
模型确实会回归。
代码路径
可选
本地开发环境中文件夹的路径,其中包含用于评分模型的所有 Python 源代码。 可以使用嵌套目录和包。
评分脚本
可选
根据给定输入请求执行模型的 Python 代码。 此值可以是源代码文件夹中评分文件的相对路径。 评分脚本接收提交到已部署的 Web 服务的数据,并将此数据传递给模型。 然后,该脚本执行模型并将其响应返回给客户端。 评分脚本特定于你的模型,必须理解模型期望作为输入和作为输出返回的数据。 本文的示例使用 score.py 文件。 此 Python 代码必须具有 init
函数和 run
函数。
init
在创建或更新模型后调用该函数。 例如,可以使用它在内存中缓存模型。 每次调用终结点时,都将调用 run
函数来执行实际评分和预测。
环境
必选
用于承载模型和代码的环境。 此值可以是对工作区中现有版本受控环境的引用,也可以是对内联环境规范的引用。 环境可以是具有 Conda 依赖项、Dockerfile 或已注册环境的 Docker 映像。
实例类型
必选
要用于部署的虚拟机大小。 有关支持的大小列表,请参阅托管联机终结点 SKU 列表 。
实例计数
必选
用于部署的实例数。 您根据预期的工作负荷来确定价值。 为了获得高可用性,建议至少使用三个实例。 Azure 机器学习为执行升级保留额外 20%。 有关详细信息,请参阅 Azure 机器学习联机终结点和批处理终结点 。
若要查看可以在创建部署时指定的属性的完整列表,请参阅 CLI (v2) 托管联机部署 YAML 架构 。 有关 Python SDK 版本 2,请参阅 ManagedOnlineDeployment 类 。
首先设置终结点名称,然后对其进行配置。 在本文中,将使用 endpoints/online/managed/sample/endpoint.yml 文件来配置终结点。 该文件包含以下行:
$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key
下表描述了终结点 YAML 格式使用的密钥。 若要了解如何指定这些属性,请参阅 CLI (v2) 联机终结点 YAML 架构 。 有关与托管联机终结点相关的限制的信息,请参阅 Azure 机器学习联机终结点和批处理终结点 。
展開資料表
密钥
描述
$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
可以使用 endpoints/online/managed/sample/blue-deployment.yml 文件来配置名为 blue
的部署的关键元素。 该文件包含以下行:
$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-deployment.yml 文件为终结点创建 blue
部署,请运行以下命令:
az ml online-deployment create --name blue --endpoint-name $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic
重要
在 --all-traffic
命令中,az ml online-deployment create
标志将 100% 的端点流量分配给新创建的 blue
部署。
在 blue-deployment.yaml 文件中,行 path
指定从何处上传文件。 Azure 机器学习 CLI 使用此信息上传文件并注册模型和环境。 作为生产最佳做法,应注册模型和环境,并在 YAML 代码中单独指定已注册的名称和版本。 使用模型的格式 model: azureml:<model-name>:<model-version>
,例如 model: azureml:my-model:1
。 对于环境,请使用格式 environment: azureml:<environment-name>:<environment-version>
,例如 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
。
有关将模型注册为资产的详细信息,请参阅 使用 Azure CLI 或 Python SDK 注册模型 。 有关创建环境的详细信息,请参阅 “创建自定义环境 ”。
若要创建托管联机终结点,请使用 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()
若要为托管联机终结点创建部署,请使用 ManagedOnlineDeployment
类。 此类提供了一种方法来配置部署的关键方面。
配置 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
指定要从何处上传文件。 Python SDK 使用此信息上传文件并注册模型和环境。 作为生产最佳做法,应注册模型和环境,并在代码中单独指定已注册的名称和版本。
有关将模型注册为资产的详细信息,请参阅 使用 Azure CLI 或 Python SDK 注册模型 。
有关创建环境的详细信息,请参阅 “创建自定义环境 ”。
注意
若要为 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 机器学习中的已注册模型 。
有关在工作室中创建环境的信息,请参阅 “创建环境 ”。
可以使用 Azure 机器学习工作室直接在浏览器中创建托管联机终结点。 在工作室中创建托管联机终结点时,必须定义初始部署。 不能创建空的托管联机终结点。
在工作室中创建托管联机终结点的一种方法是从“模型 ”页面创建。 此方法也提供将模型添加到现有托管联机部署的简单方法。 若要部署之前在“model-1
”部分中注册的模型 ,请执行以下步骤。
转到 Azure 机器学习工作室 ,然后选择 “模型 ”。
在列表中,选择 model-1
模型。
选择“部署” > “实时终结点”。
此时会打开一个窗口,可用于指定有关终结点的详细信息。
在 “终结点名称 ”下,输入终结点的名称。
在 “计算类型 ”下,保留 “托管 ”的默认值。
在 “身份验证类型 ”下,保留 基于密钥的身份验证 的默认值。
选择 “下一步 ”,然后在“ 模型 ”页上,选择“ 下一步 ”。
在 “部署 ”页上,执行以下步骤:
在 “部署名称 ”下,输入 蓝色 。
如果以后想要在工作室中查看终结点活动的图表:
在 推理数据收集 下,打开开关。
在 Application Insights 诊断 下,打开开关。
选择“下一步 ”。
在 用于推理的代码和环境 页上,执行以下步骤:
在 “选择用于推理的评分脚本 ”下,选择“ 浏览” ,然后从之前克隆或下载的存储库中选择 \azureml-examples\cli\endpoints\online\model-1\onlinescoring\score.py 文件。
在环境列表上方的搜索框中,开始输入 sklearn ,然后选择 sklearn-1.5:19 特选环境。
选择“下一步 ”。
在 “计算 ”页上,执行以下步骤:
在 “虚拟机 ”下,保留默认值。
在 “实例计数 ”下,将默认值替换为 1 。
选择“下一步 ”。
在实时流量 页面上,选择下一步 以接受100%到blue
部署的默认流量分配。
在“ 审阅 ”页上,查看部署设置,然后选择“ 创建 ”。
或者,也可以通过工作室中的“终结点 ”页创建托管联机终结点。
转到 Azure 机器学习工作室 。
选择 终结点 。
选择 创建 。
此时会打开一个窗口,可用于指定有关终结点和部署的详细信息。
选择模型,然后选择 “选择 ”。
请根据前面两个部分中的描述,输入终结点和部署的设置。 在每个步骤中,使用默认值,并在最后一步中选择“ 创建 ”以创建部署。
确认现有部署的一种方法是调用终结点,以便它可以就给定输入请求为你的模型评分。 通过 Azure CLI 或 Python SDK 调用终结点时,可以选择指定要接收传入流量的部署的名称。
注意
与 Azure CLI 或 Python SDK 不同,Azure 机器学习工作室要求在调用终结点时指定部署。
调用终结点时,可以指定要接收流量的部署的名称。 在这种情况下,Azure 机器学习会将终结点流量直接路由到指定的部署并返回其输出。 可以使用 --deployment-name
Azure 机器学习 CLI v2 的选项,也可以使用 deployment_name
Python 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
。 以下命令使用 sample-request.json 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
:用于在端点上进行测试的部署名称
以下代码使用 sample-request.json 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、状态、测试工具、活动监视器、部署日志和示例使用代码。 若要查看此信息,请执行以下步骤:
在工作室中,选择“终结点” 。 将显示工作区中所有终结点的列表。
(可选)在计算实例类型上创建筛选器,以仅显示托管类型。
选择一个终结点名称以查看该终结点的“详细信息 ”页。
在终结点页上,可以使用“ 测试 ”选项卡测试托管联机部署。 若要输入示例输入并查看结果,请执行以下步骤:
在终结点页上,转到“ 测试 ”选项卡。在 “部署 ”列表中, blue
已选择部署。
转到 sample-request.json 文件 并复制其示例输入。
在工作室中,将示例输入粘贴到 “输入 ”框中。
选择“测试”。
在按使用联机终结点部署机器学习模型并为其评分 所述进行部署时,将 instance_count
值设置为部署 YAML 文件中的 1
。 可以使用 update
命令进行扩展:
az ml online-deployment update --name blue --endpoint-name $ENDPOINT_NAME --set instance_count=2
注意
在上一个命令中, --set
该选项将替代部署配置。 你也可以更新 YAML 文件,并使用 update
选项将它作为输入传递给 --file
命令。
可以使用之前创建的实例 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)
若要通过调整实例数来纵向扩展或缩减部署,请执行以下步骤:
在终结点页上,转到“ 详细信息 ”选项卡,找到部署卡 blue
。
在部署卡的 blue
标头上,选择编辑图标。
在 “实例计数 ”下,输入 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>
。 以下代码使用客户端进行 URL (cURL) 直接调用部署。 可以在 Unix 或适用于 Linux 的 Windows 子系统(WSL)环境中运行代码。 有关如何检索 $ENDPOINT_KEY
值的说明,请参阅 获取数据平面操作的密钥或令牌 。
# 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()
尽管 green
部署分配了 0% 的流量,但仍可以调用终结点和部署。 以下代码使用 sample-request.json JSON 文件发送示例请求。
ml_client.online_endpoints.invoke(
endpoint_name=online_endpoint_name,
deployment_name="green",
request_file="../model-2/sample-request.json",
)
可以创建要添加到托管联机终结点的新部署。 若要创建名为 green
的部署,请执行以下步骤。
在终结点页上,转到“ 详细信息 ”选项卡,然后选择“ 添加部署 ”。
在 “选择模型 ”页上,选择 model-2 ,然后选择“ 选择 ”。
在 “终结点 ”页和“ 模型 ”页上,选择“ 下一步 ”。
在 “部署 ”页上,执行以下步骤:
在 “部署名称 ”下,输入 绿色 。
在 推理数据收集 下,打开开关。
在 Application Insights 诊断 下,打开开关。
选择“下一步 ”。
在 用于推理的代码和环境 页上,执行以下步骤:
在 “选择用于推理的评分脚本 ”下,选择“ 浏览” ,然后从之前克隆或下载的存储库中选择 \azureml-examples\cli\endpoints\online\model-2\onlinescoring\score.py 文件。
在环境列表上方的搜索框中,开始输入 sklearn ,然后选择 sklearn-1.5:19 特选环境。
选择“下一步 ”。
在 “计算 ”页上,执行以下步骤:
在 “虚拟机 ”下,保留默认值。
在 “实例计数 ”下,将默认值替换为 1 。
选择“下一步 ”。
在 “实时流量” 页上,选择 “下一步” ,以接受默认流量分配,其中 100% 分配给 blue
部署,0% 分配给 green
。
在“ 审阅 ”页上,查看部署设置,然后选择“ 创建 ”。
或者,可以使用“模型”页添加部署:
在工作室中,选择 “模型 ”。
在列表中选择一个模型。
选择“部署” > “实时终结点”。
在 “终结点”下,选择 “现有”。
在终结点列表中,选择要将模型部署到的托管联机终结点,然后选择“ 下一步 ”。
在 “模型 ”页上,选择“ 下一步 ”。
若要完成部署创建 green
,请遵循 “配置初始设置 ”部分中的步骤 4 到 6,以及 “配置剩余设置”中的所有步骤并创建部署 部分。
注意
向终结点添加新部署时,可以使用 “更新流量分配 ”页来调整部署之间的流量平衡。 但是,为了遵循本文的其余程序,目前请将默认流量的 100% 分配给 blue
部署,将默认流量的 0% 分配给 green
部署。
即使 0% 的流量流向 green
部署,仍然可以调用终结点和该部署。 在终结点页上,可以使用“ 测试 ”选项卡测试托管联机部署。 若要输入示例输入并查看结果,请执行以下步骤:
在终结点页上,转到“ 测试 ”选项卡。
在 “部署 ”列表中,选择 绿色 。
转到 sample-request.json 文件 并复制其示例输入。
在工作室中,将示例输入粘贴到 “输入 ”框中。
选择“测试”。
测试 green
部署后,可以将一定百分比的实时流量复制并发送到 green
部署上,以将其镜像到终结点。 流量镜像(也称为影子复制)不会更改返回给客户端的结果,请求仍然 100% 流向 blue
部署。 流量的镜像百分比将被复制并提交到 green
部署,以便可以收集指标和日志记录,而不会影响客户端。
如果要验证新部署而不影响客户端,则可使用镜像。 例如,可以使用镜像来检查延迟是否在可接受的范围内,或者检查是否存在 HTTP 错误。 使用流量镜像或阴影测试新部署也称为影子测试 。 在这种情况下,接收镜像流量的 green
部署也可以称为 影子部署 。
镜像具有以下限制:
Azure 机器学习 CLI 2.4.0 及更高版本以及 Python SDK 版本 1.0.0 及更高版本支持镜像。 如果使用旧版的 Azure 机器学习 CLI 或 Python SDK 更新终结点,则会丢失镜像流量设置。
Kubernetes 联机终结点目前不支持镜像。
只能将流量镜像到终结点中的一个部署。
可以镜像的最大流量百分比为 50%。 此上限限制 对终结点带宽配额 的影响,其默认值为 5 MBps。 如果超出分配的配额,则终结点带宽会受到限制。 有关监视带宽限制的信息,请参阅 带宽限制 。
另请注意以下行为:
可以将部署配置为仅接收实时流量或镜像流量,而不是同时接收这两者。
调用终结点时,可以指定其任何部署的名称(甚至是影子部署)以返回预测。
调用终结点并指定用于接收传入流量的部署名称时,Azure 机器学习不会将流量镜像到影子部署。 如果未指定部署,Azure 机器学习会将发送到终结点的流量镜像到影子部署。
即使将 green
部署设置为接收 10% 的镜像流量,客户端依然仅接收来自 blue
部署的预测。
使用以下命令镜像 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 green --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
部署后,为其分配一小部分流量:
测试 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()
在终结点页上,转到“ 详细信息 ”选项卡,然后选择“ 更新流量 ”。
通过将部署流量的 10% 分配给 green
部署,并将 90% 分配到 blue
部署来进行调整。
选择“更新”。
提示
总流量百分比必须是 0% 才能禁用流量,或 100% 才能启用流量。
部署 green
现在接收 10% 的实时总流量。 客户端从 blue
和 green
部署接收预测。
对 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()
在终结点页上,转到“ 详细信息 ”选项卡,然后选择“ 更新流量 ”。
通过将 100% 的流量分配给 green
部署,以及将 0% 的流量分配给 blue
部署来调整部署流量。
选择“更新”。
使用以下步骤从托管联机终结点中删除单个部署。 删除单个部署不会影响托管联机终结点中的其他部署:
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%。
在终结点页上,转到“ 详细信息 ”选项卡,然后转到 blue
部署卡。
在部署名称旁边,选择删除图标。
如果不打算使用终结点和部署,则应该删除它们。 删除终结点时,也会删除其所有基础部署。
如果不打算使用终结点和部署,则应该删除它们。 删除终结点时,你还会删除其所有基础部署。
az ml online-endpoint delete --name $ENDPOINT_NAME --yes --no-wait
如果不打算使用终结点和部署,则应该删除它们。 删除终结点时,你还会删除其所有基础部署。
ml_client.online_endpoints.begin_delete(name=online_endpoint_name).result()
转到 Azure 机器学习工作室 。
选择 终结点 。
在列表中选择一个终结点。
选择“删除”。
或者,可以通过转到“ 详细信息 ”选项卡并选择“删除”图标,直接在终结点页中删除托管联机终结点。