使用联机终结点部署机器学习模型并对其进行评分

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

本文介绍如何将模型部署到联机终结点以用于实时推理。 首先在本地计算机上部署一个模型以调试任何错误。 然后,在 Azure 中部署并测试模型。 你还将了解如何查看部署日志和监视服务级别协议 (SLA)。 在本文结束时,你将拥有一个可缩放的 HTTPS/REST 终结点,可用于实时推理。

联机终结点是用于实时推理的终结点。 有两种类型的联机终结点:托管联机终结点和 Kubernetes 联机终结点。 有关终结点的详细信息以及托管联机终结点与 Kubernetes 联机终结点之间的差异,请参阅什么是 Azure 机器学习终结点?

托管联机终结点有助于以统包方式部署 ML 模型。 托管联机终结点在 Azure 中以一种可缩放的、完全托管的方式使用功能强大的 CPU 和 GPU 计算机。 托管联机终结点负责处理、缩放、保护和监视你的模型,使你没有设置和管理底层基础结构的开销。

本文档中的主要示例使用托管联机终结点进行部署。 若要改用 Kubernetes,请参阅本文档中与托管联机终结点讨论内联的注释。

先决条件

适用于:Azure CLI ml 扩展 v2(当前版本)

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

  • Azure 基于角色的访问控制 (Azure RBAC) 用于授予对 Azure 机器学习中的操作的访问权限。 若要执行本文中的步骤,必须为用户帐户分配 Azure 机器学习工作区的所有者或参与者角色,或者分配一个允许 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/* 的自定义角色。 如果使用工作室创建/管理联机终结点/部署,则需要资源组所有者提供的附加权限“Microsoft.Resources/deployments/write”。 有关详细信息,请参阅管理对 Azure 机器学习工作区的访问

  • (可选)若要在本地部署,必须在本地计算机上安装 Docker 引擎。 强烈建议选择此选项,以便更轻松地调试问题。

用于部署的虚拟机配额分配

对于托管联机终结点,Azure 机器学习会保留 20% 的计算资源,以便在某些 VM SKU 上执行升级。 如果你在某个部署中请求给定数量的实例,则必须有 ceil(1.2 * number of instances requested for deployment) * number of cores for the VM SKU 配额可用,以避免收到错误。 例如,如果在部署中请求 Standard_DS3_v2 VM(带有 4 个内核)的 10 个实例,则应该为 48 个内核 (12 instances * 4 cores) 提供可用配额。 若要查看使用情况和请求增加配额,请参阅在 Azure 门户中查看使用情况和配额

某些 VM SKU 可以免除额外的配额预留。 要查看完整列表,请参阅《托管联机终结点 SKU 列表》。

Azure 机器学习提供了一个共享配额池,所有用户都可以从中访问配额来执行有限时间的测试。 使用工作室将 Llama-2、Phi、Nemotron、Mistral、Dolly 和 Deci-DeciLM 模型从模型目录部署到托管联机终结点时,Azure 机器学习允许你短时间内访问此共享配额。

准备你的系统

设置环境变量。

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

az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>

克隆示例存储库

若要按照本文的说明进行操作,请先克隆示例存储库 (azureml-examples)。 然后,运行以下代码,以转至存储库的 cli/ 目录:

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

提示

使用 --depth 1 仅克隆最新提交到存储库的内容,从而减少完成操作所需的时间。

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

注意

Kubernetes 联机终结点的 YAML 配置文件位于 endpoints/online/kubernetes/ 子目录中。

定义终结点

若要定义终结点,需要指定:

  • 终结点名称:终结点的名称。 在 Azure 区域中必须具有唯一性。 有关命名规则的详细信息,请参阅终结点限制
  • 身份验证模式:终结点的身份验证方法。 在基于密钥的身份验证和基于 Azure 机器学习令牌的身份验证之间进行选择。 密钥不会过期,但令牌会过期。 有关身份验证的详细信息,请参阅向联机终结点进行身份验证
  • (可选)可以向终结点添加说明和标记。

设置终结点名称

要设置你的终结点名称,请运行以下命令(将 YOUR_ENDPOINT_NAME 替换为唯一名称)。

对于 Linux,请运行以下命令:

export ENDPOINT_NAME="<YOUR_ENDPOINT_NAME>"

配置终结点

以下代码段显示了 endpoints/online/managed/sample/endpoint.yml 文件:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineEndpoint.schema.json
name: my-endpoint
auth_mode: key

下表描述了 YAML 格式的终结点的参考资料。 若要了解如何指定这些属性,请参阅联机终结点 YAML 参考。 如需了解与托管终结点相关的限制,请参阅联机终结点限制

密钥 说明
$schema (可选)YAML 架构。 若要查看 YAML 文件的所有可用选项,可在浏览器中查看上述代码片段中的架构。
name 终结点的名称。
auth_mode 使用 key 可执行基于密钥的身份验证。 使用 aml_token 可执行基于 Azure 机器学习令牌的身份验证。 若要获取最新的令牌,请使用 az ml online-endpoint get-credentials 命令。

定义部署

部署是一组资源,用于承载执行实际推理的模型。 若要部署模型,必须具备:

  • 模型文件(或者已在工作区中注册的模型的名称和版本)。 本示例中有一个执行回归的 scikit-learn 模型。
  • 评分脚本,即根据给定输入请求执行模型的代码。 评分脚本接收提交到已部署的 Web 服务的数据,并将此数据传递给模型。 然后,该脚本执行模型并将其响应返回给客户端。 评分脚本特定于你的模型,必须理解模型期望作为输入和作为输出返回的数据。 在此示例中,我们有一个 score.py 文件。
  • 运行模型的环境。 环境可以是包含 Conda 依赖项的 Docker 映像,也可以是 Dockerfile。
  • 用于指定实例类型和缩放容量的设置。

下表介绍了部署的关键属性:

属性 描述
名称 部署的名称。
终结点名称 要在其下创建部署的终结点的名称。
型号 要用于部署的模型。 此值可以是对工作区中现有版本受控模型的引用,也可以是对内联模型规范的引用。
代码路径 本地开发环境中目录的路径,其中包含用于为模型评分的所有 Python 源代码。 可以使用嵌套目录和包。
评分脚本 源代码目录中评分文件的相对路径。 此 Python 代码必须具有 init() 函数和 run() 函数。 在创建或更新模型后将调用 init() 函数(例如,可以使用该函数在内存中缓存模型)。 每次调用终结点时,都将调用 run() 函数来执行实际评分和预测。
环境 用于承载模型和代码的环境。 此值可以是对工作区中现有版本受控环境的引用,也可以是对内联环境规范的引用。
实例类型 用于部署的 VM 大小。 有关支持的大小列表,请参阅托管联机终结点 SKU 列表
实例计数 用于部署的实例数。 请根据预期的工作负载确定值。 为实现高可用性,建议将值至少设置为 3。 我们保留额外的 20% 来执行升级。 有关详细信息,请参阅部署的虚拟机配额分配

注意

  • 使用安全修补程序和/或其他恢复操作对部署后面的实例进行修复后,部署可以随时再次引用模型和容器映像(如环境中所定义)。 如果在 Azure 容器注册表中使用已注册的模型或容器映像进行部署,并移除了模型或容器映像,则重置映像后,依赖于这些资产的部署可能会失败。 如果移除了模型或容器映像,请确保使用备用模型或容器映像重新创建或更新依赖的部署。
  • 仅当终结点标识有权通过 Microsoft Entra 身份验证和 Azure RBAC 访问容器注册表时,环境所引用的容器注册表才能是专用的。 出于同样的原因,不支持 Azure 容器注册表以外的专用 Docker 注册表。

配置部署

以下代码片段显示了 endpoints/online/managed/sample/blue-deployment.yml 文件,其中包含配置部署所需的所有输入:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json
name: blue
endpoint_name: my-endpoint
model:
  path: ../../model-1/model/
code_configuration:
  code: ../../model-1/onlinescoring/
  scoring_script: score.py
environment: 
  conda_file: ../../model-1/environment/conda.yaml
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest
instance_type: Standard_DS3_v2
instance_count: 1

注意

blue-deployment.yml 文件中,我们指定了以下部署属性:

  • model - 在此示例中,我们使用 path 指定了内联模型属性。 将自动上传模型文件并使用自动生成的名称注册。
  • environment - 在此示例中,我们具有包含 path 的内联定义。 我们将为映像使用 environment.docker.image。 将在映像之上安装 conda_file 依赖项。

在部署期间,本地文件(如评分模型的 Python 源)是从开发环境上传的。

有关 YAML 架构的详细信息,请参阅联机终结点 YAML 参考

注意

使用 Kubernetes 而不是托管终结点作为计算目标:

  1. 使用 Azure 机器学习工作室创建 Kubernetes 群集并将其作为计算目标附加到 Azure 机器学习工作区。
  2. 使用终结点 YAML 而不是托管终结点 YAML,将 Kubernetes 指定为目标。 需要编辑 YAML,以将 target 的值更改为已注册的计算目标的名称。 可以使用此 deployment.yaml,它具有其他适用于 Kubernetes 部署的属性。

本文中使用的所有命令(除了可选 SLA 监视和 Azure Log Analytics 集成)可以与托管终结点或 Kubernetes 终结点一起使用。

单独注册模型和环境

在此示例中,我们以内联方式指定 path(从何处上传文件)。 CLI 会自动上传文件并注册模型和环境。 适用于生产的最佳做法是注册模型和环境,并在 YAML 中指定已注册的名称和版本。 使用格式 model: azureml:my-model:1environment: azureml:my-env:1

若要执行注册,可以将 modelenvironment 的 YAML 定义提取到单独的 YAML 文件中,并使用命令 az ml model createaz ml environment create。 若要详细了解这些命令,请运行 az ml model create -haz ml environment create -h

有关将模型注册为资产的详细信息,请参阅使用 CLI 在机器学习中将模型注册为资产。 有关创建环境的详细信息,请参阅使用 CLI 和 SDK (v2) 管理 Azure 机器学习环境

使用不同的 CPU 和 GPU 实例类型及映像

blue-deployment.yml 文件中的上述定义使用常规用途类型 Standard_DS3_v2 实例和非 GPU Docker 映像 mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest。 对于 GPU 计算,应选择 GPU 计算类型 SKU 和 GPU Docker 映像。

可以在托管联机终结点支持的 VM SKU 中查看支持的常规用途类型和 GPU 实例类型。 有关 Azure 机器学习 CPU 和 GPU 基础映像的列表,请参阅 Azure 机器学习基础映像

注意

若要使用 Kubernetes 而不是托管终结点作为计算目标,请参阅 Kubernetes 计算目标简介

确定与 AZUREML_MODEL_DIR 相关的模型路径

在将模型部署到 Azure 机器学习时,作为部署配置的一部分,需要指定要部署的模型的位置。 在 Azure 机器学习中,使用 AZUREML_MODEL_DIR 环境变量跟踪模型的路径。 通过标识与 AZUREML_MODEL_DIR 相关的模型路径,可以部署本地存储在计算机上的一个或多个模型,或部署在 Azure 机器学习工作区中注册的模型。

为了便于说明,我们引用了以下适用于前两种情况的本地文件夹结构,即部署单个模型或部署本地存储的多个模型:

A screenshot showing a folder structure containing multiple models.

在部署中使用单个本地模型

要使用部署中本地计算机上的单个模型,请在部署 YAML 中将 path 指定为 model。 下面是带有路径 /Downloads/multi-models-sample/models/model_1/v1/sample_m1.pkl 的部署 YAML 示例:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json 
name: blue 
endpoint_name: my-endpoint 
model: 
    path: /Downloads/multi-models-sample/models/model_1/v1/sample_m1.pkl 
code_configuration: 
    code: ../../model-1/onlinescoring/ 
    scoring_script: score.py 
environment:  
    conda_file: ../../model-1/environment/conda.yml 
    image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest 
instance_type: Standard_DS3_v2 
instance_count: 1 

创建部署后,环境变量 AZUREML_MODEL_DIR 将指向存储模型的 Azure 中的存储位置。 例如,/var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1 将包含模型 sample_m1.pkl

在评分脚本(score.py)中,可以在 init() 函数中加载模型(在本例中为 sample_m1.pkl):

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "sample_m1.pkl") 
    model = joblib.load(model_path) 

在部署中使用多个本地模型

尽管 Azure CLI、Python SDK 和其他客户端工具支持你在部署定义中为每个部署仅指定一个模型,但仍可以通过将包含所有模型的模型文件夹注册为文件或子目录,在部署中使用多个模型。

在前面的示例文件夹结构中,你会注意到 models 文件夹中存在多个模型。 在部署 YAML 中,可以将路径指定为 models 文件夹,如下所示:

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json 
name: blue 
endpoint_name: my-endpoint 
model: 
  path: /Downloads/multi-models-sample/models/ 
code_configuration: 
  code: ../../model-1/onlinescoring/ 
  scoring_script: score.py 
environment:  
  conda_file: ../../model-1/environment/conda.yml 
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest 
instance_type: Standard_DS3_v2 
instance_count: 1 

创建部署后,环境变量 AZUREML_MODEL_DIR 将指向存储模型的 Azure 中的存储位置。 例如,/var/azureml-app/azureml-models/81b3c48bbf62360c7edbbe9b280b9025/1 将包含模型和文件结构。

对于此示例,AZUREML_MODEL_DIR 文件夹的内容如下所示:

A screenshot of the folder structure of the storage location for multiple models.

在评分脚本(score.py)中,可以在 init() 函数中加载模型。 以下代码会加载 sample_m1.pkl 模型:

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR")), "models","model_1","v1", "sample_m1.pkl ") 
    model = joblib.load(model_path) 

有关如何将多个模型部署到一个部署的示例,请参阅《将多个模型部署到一个部署(CLI 示例)》和《将多个模型部署到一个部署(SDK 示例)》。

提示

如果要注册超过 1500 个文件,请考虑在注册模型时将文件或子目录压缩为 .tar.gz。 要使用模型,可以从评分脚本中解压缩 init() 函数中的文件或子目录。 或在注册模型时,将 azureml.unpack 属性设置为 True,以自动解压缩文件或子目录。 在任何一种情况下,解压缩都在初始化阶段发生一次。

在部署中使用在 Azure 机器学习工作区中注册的模型

要在部署中使用在 Azure 机器学习工作区中注册的一个或多个模型,请在部署 YAML 中指定已注册模型的名称。 例如,以下部署 YAML 配置会将已注册的 model 名称指定为 azureml:local-multimodel:3

$schema: https://azuremlschemas.azureedge.net/latest/managedOnlineDeployment.schema.json 
name: blue 
endpoint_name: my-endpoint 
model: azureml:local-multimodel:3 
code_configuration: 
  code: ../../model-1/onlinescoring/ 
  scoring_script: score.py 
environment:  
  conda_file: ../../model-1/environment/conda.yml 
  image: mcr.microsoft.com/azureml/openmpi4.1.0-ubuntu20.04:latest 
instance_type: Standard_DS3_v2 
instance_count: 1 

对于此示例,请考虑 local-multimodel:3 包含以下模型项目,这可以从 Azure 机器学习工作室中的“模型”选项卡查看

A screenshot of the folder structure showing the model artifacts of the registered model.

创建部署后,环境变量 AZUREML_MODEL_DIR 将指向存储模型的 Azure 中的存储位置。 例如,/var/azureml-app/azureml-models/local-multimodel/3 将包含模型和文件结构。 AZUREML_MODEL_DIR 将指向包含模型项目根目录的文件夹。 根据此示例,AZUREML_MODEL_DIR 文件夹的内容将如下所示:

A screenshot of the folder structure showing multiple models.

在评分脚本(score.py)中,可以在 init() 函数中加载模型。 例如,加载 diabetes.sav 模型:

def init(): 
    model_path = os.path.join(str(os.getenv("AZUREML_MODEL_DIR"), "models", "diabetes", "1", "diabetes.sav") 
    model = joblib.load(model_path) 

了解评分脚本

提示

联机终结点的评分脚本格式与早期版本的 CLI 和 Python SDK 中使用的格式相同。

如之前所述,code_configuration.scoring_script 中指定的评分脚本必须具有一个 init() 函数和一个 run() 函数。

此示例使用 score.py 文件:score.py

import os
import logging
import json
import numpy
import joblib

def init():
    """
    This function is called when the container is initialized/started, typically after create/update of the deployment.
    You can write the logic here to perform init operations like caching the model in memory
    """
    global model
    # AZUREML_MODEL_DIR is an environment variable created during deployment.
    # It is the path to the model folder (./azureml-models/$MODEL_NAME/$VERSION)
    # Please provide your model's folder name if there is one
    model_path = os.path.join(
        os.getenv("AZUREML_MODEL_DIR"), "model/sklearn_regression_model.pkl"
    )
    # deserialize the model file back into a sklearn model
    model = joblib.load(model_path)
    logging.info("Init complete")

def run(raw_data):
    """
    This function is called for every invocation of the endpoint to perform the actual scoring/prediction.
    In the example we extract the data from the json input and call the scikit-learn model's predict()
    method and return the result back
    """
    logging.info("model 1: request received")
    data = json.loads(raw_data)["data"]
    data = numpy.array(data)
    result = model.predict(data)
    logging.info("Request processed")
    return result.tolist()

初始化或启动容器时,将调用函数 init()。 初始化通常在创建或更新部署后立即发生。 可通过 init 函数编写逻辑以执行全局初始化操作,例如在内存中高速缓存模型(如本示例中的执行)。

每次调用终结点时,都将调用 run() 函数,该函数执行实际的评分和预测。 在此示例中,我们将从 JSON 输入提取数据,调用 scikit-learn 模型的 predict() 方法,并返回结果。

使用本地终结点在本地部署和调试

强烈建议在部署到 Azure 之前,通过验证和调试你的代码和配置在本地测试运行终结点。 Azure CLI 和 Python SDK 支持本地终结点和部署,而 Azure 机器学习工作室和 ARM 模板则不支持。

若要在本地部署,必须安装并运行 Docker 引擎。 Docker 引擎通常在计算机启动时启动。 如果它不启动,可以对 Docker 引擎进行故障排除

提示

可以使用 Azure 机器学习推理 HTTP 服务器 Python 包在本地调试评分脚本而无需 Docker 引擎。 使用推理服务器进行调试有助于在部署到本地终结点之前调试评分脚本,以便在不受部署容器配置影响的情况下进行调试。

注意

本地终结点具有以下限制:

  • 它们支持流量规则、身份验证或探测设置。
  • 它们仅支持每个终结点一个部署。
  • 它们仅支持本地模型文件和包含本地 conda 文件的环境。 如果要测试已注册的模型,请先使用 CLISDK 下载它们,然后在部署定义中使用 path 来引用父文件夹。 要测试已注册的环境,请检查 Azure 机器学习工作室中环境的上下文,并准备要使用的本地 conda 文件。 本文中的示例演示如何将本地模型和环境与支持本地部署的本地 conda 文件配合使用。

有关在部署到 Azure 之前以本地方式调试联机终结点的详细信息,请参阅在 Visual Studio Code 中对联机终结点进行本地调试

在本地部署模型

首先创建一个终结点。 (可选)对于本地终结点,可以跳过此步骤并直接创建部署(下一步骤),这继而将创建所需的元数据。 在本地部署模型对于开发和测试目的很有用。

az ml online-endpoint create --local -n $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml

现在,在终结点下面创建一个名为 blue 的部署。

az ml online-deployment create --local -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml

--local 标志指示 CLI 在 Docker 环境中部署终结点。

提示

使用 Visual Studio Code 在本地测试和调试终结点。 有关详细信息,请参阅在 Visual Studio Code 中以本地方式调试联机终结点

验证本地部署是否成功

检查状态,查看模型是否已部署且未出错:

az ml online-endpoint show -n $ENDPOINT_NAME --local

输出应类似于以下 JSON。 provisioning_stateSucceeded

{
  "auth_mode": "key",
  "location": "local",
  "name": "docs-endpoint",
  "properties": {},
  "provisioning_state": "Succeeded",
  "scoring_uri": "http://localhost:49158/score",
  "tags": {},
  "traffic": {}
}

下表包含 provisioning_state 的可能值:

状态 说明
Creating 正在创建资源。
更新 正在更新资源。
正在删除 正在删除此资源。
成功 创建/更新操作成功。
已失败 创建/更新/删除操作失败。

调用本地终结点以使用模型为数据评分

使用便捷命令 invoke 并传递 JSON 文件中存储的查询参数,调用终结点来为模型评分:

az ml online-endpoint invoke --local --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json

如果要使用 REST 客户端(例如 curl),必须具有评分 URI。 如要获取评分 URI,需要运行 az ml online-endpoint show --local -n $ENDPOINT_NAME。 在返回的数据中,找到 scoring_uri 属性。 本文档后面提供了基于 curl 的示例命令。

在日志中查看 invoke 操作的输出

在示例 score sp 文件中,run() 方法将一些输出记录到控制台。

可以使用 get-logs 命令查看此输出:

az ml online-deployment get-logs --local -n blue --endpoint $ENDPOINT_NAME

将联机终结点部署到 Azure

接下来,将联机终结点部署到 Azure。

“部署到 Azure”

若要在云中创建终结点,请运行以下代码:

az ml online-endpoint create --name $ENDPOINT_NAME -f endpoints/online/managed/sample/endpoint.yml

若要在终结点下创建名为 blue 的部署,请运行以下代码:

az ml online-deployment create --name blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml --all-traffic

此项部署最多可能需要约 15 分钟,具体取决于是否为首次构建基础环境或映像。 使用同一环境的后续部署将更快完成处理。

提示

  • 如果你不希望阻塞 CLI 控制台,可以将 --no-wait 标志添加到命令中。 但是,这会停止以交互方式显示部署状态。

重要

上述 az ml online-deployment create 中的 --all-traffic 标志会将 100% 的终结点流量分配给新创建的蓝色部署。 尽管这对开发和测试非常有用,但对于生产,你可能想要通过显式命令开放到新部署的流量。 例如,az ml online-endpoint update -n $ENDPOINT_NAME --traffic "blue=100"

提示

检查终结点的状态

对于终结点和部署,show 命令包含 provisioning_state 中的信息:

az ml online-endpoint show -n $ENDPOINT_NAME

可以使用 list 命令以表格格式列出工作区中的所有终结点:

az ml online-endpoint list --output table

检查联机部署的状态

检查日志,查看模型是否已部署且未出错。

若要查看容器的日志输出,请使用以下 CLI 命令:

az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME

默认情况下,日志是从推理服务器容器拉取的。 若要查看存储初始化表达式容器中的日志,请添加 --container storage-initializer 标志。 有关部署日志的更多信息,请参阅获取容器日志

调用终结点,以使用模型为数据评分

可以使用 invoke 命令或你选择的 REST 客户端来调用终结点并为一些数据评分:

az ml online-endpoint invoke --name $ENDPOINT_NAME --request-file endpoints/online/model-1/sample-request.json

以下示例显示了如何获取用于对终结点进行身份验证的密钥:

提示

你可以对哪些 Microsoft Entra 安全主体能够获取身份验证密钥进行控制,方法是将其分配到一个允许 Microsoft.MachineLearningServices/workspaces/onlineEndpoints/token/actionMicrosoft.MachineLearningServices/workspaces/onlineEndpoints/listkeys/action 的自定义角色。 有关详细信息,请参阅管理对 Azure 机器学习工作区的访问

ENDPOINT_KEY=$(az ml online-endpoint get-credentials -n $ENDPOINT_NAME -o tsv --query primaryKey)

接下来,使用 curl 对数据进行评分。

SCORING_URI=$(az ml online-endpoint show -n $ENDPOINT_NAME -o tsv --query scoring_uri)

curl --request POST "$SCORING_URI" --header "Authorization: Bearer $ENDPOINT_KEY" --header 'Content-Type: application/json' --data @endpoints/online/model-1/sample-request.json

请注意,我们使用 showget-credentials 命令来获取身份验证凭据。 另请注意,我们使用 --query 标志来筛选特性,以便仅显示所需的特性。 可以在查询 Azure CLI 命令输出中详细了解 --query

若要查看调用日志,请再次运行 get-logs

若要了解如何使用令牌进行身份验证,请参阅向联机终结点进行身份验证

(可选)更新部署

如果你要更新代码、模型或环境,请更新 YAML 文件,然后运行 az ml online-endpoint update 命令。

注意

如果你在单个 update 命令中更新实例计数(以缩放你的部署)和其他模型设置(例如代码、模型或环境),则首先将执行缩放操作,然后将应用其他更新。 在生产环境中单独执行这些操作是一个很好的做法。

若要了解 update 的工作原理,请执行以下操作:

  1. 打开 online/model-1/onlinescoring/score.py 文件。

  2. 更改 init() 函数的最后一行:在 logging.info("Init complete") 后面,添加 logging.info("Updated successfully")

  3. 保存文件。

  4. 运行以下命令:

    az ml online-deployment update -n blue --endpoint $ENDPOINT_NAME -f endpoints/online/managed/sample/blue-deployment.yml
    

    注意

    使用 YAML 进行更新是声明性的。 也就是说,YAML 中的更改反映在基础资源 Azure 资源管理器资源(终结点和部署)中。 声明性方法有助于 GitOps:对终结点和部署的所有更改都将通过 YAML 进行(甚至包括 instance_count)。

    提示

    • 可以将泛型更新参数(例如 --set 参数)与 CLI update 命令一起使用,以替代 YAML 中的属性设置特定属性而不在 YAML 文件中传递它们。 在开发和测试方案中,为单个特性使用 --set,这种做法特别有用。 例如,若要纵向扩展第一个部署的 instance_count 值,可以使用标志 --set instance_count=2。 但是,由于 YAML 未更新,此方法对 GitOps 没有帮助。
    • 指定 YAML 文件不是必需的。 例如,如果要测试给定部署的不同并发设置,可以尝试类似 az ml online-deployment update -n blue -e my-endpoint --set request_settings.max_concurrent_requests_per_instance=4 environment_variables.WORKER_COUNT=4 的操作。 这将保留所有现有配置,但仅更新指定的参数。
  5. 由于修改了在创建或更新终结点时运行的 init() 函数,因此日志中会包含消息 Updated successfully。 运行以下命令检索日志:

    az ml online-deployment get-logs --name blue --endpoint $ENDPOINT_NAME
    

update 命令也适用于本地部署。 将同一个 az ml online-deployment update 命令与标志 --local 配合使用。

注意

前面的部署更新是就地滚动更新的一个示例。

  • 对于托管联机终结点,部署将更新为一次更新 20% 的节点的新配置。 也就是说,如果部署有 10 个节点,则一次将更新 2 个节点。
  • 对于 Kubernetes 联机终结点,系统将使用新配置以迭代方式创建新的部署实例,并删除旧部署实例。
  • 对于生产用途,应考虑蓝绿部署,它为更新 Web 服务提供了更安全的替代方法。

(可选)配置自动缩放

自动缩放会自动运行适量的资源来处理应用程序的负载。 托管联机终结点支持通过与 Azure Monitor 自动缩放功能的集成进行自动缩放。 要配置自动缩放,请参阅如何自动缩放联机终结点

(可选)使用 Azure Monitor 监视 SLA

若要查看指标并根据 SLA 设置警报,请完成监视联机终结点中所述的步骤。

(可选)与 Log Analytics 集成

CLI 的 get-logs 命令或 SDK 的 get_logs 方法只提供自动选择的实例最近发出的几百行日志。 但是,Log Analytics 提供一种用于持久存储和分析日志的方式。 有关使用日志记录的详细信息,请参阅监视联机终结点

删除终结点和部署

如果你将来不再使用该部署,应运行以下代码将其删除(这会删除终结点和所有基础部署):

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