联机终结点的安全推出(预览版)
你已在生产环境中部署了一个现有模型,现在想要部署该模型的新版本。 如何在不造成任何中断的情况下推出新的 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>
现有的联机终结点和部署。 本文假设你的部署与使用联机终结点(预览版)部署机器学习模型并为其评分中所述相符。
如果尚未设置环境变量 $ENDPOINT_NAME,请现在就设置:
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