在 Azure 机器学习外部打包和部署模型(预览版)

可以通过创建模型包(预览版)在 Azure 机器学习外部部署模型以供联机使用。 Azure 机器学习可用于创建模型包,以收集将机器学习模型部署到服务平台所需的所有依赖项。 可以在工作区之间甚至 Azure 机器学习外部移动模型包。 若要了解有关模型包的详细信息,请参阅用于部署的模型包(预览版)

重要

此功能目前处于公开预览状态。 此预览版在提供时没有附带服务级别协议,我们不建议将其用于生产工作负荷。 某些功能可能不受支持或者受限。

有关详细信息,请参阅适用于 Azure 预览版的补充使用条款

本文介绍如何打包模型并将其部署到 Azure 应用服务。

先决条件

在按照本文中的步骤操作之前,请确保满足以下先决条件:

  • Azure 订阅。 如果没有 Azure 订阅,可在开始前创建一个试用帐户。 试用 Azure 机器学习

  • Azure 机器学习工作区。 如果没有,请使用如何管理工作区一文中的步骤创建一个。

    注意

    启用了专用链接的工作区不支持打包模型以便在 Azure 机器学习外部进行部署。

  • Azure 基于角色的访问控制 (Azure RBAC) 用于授予对 Azure 机器学习中的操作的访问权限。 若要执行本文中的步骤,必须为用户帐户分配 Azure 机器学习工作区的所有者或参与者角色,或者分配一个自定义角色。 有关详细信息,请参阅管理对 Azure 机器学习工作区的访问

准备你的系统

按照以下步骤准备系统。

  1. 本文中的示例基于 azureml-examples 存储库中包含的代码示例。 要在无需复制/粘贴 YAML 和其他文件的情况下在本地运行命令,请先克隆存储库,然后将目录更改为以下文件夹:

    git clone https://github.com/Azure/azureml-examples --depth 1
    cd azureml-examples/cli
    

    本文使用 endpoints/online/deploy-with-packages/mlflow-model 文件夹中的示例。

  2. 连接到将在其中完成工作的 Azure 机器学习工作区。

    az account set --subscription <subscription>
    az configure --defaults workspace=<workspace> group=<resource-group> location=<location>
    
  3. 包要求在工作区或 Azure 机器学习注册表中注册模型。 在本例中,存储库中有模型的本地副本,因此只需要将模型发布到工作区中的注册表。 如果打算部署的模型已注册,则可以跳过此步骤。

#<register_model>
MODEL_NAME='heart-classifier-mlflow'
MODEL_PATH='model'
az ml model create --name $MODEL_NAME --path $MODEL_PATH --type mlflow_model
#</register_model>

#<build_package>
az ml model package -n $MODEL_NAME -l latest --file package.yml
#</build_package>

#<endpoint_name>
ENDPOINT_NAME = "heart-classifier"
#</endpoint_name>

# The following code ensures the created deployment has a unique name
ENDPOINT_SUFIX=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w ${1:-5} | head -n 1)
ENDPOINT_NAME="$ENDPOINT_NAME-$ENDPOINT_SUFIX"

#<create_endpoint>
az ml online-endpoint create -n $ENDPOINT_NAME
#</create_endpoint>

#<create_deployment>
az ml online-deployment create -f deployment.yml -e $ENDPOINT_NAME
#</create_deployment>

#<test_deployment>
az ml online-endpoint invoke -n $ENDPOINT_NAME -d with-package -f sample-request.json
#</test_deployment>

#<create_deployment_inline>
az ml online-deployment create --with-package -f model-deployment.yml -e $ENDPOINT_NAME
#</create_deployment_inline>

#<delete_resources>
az ml online-endpoint delete -n $ENDPOINT_NAME --yes
#</delete_resources>

#<build_package_copy>
az ml model package -n $MODEL_NAME -l latest --file package-external.yml
#</build_package_copy>

提示

模式属性使用 copy 指定模型配置时,可以保证在生成的 docker 映像内复制所有模型项目,而不是从 Azure 机器学习模型注册表下载,从而允许在 Azure 机器学习之外实现真正的可移植性。 有关创建包时所有选项的完整规范,请参阅创建包规范

  1. 开始包操作。
#<register_model>
MODEL_NAME='heart-classifier-mlflow'
MODEL_PATH='model'
az ml model create --name $MODEL_NAME --path $MODEL_PATH --type mlflow_model
#</register_model>

#<build_package>
az ml model package -n $MODEL_NAME -l latest --file package.yml
#</build_package>

#<endpoint_name>
ENDPOINT_NAME = "heart-classifier"
#</endpoint_name>

# The following code ensures the created deployment has a unique name
ENDPOINT_SUFIX=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w ${1:-5} | head -n 1)
ENDPOINT_NAME="$ENDPOINT_NAME-$ENDPOINT_SUFIX"

#<create_endpoint>
az ml online-endpoint create -n $ENDPOINT_NAME
#</create_endpoint>

#<create_deployment>
az ml online-deployment create -f deployment.yml -e $ENDPOINT_NAME
#</create_deployment>

#<test_deployment>
az ml online-endpoint invoke -n $ENDPOINT_NAME -d with-package -f sample-request.json
#</test_deployment>

#<create_deployment_inline>
az ml online-deployment create --with-package -f model-deployment.yml -e $ENDPOINT_NAME
#</create_deployment_inline>

#<delete_resources>
az ml online-endpoint delete -n $ENDPOINT_NAME --yes
#</delete_resources>

#<build_package_copy>
az ml model package -n $MODEL_NAME -l latest --file package-external.yml
#</build_package_copy>