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

在批处理终结点中部署用于评分的模型

适用范围:Azure CLI ml 扩展 v2(最新版)Python SDK azure-ai-ml v2(最新版)

批处理终结点允许部署对大量数据运行推理的模型。 这些终结点简化了批量评分的托管模型,因此你可以专注于机器学习而不是基础结构。

在以下情况下,使用批处理终结点部署模型:

  • 您使用需要更长时间进行推断的昂贵模型。
  • 对分布在多个文件中的大量数据执行推理。
  • 不需要低延迟。
  • 你可以利用并行化。

本文介绍如何使用批处理终结点部署机器学习模型,该模型可解决经典 MNIST(修改的国家标准与技术研究所)数字识别问题。 部署的模型对大量数据(如图像文件)执行批处理推理。 该步骤首先对使用 Torch 构建的模型进行批量部署。 此部署将成为终结点中的默认值。 稍后,创建使用 TensorFlow (Keras)生成的模型 的第二个部署 ,测试第二个部署,并将其设置为终结点的默认部署。

Prerequisites

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

克隆示例存储库

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

git clone https://github.com/Azure/azureml-examples --depth 1
cd azureml-examples/cli/endpoints/batch/deploy-models/mnist-classifier

准备你的系统

连接到工作区

首先,连接到在其中工作的 Azure 机器学习工作区。

如果尚未为 Azure CLI 指定默认设置,则应保存默认设置。 若要避免多次输入订阅、工作区、资源组和位置的值,请运行以下代码:

az account set --subscription <subscription>
az configure --defaults workspace=<workspace> group=<resource-group> location=<location>

创建计算

批处理终结点在计算群集上运行且支持 Azure 机器学习计算群集 (AmlCompute)Kubernetes 群集。 群集是一种共享资源,因此一个群集可以托管一个或多个批处理部署(如果需要,还可以托管其他工作负载)。

创建名为 batch-cluster 的计算,如以下代码所示。 根据需要进行调整,并使用 azureml:<your-compute-name> 引用计算。

az ml compute create -n batch-cluster --type amlcompute --min-instances 0 --max-instances 5

注意

此时不会为计算付费,因为群集在调用批处理终结点并提交批处理评分作业之前仍为 0 个节点。 有关计算成本的详细信息,请参阅管理和优化 AmlCompute 的成本

创建批处理终结点

批处理终结点是客户端调用以触发批处理评分作业的 HTTPS 终结点。 批处理评分作业对多个输入进行评分。 批处理部署是托管执行批处理评分的模型的一组计算资源(或批处理推理)。 一个批处理终结点可以包含多个批处理部署。 有关批处理终结点的详细信息,请参阅什么是批处理终结点?

提示

其中一个批处理部署充当该终结点的默认部署。 调用终结点时,默认部署将执行批处理评分。 有关批处理终结点和部署的详细信息,请参阅 批处理终结点和批处理部署

  1. 命名终结点。 终结点的名称在 Azure 区域中必须唯一,因为该名称包含在终结点的 URI 中。 例如,mybatchendpoint 中只能有一个名为 westus2 的批处理终结点。

    将终结点的名称放在变量中,以便稍后轻松引用它。

    ENDPOINT_NAME="mnist-batch"
    
  2. 配置批处理终结点

    以下 YAML 文件定义了批处理终结点。 将此文件与 CLI 命令一起使用,以便 创建批处理终结点

    endpoint.yml

    $schema: https://azuremlschemas.azureedge.net/latest/batchEndpoint.schema.json
    name: mnist-batch
    description: A batch endpoint for scoring images from the MNIST dataset.
    tags:
      type: deep-learning
    

    下表描述了终结点的关键属性。 有关完整的批处理终结点 YAML 架构,请参阅 CLI (v2) 批处理终结点 YAML 架构

    密钥 说明
    name 批处理终结点的名称。 在 Azure 区域级别需是唯一的。
    description 批处理终结点的说明。 此属性是可选的。
    tags 要包含在终结点中的标记。 此属性是可选的。
  3. 创建终结点:

    运行此代码以创建批处理终结点。

    az ml batch-endpoint create --file endpoint.yml  --name $ENDPOINT_NAME
    

创建批处理部署

模型部署是一组资源,在承载执行实际推理的模型时需要它。 若要创建批处理模型部署,你需要具备以下项:

  • 工作区中已注册的模型
  • 用于为模型评分的代码
  • 安装了模型的依赖项的环境
  • 预先创建的计算和资源设置
  1. 首先,注册要部署的模型 - 用于热门数字识别问题 (MNIST) 的 Torch 模型。 批处理部署只能部署已在工作区中注册的模型。 如果要部署的模型已注册,则可以跳过此步骤。

    提示

    模型与部署关联,而不与终结点关联。 这意味着,只要不同的模型(或模型版本)部署在不同的部署中,单个终结点就可以在同一终结点下提供不同的模型(或模型版本)。

    MODEL_NAME='mnist-classifier-torch'
    az ml model create --name $MODEL_NAME --type "custom_model" --path "deployment-torch/model"
    
  2. 现在可以创建评分脚本了。 批处理部署需要一个评分脚本,该脚本指示应如何执行给定的模型,以及如何处理输入数据。 批处理终结点支持使用 Python 创建的脚本。 在本例中,你需要部署一个模型来读取表示数字的图像文件并输出相应的数字。 评分脚本如下所示:

    注意

    对于 MLflow 模型,Azure 机器学习会自动生成评分脚本,因此无需提供评分脚本。 如果你的模型是 MLflow 模型,则可以跳过此步骤。 有关批处理终结点如何与 MLflow 模型配合工作的详细信息,请参阅在批处理部署中使用 MLflow 模型一文。

    警告

    如果要在批处理终结点下部署自动化机器学习(AutoML)模型,请注意,AutoML 提供的评分脚本仅适用于联机终结点,不适用于批处理执行。 有关如何为批处理部署创建评分脚本的信息,请参阅创建批处理部署的评分脚本

    deployment-torch/code/batch_driver.py

    import os
    import pandas as pd
    import torch
    import torchvision
    import glob
    from os.path import basename
    from mnist_classifier import MnistClassifier
    from typing import List
    
    
    def init():
        global model
        global device
    
        # AZUREML_MODEL_DIR is an environment variable created during deployment
        # It is the path to the model folder
        model_path = os.environ["AZUREML_MODEL_DIR"]
        model_file = glob.glob(f"{model_path}/*/*.pt")[-1]
    
        model = MnistClassifier()
        model.load_state_dict(torch.load(model_file))
        model.eval()
    
        device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
    
    
    def run(mini_batch: List[str]) -> pd.DataFrame:
        print(f"Executing run method over batch of {len(mini_batch)} files.")
    
        results = []
        with torch.no_grad():
            for image_path in mini_batch:
                image_data = torchvision.io.read_image(image_path).float()
                batch_data = image_data.expand(1, -1, -1, -1)
                input = batch_data.to(device)
    
                # perform inference
                predict_logits = model(input)
    
                # Compute probabilities, classes and labels
                predictions = torch.nn.Softmax(dim=-1)(predict_logits)
                predicted_prob, predicted_class = torch.max(predictions, axis=-1)
    
                results.append(
                    {
                        "file": basename(image_path),
                        "class": predicted_class.numpy()[0],
                        "probability": predicted_prob.numpy()[0],
                    }
                )
    
        return pd.DataFrame(results)
    
  3. 创建运行批处理部署的环境。 环境应该包括批处理终结点所需的 azureml-coreazureml-dataset-runtime[fuse] 包以及运行你的代码所需的任何依赖项。 在本例中,依赖项已捕获在 conda.yaml 文件中:

    deployment-torch/environment/conda.yaml

    name: mnist-env
    channels:
      - conda-forge
    dependencies:
      - python=3.8.5
      - pip<22.0
      - pip:
        - torch==1.13.0
        - torchvision==0.14.0
        - pytorch-lightning
        - pandas
        - azureml-core
        - azureml-dataset-runtime[fuse]
    

    重要说明

    azureml-coreazureml-dataset-runtime[fuse] 是批量部署所必需的,应包含在环境依赖项中。

    按如下所示指定环境:

    环境定义将作为匿名环境包含在部署定义本身中。 你将在部署的以下行中看到:

    environment:
      name: batch-torch-py38
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    
  4. 转到侧菜单中的“ 环境 ”选项卡。

  5. 选择 “自定义环境>创建”。

    1. 输入环境的名称,在本例中为 torch-batch-env

    2. 对于“选择环境源”,请选择“使用具有可选 conda 文件的现有 docker 映像”。

    3. 对于“容器注册表映像路径”中,输入“”。mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04

    4. 选择“下一步”转到“自定义”部分

    5. 将文件的内容 deployment-torch/environment/conda.yaml 从 GitHub 存储库复制到门户中。

  6. 选择 “下一步 ”,直到到达“审阅页面”。

  7. 选择“ 创建 ”并等待环境准备就绪。


    警告

    批量部署不支持精心设计的环境。 需要指定自己的环境。 始终可以使用特选环境的基础映像作为你自己的环境来简化过程。

  8. 创建部署定义

    deployment-torch/deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json
    name: mnist-torch-dpl
    description: A deployment using Torch to solve the MNIST classification dataset.
    endpoint_name: mnist-batch
    type: model
    model:
      name: mnist-classifier-torch
      path: model
    code_configuration:
      code: code
      scoring_script: batch_driver.py
    environment:
      name: batch-torch-py38
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    compute: azureml:batch-cluster
    resources:
      instance_count: 1
    settings:
      max_concurrency_per_instance: 2
      mini_batch_size: 10
      output_action: append_row
      output_file_name: predictions.csv
      retry_settings:
        max_retries: 3
        timeout: 30
      error_threshold: -1
      logging_level: info
    

    下表描述了批处理部署的关键属性。 有关完整的批处理部署 YAML 架构,请参阅 CLI (v2) 批处理部署 YAML 架构

    密钥 说明
    name 部署的名称。
    endpoint_name 要在其下创建部署的终结点的名称。
    model 用于批量评分的模型。 该示例使用 path 以内联方式定义模型。 此定义允许使用自动生成的名称和版本自动上传和注册模型文件。 有关更多选项,请参阅模型架构。 对于生产方案,最佳做法应该是单独创建模型并在此处引用模型。 若要引用现有模型,请使用 azureml:<model-name>:<model-version> 语法。
    code_configuration.code 包含用于对模型进行评分的所有 Python 源代码的本地目录。
    code_configuration.scoring_script code_configuration.code 目录中的 Python 文件。 此文件必须具有 init() 函数和 run() 函数。 对于任何成本较高或者一般性的准备工作(例如将模型加载到内存中),请使用 init() 函数。 init() 在进程开始时只调用一次。 使用 run(mini_batch) 为每个项评分;mini_batch 值是文件路径列表。 run() 函数应返回 Pandas 数据帧或数组。 每个返回的元素指示 mini_batch 中成功运行一次输入元素。 有关如何创作评分脚本的详细信息,请参阅了解评分脚本
    environment 用于为模型评分的环境。 该示例使用 conda_fileimage 以内联方式定义环境。 依赖项 conda_file 安装在 image 之上。 环境将自动使用自动生成的名称和版本进行注册。 有关更多选项,请参阅环境架构。 对于生产方案,最佳做法应该是单独创建环境并在此处引用环境。 若要引用现有环境,请使用 azureml:<environment-name>:<environment-version> 语法。
    compute 用于运行批量评分的计算。 该示例使用在开头部分创建的 batch-cluster,并使用 azureml:<compute-name> 语法引用它。
    resources.instance_count 每个批量评分作业要使用的实例数。
    settings.max_concurrency_per_instance 每个实例的并行 scoring_script 运行的最大数量。
    settings.mini_batch_size scoring_script 可以在一次 run() 调用中处理的文件数。
    settings.output_action 应如何在输出文件中组织输出。 append_row 将所有 run() 返回的输出结果合并到一个名为 output_file_name 的单个文件中。 summary_only 不会合并输出结果,而只会计算 error_threshold
    settings.output_file_name append_row output_action 批量评分输出文件的名称。
    settings.retry_settings.max_retries 失败的 scoring_scriptrun() 的最大尝试次数。
    settings.retry_settings.timeout 对小批量进行评分的 scoring_scriptrun() 超时(以秒计)。
    settings.error_threshold 应忽略的输入文件评分失败次数。 如果整个输入的错误计数超出此值,则批量评分作业将终止。 此示例使用 -1,指示允许失败任意次,而不会终止批量评分作业。
    settings.logging_level 日志详细程度。 值(以详细程度递增的顺序排列)为:WARNING、INFO 和 DEBUG。
    settings.environment_variables 要针对每个批量评分作业设置的环境变量名称/值对字典。
  9. 转到侧菜单中的 “终结点 ”选项卡。

    1. 选择选项卡“批处理终结点”“创建”>

    2. 为终结点命名,在本例中为 mnist-batch。 可以配置其余字段或将其留空。

    3. 选择“下一步”转到“模型”部分

    4. 选择模型 mnist-classifier-torch

    5. 选择“下一步”转到“部署”页

    6. 为部署命名。

  10. 对于 输出操作,请确保已选择 追加行

    1. 对于“输出文件名”,确保批量评分输出文件是所需的文件。 默认为 predictions.csv

    2. 对于“微批大小”,调整将包含在每个微批中的文件的大小。 此大小控制评分脚本每批接收的数据量。

    3. 对于“评分超时(秒)”,确保指定足够的时间,使部署能够为给定的文件批评分。 如果增加文件数,则通常也需要增大超时值。 更昂贵的模型(如基于深度学习的模型)可能需要此字段中的高值。

    4. 对于“每个实例的最大并发性”,配置你要为部署中的每个计算实例使用的执行程序数。 在此处指定较大的数字可以保证更高的并行度,但也会增大计算实例上的内存压力。 请连同“微批大小”一起优化此值

    5. 完成后,选择“下一步”以转到“代码 + 环境”页

    6. 对于“选择用于推理的评分脚本”,浏览以查找并选择评分脚本文件 deployment-torch/code/batch_driver.py

    7. 在“选择环境”部分中,选择之前创建的环境 torch-batch-env

    8. 选择“下一步”以转到“计算”页。

    9. 选择在上一步中创建的计算群集。

      警告

      批量部署支持 Azure Kubernetes 群集,但仅当使用 Azure 机器学习 CLI 或 Python SDK 创建时。

    10. 对于“实例计数”,输入你要为部署使用的计算实例数。 在本例中,使用 2。

    11. 选择“下一页”。

  11. 创建部署:

    运行以下代码以在批处理终结点下创建一个批处理部署,并将其设置为默认部署。

    az ml batch-deployment create --file deployment-torch/deployment.yml --endpoint-name $ENDPOINT_NAME --set-default
    

    提示

    --set-default 参数将新创建的部署设置为终结点的默认部署。 这是一种简便的方法来创建终结点的新默认部署,尤其对于首次创建部署。 对于生产方案,最佳做法可能是创建一个新部署(而不将其设置为默认部署)。 验证部署是否按预期工作,稍后更新默认部署。 有关实现此过程的详细信息,请参阅部署新模型部分。

  12. 检查批处理终结点和部署详细信息。

    使用 show 检查终结点和部署详细信息。 若要检查批处理部署,请运行以下代码:

    DEPLOYMENT_NAME="mnist-torch-dpl"
    az ml batch-deployment show --name $DEPLOYMENT_NAME --endpoint-name $ENDPOINT_NAME
    
  13. 选择Batch 终结点选项卡。

    1. 选择要查看的批处理终结点。

    2. 终结点的“详细信息”页显示终结点的详细信息以及终结点中提供的所有部署

      检查批处理终结点和部署详细信息的屏幕截图。

运行批量终结点并访问结果

了解数据流

在运行批处理终结点之前,请了解数据流经系统的方式:

输入:要处理的数据(评分)。 这包括:

  • 存储在 Azure 存储中的文件(Blob 存储、Data Lake)
  • 包含多个文件的文件夹
  • Azure 机器学习中的已注册数据集

处理:已部署的模型以批处理(微型批处理)处理输入数据并生成预测。

输出:模型的结果,存储为 Azure 存储中的文件。 默认情况下,输出将保存到工作区的默认 Blob 存储,但可以指定其他位置。

调用批处理终结点

调用批处理终结点会触发批量评分作业。 name作业在调用响应中返回,并跟踪批处理评分进度。 指定输入数据路径,以便终结点可以找到要评分的数据。 以下示例演示如何通过 Azure 存储帐户中存储的 MNIST 数据集的示例数据启动新作业。

可以使用 Azure CLI、Azure 机器学习 SDK 或 REST 终结点来运行和调用批处理终结点。 有关这些选项的详细信息,请参阅 为批处理终结点创建作业和输入数据

注意

并行化的工作原理是什么?

批量部署在文件级别分配工作。 例如,如果一个文件夹包含 100 个文件,按 10 个文件的小批量划分,则会得到 10 个批次,每批 10 个文件。 无论文件大小如何,都会发生这种情况。 如果文件太大而无法以小型批处理进行处理,请将它们拆分为较小的文件,以提高并行度或减少每个小型批处理的文件数。 批处理部署当前不考虑文件大小分布中的偏差。

JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --input-type uri_folder --query name -o tsv)

批处理终结点支持读取位于不同位置的文件或文件夹。 要详细了解支持的类型以及如何指定它们,请参阅访问批处理终结点作业中的数据

监视批处理作业执行进度

批处理评分作业需要时间来处理所有输入。

以下代码检查作业状态,并输出 Azure 机器学习工作室的链接以获取更多详细信息。

az ml job show -n $JOB_NAME --web

检查批量评分结果

作业输出存储在云存储中,可以在工作区的默认 Blob 存储中,也可以在你指定的存储中。 若要了解如何更改默认值,请参阅配置输出位置。 通过以下步骤,可以在作业完成时在 Azure 存储资源管理器中查看评分结果:

  1. 运行以下代码,在 Azure 机器学习工作室中打开批量评分作业。 invoke 的响应中还包含以 interactionEndpoints.Studio.endpoint 值的形式提供的作业工作室链接。

    az ml job show -n $JOB_NAME --web
    
  2. 在作业图中,选择 batchscoring 步骤。

  3. 选择“输出 + 日志”选项卡,然后选择“显示数据输出”

  4. 在“数据输出”中,选择图标以打开“存储资源管理器”

    显示在工作室中查看数据输出位置的屏幕截图。

    存储资源管理器中的评分结果类似以下示例页:

    评分输出的屏幕截图。

配置输出位置

默认情况下,批处理评分结果存储在工作区的默认 Blob 存储中的一个文件夹里,该文件夹以作业命名(系统生成的 GUID)。 在调用批处理终结点时配置输出位置。

使用 output-path 配置 Azure 机器学习已注册的数据集中的任何文件夹。 指定文件夹时,--output-path 的语法与 --input 的语法相同,即都为 azureml://datastores/<datastore-name>/paths/<path-on-datastore>/。 使用 --set output_file_name=<your-file-name> 配置新的输出文件名。

OUTPUT_FILE_NAME=predictions_`echo $RANDOM`.csv
OUTPUT_PATH="azureml://datastores/workspaceblobstore/paths/$ENDPOINT_NAME"

JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --output-path $OUTPUT_PATH --set output_file_name=$OUTPUT_FILE_NAME --query name -o tsv)

警告

必须使用唯一的输出位置。 如果输出文件存在,批处理评分作业将失败。

重要说明

与输入不同,输出只能存储在 blob 存储帐户上运行的 Azure 机器学习数据存储中。

覆盖每个作业的部署配置

调用批处理端点时,可以更改某些配置设置,以优化利用计算资源并提高性能。 当你需要不同作业的不同设置而不永久修改部署时,此功能非常有用。

可以重写哪些设置?

可以按作业配置以下设置:

设置 何时使用 示例方案
实例计数 当数据量不同时 对较大的数据集使用更多实例(10 个实例用于 100 万个文件,2 个实例用于 100,000 个文件)。
小批量大小 需要平衡吞吐量和内存使用量时 对大型图像使用较小的批处理(10-50 个文件),对小型文本文件使用更大的批(100-500 个文件)。
最大重试次数 数据质量变化时 用于噪声数据的重试次数较高(5-10);用于干净数据的重试次数较低(1-3)
超时 处理时间因数据类型而异 复杂模型的超时时间较长(300 秒):简单模型的超时时间较短(30 秒)
错误阈值 需要不同的故障容错级别时 关键作业的严格阈值(-1):实验性作业的宽大阈值 (10%)

如何替代设置

JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --mini-batch-size 20 --instance-count 5 --query name -o tsv)

将部署添加到终结点

配置了一个包含部署的批处理终结点后,可以继续微调模型并添加新的部署。 在同一个终结点下开发和部署新模型时,批处理终结点将继续为默认部署提供服务。 部署不能相互影响。

在本示例中,你将添加第二个部署,该部署使用 Keras 和 TensorFlow 构建的模型来解决相同的 MNIST 问题

添加第二个部署

  1. 为批处理部署创建环境。 包括代码运行所需的任何依赖项。 添加库 azureml-core,因为批处理部署是必需的。 以下环境定义包括使用 TensorFlow 运行模型所需的库。

    环境定义将作为匿名环境包含在部署定义本身中。

    environment:
      name: batch-tensorflow-py38
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    
  2. 将文件的内容 deployment-keras/environment/conda.yaml 从 GitHub 存储库复制到门户中。

    1. 选择“下一步”,直到到达“查看”页面

    2. 选择“创建”,并等待环境可供使用


    使用的 conda 文件如下所示:

    deployment-keras/environment/conda.yaml

    name: tensorflow-env
    channels:
      - conda-forge
    dependencies:
      - python=3.8.5
      - pip
      - pip:
        - pandas
        - tensorflow
        - pillow
        - azureml-core
        - azureml-dataset-runtime[fuse]
    
  3. 创建模型的评分脚本:

    deployment-keras/code/batch_driver.py

    import os
    import numpy as np
    import pandas as pd
    import tensorflow as tf
    from typing import List
    from os.path import basename
    from PIL import Image
    from tensorflow.keras.models import load_model
    
    
    def init():
        global model
    
        # AZUREML_MODEL_DIR is an environment variable created during deployment
        model_path = os.path.join(os.environ["AZUREML_MODEL_DIR"], "model")
    
        # load the model
        model = load_model(model_path)
    
    
    def run(mini_batch: List[str]) -> pd.DataFrame:
        print(f"Executing run method over batch of {len(mini_batch)} files.")
    
        results = []
        for image_path in mini_batch:
            data = Image.open(image_path)
            data = np.array(data)
            data_batch = tf.expand_dims(data, axis=0)
    
            # perform inference
            pred = model.predict(data_batch)
    
            # Compute probabilities, classes and labels
            pred_prob = tf.math.reduce_max(tf.math.softmax(pred, axis=-1)).numpy()
            pred_class = tf.math.argmax(pred, axis=-1).numpy()
    
            results.append(
                {
                    "file": basename(image_path),
                    "class": pred_class[0],
                    "probability": pred_prob,
                }
            )
    
        return pd.DataFrame(results)
    
  4. 创建部署定义

    deployment-keras/deployment.yml

    $schema: https://azuremlschemas.azureedge.net/latest/modelBatchDeployment.schema.json
    name: mnist-keras-dpl
    description: A deployment using Keras with TensorFlow to solve the MNIST classification dataset.
    endpoint_name: mnist-batch
    type: model
    model: 
      name: mnist-classifier-keras
      path: model
    code_configuration:
      code: code
      scoring_script: batch_driver.py
    environment:
      name: batch-tensorflow-py38
      image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
      conda_file: environment/conda.yaml
    compute: azureml:batch-cluster
    resources:
      instance_count: 1
    settings:
      max_concurrency_per_instance: 2
      mini_batch_size: 10
      output_action: append_row
      output_file_name: predictions.csv
    
  5. 选择 “下一步 ”以转到“代码 + 环境”页。

    1. 对于“选择用于推理的评分脚本”,浏览以选择评分脚本文件 deployment-keras/code/batch_driver.py

    2. 对于“选择环境”,请选择在上一步中创建的环境

    3. 选择“下一页”。

    4. 在“计算”页面上,选择在上一步骤中创建的计算群集

    5. 对于“实例计数”,输入你要为部署使用的计算实例数。 在本例中,使用 2。

    6. 选择“下一页”。

  6. 创建部署:

    运行以下代码以在批处理终结点下创建一个批处理部署,并将其设置为默认部署。

    az ml batch-deployment create --file deployment-keras/deployment.yml --endpoint-name $ENDPOINT_NAME
    

    提示

    在本例中缺少 --set-default 参数。 对于生产方案,最佳做法是创建一个新部署(而不将其设置为默认部署)。 然后验证它,并在以后更新默认部署。

测试非默认批处理部署

若要测试新的非默认部署,需要知道你要运行的部署的名称。

DEPLOYMENT_NAME="mnist-keras-dpl"
JOB_NAME=$(az ml batch-endpoint invoke --name $ENDPOINT_NAME --deployment-name $DEPLOYMENT_NAME --input https://azuremlexampledata.blob.core.windows.net/data/mnist/sample --input-type uri_folder --query name -o tsv)

请注意 --deployment-name 用于指定要执行的部署。 使用此参数可以对非默认部署执行 invoke 操作,而不更新批处理终结点的默认部署。

更新默认批处理部署

尽管可以在终结点内调用特定部署,但通常需要调用终结点本身,让终结点决定使用哪个部署 - 默认部署。 可以更改默认部署(进而更改处理部署的模型),而无需更改与调用终结点的用户之间的协定。 使用以下代码更新默认部署:

az ml batch-endpoint update --name $ENDPOINT_NAME --set defaults.deployment_name=$DEPLOYMENT_NAME

删除批处理端点和部署

如果不需要旧的批处理部署,请运行以下代码将其删除。 该 --yes 标志确认删除。

az ml batch-deployment delete --name mnist-torch-dpl --endpoint-name $ENDPOINT_NAME --yes

运行以下代码以删除批处理终结点及其基础部署。 系统不会删除批处理评分作业。

az ml batch-endpoint delete --name $ENDPOINT_NAME --yes