本文介绍了使用机器学习和计算群集的多模型体系结构。 对于需要复杂设置的情况,它提供了出色的通用性。
使用 Spark 在 Azure 大规模实现多模型机器学习这篇配套文章在 Azure Databricks 或 Azure Synapse Analytics 中使用 Apache Spark。
下载此体系结构的 Visio 文件。
数据引入:
- Azure 数据工厂从源数据库拉取数据,并将其复制到 Azure Data Lake Storage。
- 然后,数据以表格数据集的形式存储在机器学习数据存储中。
Model-Training 管道:
-
准备数据:
- 训练管道从数据存储拉取数据,并根据需要进一步转换数据。
- 数据分组到数据集中,用于训练模型。
-
训练模型:
- 管道训练数据准备期间创建的所有数据集的模型。
- 它使用
ParallelRunStep
类并行训练多个模型。 - 训练后,管道会在机器学习中注册模型及其测试指标。
-
准备数据:
Model-Promotion 管道:
-
评估模型:
- 升级管道会在将训练的模型移动到生产环境之前对其进行评估。
- DevOps 管道应用业务逻辑来确定模型是否符合部署条件(例如,检查测试数据的准确性是否超过 80%)。
-
注册模型:
- 升级管道将符合条件的模型注册到生产机器学习工作区中。
-
评估模型:
模型 Batch-Scoring 管道:
-
准备数据:
- 批处理评分管道从数据存储拉取数据,并根据需要进一步转换每个文件。
- 数据分组到数据集进行评分。
-
评分模型:
- 管道使用
ParallelRunStep
类并行对多个数据集进行评分。 - 它通过搜索模型标记来标识机器学习中每个数据集的相应模型。
- 模型已下载并用于为数据集评分。
-
DataTransferStep
类用于将结果写回到 Azure Data Lake。 - 然后,将预测从 Azure Data Lake 传递到 Synapse SQL 以供服务。
- 管道使用
-
准备数据:
Real-Time 评分:
- 托管联机终结点用于提供实时评分。
- 由于模型数量众多,因此按需加载模型,而不是预加载模型。
结果:
- 预测:批处理/评分管道将预测结果保存到 Synapse SQL。
- 指标:Power BI 连接到模型预测结果来检索和聚合结果以供显示。
Azure 数据工厂 是一种基于云的数据集成服务,它允许创建数据驱动的工作流,以便协调和自动化数据移动和转换。 在此体系结构中,Azure 数据工厂用于将企业数据和第三方元数据引入 Azure Data Lake Storage。
Azure 流分析 是一项实时分析和复杂的事件处理服务,旨在分析和处理大量快速流数据。 在此体系结构中,Azure 流分析可用于实时数据处理,尽管工作流中未显式显示。
Azure 机器学习是一项企业级机器学习服务,可以快速生成和部署模型。 它为用户提供了各种技能级别的工具,例如低代码设计器、自动化 ML(AutoML)和支持各种 IDE 的托管 Jupyter 笔记本环境。 在此体系结构中,Azure 机器学习用于管理机器学习模型的生命周期,包括训练、评估、部署和协调管道,例如训练、推广和评分。
托管联机终结点 是 Azure 机器学习的一项功能,用于实时评分。 在此体系结构中,它提供了一种可缩放且安全的方法来按需加载机器学习模型,以近乎实时的方式提供预测。
ParallelRunStep 是 Azure 机器学习管道的一个组件,用于高效运行并行作业。 它支持可缩放的批处理执行,例如同时训练或评分多个模型。 在此体系结构中,
ParallelRunStep
用于模型定型管道和批处理评分管道,以并行训练或评分多个数据集或模型,显著减少了这些操作的运行时。Azure Data Lake Storage 是一种高度可缩放且安全的存储服务,适用于高性能分析工作负荷。 在此体系结构中,Azure Data Lake Storage 充当原始数据集和已转换数据集的主存储层,以及存储来自评分管道的结果。
Azure Synapse Analytics 是一种分析服务,它将数据集成、企业数据仓库和大数据分析统一起来。 此体系结构用于存储批处理评分结果,从而为报告或分析提供高效的查询和检索预测。 Synapse SQL 专门用于为下游应用程序提供预测,并使 Power BI 等可视化工具能够访问聚合结果。
Azure SQL 数据库 是一种完全托管的关系数据库即服务。 在此体系结构中,Azure SQL 数据库用于存储结构化数据,这些数据可能被查询或分析为数据管道的一部分。
Azure DevOps 是一组开发人员服务,提供全面的应用程序和基础结构生命周期管理。 它包括用于工作跟踪、源代码管理、生成和 CI/CD、包管理和测试解决方案的工具。 在此体系结构中,Azure DevOps 用于管理 CI/CD 管道,以便自动将模型提升、测试和部署到生产环境。
Microsoft Power BI 是软件服务、应用和连接器的集合,它们相互配合,将不相关的数据源转换为一致的、视觉沉浸的交互式见解。 在此体系结构中,Power BI 连接到 Synapse SQL,通过交互式仪表板检索和呈现预测和聚合指标。
- 源数据可来自任何数据库。
- 可以使用 Azure Kubernetes 服务 (AKS) 进行实时推理,而不是托管联机终结点。 AKS 允许部署容器化模型,并提供对部署的更多控制,使模型的动态加载能够处理传入的请求,而无需耗尽资源。
许多机器学习问题过于复杂,单个机器学习模型无法解决。 无论是要预测每家商店每件商品的销售情况,还是为数百口油井的维护进行建模,向每个实例提供一个模型可改善许多机器学习问题的结果。 这种多模型模式在各行各业中都很常见,并且有许多真实的用例。 使用 Azure 机器学习时,端到端多模型管道可包括模型训练、批处理推理部署和实时部署。
多模型解决方案要求对训练和评分期间的每个模型使用不同的数据集。 例如,如果任务是要预测每家商店每件商品的销售情况,每个数据集将针对商品和商店的唯一组合。
- 零售:一家连锁杂货店需要为每个店铺和商品创建一个单独的收入预测模型,每个店铺总计需要超过 1,000 个模型。
- 供应链:对于每个仓库加产品组合,分销公司都需要优化库存。
- 餐厅:一家拥有数千个特许经营的连锁店需要预测每个特许经营的需求。
这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负荷质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架。
- 数据分区 对数据进行分区是实现多模型模式的关键。 如果希望每家商品一个模型,一个数据库要包含一家商店的所有数据,并且数据集的数量与商店数量一致。 如果希望按商店对产品建模,则每个产品加商店组合都将由一个数据集。 根据源数据格式,可能很容易对数据进行分区,或者也可能需要大量数据混排和转换。 对于此类任务,Spark 和 Synapse SQL 能很好地进行缩放,而 Python pandas 则没法做法,因为它仅在一个节点和进程上运行。
- 模型管理:训练管道和评分管道为每个数据集标识和调用适当的模型。 为此,它们会计算确定数据集特征的标记,然后使用标记查找匹配的模型。 这些标记会标识数据分区键和模型版本,还可能提供其他信息。
- 选择适当的体系结构:
- 如果训练管道具有复杂的数据转换和分组要求,则适合使用 Spark。 它提供了灵活的拆分和分组技术,按特征组合(例如,产品-商店或位置-产品)对数据进行分组。 结果可放置在 Spark 数据帧中,以供后续步骤使用。
- 如果机器学习训练和评分算法非常简单,也许能够使用 Scikit-learn 等库对数据进行分区。 在这种情况下,你可能不需要 Spark,因此你可避免在安装 Azure Synapse 或 Azure Databricks 时可能出现的复杂性。
- 如果已创建训练数据集(例如,它们位于单独的文件或单独的行/列中),那么就不需要 Spark 进行复杂的数据转换。
- 对于需要复杂设置的情况,机器学习和计算群集解决方案提供了出色的通用性。 例如,你可使用自定义 Docker 容器、下载文件,或者下载已预先训练的模型。 计算机视觉和自然语言处理 (NLP) 深度学习是可能需要这种通用性的应用程序示例。
- 单独的模型存储库:要保护已部署的模型,请考虑将它们存储在训练管道和测试管理不会涉及的自身存储库中。
- ParallelRunStep 类:Python ParallelRunStep 类是运行多模型训练和推理的强大选项。 它可以多种方式对数据进行分区,然后将机器学习脚本并行应用于分区的元素。 与其他形式的机器学习训练一样,可以指定一个有权访问 Python 包索引 (PyPI) 包的自定义训练环境,或者指定一个更高级的自定义 Docker 环境用于需要比标准 PyPI 更多的配置。 有许多 CPU 和 GPU 可供选择。
- 联机推理:如果管道在开始时加载并缓存了所有模型,则模型可能会耗尽容器的内存。 因此,在 run 方法中按需加载模型,即使这可能会略微增加延迟。
成本优化是关于寻找减少不必要的费用和提高运营效率的方法。 有关详细信息,请参阅成本优化设计评审核对清单。
为了更好地了解在 Azure 上运行此方案的成本,请使用定价计算器。 好的开始假设是:
- 每天都训练服务模型,使其保持最新。
- 如果一个数据集有 4000 万行,它包含 1 万个商店加产品组合,那么要是通过使用 Ls16_v2 实例的 12 个 VM 预配的群集对 Azure Databricks 进行训练,大约需要 30 分钟时间。
- 使用这一组数据进行批量评分大约需要 20 分钟时间。
- 可使用机器学习来部署实时推理。 根据你的请求量,请选择适当的 VM 类型和群集大小。
- AKS 群集根据需要自动缩放,这使得每月平均两个节点处于活动状态。
要查看对你的用例来说定价有何不同,请更改变量,使其匹配你的预期数据大小和服务负载需求。 对于更大或更小的训练数据大小,请增加或减小 Azure Databricks 群集的大小。 要在模型服务期间处理更多并发用户,请增加 AKS 群集大小。
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
首席作者:
- James Nguyen | 首席云解决方案架构师