本文介绍了使用机器学习和计算群集的多模型体系结构。 对于需要复杂设置的情况,它提供了出色的通用性。
使用 Spark 在 Azure 大规模实现多模型机器学习 (ML) 这篇配套文章在 Azure Databricks 或 Azure Synapse Analytics 中使用 Apache Spark。
体系结构
下载此体系结构的 Visio 文件。
工作流
- 数据引入:Azure 数据工厂从源数据库中提取数据,并将数据复制到 Azure Data Lake Storage。 然后,它将数据作为表格数据集存储在机器学习数据存储中。
- 模型训练管道:
- 准备数据:训练管道从数据存储提取数据,并根据需要进一步转换数据。 它还将数据分组到数据集中,用于训练模型。
- 训练模型:管道针对数据准备过程中创建的所有数据集训练模型。 它使用 ParallelRunStep 类并行训练多个模型。 在训练模型后,管道会将模型与测试指标一起注册到机器学习。
- 模型提升管道:
- 评估模型:提升管道在将已训练的模型移到生产环境之前对其进行评估。 DevOps 管道应用业务逻辑来确定模型是否符合部署的条件。 例如,它可能会检查测试数据的准确性是否超过 80%。
- 注册模型:提升管道注册符合机器学习“生产”工作区的模型。
- 模型批处理/评分管道:
- 准备数据:批处理/评分管道从数据存储拉取数据,并根据需要进一步转换每个文件。 它还将数据分组到数据集中进行评分。
- 评分模型:管道使用 ParallelRunStep 类对多个数据集进行并行评分。 它通过搜索模型标记,在机器学习中查找适合每个数据集的模型。 然后,它会下载该模型并使用它来对数据集进行评分。 它使用 DataTransferStep 类将结果写回到 Azure Data Lake,然后将预测结果从 Azure Data Lake 传递给 Synapse SQL 来提供服务。
- 实时评分:Azure Kubernetes 服务 (AKS) 可在需要时进行实时评分。 由于模型数量很多,所以应按需加载模型,而不是预先加载。
- 结果:
- 预测:批处理/评分管道将预测结果保存到 Synapse SQL。
- 指标:Power BI 连接到模型预测结果来检索和聚合结果以供显示。
组件
- Azure 机器学习是一项企业级 ML 服务,可快速构建和部署模型。 它为各种技能级别的用户提供低代码设计器、自动化 ML (AutoML) 和托管的 Jupyter 笔记本环境(该环境支持各种 IDE)。
- Azure Databricks 是一种基于云的数据工程工具,基于 Apache Spark。 它可处理和转换大量数据,并使用 ML 模型来公开这些数据。 可使用 R、Python、Java、Scala 和 Spark SQL 来编写它。
- Azure Synapse Analytics 是一种分析服务,它将数据集成、企业数据仓库和大数据分析统一起来。
- Synapse SQL 是 T-SQL 的分布式查询系统,它实现了数据仓库和数据虚拟化方案,还扩展了 T-SQL 来应对流式处理和 ML 方案。 它既提供了无服务器资源模型,还提供专用资源模型。
- Azure Data Lake Storage 是一种高度可缩放且安全的存储服务,适用于高性能分析工作负载。
- Azure Kubernetes 服务 (AKS) 是一项完全托管的 Kubernetes 服务,用于部署和管理容器化应用程序。 AKS 通过将操作开销分流到 Azure,简化了 Azure 中托管 AKS 群集的部署。
- Azure DevOps 是一组开发人员服务,提供全面的应用程序和基础结构生命周期管理。 DevOps 包括工作跟踪、源代码管理、生成和 CI/CD、包管理和测试解决方案。
- Microsoft Power BI 是软件服务、应用和连接器的集合,它们相互配合,将不相关的数据源转换为一致的、视觉沉浸的交互式见解。
备选方法
- 源数据可来自任何数据库。
- 可使用托管的联机终结点或 AKS 来部署实时推理。
方案详细信息
许多机器学习 (ML) 问题太过复杂,单个 ML 模型没法解决。 无论是要预测每家商店每件商品的销售情况,还是为数百口油井的维护进行建模,向每个实例提供一个模型可改善许多 ML 问题的结果。 这种多模型模式在各行各业中都很常见,并且有许多真实的用例。 使用 Azure 机器学习时,端到端多模型管道可包括模型训练、批处理推理部署和实时部署。
多模型解决方案要求对训练和评分期间的每个模型使用不同的数据集。 例如,如果任务是要预测每家商店每件商品的销售情况,每个数据集将针对商品和商店的唯一组合。
可能的用例
- 零售:一家连锁杂货店需要为每个店铺和商品创建一个单独的收入预测模型,每个店铺总计需要超过 1,000 个模型。
- 供应链:对于每个仓库加产品组合,分销公司都需要优化库存。
- 餐厅:一家拥有数千个特许经营的连锁店需要预测每个特许经营的需求。
注意事项
这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负载质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架。
- 数据分区 对数据进行分区是实现多模型模式的关键。 如果希望每家商品一个模型,一个数据库要包含一家商店的所有数据,并且数据集的数量与商店数量一致。 如果希望按商店对产品建模,则每个产品加商店组合都将由一个数据集。 根据源数据格式,可能很容易对数据进行分区,也可能需要大量数据混排和转换。 对于此类任务,Spark 和 Synapse SQL 能很好地进行缩放,而 Python pandas 则没法做法,因为它仅在一个节点和进程上运行。
- 模型管理:训练管道和评分管道为每个数据集标识和调用适当的模型。 为此,它们会计算确定数据集特征的标记,然后使用标记查找匹配的模型。 这些标记会标识数据分区键和模型版本,还可能提供其他信息。
- 选择适当的体系结构:
- 如果训练管道具有复杂的数据转换和分组要求,则适合使用 Spark。 它提供了灵活的拆分和分组技术,按特征组合(例如,产品-商店或位置-产品)对数据进行分组。 结果可放置在 Spark 数据帧中,以供后续步骤使用。
- 当你的 ML 训练和评分算法非常简单时,你也许能够使用 Scikit-learn 等库对数据进行分区。 在这种情况下,你可能不需要 Spark,因此你可避免在安装 Azure Synapse 或 Azure Databricks 时可能出现的复杂性。
- 如果已创建训练数据集(例如,它们位于单独的文件或单独的行/列中),那么你不需要 Spark 进行复杂的数据转换。
- 对于需要复杂设置的情况,机器学习和计算群集解决方案提供了出色的通用性。 例如,你可使用自定义 Docker 容器、下载文件,或者下载已预先训练的模型。 计算机视觉和自然语言处理 (NLP) 深度学习是可能需要这种通用性的应用程序示例。
- Spark 训练和评分:使用 Spark 体系结构时,可使用 Spark pandas 函数 API 进行并行训练和评分。
- 单独的模型存储库:若要保护已部署的模型,请考虑将它们存储在训练管道和测试管理不会涉及的自身存储库中。
- ParallelRunStep 类:Python ParallelRunStep 类是运行多模型训练和推理的强大选项。 它可以多种方式对数据进行分区,然后将 ML 脚本并行应用于分区的元素。 与其他形式的机器学习训练一样,你可指定一个有权访问 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 | 首席云解决方案架构师
后续步骤
- 配置 Kubernetes 群集以进行 Azure 机器学习
- 多模型解决方案加速器
- ParallelRunStep 类
- DataTransferStep 类
- 连接到 Azure 上的存储服务
- 什么是 Azure Synapse Analytics?
- 将模型部署到 Azure Kubernetes 服务群集