使用 Azure DevOps 设置 MLOps

适用范围:Azure CLI ml 扩展 v2(最新版)Python SDK azure-ai-ml v2(最新版)

Azure 机器学习与 Azure DevOps 管道 集成,以自动执行机器学习生命周期。 可以自动执行的操作包括:

  • Azure 机器学习基础结构的部署
  • 数据准备(提取、转换和加载作)
  • 通过按需横向扩展和纵向扩展训练机器学习模型
  • 将机器学习模型部署为公共或专用 Web 服务
  • 监视部署的机器学习模型(例如用于性能分析)

本文介绍如何使用 Azure 机器学习设置端到端 MLOps 管道,该管道运行线性回归来预测纽约市的出租车费用。 管道由组件组成,每个组件提供不同的功能。 可以将这些组件注册到工作区,对其进行版本控制,并使用各种输入和输出重复使用它们。 使用推荐的适用于 MLOps 的 Azure 架构AzureMLOps(v2)解决方案加速器,可以在 Azure 机器学习中快速建立 MLOps 项目。

提示

在实现任何解决方案之前,请查看 MLOps 推荐的一些 Azure 体系结构 。 为机器学习项目选择最佳体系结构。

先决条件

  • Azure 订阅。 如果没有 Azure 订阅,请在开始前创建一个试用版订阅。 尝试试用版订阅
  • Azure 机器学习工作区。
  • 在本地计算机上运行的 Git。
  • Python 3.10 或更高版本(如果在本地使用 Python SDK v2)。
  • Azure DevOps 中的组织
  • 托管源存储库和管道的 Azure DevOps 项目
  • Azure DevOps 的 Terraform 扩展,适用于使用 Azure DevOps 和 Terraform 进行基础设施构建的场合。

注意

需要 Git 2.27 或更高版本。 有关安装 Git 命令的详细信息,请参阅 https://git-scm.com/downloads 并选择操作系统。

重要

本文中的 CLI 命令是使用 Bash 进行测试的。 如果使用其他 shell,则可能会遇到错误。

使用 Azure 和 DevOps 设置身份验证

在使用 Azure 机器学习设置 MLOps 项目之前,需要为 Azure DevOps 设置身份验证。

创建服务主体

对于演示,请根据要处理的环境数量(开发、生产或两者),创建一两个服务主体。 可以使用以下方法之一创建这些主体:

  1. 转到 Azure 应用注册

  2. 选择“新建注册”。

    服务主体设置的屏幕截图。

  3. 通过在 任何组织目录中(任何Microsoft Entra 目录 - 多租户)中选择帐户来创建服务主体(SP)。 将服务主体 命名为 Azure-ARM-Dev-ProjectName。 创建后,创建名为 Azure-ARM-Prod-ProjectName 的新服务主体。 将 ProjectName 替换为项目的名称,以便可以唯一标识服务主体。

  4. 转到 证书和机密 ,并为每个服务主体添加新 客户端密码 。 单独存储值和机密。

  5. 若要为这些主体分配必要的权限,请选择相应的订阅并转到 IAM。 选择 “+添加 ”,然后选择“ 添加角色分配”。

    “添加角色分配”页的屏幕截图。

  6. 选择“参与者”,然后通过选择 “+ 选择成员”添加成员。 添加前面创建的成员 Azure-ARM-Dev-ProjectName

    “添加角色分配”选项的屏幕截图。

  7. 如果将开发环境和生产环境部署到同一订阅中,请重复此步骤。 否则,请更改为 prod 订阅,并使用 Azure-ARM-Prod-ProjectName 重复。 基本服务主体设置已完成。

设置 Azure DevOps

  1. 转到 Azure DevOps

  2. 选择 创建新项目。 为本教程命名项目 mlopsv2

    ADO 项目的屏幕截图。

  3. 在项目中,在 “项目设置”(项目 页面左下角)下,选择 “服务连接”。

  4. 选择“创建服务连接”。

    ADO“新建服务连接”按钮的屏幕截图。

  5. 选择“Azure 资源管理器”,然后选择“下一步”。

    注意

    对于新项目,请选择应用注册或托管标识(手动),并使用工作负载身份联合凭据以提高安全性。 本文中的步骤使用了传统的 服务主体(手动) 方法以及需要手动轮换的秘钥。

    选择 “服务主体”(手动),选择“ 下一步”,然后选择“范围级别 订阅”。

    • 订阅名称 - 使用存储服务主体的订阅的名称。
    • 订阅 ID - 使用在步骤 1 输入中使用的 作为订阅 ID
    • 服务主体 ID - 使用步骤 1 输出中的 作为服务主体 ID
    • 服务主体密钥 - 使用步骤 1 输出中的 作为服务主体密钥
    • 租户 ID - 使用步骤 1 输出中的 作为租户 ID
  6. 将服务连接命名为 Azure-ARM-Prod。

  7. 选择 “授予对所有管道的访问权限”,然后选择“ 验证”和“保存”。

Azure DevOps 设置成功完成。

使用 Azure DevOps 设置源存储库

  1. 打开在 Azure DevOps 中创建的项目。

  2. 打开 Repos 部分,然后选择“ 导入存储库”。

    首次 Azure DevOps 导入存储库的屏幕截图。

  3. 在“克隆 URL”字段输入 https://github.com/Azure/mlops-v2-ado-demo。 选择页面底部的 导入

    Azure DevOps 导入 MLOps 演示存储库的屏幕截图。

    注意

    示例仓库可能具有待定的依赖更新。 导入后,检查是否有 Dependabot 安全警报,并根据需要应用更新。 请查看主要的 Azure MLOps(v2)解决方案加速器 存储库,以了解最新功能和修复。

  4. 打开左侧导航窗格底部的项目 设置

  5. 在“存储库”部分下,选择“存储库”。 选择在上一步中创建的存储库。 选择“安全”选项卡。

  6. 在“用户权限”部分下,选择“mlopsv2 生成服务”用户。 将“参与”权限更改为“允许”,将“创建分支”权限更改为“允许”。 Azure DevOps 权限的屏幕截图。

  7. 在左侧导航窗格中打开“管道”部分,然后选择“创建管道”按钮旁边的 3 个垂直点。 选择“ 管理安全性”。

    管道安全性的屏幕截图。

  8. 在“用户”部分下,为项目选择“mlopsv2 生成服务”帐户。 将 “编辑生成管道” 权限更改为 “允许”。

    “添加安全性”的屏幕截图。

注意

这完成了先决条件部分。 现在可以部署解决方案加速器。

通过 Azure DevOps 部署基础结构

此步骤将训练管道部署到在前面的步骤中创建的 Azure 机器学习工作区。

提示

在查看 MLOps v2 存储库并部署基础结构之前,请确保了解解决方案加速器的 体系结构模式 。 在示例中,使用 经典 ML 项目类型

运行 Azure 基础结构管道

  1. 转到存储库 mlops-v2-ado-demo,然后选择 config-infra-prod.yml 文件。

    重要

    请确保选择存储库 的主 分支。

    ADO 中存储库的屏幕截图。

    此配置文件使用命名空间和后缀值(项目的名称)以确保唯一性。 根据自己的需要更新配置中的以下部分。

     namespace: [5 max random new letters]
     postfix: [4 max random new digits]
     location: chinaeast2
    

    注意

    如果运行的是深度学习工作负载(如 CV 或 NLP),请确保 GPU 计算在部署区域中可用。

  2. 选择 “提交 ”以将代码推送到管道中并获取这些值。

  3. 转到 “管道” 部分。

    ADO Pipelines 的屏幕截图。

  4. 选择“Create Pipeline”。

  5. 选择“Azure Repos Git”。

    ADO“你的代码在哪里”的屏幕截图。

  6. 选择您从上一部分已克隆的存储库,mlops-v2-ado-demo

  7. 选择现有的 Azure Pipelines YAML 文件

    配置步骤中 Azure DevOps 管道页的屏幕截图。

  8. 选择 main 分支,选择 mlops/devops-pipelines/cli-ado-deploy-infra.yml,然后选择“继续”。

  9. 运行管道。 完成需要几分钟时间。 流水线创建以下制品:

    • 工作区的资源组,包括存储帐户、容器注册表、Application Insights、Key Vault 和 Azure 机器学习工作区本身。
    • 在工作区中,它还会创建计算群集。
  10. 现在,MLOps 项目的基础结构已部署。 ADO 基础结构管道屏幕的屏幕截图。

    注意

    您可以忽略 无法移动并重用现有存储库到所需位置 的警告。

示例训练和部署方案

解决方案加速器包括示例端到端机器学习管道的代码和数据,该管道运行线性回归来预测纽约市的出租车费用。 管道由组件组成,每个组件提供不同的功能。 可以将这些组件注册到工作区,对其进行版本控制,并使用各种输入和输出重复使用它们。 计算机视觉和 NLP 方案的示例管道和工作流具有不同的步骤和部署步骤。

此训练管道包含以下步骤:

准备数据

  • 此组件采用多个出租车数据集(黄色和绿色),并合并和筛选数据。 它准备训练、验证和评估数据集。
  • 输入:./data/ 下的本地数据(多个 .csv 文件)
  • 输出:单个准备数据集(.csv)和训练、验证和测试数据集。

训练模型

  • 此组件使用训练集来训练线性回归器。
  • 输入:训练数据集
  • 输出:经过训练的模型(pickle 格式)

评估模型

  • 此组件使用经过训练的模型来预测测试集的出租车费用。
  • 输入:ML 模型和测试数据集
  • 输出:模型的性能以及表示是否进行部署的部署标志。
  • 此组件将模型的性能与新测试数据集上以前部署的所有模型进行比较。 它决定是否将模型部署到生产环境。 通过在 Azure 机器学习工作区中注册模型,将模型提升到生产环境。

注册模型

  • 此组件根据测试集中预测的准确程度对模型进行评分。
  • 输入:经过训练的模型和部署标志。
  • 输出:Azure 机器学习中已注册的模型。

部署模型训练管道

  1. 转到 ADO 管道。

    ADO Pipelines 的屏幕截图。

  2. 选择“新建管道”。

    ADO“新建管道”按钮的屏幕截图。

  3. 选择“Azure Repos Git”。

    ADO“你的代码在哪里”的屏幕截图。

  4. 选择您从上一部分已克隆的存储库,mlopsv2

  5. 选择现有的 Azure Pipelines YAML 文件

    配置步骤中 ADO 管道页的屏幕截图。

  6. 选择 main 为分支,然后选择 /mlops/devops-pipelines/deploy-model-training-pipeline.yml。 选择继续

  7. 保存并运行 管道。

注意

此时,将配置基础结构并部署 MLOps 体系结构的原型循环。 你已准备好将已训练的模型迁移到生产环境。

部署已训练的模型

此方案包括用于部署已训练模型的两种方法的预生成工作流:批量评分或将模型部署到终结点进行实时评分。 运行这两个工作流,以测试 Azure 机器学习工作区中模型的性能。 在此示例中,使用实时评分。

部署 ML 模型终结点

  1. 转到 ADO 管道。

    ADO Pipelines 的屏幕截图。

  2. 选择“新建管道”。

    用于终结点的 ADO“新建管道”按钮的屏幕截图。

  3. 选择“Azure Repos Git”。

    ADO“你的代码在哪里”的屏幕截图。

  4. 选择您从上一部分已克隆的存储库,mlopsv2

  5. 选择现有的 Azure Pipelines YAML 文件

    配置步骤中 Azure DevOps 管道页的屏幕截图。

  6. 选择 main 作为分支,选择“托管联机终结点”/mlops/devops-pipelines/deploy-online-endpoint-pipeline.yml,然后选择“继续”。

  7. 联机终结点名称必须是唯一的,因此请将 taxi-online-$(namespace)$(postfix)$(environment) 更改为另一个唯一名称,然后选择“运行”。 如果默认值未失败,则无需更改其。

    Azure DevOps 批处理部署脚本的屏幕截图。

    重要

    如果运行因现有联机终结点名称而失败,请按照前面所述重新创建管道,并将 [your endpoint-name] 更改为 [your endpoint-name (random number)]

  8. 运行完成后,会看到类似于下图的输出:

    ADO 管道批处理运行结果页的屏幕截图。

  9. 若要测试此部署,请转到 Azure 机器学习工作区中的 “终结点 ”选项卡,选择终结点,然后选择“ 测试 ”选项卡。可以使用克隆存储库 /data/taxi-request.json 中的示例输入数据来测试终结点。

清理资源

  1. 如果不打算继续使用管道,请删除 Azure DevOps 项目。
  2. 在 Azure 门户中,删除资源组和 Azure 机器学习实例。

后续步骤