用于实时推理的联机终结点部署
适用范围:Azure CLI ml 扩展 v2(最新版)Python SDK azure-ai-ml v2(最新版)
本文介绍 Azure 机器学习中用于实时推理的联机终结点。 推理是将新的输入数据应用于机器学习模型以生成输出的过程。 Azure 机器学习允许使用部署到联机终结点的模型对数据执行实时推理。 虽然这些输出通常称为“预测”,但你可以使用推理为分类和聚类分析等其他机器学习任务生成输出。
联机终结点
联机终结点将模型部署到可以根据 HTTP 协议返回预测的网络服务器。 联机终结点可以使同步低延迟请求中的实时推理的模型可操作,最适合在以下情况使用:
- 你没有低延迟要求。
- 你的模型可以在相对较短的时间内响应请求。
- 你的模型的输入适合请求的 HTTP 有效负载。
- 你需要纵向扩展请求数量。
若要定义终结点,必须指定:
- 终结点名称。 该名称必须在 Azure 区域中独一无二。 有关其他命名要求,请参阅 Azure 机器学习联机终结点和批处理终结点。
- 身份验证模式。 对于该终结点,可以从基于密钥的身份验证模式、基于 Azure 机器学习令牌的身份验证模式或基于 Microsoft Entra 令牌的身份验证中进行选择。 有关身份验证的详细信息,请参阅对联机终结点的客户端进行身份验证。
托管联机终结点
托管联机终结点以方便的统包方式部署机器学习模型,是使用 Azure 机器学习联机终结点的推荐方式。 托管联机终结点在 Azure 中以一种可缩放的、完全托管的方式使用功能强大的 CPU 和 GPU 计算机。
为了让你没有设置和管理底层基础结构的开销,这些终结点还负责处理、缩放、保护和监视模型。 若要了解如何定义托管联机终结点,请参阅定义终结点。
托管联机终结点与 Azure 容器实例或 Azure Kubernetes 服务 (AKS) v1
建议以托管联机终结点的方式在 Azure 机器学习中使用联机终结点。 下表重点介绍了与 Azure 容器实例和 Azure Kubernetes 服务 (AKS) v1 解决方案相比的托管联机终结点的关键属性。
特性 | 托管联机终结点 (v2) | 容器实例或 AKS (v1) |
---|---|---|
网络安全性/隔离 | 通过快速切换轻松进行入站/出站控制 | 不支持虚拟网络或需要复杂的手动配置 |
托管服务 | • 完全托管的计算预配/缩放 • 用于防止数据外泄的网络配置 • 主机 OS 升级,受控推出就地更新 |
• 缩放是有限的 • 用户必须管理网络配置或升级 |
终结点/部署概念 | 终结点和部署之间的区别支持复杂的场景,例如安全部署模型 | 没有终结点的概念 |
诊断和监控 | • 可使用 Docker 和 Visual Studio Code 进行本地终结点调试 • 使用图表/查询进行高级指标和日志分析,以进行部署间比较 • 成本细分至部署级别 |
本地调试不方便 |
伸缩性 | 弹性和自动缩放(不受默认群集大小限制) | • 容器实例不可缩放 • AKS v1 仅支持群集内缩放,需要可伸缩性配置 |
企业就绪情况 | 专用链接、客户管理的密钥、Microsoft Entra ID、配额管理、计费集成、服务级别协议 (SLA) | 不支持 |
高级 ML 功能 | • 模型数据收集 • 模型监视 • 冠军挑战者模型、安全推出、流量镜像 • 负责任 AI 扩展性 |
不支持 |
托管联机终结点与 Kubernetes 联机终结点的比较
如果希望使用 Kubernetes 来部署模型并提供终结点,并且对管理基础结构要求感到满意,则可使用 Kubernetes 联机终结点。 借助这些终结点,你可以使用 CPU 或 GPU 在完全配置的和托管的 Kubernetes 群集(任意位置)上部署模型并提供联机终结点。
托管联机终结点可以帮助简化部署流程,相比 Kubernetes 联机终结点,具有以下优势:
自动基础结构管理
- 预配计算并托管模型。 只需指定虚拟机 (VM) 类型和缩放设置。
- 更新和修补基础主机 OS 映像。
- 发生系统故障时执行节点恢复操作。
监视和日志
- 能够使用与 Azure Monitor 的原生集成来监视模型可用性、性能和 SLA。
- 轻松地使用日志以及与 Log Analytics 的原生集成来调试部署。
-
注意
托管联机终结点基于 Azure 机器学习计算。 使用托管联机终结点时,需支付计算和网络费用。 沒有其他附加費。 有关定价的详细信息,请参阅 Azure 定价计算器。
如果使用 Azure 机器学习虚拟网络来保护来自托管联机终结点的出站流量,则需要为托管虚拟网络使用的 Azure 专用链接和完全限定的域名 (FQDN) 出站规则付费。 有关详细信息,请参阅托管虚拟网络的定价。
下表重点介绍托管联机终结点与 Kubernetes 联机终结点之间的主要差异。
托管联机终结点 | Kubernetes 联机终结点 (AKS v2) | |
---|---|---|
建议的用户 | 需要托管模型部署和增强式 MLOps 体验的用户 | 首选 Kubernetes 并可自行管理基础结构要求的用户 |
灵活预配 | 托管式计算预配、更新、移除 | 用户责任 |
节点维护 | 托管主机 OS 映像更新和安全强化 | 用户责任 |
群集大小调整(缩放) | 托管式手动和自动缩放,支持额外节点预配 | 手动和自动缩放,支持在固定群集边界内缩放副本数 |
计算类型 | 由服务管理 | 客户管理的 Kubernetes 群集 |
托管的标识 | 支持 | 支持 |
虚拟网络 | 通过托管网络隔离支持 | 用户责任 |
现成的监视和日志记录 | 由 Azure Monitor 和 Log Analytics 提供支持(包括终结点和部署的关键指标和日志表) | 用户责任 |
使用 Application Insights(旧版)进行日志记录 | 支持 | 支持 |
成本视图 | 细致到终结点/部署级别 | 群集级别 |
成本适用对象 | 分配给部署的虚拟机 (VM) | 分配给群集的 VM |
镜像流量 | 支持 | 不支持 |
无代码部署 | 支持 MLflow 和 Triton 模型 | 支持 MLflow 和 Triton 模型 |
联机部署
部署是一组资源和计算,是托管执行推理的模型所必需的。 单个终结点可以包含具有不同配置的多个部署。 此设置有助于将终结点提供的接口与部署中提供的实施详细信息分离。 联机终结点具有路由机制,可将请求定向到终结点中的特定部署。
下图显示了具有两个部署(蓝和绿)的联机终结点。 蓝部署使用具有 CPU SKU 的 VM,并运行模型的版本 1。 绿色部署使用具有 GPU SKU 的 VM,并运行模型的版本 2。 终结点配置为将 90% 的传入流量路由到蓝部署,而绿部署则接收剩余的 10% 流量。
若要部署模型,必须具备:
模型文件或已在工作区中注册的模型的名称和版本。
评分脚本代码,会根据给定输入请求执行模型。
评分脚本接收提交到已部署的 Web 服务的数据,并将此数据传递给模型。 然后,该脚本执行模型并将其响应返回给客户端。 评分脚本特定于你的模型,必须理解模型期望作为输入和作为输出返回的数据。
用于运行模型的环境。 环境可以是包含 Conda 依赖项的 Docker 映像,也可以是 Dockerfile。
用于指定实例类型和缩放容量的设置。
若要了解如何使用 Azure CLI、Python SDK、Azure 机器学习工作室或 ARM 模板部署联机终结点,请参阅使用联机终结点部署机器学习模型。
部署的关键属性
下表介绍了部署的关键属性:
属性 | 描述 |
---|---|
名称 | 部署的名称。 |
终结点名称 | 要在其下创建部署的终结点的名称。 |
型号 | 要用于部署的模型。 此值可以是对工作区中现有版本受控模型的引用,也可以是对内联模型规范的引用。 有关如何跟踪和指定模型路径的详细信息,请参阅指定要部署用于联机终结点的模型。 |
代码路径 | 本地开发环境中目录的路径,其中包含用于为模型评分的所有 Python 源代码。 可以使用嵌套目录和包。 |
评分脚本 | 源代码目录中评分文件的相对路径。 此 Python 代码必须具有 init() 函数和 run() 函数。 在创建或更新模型后,将调用 init() 函数来执行特定操作,例如在内存中缓存模型。 每次调用终结点时,都将调用 run() 函数来执行实际评分和预测。 |
环境 | 用于承载模型和代码的环境。 此值可以是对工作区中现有版本受控环境的引用,也可以是对内联环境规范的引用。 |
实例类型 | 用于部署的 VM 大小。 有关支持的大小列表,请参阅托管联机终结点 SKU 列表。 |
实例计数 | 用于部署的实例数。 请根据预期的工作负载确定值。 为实现高可用性,请将值至少设置为 3 。 系统保留额外的 20% 来执行升级。 有关详细信息,请参阅针对部署的 VM 配额分配。 |
联机部署说明
部署可以随时(例如在部署实例进行安全修补或其他恢复操作时)引用“环境”中定义的模型和容器映像。 如果在 Azure 容器注册表中使用已注册的模型或容器映像进行部署,且随后移除了模型或容器映像,则重置映像后,依赖于这些资产的部署可能会失败。 如果移除模型或容器映像,请确保使用备用模型或容器映像重新创建或更新依赖部署。
只有在终结点标识有权通过 Microsoft Entra 身份验证和 Azure 基于角色的访问控制 (RBAC) 访问容器注册表时,环境所引用的容器注册表才能是专用的。 出于同样的原因,不支持容器注册表以外的专用 Docker 注册表。
Microsoft 会针对已知安全漏洞定期修补基础映像。 需要重新部署终结点才能使用修补后的映像。 如果你自己提供映像,则需要负责其更新。 有关详细信息,请参阅映像修补。
针对部署的 VM 配额分配
对于托管联机终结点,Azure 机器学习会保留 20% 的计算资源,以便在某些 VM SKU 上执行升级。 如果你在某个部署中为这些 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
) 提供可用配额。 此额外配额是为系统启动的操作(如 OS 升级和 VM 恢复)保留的,除非此类操作运行,否则不会产生费用。
某些 VM SKU 可以免除额外的配额预留。 要查看完整列表,请参阅《托管联机终结点 SKU 列表》。 若要查看使用情况和请求增加配额,请参阅在 Azure 门户中查看使用情况和配额。 若要查看运行托管联机终结点的成本,请参阅查看托管联机终结点的费用。
共享配额池
Azure 机器学习提供了一个共享配额池,不同区域中的用户可以根据可用性从中访问配额以执行有限时间的测试。 使用工作室将 Llama-2、Phi、Nemotron、Mistral、Dolly 和 Deci-DeciLM 模型从模型目录部署到托管联机终结点时,Azure 机器学习允许你在短时间访问其共享配额池,以便执行测试。 有关共享配额池的详细信息,请参阅 Azure 机器学习共享配额。
若要通过共享配额从模型目录中部署 Llama-2、Phi、Nemotron、Mistral、Dolly 和 Deci-DeciLM 模型,你必须有一个企业协议订阅。
有关 Azure 机器学习中资源的配额和限制的详细信息,请参阅使用 Azure 机器学习管理和增加资源的配额和限制。
编码人员和非编码人员的部署
Azure 机器学习通过提供“无代码部署”、“低代码部署”和“自带容器(BYOC)部署”的选项,支持将模型部署到编码人员和非编码人员的联机终结点。
- 无代码部署通过 MLflow 和 Triton 为常见框架(例如 scikit-learn、TensorFlow、PyTorch 和 Open Neural Network Exchange (ONNX))提供现成的推理。
- 低代码部署允许你提供最少的代码以及用于部署的机器学习模型。
- BYOC 部署允许你提供几乎任何容器来运行联机终结点。 可以使用所有 Azure 机器学习平台功能(例如自动缩放、GitOps、调试和安全推出)来管理 MLOps 管道。
下表重点介绍了联机部署选项的关键方面:
无代码 | 低代码 | BYOC | |
---|---|---|---|
摘要 | 通过 MLflow 和 Triton 对 scikit-learn、TensorFlow、PyTorch 和 ONNX 等常用框架使用开箱即用的推理。 有关详细信息,请参阅将 MLflow 模型部署到联机终结点。 | 对常用框架使用安全、公开发布的特选映像,每两周更新一次,以解决漏洞。 提供评分脚本和/或 Python 依赖项。 有关详细信息,请参阅 Azure 机器学习特选环境。 | 可以通过 Azure 机器学习对自定义映像的支持来提供完整的堆栈。 有关详细信息,请参阅使用自定义容器将模型部署到联机终结点。 |
自定义基础映像 | 无。 特选环境会提供便于部署的基础映像。 | 可以使用特选映像或自定义映像。 | 请提供可访问的容器映像位置(例如 docker.io、容器注册表或 Microsoft 工件注册表)或可使用容器注册表为容器构建/推送的 Dockerfile。 |
自定义依赖项 | 无。 特选环境会提供便于部署的依赖项。 | 请提供模型运行的 Azure 机器学习环境,不管是具有 Conda 依赖项的 Docker 映像还是 dockerfile。 | 自定义依赖项包含在容器映像中。 |
自定义代码 | 无。 评分脚本会自动生成,以便于部署。 | 请提供评分脚本。 | 评分脚本包含在容器映像中。 |
注意
AutoML 运行会自动为用户创建评分脚本和依赖项。 对于无代码部署,可以部署任何 AutoML 模型,而无需创作其他代码。 对于低代码部署,可以根据业务需求修改自动生成的脚本。 若要了解如何使用 AutoML 模型进行部署,请参阅如何将 AutoML 模型部署到联机终结点。
联机终结点调试
请尽可能在本地对终结点进行测试性运行,以在部署到 Azure 之前验证和调试代码和配置。 Azure CLI 和 Python SDK 支持本地终结点和部署,而 Azure 机器学习工作室和 ARM 模板则不支持本地终结点或部署。
Azure 机器学习提供以下方法,用于通过本地方式和使用容器日志的方式调试联机终结点:
使用 Azure 机器学习推理 HTTP 服务器进行本地调试
可以使用 Azure 机器学习推理 HTTP 服务器在本地调试评分脚本。 HTTP 服务器是一个 Python 包,它以 HTTP 终结点的形式公开评分函数,并将 Flask 服务器代码和依赖项包装到单个包中。
Azure 机器学习在用于部署模型的适用于推理的预生成 Docker 映像中包含一个 HTTP 服务器。 单独使用包,可以在本地部署用于生产的模型,还可以在本地开发环境中轻松验证入口评分脚本。 如果评分脚本有问题,服务器会返回错误和发生错误的位置。 也可以使用 Visual Studio Code 通过 Azure 机器学习推理 HTTP 服务器进行调试。
提示
可以使用 Azure 机器学习推理 HTTP 服务器 Python 包在本地调试评分脚本而无需 Docker 引擎。 使用推理服务器进行调试有助于在部署到本地终结点之前调试评分脚本,以便在不受部署容器配置影响的情况下进行调试。
若要详细了解如何使用 HTTP 服务器进行调试,请参阅使用 Azure 机器学习推理 HTTP 服务器调试评分脚本。
使用本地终结点进行本地调试
对于本地调试,你需要一个部署到本地 Docker 环境的模型。 可以使用此本地部署在部署到云之前进行测试和调试。
若要在本地进行部署,需要安装并运行 Docker 引擎。 Azure 机器学习随后会创建一个用于模拟联机映像的本地 Docker 映像。 Azure 机器学习会在本地为你生成并运行部署,并缓存映像以进行快速迭代。
提示
如果计算机启动时 Docker 引擎没有启动,可以对 Docker 引擎进行故障排除。 可以使用 Docker Desktop 等客户端工具调试容器中发生的情况。
本地调试通常涉及以下步骤:
- 首先,检查本地部署是否成功。
- 接下来,调用本地终结点进行推理。
- 最后,查看
invoke
操作的输出日志。
本地终结点具有以下限制:
不支持流量规则、身份验证或探测设置。
仅支持每个终结点一个部署。
仅支持本地模型文件和包含本地 conda 文件的环境。
有关本地调试的详细信息,请参阅使用本地终结点在本地进行部署和调试。
使用本地终结点和 Visual Studio Code 进行本地调试(预览版)
重要
此功能目前处于公开预览状态。 此预览版在提供时没有附带服务级别协议,我们不建议将其用于生产工作负荷。 某些功能可能不受支持或者受限。
有关详细信息,请参阅适用于 Azure 预览版的补充使用条款。
与本地调试一样,你需要安装并运行 Docker 引擎,然后将模型部署到本地 Docker 环境。 完成本地部署后,Azure 机器学习本地终结点将使用 Docker 和 Visual Studio Code 开发容器(开发容器)来构建和配置本地调试环境。
借助开发容器,你可以使用 Docker 容器中的 Visual Studio Code 功能,如交互式调试。 若要详细了解如何在 Visual Studio Code 中以交互方式调试联机终结点,请参阅在 Visual Studio Code 中以本地方式调试联机终结点。
使用容器日志进行调试
无法直接访问部署模型的 VM,但可以从 VM 上运行的以下容器中获取日志:
- 推理服务器控制台日志包含来自评分脚本 score.py 代码的打印/日志记录函数的输出。
- 存储初始化表达式日志包含有关代码和模型数据是否已成功下载到容器的信息。 该容器会在推理服务器容器开始运行之前运行。
若要详细了解如何使用容器日志进行调试,请参阅获取容器日志。
流量路由和镜像到联机部署
单个联机终结点可以包含多个部署。 当终结点接收传入流量请求时,它可以将一定百分比的流量路由到每个部署,如本机蓝/绿部署策略中的那样。 终结点还可以将流量从一个部署镜像或复制到另一个部署(称为流量镜像或影子处理)。
蓝/绿部署的流量路由
蓝/绿部署是一种部署策略,让你可以在完全推出新的绿色部署之前向一小部分用户或请求推出它。 终结点可以实现负载均衡,将一定比例的流量分配给每个部署,所有部署的总分配量加起来可达 100%。
提示
请求可以通过包含 azureml-model-deployment
HTTP 头来绕过配置的流量负载均衡。 请将头值设置为请求要路由到的部署的名称。
下图显示了Azure 机器学习工作室中用于在蓝色和绿色部署之间分配流量的设置。
上述流量分配将 10% 的流量路由至绿色部署,将 90% 的流量路由至蓝色部署,如下图所示。
联机部署流量镜像
终结点还可以将流量从一个部署镜像或复制到另一个部署。 想要使用生产流量测试新部署而不影响客户从现有部署收到的结果时,可以使用流量镜像(也称为影子测试)。
例如,可以实施一个蓝/绿部署,其中 100% 的流量路由到蓝色部署,10% 的流量镜像到绿色部署。 不会将发往绿色部署的已镜像流量的结果返回到客户端,但会记录指标和日志。
若要详细了解如何使用流量镜像,请参阅针对实时推理执行新部署的安全推出。
更多联机终结点功能
以下部分介绍 Azure 机器学习联机终结点的其他功能。
身份验证和加密
- 身份验证:密钥和 Azure 机器学习令牌
- 托管标识:用户分配的和系统分配的
- 终结点调用默认使用安全套接字层 (SSL)
自动缩放
自动缩放会自动运行适量的资源来处理应用程序的负载。 托管终结点支持通过与 Azure Monitor 自动缩放功能的集成进行自动缩放。 可以配置基于指标的缩放(例如 CPU 利用率 >70%)、基于计划的缩放(例如高峰营业时间规则)或两者的组合。
有关详细信息,请参阅 Azure 机器学习中的自动缩放联机终结点。
托管网络隔离
将机器学习模型部署到托管联机终结点时,可以使用专用终结点来保护与联机终结点的通信。 可以分别为入站评分请求和出站通信配置安全性。
入站通信使用 Azure 机器学习工作区的专用终结点,而出站通信使用为工作区的托管虚拟网络创建的专用终结点。 有关详细信息,请参阅托管联机终结点的网络隔离。
监视联机终结点和部署
Azure 机器学习终结点与 Azure Monitor 集成。 使用 Azure Monitor 集成,你可以查看图表中的指标、配置警报、查询日志表,以及通过 Application Insights 分析来自用户容器的事件。 有关详细信息,请参阅监视联机终结点。
联机部署中的机密注入(预览版)
联机部署的机密注入涉及从机密存储检索机密(例如 API 密钥)并将机密注入到在部署内运行的用户容器中。 为了向运行评分脚本或 BYOC 部署中的推理堆栈的推理服务器提供安全的机密使用,你可以使用环境变量来访问机密。
可以使用托管标识自行注入机密,也可以使用机密注入功能注入机密。 有关详细信息,请参阅联机终结点中的机密注入(预览版)。