本体系结构指南演示如何生成一个可缩放的解决方案,以对模型 Azure 机器学习进行批量评分。 此解决方案可以用作模板并推广到不同的问题。
体系结构
下载此体系结构的 Visio 文件。
工作流
此体系结构指南适用于流式处理和静态数据,前提是引入过程已适应数据类型。 以下步骤和组件描述了这两种类型的数据的引入。
流式处理数据:
- 流式处理数据源自 IoT 传感器,其中新事件频繁进行流式传输。
- 传入流式处理事件使用 Azure 事件中心排队,然后使用 Azure 流分析进行预处理。
- Azure 事件中心。 此消息引入服务可以每秒引入数百万条事件消息。 在此体系结构中,传感器将数据流发送到事件中心。
- Azure 流分析。 一个事件处理引擎。 流分析作业从事件中心读取数据流,并执行流处理操作。
静态数据:
- 可将静态数据集作为文件存储在 Azure Data Lake Storage 中,或者以表格格式存储在 Azure Synapse 或 Azure SQL 数据库中。
- Azure 数据工厂可用于聚合或预处理存储的数据集。
在数据引入后,剩余的体系结构与流式处理数据和静态数据相同,由以下步骤和组件组成:
- 可将引入、聚合和/或预处理的数据作为文档存储在 Azure Data Lake Storage 中,或者以表格格式存储在 Azure Synapse 或 Azure SQL 数据库中。 然后,Azure 机器学习将使用此数据。
- Azure 机器学习用于大规模训练、部署和管理机器学习模型。 在批量评分的上下文中,Azure 机器学习使用自动缩放选项创建虚拟机群集,其中作业与 Python 脚本并行执行。
- 模型部署为托管批处理终结点,然后用于针对一段时间内的大量数据执行批量推理。 批处理终结点接收指向数据的指针并以异步方式运行作业,以在计算群集上并行处理数据。
- 可将推理结果作为文档存储在 Azure Data Lake Storage 中,或者以表格格式存储在 Azure Synapse 或 Azure SQL 数据库中。
- 可视化:可以通过用户界面(例如 Power BI 仪表板)或通过定制的 Web 应用程序来使用存储的模型结果。
组件
- Azure 事件中心
- Azure 流分析
- Azure SQL 数据库
- Azure Synapse Analytics
- Azure Data Lake 存储
- Azure 数据工厂
- Azure 机器学习
- Azure 机器学习终结点
- Azure 上的 Microsoft Power BI
- Azure Web 应用
注意事项
这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负载质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架。
性能
对于标准 Python 模型,仅使用 CPU 通常就足以处理工作负荷。 此体系结构使用 CPU。 但是,对于深度学习工作负荷,GPU 通常会远远超出 CPU,通常需要相当大的 CPU 群集才可获得可比的性能。
跨 VM 和内核并行执行
以批处理模式运行许多模型的评分过程时,作业需跨 VM 实现并行化。 可使用两种方法:
- 使用低成本 VM 创建较大的群集。
- 使用高性能 VM 创建较小的群集,每个 VM 上提供的核心数较多。
通常情况下,为标准 Python 模型评分不像为深度学习模型评分那样苛刻,一个小的群集就可以有效地处理大量的排队模型。 可以在数据集大小增加时增加群集节点的数目。
在此方案中,为方便起见,将在单个 Azure 机器学习管道步骤中提交一个评分任务。 不过,在同一管道步骤中为多个数据区块评分可能更有效。 在这种情况下,请编写自定义代码,以便在多个数据集中进行读取,并在执行单个步骤期间执行评分脚本。
管理
- 监视作业。 监视正在运行的作业进度至关重要。 然而,在活动节点群集间进行监视可能是一项挑战。 若要检查群集中节点的状态,请使用 Azure 门户管理机器学习工作区。 如果节点处于非活动状态或作业失败,则错误日志将保存到 Blob 存储,并且还可以在管道部分访问这些日志。 若要进行更全面的监视,请将日志连接到 Application Insights,或运行单独的进程来轮询群集及其作业的状态。
- 日志记录。 机器学习将所有 stdout/stderr 记录到关联的 Azure 存储帐户中。 若要轻松查看日志文件,请使用 Azure 存储资源管理器等存储导航工具。
成本优化
成本优化是关于寻找减少不必要的费用和提高运营效率的方法。 有关详细信息,请参阅成本优化支柱概述。
在此体系结构指南中使用的最昂贵组件是计算资源。 计算群集大小根据队列中的作业增加和减少。 可以修改计算的预配配置,通过 Python SDK 以编程方式启用自动缩放。 或者使用 Azure CLI 设置群集的自动缩放参数。
对于无需立即处理的工作,可配置自动缩放公式,使默认状态(最小值)为零节点群集。 通过此配置,群集从零节点开始,仅在队列中检测到作业时才会增加。 如果批量评分进程一天只运行几次或更少,则此设置可大幅节省成本。
自动缩放可能不适用于彼此发生时间太接近的批处理作业。 因为群集启动和停止所需的时间会产生成本,如果批处理工作负荷在上一个作业结束后的几分钟内开始,则保持群集在作业之间运行可能更具成本效益。 此策略取决于评分过程是计划高频率运行(例如,每小时运行一次)还是低频率运行(例如,每月运行一次)。
作者
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
主要作者:
- Carlos Alexandre Santos | 高级专业 AI 云解决方案架构师
- Said Bleik | 首席应用科学家经理
若要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。
后续步骤
产品文档:
- 什么是 Azure Blob 存储?
- Azure 中的专用 Docker 容器注册表简介
- Azure 事件中心
- 什么是 Azure 机器学习?
- 什么是 Azure SQL 数据库?
- 欢迎使用 Azure 流分析
Microsoft Learn 模块:
- 部署 Azure SQL 数据库
- 使用 Azure 事件中心为大数据应用程序启用可靠消息传递
- 探索 Azure 事件中心
- 使用 Azure 流分析实现数据流解决方案
- 机器学习简介
- 管理 Azure 容器注册表中的容器映像