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