适用于机器学习的 DevOps

已完成

DevOps 和 MLOps

DevOps 描述为人员、流程和产品的集合体现,它可让我们向最终用户持续交付价值,根据 Donovan Brown 在什么是 DevOps?中所述。

若要了解机器学习模型的使用方式,让我们进一步探讨一些基本的 DevOps 原则。

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

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

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

MLOps overview of three processes

每当谈论机器学习操作 (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 个字符。
  • 使用单元测试检查脚本内容的性能。 例如,检查模型是否生成对测试数据集的准确预测。

若要执行 Lint 分析和单元测试,可以使用自动化工具,例如 Azure DevOps 中的 Azure Pipelines 或 GitHub Actions。

持续交付

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

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

成功无误地将模型部署到暂存阶段后,可以批准将模型部署到生产环境。

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

源代码管理

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

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

注意

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

基于 Git 的存储库可通过使用 Azure DevOps 中的 Azure Repos 或 GitHub 存储库来获得。

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

若要确定谁负责项目的哪一部分,建议使用敏捷规划。

敏捷规划

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

敏捷规划意味着将工作分离到冲刺中。 冲刺是希望在其中实现项目的一部分目标的短时间段。

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

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

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

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

基础结构即代码 (IaC)

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

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

提示

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