你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

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

重要

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

有关详细信息,请参阅 Microsoft 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 机器学习注册表中注册模型。 在本例中,存储库中有模型的本地副本,因此只需要将模型发布到工作区中的注册表。 如果打算部署的模型已注册,则可以跳过此步骤。

    MODEL_NAME='heart-classifier-mlflow'
    MODEL_PATH='model'
    az ml model create --name $MODEL_NAME --path $MODEL_PATH --type mlflow_model
    

将模型包部署到 Azure 应用服务

在本部分中,将打包以前注册的 MLflow 模型并将其部署到 Azure 应用服务。

  1. 在 Azure 机器学习外部部署模型需要创建包规范。 若要创建与 Azure 机器学习完全断开连接的包,请在模型配置中指定 copy 模式。 copy 模式告知包复制包内的项目。 以下代码演示如何为模型配置指定复制模式:

    创建包 YAML 规范:

    package-external.yml

    $schema: http://azureml/sdk-2-0/ModelVersionPackage.json
    target_environment: heart-classifier-mlflow-pkg
    inferencing_server: 
        type: azureml_online
    model_configuration:
        mode: copy
    

    提示

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

  2. 开始包操作。

    az ml model package --name $MODEL_NAME --version $MODEL_VERSION --file package-external.yml
    
  3. 包操作的结果是 Azure 机器学习中的环境。 拥有此环境的优点是每个环境都有一个可在外部部署中使用的相应 docker 映像。 映像托管在 Azure 容器注册表中。 以下步骤演示如何获取生成的映像的名称:

    1. 转到 Azure 机器学习工作室

    2. 选择“环境”选项卡。

    3. 选择“自定义环境”选项卡。

    4. 查找名为 heart-classifier-mlflow-package 的环境,这是刚刚创建的包的名称。

    5. 复制 Azure 容器注册表字段中的值。

    A screenshot showing the section where the Azure container registry image name is displayed in Azure Machine Learning studio.

  4. 现在,在应用服务中部署此包。

    1. 转到 Azure 门户并创建新的应用服务资源。

    2. 在创建向导中,选择你使用的订阅和资源组。

    3. 实例详细信息部分中,为应用命名。

    4. “发布”中,选择“Docker 容器”

    5. 对于“操作系统”,选择“Linux”

      A screenshot showing how to configure the app service to deploy the generated docker container image.

    6. 根据需要配置页面的其余部分,然后选择“下一步”

    7. 转到“Docker”选项卡。

    8. 对于“选项”,选择“单个容器”

    9. “映像源”,选择“Azure 容器注册表”

    10. 配置 Azure 容器注册表选项,如下所示:

      1. 对于“注册表”,选择与 Azure 机器学习工作区关联的 Azure 容器注册表。

      2. 对于“映像”,选择在本教程的步骤 3(e) 中找到的映像。

      3. 对于“标记”,选择“最新”

      A screenshot showing the section Docker of the wizard, where the docker image associated with the package is indicated.

    11. 根据需要配置向导的其余部分。

    12. 选择创建。 模型现在部署在创建的应用服务中。

    13. 调用和获取预测的方式取决于使用的推理服务器。 在此示例中,你使用了在路由 /score下创建预测的 Azure 机器学习推理服务器。 有关输入格式和功能的详细信息,请参阅包 azureml-inference-server-http 的详细信息。

    14. 准备请求有效负载。 使用 Azure 机器学习推理服务器部署的 MLflow 模型的格式如下:

      sample-request.json

      {
          "input_data": {
              "columns": [
                  "age", "sex", "cp", "trestbps", "chol", "fbs", "restecg", "thalach", "exang", "oldpeak", "slope", "ca", "thal"
              ],
              "index": [1],
              "data": [
                  [1, 1, 4, 145, 233, 1, 2, 150, 0, 2.3, 3, 0, 2]
              ]
          }
      }
      
    15. 测试模型部署,查看它是否正常工作。

      cat -A sample-request.json | curl http://heart-classifier-mlflow-pkg.azurewebsites.net/score \
          --request POST \
          --header 'Content-Type: application/json' \
          --data-binary @-
      

后续步骤