你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在生产环境中部署机器学习模型
本文介绍使用 Azure 机器学习 在生产环境中部署机器学习模型的最佳做法。 在生产环境中部署机器学习模型对于使用 AI 增强其运营的组织来说非常重要。 它可以是一个复杂的过程,但本文可帮助你了解这些步骤。
体系结构注意事项
选择正确的部署方法。 每个部署方法都有优点和缺点。 请务必选择最适合组织需求的选择。 有两个主要部署方法:
实时 (联机)推理在接收时处理输入数据,通常要求低延迟。 低延迟对于需要即时响应的应用程序非常重要,例如欺诈检测、语音识别或建议系统。 实时推理比批处理推理更复杂、更昂贵,因为它需要更快、更可靠的基础结构。 用于实时推理的基础计算通常持续运行,以更快地为服务请求提供服务。
批处理 (脱机)推理一次性处理大量输入数据,而不是实时处理每个输入数据点。 批处理推理非常适合需要高效处理但响应时间并不重要的大型数据卷方案。 例如,可以使用批处理推理来处理大型图像数据集,机器学习模型一次对所有图像进行预测。 批处理推理比实时推理成本更低且效率更高。 批处理推理的基础计算通常仅在批处理作业期间运行。
机器学习使用终结点实时和批处理方案部署模型。 终结点提供了一个统一的接口,以用于跨计算类型调用和管理模型部署。 托管联机终结点为推理提供、缩放、保护和监视机器学习模型。
有关详细信息,请参阅本文中的以下部分: 部署方法。
确保一致性。 必须跨环境(如开发、过渡和生产)一致地部署模型。 使用容器化或虚拟化技术(如机器学习环境)提供一致性并封装环境。
监视性能。 模型部署到生产环境后,应跟踪指标(如准确性、延迟和吞吐量),并设置警报,以在性能低于可接受的级别时通知你。 使用 Application Insights 和 托管终结点 的内置监视功能查看指标并创建警报。
实施安全措施。 保护数据和系统。 可以设置身份验证和访问控制、加密传输中的数据和静态数据、使用网络安全和监视可疑活动。
创建更新计划。 机器学习模型需要更新,因为新的数据和新的算法可用。 在生产环境中部署模型之前,必须创建一个过程来测试和验证更新的模型。 蓝/绿部署是更新生产中的机器学习模型的常见策略。 使用蓝/绿部署,可以将模型更新到新环境,对其进行测试,然后在验证模型后切换到新模型。 蓝/绿部署可确保更新后的模型的潜在问题不会影响客户。 有关详细信息,请参阅 本机蓝/绿部署。
部署方法
请考虑以下问题来评估模型、比较两种部署方法,并选择适合模型的方法:
- 预测应多久生成一次?
- 需要结果多久?
- 预测是立即存储还是立即使用?
- 预测是单独生成、小批量还是大批量生成?
- 模型是否预期延迟?
- 模型需要运行多少计算能力?
- 维护模型是否会产生运营影响和成本?
- 预测是如何触发的? 它是基于事件的还是计划的?
请参阅以下决策树来确定最适合你的用例的部署模型:
批量推理
批处理推理是一个简单的过程,使模型能够按时间间隔或基于触发器运行。 通过批处理推理,业务应用程序可以存储预测。
请考虑以下批量推理的最佳做法:
使用 API 运行批处理操作。 使用 批处理终结点 创建持久 HTTPS 终结点,用于为计划或基于事件的数据管道触发批处理评分作业。 该 API 可以与支持 REST API 调用的任何数据业务流程平台集成。 有关详细信息,请参阅本部分中的 Batch 集成项目符号点和 部署模型,以便在批处理终结点中评分。
计算选项。 批处理推理进程通常不会持续运行,因此自动启动、停止和缩放可处理一系列工作负荷的可重用群集非常有用。 不同的模型通常需要不同的环境。 解决方案需要部署特定的环境,并在推理完成后将其删除。 自动化使计算可用于下一个模型。 若要降低成本,请将 低优先级虚拟机 用于计算节点。
重要
计算节点的大小非常重要。 如果节点太小,批处理推理作业需要更长的时间。 如果节点太大,则作业成本更高。 测试和监视计算节点,以确定模型的正确大小。
考虑可伸缩性需求。 为了提高性能,机器学习支持启用可缩放处理的功能。 在机器学习批处理终结点部署期间定义计算节点数和最大并发参数数。 可以覆盖每个作业的参数,从而为客户提供运行时灵活性和现用并行度。 这些功能适用于表格和基于文件的推理。
批处理推理挑战。 批处理推理是一种更简单的方法,可用于在生产环境中使用和部署模型,但它确实提出了自己的一组挑战。
根据推理运行的频率,生成的预测在访问时可能无关紧要。
部署到多个区域并设计用于高可用性的解决方案在批处理推理方案中并不重要,因为模型未在区域部署。 但数据存储可能需要在许多位置使用高可用性策略进行部署。 部署应遵循应用程序高可用性设计和策略。
在批处理推理期间生成的数据可能会部分失败。 例如,如果计划管道触发批处理推理作业,并且管道失败,则批处理推理作业生成的数据可能不完整。 部分重启是批处理推理的常见问题。 一种解决方案是对数据使用暂存区域,并且仅在批处理推理作业成功完成后将数据移动到最终目标。 另一种解决方案是维护处理的每个文件的记录或事务,并将该记录与输入文件列表进行比较以避免重复。 此方法将逻辑合并到评分脚本中。 此解决方案更为复杂,但如果批处理推理作业失败,则可以自定义失败逻辑。
安全要求。 使用身份验证和授权来控制对批处理终结点的访问以提高安全性。
Batch 集成。 机器学习批处理终结点使用开放 API。 Batch 推理可以与其他 Azure 服务(如 Azure 数据工厂、Azure Databricks 和 Azure Synapse Analytics)集成,以构成较大数据管道的一部分。 例如,您可以使用:
- 用于协调批处理推理过程的数据工厂。
- Azure Databricks 准备用于批量推理的数据。
- 机器学习运行批处理推理过程。
- Azure Synapse Analytics 用于存储后续预测。
Batch 终结点支持 Microsoft Entra ID 进行授权。 对 API 的请求需要适当的身份验证。 Azure 服务(例如数据工厂)支持使用服务主体或托管标识对批处理终结点进行身份验证。 有关详细信息,请参阅 从数据工厂运行批处理终结点。
若要选择用于批处理输入和输出处理的最佳方法,请务必了解数据如何在数据管道的各个阶段移动。 可以使用 SDK 直接通过批处理终结点评分脚本访问 Azure 数据服务,但使用机器学习已注册的数据存储更为简单、安全且可审核。 对于第三方数据源,请使用数据处理引擎(例如数据工厂、Azure Databricks 或 Azure Synapse Analytics)为批处理推理准备数据并应用推理后处理。
MLflow。 在模型开发过程中使用开源框架 MLflow。 机器学习支持使用 MLflow 创建和记录的模型的无代码部署。 将 MLflow 模型部署到批处理终结点时,无需指示评分脚本或环境。
实时推理
实时推理是一种方法,可用于随时触发模型推理并提供即时响应。 使用此方法分析流数据或交互式应用程序数据。
请考虑以下有关实时推理的最佳做法:
计算选项。 实现实时推理的最佳方式是将联机终结点中的模型部署到托管联机终结点或 Kubernetes 联机终结点。 托管联机终结点使用 Azure 中的 CPU 或 GPU 计算机立即部署机器学习模型。 此方法可缩放且完全托管。 Kubernetes 联机终结点部署模型,并在完全配置的托管 Kubernetes 群集上提供联机终结点。 有关详细信息,请参阅 托管联机终结点与 Kubernetes 联机终结点。
多区域部署和高可用性。 区域部署和高可用性体系结构是实时推理方案的示例,因为延迟和模型性能至关重要。 若要减少多区域部署中的延迟,请找到尽可能接近消耗点的模型。 对于模型和支持基础结构,请遵循企业的高可用性和灾难恢复原则和策略。
实时推理挑战。
- 由于延迟和性能要求,实时推理更为复杂。 简单的实时系统通过 HTTP 请求接收输入并返回预测。 但复杂的系统可能需要以 100 毫秒或更少的时间做出响应。 在此期间,它会检索数据、执行特征工程、执行推理、验证和存储模型结果、运行业务逻辑并将结果返回到系统或应用程序。
- 将功能工程卸载到低延迟数据存储、缓存服务或专用功能存储。 特征存储是一个集中式存储库,使数据科学家能够查找和共享特征。 功能存储可确保用于计算特征值的相同代码也用于模型训练和推理。
安全要求。 为了增强安全性,请使用身份验证和授权来控制对联机终结点的访问。
- 具有入口保护的联机终结点仅接受来自虚拟网络内部主机的评分请求。 它不接受来自公共 Internet 的评分请求。 在启用了专用链接的工作区中创建的联机终结点具有入口保护。 有关详细信息,请参阅 将网络隔离与托管联机终结点配合使用。
- 使用 Microsoft Entra 令牌进行控制平面身份验证。 对于数据平面操作, 支持基于密钥和基于 令牌的方法。 基于令牌的方法是首选方法,因为令牌过期。 使用 Azure 基于角色的访问控制(RBAC)限制对联机终结点的访问和检索密钥或令牌。
- 在终结点上使用 SSL 加密,该加密默认为机器学习终结点调用启用。
实时集成。 通过将 SDK 用于不同语言,并使用 REST API 调用终结点,将实时推理与其他 Azure 服务集成。 可以将联机终结点作为应用程序代码的一部分调用。
MLflow。 在模型开发过程中使用开源框架 MLflow。 机器学习支持使用 MLflow 创建和记录的模型的无代码部署。 将 MLflow 模型部署到联机终结点时,无需指示评分脚本或环境。
保险箱推出。 将分阶段更新部署到机器学习模型,以确保模型按预期执行。 使用机器学习安全推出策略将模型部署到终结点,对模型执行测试,并逐渐增加到新模型的流量。 利用镜像流量镜像到新模型的实时流量百分比进行额外验证。 流量镜像(也称为阴影)不会更改返回到客户端的结果。 所有请求仍流向原始模型。 有关详细信息,请参阅联机终结点保险箱推出。
其他注意事项
在生产环境中部署机器学习模型时,请记住这些注意事项。
ONNX
若要优化机器学习模型的推理,请使用开放式神经网络交换(ONNX)。 优化模型时,尤其是使用不同的平台(例如云/边缘或 CPU/GPU)时,充分利用硬件功能可能会面临挑战。 可以训练新模型或将现有模型从另一种格式转换为 ONNX。
多模型方案
单一模型可能无法捕获现实世界问题的复杂性质。 例如,超市具有人口统计、品牌、SKU 和其他不同区域的功能,这使得创建单个销售预测模型是一个挑战。 同样,区域变化可能会给智能计量预测性维护模型带来挑战。 使用许多模型捕获区域数据或存储级关系,以提供比单个模型更高的准确度。 多模型方法假定有足够的数据可用于此粒度级别。
多模型方案有三个阶段:数据源、数据科学和许多模型。
数据源。 在数据源阶段,必须将数据分段为几个元素。 例如,不要将产品 ID 或条形码纳入主分区,因为它产生过多的段,并可能会抑制有意义的模型。 品牌、SKU 或区域是更合适的元素。 请务必通过删除可能会扭曲数据分布的异常来简化数据。
数据科学。 在数据科学阶段,多个试验与每个数据段并行运行。 多模型试验是一个迭代过程,用于评估模型以确定最佳模型。
许多模型。 每个细分或类别的最佳模型在模型注册表中注册。 为模型分配有意义的名称,使其更易于发现推理。 必要时使用标记将模型分组到特定类别中。
许多模型的批量推理
对于许多模型,在批处理推理期间,预测按定期计划进行,并且可以处理同时运行的大量数据。 与单模型方案不同,多模型推理同时发生。
许多用于批量推理的模型对单托管终结点使用多个部署。 特定模型的批处理推理在 REST 或 SDK 调用期间调用部署名称。 有关详细信息,请参阅 将多个模型部署到一个部署。
许多模型的实时推理
可以将多个模型部署到单托管联机终结点,可以通过 REST API 或 SDK 调用该终结点。 创建部署时,请在 Azure 上将多个模型注册为单个“已注册模型”。 将多个模型包含在同一目录中,并将该目录作为单个模型的路径传递。 模型将加载到按其名称进行键键的字典中。 收到 REST 请求后,将从 JSON 有效负载中检索所需的模型,相关模型对有效负载进行评分。
使用此技术在多模型部署中加载的模型必须共享相同的 Python 版本,并且没有冲突的依赖项。 即使它们不严格具有相同的依赖项,也必须同时导入其库。
有关示例,请参阅 使用自定义容器创建多模型部署。
后续步骤
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈