用于实时推理的联机终结点和部署

适用范围:Azure CLI ml 扩展 v2(当前版本)Python SDK azure-ai-ml v2(当前版本)

Azure 机器学习允许使用部署到联机终结点的模型对数据执行实时推理。 推理是将新的输入数据应用于机器学习模型以生成输出的过程。 虽然此类输出通常称为“预测”,但推理可用于为分类和聚类分析等其他机器学习任务生成输出。

联机终结点

联机终结点将模型部署到可以根据 HTTP 协议返回预测的网络服务器。 使用联机终结点来操作处理同步低延迟请求中的实时推理的模型。 建议在下列情况下使用它们:

  • 你具有低延迟要求
  • 模型可以在相对较短的时间内响应请求
  • 模型的输入适合请求的 HTTP 有效负载
  • 你需要根据请求数量进行纵向扩展

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

  • 终结点名称:在 Azure 区域中必须是唯一的。 有关命名规则的详细信息,请参阅终结点限制
  • 身份验证模式:可以为终结点选择基于密钥的身份验证模式和基于 Azure 机器学习令牌的身份验证模式。 密钥不会过期,但令牌会过期。 有关身份验证的详细信息,请参阅向联机终结点进行身份验证

Azure 机器学习提供了使用托管联机终结点以统包方式部署 ML 模型的便利性。 这是在 Azure 机器学习中使用联机终结点的推荐方式。 托管联机终结点在 Azure 中以一种可缩放的、完全托管的方式使用功能强大的 CPU 和 GPU 计算机。 这些终结点还负责处理、缩放、保护和监视你的模型,使你没有设置和管理底层基础结构的开销。 若要了解如何部署到托管联机终结点,请参阅使用联机终结点部署 ML 模型

为何选择托管联机终结点而不是 ACI 或 AKS(v1)?

使用托管联机终结点是在 Azure 机器学习中使用联机终结点的推荐方式。 下表重点介绍了与 Azure 机器学习 SDK/CLI v1 解决方案(ACI 和 AKS(v1))相比的托管联机终结点的关键属性。

特性 托管联机终结点 (v2) ACI 或 AKS (v1)
网络安全性/隔离 通过快速切换轻松进行入站/出站控制 不支持虚拟网络或需要复杂的手动配置
托管服务 - 完全托管的计算预配/缩放
- 用于防止数据外泄的网络配置
- 主机操作系统升级,受控部署就地更新
- v1 中的缩放受到限制
- 网络配置或升级需要由用户管理
终结点/部署概念 终结点和部署之间的区别支持复杂的场景,例如安全部署模型 没有终结点的概念
诊断和监控 - 可使用 Docker 和 Visual Studio Code 进行本地终结点调试
​ - 使用图表/查询进行高级指标和日志分析,以在部署之间进行比较​
- 成本细分至部署级别
本地调试不方便
伸缩性 无限制、弹性、自动缩放 - ACI 不可缩放
- AKS (v1) 仅支持群集内缩放,并且需要可伸缩性配置
企业就绪情况 专用链接, 客户管理的密钥, Microsoft Entra ID, 配额管理, 计费集成, SLA 不支持
高级 ML 功能 - 模型数据集合
- 模型监视
- 冠军挑战者模型、安全推出、流量镜像
- 负责任的 AI 扩展性
不支持

或者,如果希望使用 Kubernetes 来部署模型并为终结点提供服务,并且对管理基础结构要求感到满意,则可以使用 Kubernetes 联机终结点。 使用这些终结点,你可以使用 CPU 或 GPU 在完全配置和托管的 Kubernetes 群集(任意位置)上部署模型并提供联机终结点。

为何选择托管联机终结点而不是 AKS(v2)?

托管联机终结点可以帮助简化部署流程,相比 Kubernetes 联机终结点,具有以下优势:

  • 托管基础结构

    • 自动预配计算并托管模型(你只需指定 VM 类型和缩放设置)
    • 自动更新和修补基础主机 OS 映像
    • 在发生系统故障时自动执行节点恢复
  • 监视和日志

    Screenshot showing Azure Monitor graph of endpoint latency.

  • 查看成本

    Screenshot cost chart of an endpoint and deployment.

    注意

    托管联机终结点基于 Azure 机器学习计算。 使用托管联机终结点时,需支付计算和网络费用。 没有任何额外费用。 有关定价的详细信息,请参阅 Azure 定价计算器

    如果使用 Azure 机器学习虚拟网络来保护来自托管联机终结点的出站流量,则需要为托管虚拟网络使用的 Azure 专用链接和 FQDN 出站规则付费。 有关详细信息,请参阅托管虚拟网络的定价

托管联机终结点与 Kubernetes 联机终结点的比较

下表重点介绍托管联机终结点与 Kubernetes 联机终结点之间的主要差异。

托管联机终结点 Kubernetes 联机终结点 (AKS(v2))
建议的用户 需要托管模型部署和增强式 MLOps 体验的用户 首选 Kubernetes 并可自行管理基础结构要求的用户
灵活预配 托管式计算预配、更新、移除 用户责任
节点维护 托管式主机 OS 镜像更新和安全强化 用户责任
群集大小调整(缩放) 托管式手动和自动缩放,支持其他节点预配 手动和自动缩放,支持在固定群集边界内缩放副本数
计算类型 由服务管理 客户管理的 Kubernetes 群集 (Kubernetes)
托管的标识 支持 支持
虚拟网络 (VNET) 通过托管网络隔离支持 用户责任
现成的监视和日志记录功能 由 Azure Monitor 和 Log Analytics 提供支持(包括终结点和部署的关键指标和日志表) 用户责任
使用 Application Insights(旧版)进行日志记录 支持 支持
查看成本 详细到终结点/部署级别 群集级别
成本适用对象 分配给部署的 VM 分配给群集的 VM
镜像流量 支持 不支持
无代码部署 支持(MLflowTriton 模型) 支持(MLflowTriton 模型)

联机部署

部署是一组资源和计算,在承载执行实际推理的模型时需要它。 单个终结点可以包含具有不同配置的多个部署。 此设置有助于将终结点提供的接口与部署中提供的实施详细信息分离。 联机终结点具有路由机制,可将请求定向到终结点中的特定部署。

下图显示了具有两个部署(绿)的联机终结点。 蓝部署使用具有 CPU SKU 的 VM,并运行模型的版本 1。 绿色部署使用具有 GPU SKU 的 VM,并运行模型的版本 2。 终结点配置为将 90% 的传入流量路由到蓝部署,而绿部署则接收剩余的 10% 流量。

Diagram showing an endpoint splitting traffic to two deployments.

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

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

若要了解如何使用 CLI、SDK、studio 和 ARM 模板部署联机终结点,请参阅使用联机终结点部署 ML 模型

编码人员和非编码人员的部署

Azure 机器学习通过提供无代码部署低代码部署自带容器 (BYOC) 部署的选项,支持将模型部署到编码人员和非编码人员的联机终结点。

  • 无代码部署通过 MLflow 和 Triton 为常见框架(例如 scikit-learn、TensorFlow、PyTorch 和 ONNX)提供开箱即用的推理。
  • 低代码部署允许你提供最少的代码以及用于部署的 ML 模型。
  • BYOC 部署允许你提供几乎任何容器来运行联机终结点。 可以使用所有 Azure 机器学习平台功能(例如自动缩放、GitOps、调试和安全部署)来管理 MLOps 管道。

下表重点介绍了联机部署选项的关键方面:

无代码 低代码 BYOC
摘要 通过 MLflow 和 Triton 对 scikit-learn、TensorFlow、PyTorch 和 ONNX 等常用框架使用开箱即用的推理。 有关详细信息,请参阅将 MLflow 模型部署到联机终结点 对常用框架使用安全、公开发布的特选映像,每两周更新一次,以解决漏洞。 提供评分脚本和/或 Python 依赖项。 有关详细信息,请参阅 Azure 机器学习特选环境 可以通过 Azure 机器学习对自定义映像的支持来提供完整的堆栈。 有关详细信息,请参阅使用自定义容器将模型部署到联机终结点
自定义基础映像 否,特选环境会提供此映像,以便于部署。 是和否,可以使用特选映像或自定义映像。 是的,请提供可访问的容器映像位置(例如 docker.io、Azure 容器注册表 (ACR) 或 Microsoft 容器注册表 (MCR))或可使用 ACR 为容器构建/推送的 Dockerfile。
自定义依赖项 否,特选环境会提供此映像,以便于部署。 是的,请提供模型运行的 Azure 机器学习环境;具有 Conda 依赖项的 Docker 映像,或 dockerfile​。 是的,这将包含在容器映像中。
自定义代码 否,评分脚本将自动生成以便于部署。 是的,请提供评分脚本。 是的,这将包含在容器映像中。

注意

AutoML 运行会自动为用户创建评分脚本和依赖项,因此你可以部署任何 AutoML 模型,而无需编写额外的代码(对于无代码部署),也可以根据业务需求修改自动生成的脚本(对于低代码部署)。若要了解如何使用 AutoML 模型进行部署,请参阅使用联机终结点部署 AutoML 模型

联机终结点调试

Azure 机器学习提供了多种在本地和使用容器日志调试联机终结点的方法。

通过 Azure 机器学习推理 HTTP 服务器启用本地调试

可以使用 Azure 机器学习推理 HTTP 服务器在本地调试评分脚本。 HTTP 服务器是一个 Python 包,它以 HTTP 终结点的形式公开评分函数,并将 Flask 服务器代码和依赖项包装到单一包中。 该服务器包含在用于推理的预生成 Docker 映像中,通过 Azure 机器学习部署模型时,会使用这些映像。 单独使用包,可以在本地部署模型以供生产,还可以在本地开发环境中轻松验证评分(条目)脚本。 如果评分脚本有问题,服务器将返回错误和发生错误的位置。 也可以使用 Visual Studio Code 通过 Azure 机器学习推理 HTTP 服务器进行调试。

若要详细了解如何使用 HTTP 服务器进行调试,请参阅使用 Azure 机器学习推理 HTTP 服务器调试评分脚本

本地调试

对于本地调试,需要本地部署;即部署到本地 Docker 环境的模型。 可以使用此本地部署在部署到云之前进行测试和调试。 若要在本地进行部署,需要安装并运行 Docker 引擎。 然后,Azure 机器学习会创建一个模拟 Azure 机器学习映像的本地 Docker 映像。 Azure 机器学习将在本地生成和运行部署,并缓存映像以快速迭代。

本地调试的步骤通常包括:

  • 检查本地部署是否成功
  • 调用本地终结点进行推理
  • 在日志中查看调用操作的输出

若要了解有关本地调试的详细信息,请参阅使用本地终结点在本地部署和调试

使用 Visual Studio Code(预览版)进行本地调试

重要

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

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

与本地调试一样,首先需要安装并运行 Docker 引擎,然后将模型部署到本地 Docker 环境。 完成本地部署后,Azure 机器学习本地终结点将使用 Docker 和 Visual Studio Code 开发容器(开发容器)来构建和配置本地调试环境。 使用开发容器可以利用 Docker 容器中的 Visual Studio Code 功能,如交互式调试。

若要详细了解如何在 VS Code 中以交互方式调试联机终结点,请参阅在 Visual Studio Code 中本地调试联机终结点

使用容器日志进行调试

对于部署,无法直接访问部署了模型的 VM。 但是,可以从该 VM 上运行的某些容器获取日志。 可以从两种类型的容器中获取日志:

  • 推理服务器:日志包括控制台日志(来自推理服务器),其中包含评分脚本(score.py 代码)的打印/日志记录函数的输出。
  • 存储初始化表达式:日志包含有关代码和模型数据是否已成功下载到容器的信息。 该容器会在推理服务器容器开始运行之前运行。

若要详细了解如何使用容器日志进行调试,请参阅获取容器日志

流量路由和镜像到联机部署

如前所述,一个联机终结点可以包含多个部署。 当终结点接收传入流量(或请求)时,它可以将一定比例的流量路由到每个部署,如本机蓝/绿部署策略中所使用的那样。 它还可以将流量从一个部署镜像(或复制)到另一个部署,也称为流量镜像或影子。

蓝/绿部署的流量路由

蓝/绿部署是一种部署策略,允许你在完全部署之前向一小部分用户或请求部署新部署(绿色部署)。 终结点可以实现负载均衡,将一定比例的流量分配给每个部署,所有部署的总分配量加起来可达 100%。

提示

请求可以通过包含 azureml-model-deployment HTTP 头来绕过配置的流量负载均衡。 请将头值设置为请求要路由到的部署的名称。

下图显示了Azure 机器学习工作室中用于在蓝色和绿色部署之间分配流量的设置。

Screenshot showing slider interface to set traffic allocation between deployments.

此流量分配将路由流量,如下图所示,其中 10% 的流量进入绿色部署,90% 的流量进入蓝色部署。

Diagram showing an endpoint splitting traffic to two deployments.

联机部署流量镜像

终结点还可以将流量从一个部署镜像(或复制)到另一个部署。 当你想要使用生产流量测试新部署而不影响客户从现有部署收到的结果时,流量镜像(也称为影子测试)非常有用。 例如,在实施蓝/绿部署时,100% 的流量路由到蓝色,10% 镜像到绿色部署,则不会将绿色部署镜像流量的结果返回给客户端,但会记录指标和日志。

Diagram showing an endpoint mirroring traffic to a deployment.

若要了解如何使用流量镜像,请参阅联机终结点的安全推出

Azure 机器学习中联机终结点的更多功能

身份验证和加密

  • 身份验证:密钥和 Azure 机器学习令牌
  • 托管标识:用户分配的和系统分配的
  • 终结点调用默认使用 SSL

自动缩放

自动缩放会自动运行适量的资源来处理应用程序的负载。 托管终结点支持通过与 Azure Monitor 自动缩放功能的集成进行自动缩放。 可以配置基于指标的缩放(例如,CPU 利用率 > 70%)、基于计划的缩放(例如,针对业务高峰期的缩放规则)或两者的组合。

Screenshot showing that autoscale flexibly provides between min and max instances, depending on rules.

若要了解如何配置自动缩放,请参阅如何自动缩放联机终结点

托管网络隔离

将机器学习模型部署到托管联机终结点时,可以使用专用终结点来保护与联机终结点的通信。

可以单独为入站评分请求以及与工作区和其他服务的出站通信配置安全性。 入站通信使用 Azure 机器学习工作区的专用终结点。 出站通信使用为工作区的托管虚拟网络创建的专用终结点。

有关详细信息,请参阅托管联机终结点的网络隔离

监视联机终结点和部署

通过与 Azure Monitor 集成,可以监视 Azure 机器学习终结点。 通过此集成,可以查看图表中的指标、配置警报、从日志表中查询、使用 Application Insights 分析来自用户容器的事件等。

  • 指标:使用 Azure Monitor 跟踪各种终结点指标(例如请求延迟)并向下钻取至部署或状态级别。 还可以跟踪部署级别指标,例如 CPU/GPU 利用率并向下钻取至实例级别。 借助 Azure Monitor,你可以在图表中跟踪这些指标并设置仪表板和警报以进行进一步分析。

  • 日志:将指标发送到 Log Analytics 工作区,你可以在其中使用 Kusto 查询语法查询日志。 还可以将指标发送到存储帐户和/或事件中心以进行进一步处理。 此外,你还可以使用专用日志表来记录联机终结点相关事件、流量和容器日志。 Kusto 查询允许连接多个表进行复杂的分析。

  • Application Insights:特选环境包括与 Application Insights 的集成,可以在创建联机部署时启用/禁用它。 内置指标和日志将发送到 Application Insights,可以使用其内置功能(例如实时指标、事务搜索、故障和性能)进行进一步分析。

有关监视的详细信息,请参阅监视联机终结点

联机部署中的机密注入(预览版)

联机部署上下文中的机密注入是从机密存储检索机密(例如 API 密钥),并将机密注入到联机部署内运行的用户容器中的过程。 机密最终可以通过环境变量进行访问,从而为运行评分脚本的推理服务器或使用 BYOC(自带容器)部署方法的推理堆栈提供安全的使用方式。

有两种方法可以注入机密。 可以使用托管标识自行注入机密,也可以使用机密注入功能注入机密。 若要详细了解如何注入机密,请参阅联机终结点中的机密注入(预览)

后续步骤