联机终结点的安全推出(预览版)

你已在生产环境中部署了一个现有模型,现在想要部署该模型的新版本。 如何在不造成任何中断的情况下推出新的 ML 模型? 合理的回答之一是蓝绿部署,在此方法中,会先将更改推出到一小部分用户/请求者,然后再全面推出,从而将新版本的 Web 服务引入到生产环境。 本文假设你使用的是联机终结点;有关详细信息,请参阅什么是 Azure 机器学习终结点(预览版)?

本文内容:

  • 部署一个名为“blue”(蓝)的新联机终结点,该终结点为模型版本 1 提供服务
  • 扩展此部署,使其能够处理更多请求
  • 将模型版本 2 部署到名为“green”(绿)的终结点,该终结点不接受实时流量
  • 在隔离环境中测试 green 部署
  • 将 10% 的实时流量发送到 green 部署
  • 将所有实时流量完全切换到 green 部署
  • 删除现已不再使用的 v1 blue 部署

重要

此功能目前处于公开预览状态。 此预览版在提供时没有附带服务级别协议,不建议将其用于生产工作负荷。 某些功能可能不受支持或者受限。 有关详细信息,请参阅适用于 Azure 预览版的补充使用条款

先决条件

  • 若要使用 Azure 机器学习,必须有一个 Azure 订阅。 如果没有 Azure 订阅,请在开始操作前先创建一个免费帐户。 立即试用试用版

  • 必须安装并配置 Azure CLI 和 ML 扩展。 有关详细信息,请参阅安装、设置和使用 CLI (v2)(预览版)

  • 必须有一个 Azure 资源组,你(或者你使用的服务主体)在此资源组中需要拥有 Contributor 访问权限。 如果已按照上述文章配置了 ML 扩展,那么你就有了此类资源组。

  • 必须有一个 Azure 机器学习工作区。 如果已按照上述文章配置了 ML 扩展,那么你就有了此类工作区。

  • 如果尚未为 Azure CLI 指定默认设置,则应保存默认设置。 为了避免必须反复传入值,请运行:

az account set --subscription <subscription id>
az configure --defaults workspace=<azureml workspace name> group=<resource group>
export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"
  • (建议)克隆示例存储库,并切换到该存储库的 cli/ 目录:
git clone https://github.com/Azure/azureml-examples
cd azureml-examples/cli

本教程中的命令位于文件 deploy-safe-rollout-online-endpoints.sh 中,YAML 配置文件位于 endpoints/online/managed/sample/ 子目录中。

确认已创建现有部署

可以运行以下命令来查看现有终结点和部署的状态:

az ml online-endpoint show --name $ENDPOINT_NAME 

az ml online-deployment show --name blue --endpoint $ENDPOINT_NAME 

应会看到由 $ENDPOINT_NAME 标识的终结点,以及名为 blue 的部署。

扩展现有部署以处理更多流量

在按使用联机终结点(预览版)部署机器学习模型并为其评分所述进行部署时,你在部署 yaml 文件中将 instance_count 设置为值 1。 可以使用 update 命令进行横向扩展:

az ml online-deployment update --name blue --endpoint $ENDPOINT_NAME --set instance_count=2

注意

请注意,在以上命令中,我们使用 --set 重写部署配置。 你也可以更新 yaml 文件,并使用 --file 输入将它作为输入传递给 update 命令。

部署新模型,但暂时不要向其发送任何流量

创建名为 green 的新部署:

az ml online-deployment create --name green --endpoint $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 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 部署后,为其分配一小部分流量:

az ml online-endpoint update --name $ENDPOINT_NAME --traffic "blue=90 green=10"

现在,green 部署将接收 10% 的请求。

将所有流量发送到新部署

如果你对 green 部署完全满意,请将所有流量切换到该部署。

az ml online-endpoint update --name $ENDPOINT_NAME --traffic "blue=0 green=100"

删除旧部署

az ml online-deployment delete --name blue --endpoint $ENDPOINT_NAME --yes --no-wait

删除终结点和部署

如果今后不再使用该部署,应使用以下命令将其删除:

az ml endpoint delete -n $ENDPOINT_NAME --yes --no-wait

后续步骤