你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure Databricks 协调 MLOps

Azure Databricks

解决方案构想

本文介绍了一种解决方案构想。 云架构师可以通过本指南来帮助可视化此体系结构的典型实现的主要组件。 以本文为起点,设计一个符合工作负荷特定要求的架构合理的解决方案。

本文提供了机器学习操作 (MLOps) 体系结构和使用 Azure Databricks 的过程。 数据科学家和工程师可以使用这种标准化的过程将机器学习模型和管道从开发转移到生产。

此解决方案可以利用完全自动化、持续监视和可靠的协作,因此面向 MLOps 成熟度级别 4。 此体系结构使用生成模型方法而不是提升模型方法的提升代码。 生成模型方法的提升代码侧重于编写和管理生成机器学习模型的代码。 本文中的建议包括自动或手动流程的选项。

体系结构

该图显示将 Azure Databricks 用于 MLOps 的解决方案。

此图显示了此工作流的 12 个步骤。 Lakehouse 生产数据部分包括数据表、特征表和 Lakehouse 表模型指标。 源代码管理部分包括开发、暂存和发布环境。 源代码管理包括 Azure DevOps 和 GitHub。 在主开发环境中,步骤 1 探索数据分析从数据表读取数据。 步骤 2 模型训练从数据表和特征表读取数据。 步骤 3 将代码提交到源代码管理中的开发环境。 步骤 4 将请求合并到过渡环境。 源代码管理暂存环境在主暂存环境中触发步骤 5 单元和 CI 测试,该测试从功能表和数据表读取数据。 代码将合并到源代码管理暂存环境。 步骤 6 在发布环境中生成发布分支。 从发布环境指向主要生产环境的箭头显示“部署机器学习 Databricks 作业”。 在主生产环境中,步骤 7 功能表刷新从数据表读取数据,并将数据发送到特征表。 步骤 8 模型训练从偏移检测和模型重新训练中读取数据。 步骤 8 还会将模型推送到 Unity 目录。 步骤 9 模型评估和提升从 Unity 目录加载模型以供评估。 然后,它将模型发送到 Unity 目录中的暂存和生产环境。 步骤 10 模型部署加载模型以推断和读取功能表中的数据。 步骤 11 监视从功能表读取数据并读取 Lakehouse 表模型指标。 步骤 11 还会将数据写入 Lakehouse 表和 Azure Monitor。 步骤 12 模型重新训练指向步骤 8 和箭头状态触发模型重新训练。

下载此体系结构的 Visio 文件

工作流

以下工作流与上图相对应。 使用源代码管理和存储组件来管理和组织代码和数据。

源代码管理:此项目的代码存储库组织笔记本、模块和管道。 可以创建开发分支来测试更新和新模型。 在 Git 支持的笔记本或集成开发环境(IDE)中开发与 Git 文件夹 集成的代码,以便可以与 Azure Databricks 工作区同步。 源代码管理将机器学习管道从开发环境提升到过渡环境中的测试,以及生产环境中的部署。

Lakehouse 生产数据: 作为数据科学家,你对开发环境中的生产数据具有只读访问权限。 开发环境可以镜像数据和修订的机密数据。 在开发存储环境中,还可以进行读取和写入访问,以便进行开发和试验。 建议对 Azure Data Lake Storage 中存储 Delta Lake 格式数据的数据使用 Lakehouse 体系结构。 Lakehouse 提供可靠的、可缩放且灵活的数据管理解决方案。 若要定义访问控制,请使用 Microsoft Entra ID 凭据直通或表访问控制

以下环境包括主工作流。

开发

在开发环境中,开发机器学习管道。

  1. 执行探索数据分析(EDA): 在交互式迭代过程中浏览数据。 可能无法将此工作部署到过渡或生产环境。 使用 Databricks SQLdbutils.data.summarize 命令和 Databricks AutoML 等工具。

  2. 开发模型训练和其他机器学习管道:开发机器学习管道模块化代码,并通过 Databricks Notebook 或 MLFlow 项目协调代码。 在此体系结构中,模型训练管道从功能存储和其他 Lakehouse 表读取数据。 管道训练和优化 MLflow 跟踪服务器的日志模型参数和指标功能存储 API 记录最终模型。 这些日志包括模型、其输入和训练代码。

  3. 提交代码: 若要将机器学习工作流提升到生产环境,请向源代码管理提交特征化、训练和其他管道的代码。 在代码库中,将机器学习代码和操作代码放置在不同的文件夹中,以便团队成员可以同时开发代码。 机器学习代码是与模型和数据相关的代码。 操作代码是与 Databricks 作业和基础结构相关的代码。

编写和测试代码时执行的活动的核心周期称为 innerloop 进程。 若要为开发阶段执行 innerloop 过程,请使用 Visual Studio Code 与开发容器 CLI 和 Databricks CLI 结合使用。 可以编写代码并在本地执行单元测试。 还应从本地开发环境提交、监视和分析模型管道。

过渡

在过渡环境中,持续集成(CI)基础结构测试模拟生产环境中的机器学习管道的更改。

  1. 合并请求:在源代码管理中针对项目的暂存(主)分支提交合并请求或拉取请求时,Azure DevOps持续集成和持续交付(CI/CD)工具将运行测试。

  2. 运行单元测试和 CI 测试: 单元测试在 CI 基础结构中运行,集成测试在 Azure Databricks 上的端到端 工作流 中运行。 如果测试通过,代码更改将合并。

  3. 生成发布分支: 如果要将更新的机器学习管道部署到生产环境,可以生成新版本。 CI/CD 工具中的部署管道会将更新的管道重新部署为新工作流

生产

机器学习工程师管理生产环境,其中机器学习管道直接为最终应用程序提供服务。 生产中的关键管道刷新特征表、训练和部署新模型、运行推理或服务,并监视模型性能。

  1. 功能表刷新: 此管道读取数据、计算功能和写入 功能存储 表。 可以将此管道配置为在流模式中连续运行、按计划运行或在触发器上运行。

  2. 模型训练: 在生产环境中,可以将模型训练或重新训练管道配置为在触发器上运行,或计划来训练最新生产数据上的新模型。 模型会自动注册到 Unity 目录

  3. 模型评估和提升: 注册新的模型版本时,CD 管道会触发,该管道会运行测试,以确保模型在生产环境中表现良好。 当模型通过测试时,Unity 目录会通过模型阶段转换跟踪其进度。 测试包括符合性检查、A/B 测试,用于将新模型与当前生产模型进行比较,以及基础结构测试。 Lakehouse 表记录测试结果和指标。 在模型过渡到生产环境之前,可以选择性地要求手动注销。

  4. 模型部署: 当模型进入生产环境时,它将部署用于评分或提供服务。 最常见的部署模式包括:

    • 批处理或流式评分: 对于分钟或更长时间的延迟, 批处理和流式处理 是最经济高效的选项。 评分管道从功能存储中读取最新数据,从 Unity 目录加载最新的生产模型版本,并在 Databricks 作业中执行推理。 它可以将预测发布到 Lakehouse 表、Java 数据库连接(JDBC)连接、平面文件、消息队列或其他下游系统。

    • 联机服务(REST API): 对于低延迟用例,通常需要联机服务。 MLflow 可以将模型部署到 马赛克 AI 模型服务、云提供商服务系统和其他系统。 在所有情况下,服务系统都使用 Unity 目录中的最新生产模型进行初始化。 对于每个请求,它会从联机功能存储中提取功能并做出预测。

  5. 监视:持续或定期工作流监视输入数据和模型对偏移、性能及其他指标的预测。 可以使用 Delta Live Tables 框架自动监视管道,并将指标存储在 Lakehouse 表中。 Databricks SQLPower BI 和其他工具可以从这些表中进行读取,以创建仪表板和警报。 若要监视应用程序指标、日志和基础结构,还可以将 Azure Monitor 与 Azure Databricks 集成。

  6. 偏移检测和模型重新训练: 此体系结构支持手动和自动重新训练。 计划重新训练作业以保持模型新鲜。 检测到的偏移超过在监视步骤中设置的预配置阈值后,重新训练管道将分析偏移并触发重新训练。 可以将管道配置为自动触发,也可以接收通知,然后手动运行管道。

组件

  • Data Lakehouse 体系结构统一数据湖和数据仓库的元素。 使用 Lakehouse 获取通常位于数据仓库中的数据管理和性能功能,但具有 Data Lake 提供的低成本灵活对象存储。

    • Delta Lake 是 Lakehouse 推荐的开源数据格式。 Azure Databricks 将数据存储在 Data Lake Storage 中,并提供高性能查询引擎。
  • MLflow 是用于管理端到端机器学习生命周期的开源项目。 MLflow 具有以下组件:

    • 跟踪 功能 跟踪试验,以便可以记录和比较参数、指标和模型项目。

    • MLflow 模型 是一种格式,可用于将模型从任何机器学习库存储和部署到各种模型服务和推理平台。

    • Unity 目录 跨 Azure Databricks 工作区提供集中式访问控制、审核、世系和数据发现功能。

    • 马赛克 AI 模型服务 将 MLflow 模型作为 REST 终结点托管。

  • Azure Databricks 提供托管的 MLflow 服务,该服务具有企业安全功能、高可用性和其他 Azure Databricks 工作区功能集成。

    • 用于机器学习的 Databricks Runtime 自动创建已针对机器学习进行优化的群集,并预装了 TensorFlow、PyTorch 和 XGBoost 等常用机器学习库。 它还预安装了适用于 机器学习 工具的 Azure Databricks,例如 AutoML 和功能存储客户端。

    • 功能存储是功能的集中式存储库。 使用功能存储来发现和共享特征,并帮助防止模型训练和推理之间的数据偏差。

    • Databricks SQL 与各种工具集成,以便你可以在喜欢的环境中创作查询和仪表板,而无需调整到新的平台。

    • Git 文件夹 在 Azure Databricks 工作区中提供与 Git 提供程序的集成,可改进笔记本或代码协作和 IDE 集成。

    • 工作流作业提供了在 Azure Databricks 群集中运行非交互式代码的方法。 对于机器学习,作业为数据准备、特征化、训练、推理和监视提供了自动化。

备选方法

可以根据 Azure 基础结构定制此解决方案。 请考虑以下自定义项:

  • 使用共享通用生产工作区的多个开发工作区。

  • 为现有基础结构交换一个或多个体系结构组件。 例如,可以使用 Azure 数据工厂来协调 Databricks 作业。

  • 通过 Git 和 Azure Databricks REST API 与现有 CI/CD 工具集成。

  • 使用 Microsoft FabricAzure Synapse Analytics 作为机器学习功能的替代服务。

方案详细信息

此解决方案提供了一个使用 Azure Databricks 的强大 MLOps 过程。 可以替换体系结构中的所有元素,以便根据需要集成其他 Azure 服务和合作伙伴服务。 此体系结构和说明改编自电子书《MLOps 大全》。 电子书更详细地探讨了此体系结构。

MLOps 有助于降低机器学习和 AI 系统中故障的风险,并提高协作和工具的效率。 有关 MLOps 简介和此体系结构的概述,请参阅 Lakehouse 上的架构师 MLOps。

使用此体系结构可以:

  • 将业务利益干系人与机器学习和数据科学团队联系起来。 使用此体系结构可以合并笔记本和 IDE 进行开发。 业务利益干系人可以在 Databricks SQL 中查看指标和仪表板,这些指标和仪表板都位于同一 Lakehouse 体系结构中。

  • 使机器学习基础结构以数据为中心。 此体系结构将机器学习数据视为其他数据。 机器学习数据包括特征工程、训练、推理和监视中的数据。 此体系结构重复使用用于生产管道、仪表板和其他用于机器学习数据处理的常规数据处理工具。

  • 在模块和管道中实现 MLOps。 与任何软件应用程序一样,使用此体系结构中的模块化管道和代码测试各个组件并降低未来重构的成本。

  • 根据需要自动执行 MLOps 过程。 在此体系结构中,可以自动执行提高工作效率并降低人为错误风险的步骤,但不需要自动执行每个步骤。 除了用于自动化的 API 外,Azure Databricks 还允许 UI 和手动过程。

可能的用例

此体系结构适用于所有类型的机器学习、深度学习和高级分析。 此体系结构中的常见机器学习和 AI 技术包括:

  • 经典机器学习,如线性模型、基于树的模型和提升。
  • 现代深度学习,如 TensorFlow 和 PyTorch。
  • 自定义分析,如统计信息、贝叶斯方法和图形分析。

该体系结构同时支持小型数据(单台计算机)和大型数据(分布式计算和 GPU 加速)。 在体系结构的每个阶段,可以选择计算资源和库来适应方案的数据和问题维度。

该体系结构适用于所有类型的行业和业务用例。 使用此体系结构的 Azure Databricks 客户包括以下行业的小型和大型组织:

  • 消费品和零售服务
  • 金融服务
  • 医疗保健与生命科学
  • 信息技术

有关示例,请参阅 Databricks 客户

作者

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

主要作者:

要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。

后续步骤