适用于机器学习的 DevOps

已完成

DevOps 和 MLOps

DevOps 是 Donovan Brown 在《什么是 DevOps?》中描述的,指的是通过人员、流程和产品的结合,为我们的最终用户持续交付价值。

为了了解在处理机器学习模型时如何使用它,让我们进一步探讨一些基本的 DevOps 原则。

DevOps 是指导开发人员创建可靠且可重现的应用程序的工具和做法的组合。 使用 DevOps 原则的目标是快速向最终用户提供价值。

如果要通过在数据转换管道或实时应用程序中集成机器学习模型来更轻松地实现价值,你将受益于实现 DevOps 原则。 了解 DevOps 将帮助你组织和自动化工作。

创建、部署和监视可靠且可重现的模型,以向最终用户提供价值是 机器学习作MLOps)的目标。

MLOps 三个流程概述

每当谈论机器学习操作 (MLOps) 时,我们希望结合三个过程:

  • ML 包括数据科学家负责的所有机器学习工作负载。 数据科学家将执行以下作:

    • 探索性数据分析 (EDA)
    • 特征工程
    • 模型训练和优化
  • DEV 是指软件开发,其中包括:

    1. 计划:定义模型的要求和性能指标。
    2. 创建:创建模型训练和评分脚本。
    3. 验证:检查代码和模型质量。
    4. 打包:通过暂存解决方案来准备部署。
  • OPS 是指操作,包括:

    1. 发布:将模型部署到生产环境。
    2. 配置:使用 基础结构即代码IaC)标准化基础结构配置。
    3. 监视:跟踪指标并确保模型和基础结构按预期方式执行。

让我们了解一些对 MLOps 至关重要的 DevOps 原则。

DevOps 原则

DevOps 的核心原则之一是 自动化。 通过自动化任务,我们渴望更快地将新模型部署到生产环境。 通过自动化,你还将创建可重现的模型,这些模型在环境中可靠且一致。

特别是当你希望随着时间的推移定期改进模型时,自动化使你可以快速执行所有必要的活动,以确保生产中的模型始终是性能最佳的模型。

实现自动化的关键概念是 CI/CD,它代表 持续集成持续交付

持续集成

持续集成涵盖 创建验证 活动。 目标是创建代码,并通过自动测试验证代码和模型的质量。

使用 MLOps 时,持续集成可能包括:

  • 将 Jupyter 笔记本中的探索性代码重构为 Python 或 R 脚本。
  • 使用 Lint 分析检查 Python 或 R 脚本中的任何编程或样式错误。 例如,检查脚本中的行是否包含少于 80 个字符。
  • 用于检查脚本内容性能的单元测试。 例如,检查模型是否在测试数据集上生成准确的预测。

若要执行 linting 和单元测试,可以使用 Azure DevOps 中的 Azure PipelinesGitHub Actions 等自动化工具。

持续交付

验证用于训练模型的 Python 或 R 脚本的代码质量后,需要将模型引入生产环境。 持续交付 涉及将模型部署到生产环境所需的步骤,最好尽可能自动执行。

若要将模型部署到生产环境,首先需要打包模型并将其部署到 预生产环境。 通过在预生产环境中暂存模型,可以检查一切是否按预期工作。

将模型部署到过渡阶段成功且没有错误后,可以批准将模型部署到 生产环境

若要协作处理 Python 或 R 脚本来训练模型,以及将模型部署到每个环境所需的任何代码,你将使用 源代码管理

源代码管理

源代码管理 (或 版本控制)最常通过使用基于 Git 的存储库来实现。 存储库是指可以存储软件项目所有相关文件的位置。

使用机器学习项目时,你可能拥有每个项目的存储库。 存储库将包括 Jupyter 笔记本、训练脚本、评分脚本和管道定义等。

注释

最好 不要 在存储库中存储训练数据。 相反,训练数据存储在数据库或 Data Lake 中,Azure 机器学习使用 数据存储直接从数据源检索数据。

在 Azure DevOps 或 GitHub 存储库中使用 Azure Repos 提供基于 Git 的存储库。

通过在存储库中托管所有相关代码,可以轻松协作处理代码并跟踪团队成员所做的任何更改。 每个成员都可以使用自己的代码版本。 你将能够查看所有过去的更改,可以在更改提交到主存储库之前查看这些更改。

若要确定谁在项目哪个部分工作,建议使用 敏捷规划

敏捷规划

由于希望将模型快速部署到生产环境,因此敏捷规划非常适合机器学习项目。

敏捷规划意味着将工作分离到冲刺中。 冲刺是短时间段,在此期间需要完成项目的部分目标。

目的是计划短期迭代,以快速改进任何代码部分。 无论是用于数据和模型浏览的代码,还是将模型部署到生产环境。

训练机器学习模型可以是永无止境的过程。 例如,作为数据科学家,由于数据偏移,可能需要提高模型的性能。 或者,需要调整模型,以便更好地符合新的业务需求。

为了避免花费太多时间进行模型训练,敏捷规划可以帮助确定项目的范围,并通过就短期结果达成一致来帮助每个人保持一致。

若要规划工作,可以使用 Azure DevOps 中的 Azure BoardsGitHub 问题等工具。

基础结构即代码 (IaC)

将 DevOps 原则应用于机器学习项目意味着你想要创建可靠的可重现解决方案。 换句话说,你所做或创造的一切都应该能够重复和自动化。

若要重复并自动执行训练和部署模型所需的基础结构,团队将使用 基础结构即代码IaC)。 在 Azure 上训练和部署模型时,IaC 表示在代码中定义过程中所需的所有 Azure 资源,代码存储在存储库中。

小窍门

通过探索 DevOps 转换旅程中的 Microsoft Learn 模块,更熟悉 DevOps