Azure-机器学习工程-全-

Azure 机器学习工程(全)

原文:annas-archive.org/md5/d452521c2b33ae9ef09fcca122573224

译者:飞龙

协议:CC BY-NC-SA 4.0

前言

在生产化机器学习工作负载的过程中,数据科学家面临着无数因素的挑战,这些因素涉及将 ML 模型部署和运行。本书提供了常见问题的解决方案、关键概念的详细解释以及使用 Azure 机器学习服务产品化 ML 工作负载的逐步说明。您将看到如何通过将知识应用于这本实用指南,使用 Microsoft Azure 进行训练和部署 ML 模型。

在整本书中,您将学习如何利用 Azure 机器学习服务的力量来训练、注册和产品化 ML 模型。您将掌握实时和批量评分模型、解释模型以赢得商业信任、减轻模型偏差,并使用 MLOps 框架开发解决方案。

在阅读完这本 Azure 机器学习书籍之后,您将准备好使用 AML 在实时场景中构建和部署端到端的 ML 解决方案。

本书面向的对象

对于希望转向 ML 工程角色的机器学习工程师和数据科学家来说,这本 AMLS 书籍非常有用。熟悉 Azure 生态系统将帮助您理解所涵盖的概念。

本书涵盖的内容

第一章介绍 Azure 机器学习服务,介绍了Azure 机器学习AML)服务的基本概念。您将在后续章节中创建 AML 工作区、创建计算实例,并将 AML 连接到 VS Code 以进行进一步开发。

第二章在 AMLS 中处理数据,涵盖了如何在 AMLS 中处理数据。特别是,您将学习如何加载数据、将数据保存为数据集,并在后续开发项目中使用数据集。

第三章在 AMLS 中训练机器学习模型,展示了如何使用 AMLS 实验以及无代码设计器来训练机器学习模型。您将了解如何远程训练作业并将模型保存到 AMLS 模型注册表中以供以后使用。

第四章使用 AMLS 调整您的模型,演示了如何使用 AMLS HyperDrive 调整机器学习模型的超参数。

第五章Azure 自动化机器学习,涵盖了如何编写 AutoML 作业来自动训练机器学习模型。

第六章部署实时推理的机器学习模型,教您如何在 AML 中部署模型以支持实时推理。

第七章部署用于批量评分的 ML 模型,展示了如何使用 AML 批量端点将批量评分应用于模型。

第八章负责任的 AI,教您如何使用 AMLS 和 Azure Interpret 解释您的机器学习模型。

第九章使用 MLOps 生产化工作负载,指导你设置 Azure DevOps 管道以编排模型训练并将模型部署到多个环境。

第十章在 Azure 机器学习中使用深度学习,展示了如何使用 Azure 机器学习的数据标注功能对图像数据进行标注,我们将使用它来训练一个目标检测模型。您将学习如何使用 AMLS AutoML 训练目标检测模型,以及如何使用 AMLS 部署训练好的模型进行推理。

第十一章在 AMLS 中使用分布式训练,介绍了如何在 AMLS 中执行分布式训练。特别是,您将学习如何使用两个流行的深度学习框架 PyTorch 和 TensorFlow 以分布式方式训练模型。

要充分利用本书

为了充分利用本书,您需要一个 Azure 订阅以及 Windows PowerShell 和命令提示符的最新版本。

本书涵盖的软件/硬件 操作系统要求
Windows PowerShell 或命令提示符 Windows、macOS 或 Linux

如果您使用的是本书的数字版,我们建议您亲自输入代码或从本书的 GitHub 仓库(下一节中提供链接)获取代码。这样做将帮助您避免与代码的复制和粘贴相关的任何潜在错误。

下载示例代码文件

您可以从 GitHub 下载本书的示例代码文件:github.com/PacktPublishing/Azure-Machine-Learning-Engineering。如果代码有更新,它将在 GitHub 仓库中更新。

我们还有其他来自我们丰富的图书和视频目录的代码包,可在github.com/PacktPublishing/找到。查看它们!

下载彩色图像

我们还提供了一份包含本书中使用的截图和图表的彩色图像的 PDF 文件。您可以从这里下载:packt.link/8s9Lt

使用约定

本书使用了多种文本约定。

文本中的代码:表示文本中的代码单词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 昵称。以下是一个示例:“实际的数据文件,在这种情况下是titanic.csv。”

任何命令行输入或输出都按照以下方式编写:

az extension remove -n azure-cli-ml
az extension remove -n ml

粗体:表示新术语、重要单词或屏幕上看到的单词。例如,菜单或对话框中的单词以粗体显示。以下是一个示例:“其余选项是默认的,您可以点击审阅+ 创建按钮。”

小贴士或重要注意事项

看起来像这样。

联系我们

欢迎读者提供反馈。

一般反馈:如果您对本书的任何方面有疑问,请通过 customercare@packtpub.com 给我们发电子邮件,并在邮件主题中提及书名。

勘误:尽管我们已经尽最大努力确保内容的准确性,但错误仍然可能发生。如果您在这本书中发现了错误,我们将不胜感激,如果您能向我们报告,我们将不胜感激。请访问www.packtpub.com/support/errata并填写表格。

盗版:如果您在互联网上以任何形式发现我们作品的非法副本,我们将不胜感激,如果您能提供位置地址或网站名称,我们将不胜感激。请通过 copyright@packt.com 与我们联系,并提供材料的链接。

如果您有兴趣成为作者:如果您在某个领域有专业知识,并且您有兴趣撰写或为书籍做出贡献,请访问authors.packtpub.com.

分享您的想法

一旦您阅读了《Azure 机器学习工程》,我们非常乐意听到您的想法!请点击此处直接进入亚马逊评论页面并分享您的反馈。

您的评论对我们和科技社区非常重要,并将帮助我们确保我们提供高质量的内容。

下载本书的免费 PDF 副本

感谢您购买本书!

您喜欢在路上阅读,但无法携带您的印刷书籍到处走?您的电子书购买是否与您选择的设备不兼容?

请放心,现在每购买一本 Packt 书籍,您都可以免费获得该书的 DRM 免费 PDF 版本。

在任何地方、任何设备上阅读。直接从您喜欢的技术书籍中搜索、复制和粘贴代码到您的应用程序中。

优惠不会就此停止,您还可以获得独家折扣、时事通讯和每日免费内容的每日电子邮件。

按照以下简单步骤获取福利:

  1. 扫描二维码或访问以下链接

二维码

packt.link/free-ebook/9781803239309

  1. 提交您的购买证明

  2. 就这样!我们将直接将您的免费 PDF 和其他福利发送到您的电子邮件。

第一部分:使用 Azure 机器学习服务训练和调整模型

读者将学习如何在第一部分中利用 Azure 机器学习服务的独特作业跟踪功能来训练和调整不同类型的模型。

本节包含以下章节:

  • 第一章, 介绍 Azure 机器学习服务

  • 第二章, 在 AMLS 中处理数据

  • 第三章, 在 AMLS 中训练机器学习模型

  • 第四章, 使用 AMLS 调整您的模型

  • 第五章, Azure 自动化机器学习

第一章:介绍 Azure 机器学习服务

机器学习ML),通过利用数据来构建和训练模型以进行预测,正在迅速成熟。Azure 机器学习AML)是微软的云服务,它不仅能够实现模型开发,还能支持您的数据科学生命周期。AML 是一个旨在赋能数据科学家、ML 工程师和公民数据科学家的工具。它提供了一个框架,通过 MLOps 训练和部署模型,在由微软的财富 500 强客户多年反馈支持的协作环境中监控、重新训练、评估和重新部署模型。

在本章中,我们将专注于部署 AML 工作区,这是利用 Azure 资源提供环境以汇集您在使用 AML 时将利用的资产的资源。我们将展示如何使用 Azure CLI 的 ml 扩展来部署这些资源,允许通过命令行进行模型训练和部署。我们将通过利用 Azure 资源管理ARM)模板来设置工作区,这些模板被称为 ARM 部署。

在部署过程中,将部署关键资源,包括 AML Studio,一个数据科学家用于管理其工作负载的门户,通常被称为您的 工作区Azure Key Vault 用于存储敏感信息;Application Insights 用于记录信息;Azure 容器注册库 用于存储可利用的 docker 镜像;以及一个 Azure 存储账户 用于存储数据。当您在 Azure 机器学习服务工作区中导航时,这些资源将在幕后被利用,通过利用您选择的 集成开发环境IDE),包括 Jupyter NotebookJupyter Lab 以及 VS Code 来编写代码。

在本章中,我们将涵盖以下主题:

  • 构建您的第一个 AMLS 工作区

  • 导航 AMLS

  • 创建用于编写代码的计算资源

  • 在 AMLS 中开发

  • 将 AMLS 连接到 VS Code

技术要求

在本节中,您将注册 Azure 账户并使用基于网页的 Azure 门户创建各种资源。因此,您需要互联网访问和一个正常工作的网页浏览器。

以下章节的先决条件:

构建您的第一个 AMLS 工作区

在 Azure 中,有无数种创建 Azure 资源的方法。最常见的方法是通过 ml 扩展(V2),它为您提供了一个熟悉的终端来自动化部署。您还可以使用 ARM 模板创建资源。CLI 和 ARM 模板都提供了一个可自动化、可重复的过程来在 Azure 中创建资源。

在接下来的小节中,我们将首先通过 Web 门户创建一个 AMLS 工作区。在您掌握这项任务后,您还将通过 Azure CLI 创建另一个工作区。一旦您理解了 CLI 的工作原理,您将创建一个 ARM 模板并使用它来部署第三个工作区。在了解所有三种部署方法之后,您将删除所有多余的资源,然后进入下一节;保留多余的资源运行将花费您金钱,所以请小心。

通过 Azure 门户创建 AMLS 工作区

使用门户创建 AMLS 工作区是最简单、最直接的方法。通过 GUI,您创建一个 资源组,一个用于存放多个资源的容器,以及您的 AMLS 工作区和所有其组件。要创建工作区,请导航到 portal.azure.com 并按照以下步骤操作:

  1. 导航到 portal.azure.com 并在搜索框中输入 Azure Machine Learning,如 图 1.1 所示,然后按 Enter

图 1.1 – 选择资源组

图 1.1 – 选择资源组

  1. 在 Azure 门户的右上角,选择 图 1.2 中显示的 + 创建 选项:

图 1.2 – 创建 AML 工作区

图 1.2 – 创建 AML 工作区

选择 + 创建 选项将显示 基本 选项卡,如下所示:

图 1.3 – 填写创建 ML 工作区所需的字段

图 1.3 – 填写创建 ML 工作区所需的字段

  1. 在创建 AML 工作区的 图 1.3 中所示的 基本 选项卡中,填写以下值:

    1. 订阅:您要部署资源的 Azure 订阅。

    2. 资源组:点击创建新并输入资源组的名称。在 Azure 中,资源组可以被视为文件夹或容器,用于存放特定解决方案的资源。在我们部署 AMLS 工作空间时,资源将被部署到这个资源组中,以确保我们可以在完成此练习后轻松删除资源。

    3. 工作空间名称:AMLS 工作空间资源的名称。

    4. 其余选项都是默认的,您可以选择审查 + 创建按钮。

  2. 这将导致验证发生——一旦信息被验证,点击+ 创建按钮来部署您的资源。

  3. 工作空间创建通常需要几分钟。一旦部署完成,在 Azure 门户中点击转到资源,然后点击启动工作室以进入 AMLS 工作空间。

您现在位于如图图 1.4所示的 AMLS 登录页面:

图 1.4 – AMLS

图 1.4 – AMLS

恭喜!您现在已成功构建了您的第一个 AMLS 工作空间。虽然您现在可以开始加载数据,但请花时间浏览下一节,了解如何通过代码创建它。

通过 Azure CLI 创建 AMLS 工作空间

对于喜欢先编写代码再创建资源的用户,Azure CLI是完美的选择。在撰写本文时,AML CLI v2 是 Azure CLI 可用的最新扩展。在利用 Azure CLI v2 时,资产是通过利用 YAML 文件定义的,我们将在后面的章节中看到。

注意

Azure CLI v2 使用遵循以下格式的命令:az ml <名词> <动词> <选项>

要通过 Azure CLI ml扩展(v2)创建 AMLS 工作空间,请按照以下步骤操作:

  1. 您需要从docs.microsoft.com/en-us/cli/azure/install-azure-cli安装 Azure CLI。

  2. 查找您的订阅 ID。在 Azure 门户中的搜索框中,您可以输入Subscriptions,然后列出 Azure 订阅及其 ID。对于您想要使用的订阅,将订阅 ID信息复制到 CLI 中使用。

这是 Azure 门户中订阅的视图:

图 1.5 – Azure 订阅列表

图 1.5 – Azure 订阅列表

  1. 根据您的操作系统启动命令行解释器(CLI)——例如,命令提示符(CMD)或Windows Powershell(Windows PS)——然后通过运行以下命令来检查您的 Azure CLI 版本:

    az version
    

注意

您需要有一个大于 2.15.0 版本的 Azure CLI 才能利用ml扩展。

  1. 如果旧扩展已安装,您需要将其移除以确保您的 CLI 正常工作。您可以通过运行以下命令来移除旧的ml扩展:

    az extension remove -n azure-cli-ml
    
    az extension remove -n ml
    
  2. 要安装ml扩展,请运行以下命令:

    az extension add -n ml -y
    
  3. 现在,让我们通过 Azure CLI 运行以下命令来连接到 Azure 中的您的订阅,在此处将xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx替换为在图 1中找到的订阅 ID信息:

    az login
    
    az account set --subscription xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
    
  4. 通过运行以下命令创建一个资源组。请注意,rg_name是资源组的示例名称,就像aml-ws是 AML 工作区的示例名称一样:

    az group create --name aml-dev-rg  --location eastus2
    
  5. 通过运行以下命令创建一个 AML 工作区,请注意eastus2是我们将部署此 AML 工作区的 Azure 区域:

    az ml workspace create -n aml-ws -g aml-dev-rg -l eastus2
    

您现在已使用 Azure CLI ml扩展和通过门户创建了一个 AMLS 工作区。还有一种常用的创建 AMLS 工作区的方法,即 ARM 模板,我们将在下一节中探讨。

使用 ARM 模板创建 AMLS 工作区

ARM 模板编写可能具有挑战性,但它们为您提供了轻松自动化和参数化创建 Azure 资源的方法。在本节中,您将首先编写一个简单的 ARM 模板来构建一个 AMLS 工作区,然后使用 Azure CLI 部署您的模板。为此,请执行以下步骤:

  1. ARM 模板可以从 GitHub 下载,并在此处找到:github.com/Azure/azure-quickstart-templates/blob/master/quickstarts/microsoft.machinelearningservices/machine-learning-workspace/azuredeploy.json

此模板创建了以下 Azure 服务:

  • Azure 存储账户

  • Azure 密钥保管库

  • Azure 应用程序洞察

  • Azure 容器注册库

  • 一个 AML 工作区

示例模板有三个必需的参数:

  • environment,资源将在其中创建

  • name,这是我们赋予 AMLS 工作区的名称

  • location,资源将部署到的 Azure 区域

  1. 要部署您的模板,您必须首先创建一个资源组,如下所示:

    az group create --name rg_name --location eastus2
    
  2. 确保您的命令提示符已打开到您下载azuredeploy.json文件的目录,并运行以下命令:

    az deployment group create --name "exampledeployment" --resource-group "rg_name" --template-file "azuredeploy.json" --parameters name="uniquename" environment="dev" location="eastus2"
    

创建工作区需要几分钟时间。

到目前为止,我们已经涵盖了大量的信息,无论是使用门户、CLI 还是现在使用 ARM 模板创建 AMLS 工作区。在下一节中,我们将向您展示如何导航工作区,通常被称为工作室。

导航 AMLS

AMLS 为数据科学团队提供了访问关键资源的方式。在本节中,您将学习如何通过探索工作室中的关键组件来导航 AMLS。您将简要了解其功能,我们将在后续章节中详细介绍。

打开浏览器并转到portal.azure.com。使用您的 Azure AD 凭据登录。登录到门户后,您将看到几个图标。选择资源组图标,然后点击Azure 机器学习资源。

概述页面,点击以下截图中的启动工作室按钮:

图 1.6 – 启动工作室

图 1.6 – 启动工作室

点击图 1.6中显示的图标将在新窗口中打开 AMLS。

工作室启动将带您进入 AMLS 的主首页。UI 包括匹配多个角色(包括无代码低代码基于代码的机器学习)的功能。主页有两个部分——左侧菜单面板和右侧工作区面板。

AMLS 工作区首页如图 1.7所示:

图 1.7 – AMLS 工作区首页

图 1.7 – AMLS 工作区首页

现在,让我们简要了解前面的截图:

  • 图 1.71部分,显示左侧菜单面板。点击此面板中的任何单词将弹出一个新的右侧工作区面板,其中包括屏幕的23部分。我们可以选择这些关键词中的任何一个,快速访问 AMLS 工作区中的关键资源。随着我们开始探索 AMLS 工作区,我们将深入研究这些关键资源。

  • 图 1.72部分,提供了到我们将在这本书中使用的关键资源的快速链接,使 AMLS 用户能够创建覆盖各种支持角色的新项目。

  • 随着我们继续探索我们的环境,并在 AMLS 工作区中创建资产(无论是基于代码还是低代码选项),最近资源将开始出现在图 1.73部分,使用户能够查看最近使用的资源,无论是计算、代码执行、创建的模型,还是使用的数据集。

首页提供快速访问您在 AMLS 工作区中找到的关键资源。除了快速链接外,向下滚动,您还可以查看文档部分。在文档部分,我们看到优秀的文档,帮助您了解如何最好地利用您的 AML 环境。

文档部分,作为文档资源的中心,显示在 AMLS 首页的右侧面板:

图 1.8 – 文档

图 1.8 – 文档

图 1.8所示,AMLS 首页为您提供丰富的文档资源,帮助您开始学习。链接包括培训模块、教程,甚至有关如何利用 AMLS 的博客。

在页面右上角,有多个选项可用:

  • 通知:铃铛图标表示通知,显示您使用 AMLS 工作区时生成的消息。这些消息将包含有关资源创建和删除的信息,以及有关您工作区中运行的资源的信息。

图 1.9 – 右上角选项

图 1.9 – 右上角选项

  • 设置:铃铛旁边出现的齿轮图标展示了 Azure 门户的设置。单击图标提供设置基本设置的能力,如图 1**.10所示:

图 1.10 – 工作区自定义设置

图 1.10 – 工作区自定义设置

设置选项卡中,有选项可以更改工作区 UI 的背景,使用主题。有浅色和深色可供选择。然后,有一个更改首选语言和格式的部分。检查语言下拉菜单以查看语言列表——随着新语言添加到工作区,语言列表将发生变化。

  • 帮助:问号图标提供有用的资源,从教程到提交支持请求。这是所有帮助内容组织的地方:

图 1.11 – AMLS 工作区支持帮助

图 1.11 – AMLS 工作区支持帮助

提供有关如何使用工作区以及如何开发和部署数据科学项目的教程链接。单击启动引导游览以使用逐步引导游览。

要解决与工作区相关的任何问题,请单击运行工作区诊断并按照说明操作:

  • 支持:这是链接技术、订阅核心限制和其他 Azure 相关问题以创建工单的部分。

  • 资源:这是提供链接到 AML 文档以及托管在 GitHub 上的有用速查表的章节。本节还提供 Microsoft 的隐私和条款链接。

单击笑脸图标将显示发送我们****反馈部分:

图 1.12 – 反馈页面

图 1.12 – 反馈页面

利用本节,AMLS 工作区用户可以向 AMLS 产品团队提供反馈。

在以下屏幕截图中,我们可以看到工作区选择菜单:

图 1.13 – 工作区选择菜单

图 1.13 – 工作区选择菜单

当在多个项目上使用多个工作区时,可能需要在不同 Azure AD 目录之间切换 AMLS 工作区。此选项可通过选择订阅和工作区名称来访问,如图 1**.13所示。此外请注意,在config文件中,它包含允许授权用户通过代码直接连接到 AMLS 工作区的关键信息,可以在工作区选择菜单中下载以与Azure Machine Learning SDK for PythonAML SDK v2)一起使用。

接下来,我们将讨论图 1.7 中显示的 AMLS 左侧导航菜单。此导航菜单将允许您在与 AML 环境交互时操作您的资产,并分为三个部分:

  • 作者部分包括笔记本自动机器学习设计器

  • 资产部分包括作为您数据科学工作负载一部分创建的工件,这些将在后续章节中详细探讨。

  • 管理部分包括作为您数据科学工作负载一部分将利用的资源。

按以下顺序回顾各个部分:

  • 作者是数据科学家选择开发首选工具的部分:

    • 笔记本:这是菜单中作者部分的某个部分,提供对您的文件以及 AMLS 工作空间 IDE 的访问,该 IDE 类似于 Jupyter 笔记本,但为数据科学家执行特征工程和建模提供了一些额外功能。在此 IDE 中,用户可以选择 Python 内核的版本,将其连接到具有指定 Python 版本的 Conda 环境。

图 1.14 – 作者菜单项

图 1.14 – 作者菜单项

笔记本作者部分中的一个选项,提供对文件、样本、文件管理、终端访问的访问,以及在本章的在 AMLS 中开发部分中我们将看到的内置 IDE:

图 1.15 – 笔记本

图 1.15 – 笔记本

我们将突出显示笔记本选择中找到的不同功能:

  1. 在图 1.15 的第1节中,点击文件标签会显示协作 AMLS 工作空间内的所有用户目录,以及存储在这些目录中的文件。

  2. 在图 1.15 的第2节中,点击样本标签提供了 AML 教程,以充分利用 AMLS。

  3. 此外,您还可以利用计算资源上的终端。

在本节中,您可以创建新文件。点击+图标,您将能够创建新文件。请注意,您既可以上传文件,也可以创建文件夹目录。这使得您可以轻松上传数据文件,同时也可以上传代码。

创建.ipynb扩展名,文件类型菜单包括 Jupyter、Python、R、Shell、文本和其他,您可以在其中提供自己的文件扩展名。

在图 1.7 的左侧导航菜单中,我们看到了笔记本,我们对其进行了简要回顾,以及自动机器学习设计器。接下来,我们将对自动机器学习部分提供一个高级概述。

  • 自动化机器学习:此选项也可以从作者部分选择。自动化机器学习是一个无需编码的工具,它提供了利用数据选择机器学习模型类型和计算能力来完成模型创建的能力。在未来的章节中,我们将更详细地介绍这一点,但就目前而言,此选项提供了一个基于提供的数据集建立模型的指南。您将被提示选择分类、回归或时间序列预测;自然语言处理(多类或多标签分类);或计算视觉(包括多类、标签、目标检测和实例分割)基于您的工作负载。这是一个指导性的逐步过程。有设置可以停止模型超过预设时间,以确保意外成本有限。自动化机器学习还提供了排除算法的能力。AML 将选择多种算法,并使用数据集运行它们,以提供最佳模型。除了根据给定数据集运行多个算法以确定最佳模型的能力外,自动化机器学习还包括模型可解释性,提供有关哪些特征在确定响应变量时更重要或更不重要的见解。此过程所需的时间取决于数据集以及分配给任务的计算资源。自动化机器学习使用临时的计算资源,因此当实验提交运行时,它将启动计算并运行实验。构建模型作为作业在实验内部运行,并保存为快照以供未来分析。使用自动化机器学习构建最佳模型后,AMLS 提供了通过单点部署托管在Azure 容器实例ACI)中的 REST API 来利用最佳模型的能力,用于开发和测试环境。AMLS 还可以通过 REST API 部署到Azure Kubernetes 服务AKS)并利用 CLI v2 或 SDK v2,AMLS 支持端点,简化了模型部署的过程。

点击左侧菜单标签中的自动化机器学习,可以打开创建新的自动化 机器学习作业的能力:

图 1.16 – 自动化机器学习界面选项

图 1.16 – 自动化机器学习界面选项

现在我们已经看到了笔记本自动化机器学习部分,我们将查看设计师部分以获得低代码体验。

  • 设计师:这是提供低代码环境的部分。数据科学家可以拖放并开发模型训练和验证。设计师有两个部分——左侧是菜单,右侧是开发作者部分。一旦构建了模型,就会提供将模型以各种形式部署的选项。

这里是一个使用设计师构建的示例实验:

图 1.17 – 设计师示例

图 1.17 – 设计师示例

设计师提供了使用多种机器学习模型进行建模的选项,例如分类、回归、聚类、推荐、计算机视觉和文本分析。

现在我们已经回顾了编写模型的各个部分 – 笔记本自动机器学习设计师 – 我们将在 AMLS 资产导航部分探索资产的概念。

  • 资产是一个存储所有实验作业及其工件的部分:

图 1.18 – 资产菜单项

图 1.18 – 资产菜单项

  • 数据:此部分将在数据资产选项卡下显示在 AMLS 工作空间内使用的已注册数据集。数据集管理每次注册新数据集时创建的版本。数据集可以通过 UI、SDK 或 CLI 创建:

    • 数据资产:此部分显示在工作空间内使用的所有数据集列表:

图 1.19 – 数据集显示

图 1.19 – 数据集显示

点击数据资产,查看所有数据集的列表。显示数据集的 UI 可以通过添加和删除列来定制您的视图。除了通过 UI 注册数据集的能力外,还可以通过点击存档来存档数据集。随着时间的推移,存储库中的数据可能会发生变化,因为应用程序添加了数据。

  • 数据存储:在左侧面板菜单的数据部分中也可以选择。数据存储可以被视为检索数据的位置。数据存储的例子包括 Azure Blob 存储、Azure 文件共享、Azure Data Lake 存储或 Azure 数据库,包括 SQL、PostgreSQL 和 MySQL。所有连接到与您的 AMLS 工作空间关联的数据存储并在 Azure Key Vault 中存储的安全措施。在 AMLS 工作空间部署期间,创建了一个 Azure Blob 存储账户。这个 Azure Blob 存储账户是您 AMLS 工作空间的默认数据存储。

  • 可以使用当前处于预览状态的功能来监控已注册的数据集,通过点击图 1.19中显示的数据集监控(预览)标签进行查看。

  • 作业作业屏幕显示了所有实验,它们是作业组,以及您在 AMLS 工作空间内执行的代码:

图 1.20 – 实验显示

图 1.20 – 实验显示

您可以通过添加或删除列来定制和重置 UI 中作业的默认视图,包括给定作业的属性。

每个实验都会在实验下以蓝色文本的形式显示,如图 1.20所示。在作业部分,我们可以选择多个实验并查看它们的性能图表。

  • 管道:管道是在实验作业中执行的一系列步骤:

图 1.21 – 管道显示

图 1.21 – 管道显示

通常,设计实验将显示管道并提供作业的状态。与 作业数据集 的 UI 一样,UI 在查看管道时提供了自定义选项。您还可以显示 管道端点管道草稿 选项也是可用的。您可以根据 状态实验标签 对视图进行排序或过滤。还有选择所有筛选器和清除筛选器的选项。还有选择显示行数的选项。

  • 环境:设置 Python 环境可能会是一项艰巨的任务,因为利用开源包的价值伴随着管理各种包版本复杂性的挑战。虽然这个问题并非仅限于 AMLS 工作空间,但 Azure 已经为管理这些资源提供了解决方案——在 AMLS 中,它们被称为 环境环境是 AMLS 中的一个部分,允许用户查看和注册哪些包,以及哪些 Docker 镜像应由计算资源利用。微软已经创建了这些环境中的几个,这些环境被认为是经过精心挑选的,用户也可以创建自己的自定义环境。我们将在 第三章 中利用自定义环境,即 在 AMLS 中训练机器学习模型,因为我们将在计算集群上运行实验作业。

环境 部分提供了 AMLS 工作空间利用的环境列表:

图 1.22 – 环境

图 1.22 – 环境

精选环境 部分,有各种各样的环境可供选择。这对于需要具有特定库的环境的应用程序非常有用。创建的环境列表可供选择。点击每个 名称 可以查看环境包含的内容。目前,以下大多数环境都用于推理目的。

  • 模型模型 部分显示了所有注册的模型及其版本。UI 提供了如图所示的自定义列:

图 1.23 – 模型显示

图 1.23 – 模型显示

模型可以通过手动方式、通过 SDK 或通过 CLI 进行注册。更改显示模型数量、显示模型的当前版本或所有版本,以及排序、过滤和清除的能力都是可用的。

  • 端点:模型可以作为 REST 端点部署。这些端点利用模型,并基于训练模型提供预测值,从而提供响应。利用 REST 协议,这些模型可以很容易地被其他应用程序消费。点击 AMLS 左侧导航菜单上的 端点 将显示这些内容。

端点 部分显示了实时和批量推理的端点:

图 1.24 – 端点显示

图 1.24 – 端点显示

实时端点被称为在线端点,通常处理一行数据并产生一个评分输出,并且作为 REST API 性能良好。批量端点用于基于批量的执行,我们传递大量数据集,然后提供预测输出。这通常是一个长时间运行的过程。虽然 CLI v1 和 SDK v1 允许 AMLS 用户部署到 ACI 和 Kubernetes,但本书将专注于利用 CLI v2 和 SDK v2 的部署,这些部署利用端点部署到托管在线端点、Kubernetes 在线端点和批量推理端点。

  • 管理 是用户可以管理 AMLS 工作空间利用的资源部分,包括 计算数据标注链接服务

    • 计算: 这是我们管理用于开发数据科学项目的各种计算资源的地方。在 AMLS 的 计算 部分中可以找到四种类型的计算资源。这四种包括 计算实例计算集群推理集群附加计算

计算 部分提供了对使用 AMLS 工作空间利用的计算资源的可见性:

图 1.25 – 计算选项

图 1.25 – 计算选项

一个计算资源可以是一个单独的节点,也可以包括几个 节点。节点是一个 虚拟机VM)实例。单个节点实例可以垂直扩展,并且将仅限于 中央处理器CPU)和 图形处理器GPU)。计算实例是单个节点。这些资源非常适合开发工作。另一方面,计算集群可以水平扩展,并且可以用于处理大型数据集的工作负载,因为工作负载可以在节点之间进行分配。为了实现扩展,可以通过并行执行作业来有效地使用我们的 AML SDK 进行训练和评分。

计算 部分中,随着计算资源的创建,您的订阅可用配额将显示出来,提供了对给定订阅中可用核心数量的可见性。大多数 Azure VM SKU 都可用于计算资源。对于 GPU,根据地区,如果该地区可用,用户可以创建支持请求来扩展 vCore。在创建计算集群时,可以设置计算集群使用的节点数量从 0 到 N 个节点。

AMLS 工作空间中的计算资源按节点每小时计费。在计算集群中,将最小节点数设置为0将在达到缩放下之前的空闲秒数后,实验完成后关闭计算资源。对于计算实例,您可以选择何时开启或关闭实例以节省费用。除了计算实例和计算集群之外,AMLS 还有推理集群的概念。计算部分中的推理集群允许您查看或创建一个 AKS 集群。计算部分中可用的最后一种计算类型位于附加计算部分。此部分允许您附加自己的计算资源,包括Azure DatabricksSynapse Spark poolsHDInsights、虚拟机以及其他。

  • 数据标注数据标注是 AMLS 中添加的新功能选项。此功能用于为基于自定义视觉建模的项目标记图像。图像在 AMLS 的数据标注项目中标记。多个用户可以在一个项目中标记图像。为了进一步提高生产力,有 ML 辅助数据标注。在标注项目中,可以标记文本和图像。对于图像项目,标注任务包括多类图像分类,它涉及从一组类别中对图像进行分类,以及多标签图像分类,它从一组类别中应用更多标签。还有对象识别,它为图像中找到的每个对象定义一个边界框,最后是实例分割,它为图像提供多边形并分配一个类别标签。文本项目包括多类多标签文本命名实体识别选项。多类将对文本应用单个标签,而多标签允许您对一个文本片段应用一个或多个标签。文本命名实体识别允许用户为一段文本提供一个或多个实体。

数据标注功能需要 GPU 支持的计算资源,因为其计算密集型特性。提供项目说明的选项可用。每个用户都会分配一个队列,并且用户在项目中的进度也会在每个项目的仪表板上显示。

以下截图显示了如何显示一个示例标注项目:

图 1.26 – 数据标注

图 1.26 – 数据标注

  • 链接服务:这为您提供了与其他 Microsoft 产品的集成,目前包括 Azure Synapse Analytics,以便您可以将 Apache Spark pools 附加到服务中。点击+ 添加集成按钮,从 Azure 订阅中选择,然后选择 Synapse 工作区。

链接服务,如以下截图所示,提供了与其他 Microsoft 产品建立连接的可见性:

图 1.27 – 链接服务

图 1.27 – 链接服务

通过这个目前处于公共预览阶段的链接服务,AMLS 可以利用 Azure Synapse 工作区,将 Apache Spark 池的力量带入你的 AMLS 环境。数据科学工作负载的一个重要组成部分是数据准备,通过链接服务,可以利用 Spark 进行数据转换。

在对 AMLS 工作区有基本了解之后,你现在可以继续编写代码。然而,在这样做之前,你需要创建一个将支持你的作业的虚拟机。计算实例是专门用于编写代码的 AMLS 虚拟机。它们有多种形状和大小,可以通过 AMLS GUI、Azure CLI、Python 代码或 ARM 模板创建。每个用户都需要有自己的计算实例,因为 AMLS 只允许每个计算实例有一个用户。

我们将首先通过 AMLS GUI 创建计算实例。然后,我们将为我们的计算实例添加一个计划,以便它能够自动启动和关闭;这是一个重要的节省成本措施。接下来,我们将使用 Azure CLI 创建计算实例。最后,我们将使用启用计划的 ARM 模板创建计算实例。尽管你将创建三个计算实例,但无需删除它们,因为你只需在使用期间为其付费。

小贴士

当你不使用计算实例时,请确保将其关闭。让计算实例持续运行会产生每小时的费用。

在本节中,我们已经通过 AMLS 导航,利用左侧导航菜单面板。我们探索了作者资产管理部分以及 AMLS 中找到的每个组件。现在我们已经涵盖了导航 AMLS 组件,让我们继续创建计算实例,这样你就可以开始在 AMLS 中编写代码了。

创建用于编写代码的计算实例

在本节中,你将创建一个计算实例以开始你的开发。每个子节将演示如何使用不同的方法在你的 AMLS 工作区中创建这些资源。

通过 AMLS GUI 创建计算实例

创建计算实例最直接的方式是通过 AMLS。计算实例有多种大小,你应该根据你的数据大小进行调整。一个很好的经验法则是,你应该有 20 倍于 CSV 格式数据大小的 RAM,或者 2 倍于 pandas DataFrame(Python 数据科学中最流行的数据结构)数据大小的 RAM。这是因为,当你将 CSV 文件作为 pandas DataFrame 读取时,它会将数据扩展到 10 倍。

计算机的名称必须在给定的 Azure 区域中是唯一的,因此你需要确保你的计算资源名称是唯一的,否则部署将失败。

现在,让我们创建一个计算实例——一个可以用于开发的单个 VM 类型的计算实例。每个计算实例都分配给工作区中的单个用户,以便他们进行开发。

要创建计算实例,请按照以下步骤操作:

  1. 登录到 AMLS 工作区。

  2. 在左侧菜单中点击 计算

  3. 点击 新建

将打开一个新标签页以配置我们的计算实例。以下截图展示了计算实例的创建:

图 1.28 – 选择虚拟机类型和区域

图 1.28 – 选择虚拟机类型和区域

配置所需设置 下,如 图 1**.28 所示,让我们执行以下步骤:

  1. 您需要为您的计算实例提供一个名称。让我们将其命名为 amldevinstance。请注意,计算实例的名称在给定的 Azure 区域中必须是唯一的。鉴于此名称可能已被使用,实际上,您可以在计算名称前或后添加前缀或后缀以确保其唯一性。

  2. 虚拟机类型 设置为 CPU。对于高性能深度学习模型,也可以选择 GPU。现在,设置 虚拟机大小。大小分配将显示基于可用配额的节点。

  3. 从可用的 CPU 列表中选择一个虚拟机大小。

  4. 点击 下一步高级设置

  5. 如果您想从远程机器使用计算实例,请开启 启用 SSH 访问启用虚拟网络 选项可用于连接到连接到企业网络的私有网络。还有一个将计算分配给其他用户的选项(分配给其他用户)。如果启动时需要配置任何 shell 脚本,请使用 使用设置 脚本 选项:

图 1.29 – 配置设置

图 1.29 – 配置设置

现在我们已经为计算提供了基本配置,我们可以转到下一节,关于安排关机时间以节省金钱。

为计算实例添加计划

在 AML 服务的上一个版本中,数据科学家必须手动启动和关闭计算实例。不出所料,这导致用户在周末和假期忘记关闭它们时产生了大量账单。为了解决这个问题,Microsoft 添加了自动启动和关闭计算实例的功能。我们建议将关机计划设置在正常工作时间结束后。

图 1**.29 中,点击 添加计划 按钮以启用设置启动或关机自动计划的功能。

这是计算实例的 启动和关机计划 窗口:

图 1.30 – 为计算实例安排关机时间

图 1.30 – 为计算实例安排关机时间

图 1**.30 所示,为计算实例设置自动关机时间可以节省成本。一旦设置,系统将自动关机以节省金钱。

设置好您的计划后,点击创建并等待实例创建。一旦实例创建完成,它将自动启动,并显示计算实例页面。

通过 Azure CLI 创建计算实例

使用代码创建计算实例的一个主要优点是能够保存您的配置文件以供以后使用。

根据您的操作系统启动您的命令行解释器(例如,CMD 或 Windows PS),将 Azure CLI 连接到您的 Azure 订阅,并运行以下命令以创建计算实例,注意计算实例的名称必须在 Azure 区域内是唯一的:

az login
az ml compute create --name computeinstance01 --size STANDARD_D3_V2 --type ComputeInstance--resource-group my-resource-group --workspace-name my-workspace

正如您通过 Azure CLI 创建 AMLS 工作空间一样,您现在已经使用它创建了一个计算实例。下一节将介绍如何使用 ARM 模板创建计算实例的详细信息。

使用 ARM 模板创建计算实例

使用 ARM 模板创建你的 AMLS 工作空间后,你还可以同时实例化计算实例,指定其类型、大小和计划。这对于想要严格控制计算实例配置的大型组织来说是一个极好的策略。这也非常适合希望一步创建多个计算实例的团队。为了做到这一点,请按照以下步骤操作:

  1. ARM 模板可以从 GitHub 下载,位于此处:github.com/Azure/azure-quickstart-templates/blob/master/quickstarts/microsoft.machinelearningservices/machine-learning-compute-create-computeinstance/azuredeploy.json

模板为您创建计算实例。

示例模板有三个必需的参数:

  • workspaceName,这是部署位置。

  • computeName,这是要创建的计算实例的名称。

  • objectId,这是分配计算实例的人的对象 ID。在您的案例中,它将为您自己。

要获取您的对象 ID,您可以运行以下命令:

az ad signed-in-user show
  1. 为了部署您的模板,您必须将其部署到一个已经存在于资源组中的工作空间中。确保用您使用 az ad signed-in-user show 命令找到的对象 ID 替换 objectId。确保您的命令提示符位于您下载 azuredeploy.json 文件的位置,并运行以下命令:

    az deployment group create --name "exampledeployment" --resource-group "aml-dev-rg" --template-file "azuredeploy.json" --parameters workspaceName="aml-ws" computeName="devamlcompute" objectId="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" schedules="{'computeStartStop': [{'action': 'Stop','triggerType': 'Cron','cron': {'startTime': '2022-07-06T23:41:45','timeZone': 'Central Standard Time','expression': '00 20 * * 1,2,3,4,5'}}]}"
    

小贴士

为了创建除自己之外的用户计算实例,请使用代表创建选项并指定用户 ID。

现在您已经知道如何使用图形用户界面、Azure CLI 和 ARM 模板创建计算实例。您还知道如何为您的计算实例安排启动和关闭时间,并准备好使用它来开发代码,这将是下一节的重点。

在 AMLS 中开发

在您的计算实例虚拟机创建完成后,您可以使用它用 R 或 Python 编写代码。具体来说,您可以在JupyterJupyterLabVisual Studio CodeVSCode)或终端中编写代码。Jupyter 和 JupyterLab 都是编写 Python 代码的 IDE 示例。VS Code 是微软推荐的 IDE,它允许您使用多种语言(包括 R 和 Python)进行脚本编写。

在本节中,您将首先打开一个 Jupyter 笔记本,并使用它连接到您的 AMLS 工作区。同样,您将使用 JupyterLab 做同样的事情。最后,您将学习如何使用 AML 笔记本来开发代码。

使用 Jupyter Notebook 开发 Python 代码

可能是数据科学家在 AMLS 中编写代码最常见的方式是通过最常用的Python IDE Jupyter Notebook。然而,Jupyter Notebook 确实存在许多限制;它缺少了传统 IDE 中最基本的功能,例如代码检查和代码分析,以在您尝试运行代码之前标记错误。尽管如此,许多数据科学家仍然更喜欢它,因为它具有简洁、易于使用的界面。为了打开 Jupyter 并创建笔记本,请按照以下步骤操作:

  1. 前往 AML 工作区 UI。

  2. 在菜单的管理部分左侧导航菜单中点击计算

以下截图显示了所有创建的计算实例列表:

图 1.31 – 计算实例列表

图 1.31 – 计算实例列表

  1. 从列表中选择您的计算实例,然后点击启动(如果它尚未启动)。一旦计算实例启动,将出现一个指向应用程序的链接。

  2. 点击JupyterLabJupyter链接以打开用于进一步开发的 Jupyter 笔记本。

  3. 要访问左侧菜单中的 AMLS 工作区笔记本,请转到笔记本部分。

  4. 在下一屏幕上,您应该在左侧窗格中看到文件夹。在 AMLS 工作区中的每个用户都会默认为他们创建一个文件夹。在您的用户文件夹内,您可以选择一个笔记本来工作。如图图 1.15所示,还有创建文件夹和新笔记本的选项。

现在您已经知道如何在 AMLS 中使用 Jupyter Notebook,我们将探讨如何利用 AML 笔记本。

使用 AML 笔记本进行开发

AML 笔记本类似于 Jupyter 笔记本,为您提供了另一种开发代码的选项。您选择使用 Jupyter、JupyterLab 或 AML 笔记本在很大程度上是个人偏好的问题。请尝试所有三种,以确定哪一种最适合您。为了开始使用 AML 笔记本进行开发,请按照以下步骤操作:

  1. 前往 AMLS 工作区 UI。

  2. 在左侧导航菜单的作者部分下点击笔记本

  3. 展开文件夹并选择您的笔记本或创建一个新的笔记本:

图 1.32 – 文件菜单选项

图 1.32 – 文件菜单选项

  1. 点击创建 新文件

  2. 将笔记本文件命名为 amlbookchapter1.ipynb

  3. 一旦您点击 创建图 1.33 中的页面应该会弹出。前面的过程将为我们创建一个新的笔记本以开始开发:

图 1.33 – 新笔记本

图 1.33 – 新笔记本

在您的笔记本中,您将看到 IDE 默认为 Python 3.10 - SDK V2 环境。每个单元格都将允许您在运行的计算实例上执行代码。

在 AMLS 中开发代码主要有两种方式:Jupyter 和 AML 笔记本。然而,存在一个功能更强大的 IDE,它包含许多提高您生产力的功能——VS Code。在下一节中,您将下载 VS Code 并将其连接到 AMLS。

将 AMLS 连接到 VS Code

VS Code 是一个旨在与 Windows、macOS 或 Linux 一起工作的 IDE。它的 Git 集成和调试功能使其成为代码编辑器的自然选择。VS Code 有一个扩展,可以直接与您的 AMLS 环境一起使用以构建、训练和部署 ML 模型。为了利用这个强大的工具,请按照以下步骤安装和配置 VS Code:

  1. code.visualstudio.com/download 下载并安装 VS Code。

  2. 在 VS Code 内部,点击如 图 1.34 所示的 Azure Machine Learning,并选择 安装

图 1.34 – 选择 VS Code 扩展

图 1.34 – 选择 VS Code 扩展

  1. 登录您的 Azure 账户(Ctrl + Shift + p),并输入以下内容:

    >Azure: Sign In
    

将为您打开一个新的浏览器窗口,以便您提供凭证以启用登录。

  1. 通过使用命令面板设置默认 workspace。为了设置您的默认 AMLS workspace,您需要打开一个文件夹,这样 VS Code 可以在其中存储元数据。这可以通过从菜单中选择 文件 并选择 打开文件夹 来完成。

  2. 通过使用命令面板(Ctrl + Shift + p)并输入 Azure ML: Set Default Workspace 来选择您的默认工作区。此命令将引导您选择您的订阅和您的 workspace:

     >Azure ML: Set Default Workspace
    
  3. 前往 Azure 图标(Shift + Alt + A),并如 图 1.35 所示进入 机器学习 部分:

图 1.35 – Azure 图标

图 1.35 – Azure 图标

  1. 在 Azure 图标的 机器学习 部分中,如 图 1.36 所示,右键单击并选择为我们的计算实例 连接

图 1.36 – 连接到计算实例

图 1.36 – 连接到计算实例

  1. VS Code 扩展将被安装到您连接的计算实例上,您将被要求确认您信任父文件夹中所有文件的作者。选择 是的,我信任 作者

  2. 这将在您的本地机器上打开一个新的 VS Code 实例。在这个新的 VS Code 实例中,您将看到在 使用 AML 笔记本开发 部分之前创建的用户目录和笔记本,如 图 1.37 所示:

图 1.37 – 在 VS Code 中打开笔记本

图 1.37 – 在 VS Code 中打开笔记本

  1. 通过点击azureml_py310_sdkv2内核在右上角选择您的 Python 解释器:

图 1.38 – 选择内核

图 1.38 – 选择内核

  1. 选择解释器后,您可以在图 1.39中创建一个print语句:

图 1.39 – 编写代码

图 1.39 – 编写代码

  1. 要执行此代码,请按左侧单元格的播放按钮(Ctrl + Enter)。请注意,提供的 Python 代码将打印出当前工作目录。您的代码将在显示的目录路径所示的计算实例上执行。

在 VS Code 中保存笔记本将保存笔记本到您的 AMLS 工作区。

在本节中,您已安装 VS Code、AML VS Code 扩展,并在您的 AMLS 工作区中连接到您的计算实例以运行您的代码。VS Code 提供了 IntelliSense、运行和调试您的代码的能力,以及内置的 Git 集成。将这些功能与 AMLS 工作区集成相结合,使其成为开发的首选选择。

摘要

在本章中,您已探讨了创建 AMLS 工作区的选项,如何在 AMLS 中导航,如何创建用于开发代码的计算实例,以及如何使用您的计算实例来开发代码。您通过 Azure 门户、通过 CLI 以及通过 ARM 模板深入了解了创建 AMLS 工作区。您已导航到 AMLS 工作区组件,探索了 AMLS 的作者资产管理部分。您已探索了各种 IDE,包括 Jupyter、AML 笔记本以及 VS Code,这是 Microsoft 的旗舰 IDE,您创建的计算实例是通过门户、CLI 或 ARM 模板实现的。这个基础为您提供了开始编写 ML 解决方案所需的一切。

在下一章中,您将导入数据到 AMLS 并连接到各种数据源。您还将学习如何自动跟踪数据的变化,并在必要时回滚到早期版本。

第二章:在 AMLS 中处理数据

机器学习ML)中,无论使用案例或使用的算法如何,始终会使用的一个重要组件是数据。没有数据,您无法构建机器学习模型。数据的质量对于构建性能良好的模型至关重要。复杂的模型,如深度神经网络,需要比简单模型更多的数据。在 ML 工作流程中的数据通常来自各种数据源,并需要不同的方法来利用数据处理、清理和特征选择。在这个过程中进行特征工程时,您的 Azure 机器学习工作区将得到利用,使您能够与数据协作工作。这将确保安全地连接到各种数据源,并使您能够注册数据集以用于训练、测试和验证。

作为此工作流程中步骤的示例,我们可能需要获取原始数据,与额外的数据集合并,清理数据以删除重复项,填补缺失值,并对数据进行初步分析以识别异常值和偏斜。这甚至可以在选择算法开始构建用于训练的模型之前完成,利用数据集中的特征和标签。

Azure 机器学习提供了连接到各种数据源并将数据集注册为用于构建模型的方法,因此您可以在业务环境中使用您的数据。

在本章中,我们将涵盖以下主题:

  • Azure 机器学习数据存储概述

  • 创建 Blob 存储帐户数据存储

  • 创建 Azure 机器学习数据资产

  • 使用 Azure 机器学习数据资产

技术要求

阅读第 1 章**介绍 Azure 机器学习服务,以获取创建用于使用的环境工作区。

本章的先决条件如下:

  • 访问互联网。

  • 网络浏览器,最好是 Google Chrome 或 Microsoft Edge Chromium。

  • 支持的存储服务。

  • 访问支持的存储。

  • 要访问 Azure 机器学习服务工作区,请访问 ml.azure.com。在您的网页浏览器左侧的下拉列表中选择工作区。

Azure 机器学习数据存储概述

在 Azure 机器学习工作区中,作为数据源的服务存储被注册为数据存储以实现可重用性。数据存储安全地保存了访问与您使用 Azure 机器学习工作区创建的密钥库中数据的连接信息。提供给数据存储的凭据用于访问给定数据服务中的数据。这些数据存储可以通过 Azure 机器学习工作室通过 Azure 机器学习 Python SDK 或 Azure 机器学习 命令行界面CLI)创建。数据存储使数据科学家能够通过名称连接到数据,而不是在脚本中传递连接信息。这允许代码在不同环境之间(在不同的环境中,数据存储可能指向不同的服务)的可移植性,并防止敏感凭据泄露。

支持的数据存储包括以下内容:

  • Azure Blob Storage

  • Azure SQL Database

  • Azure Data Lake Gen 1 (已弃用)

  • Azure Data Lake Gen 2

  • Azure 文件共享

  • Azure Database for PostgreSQL

  • Azure Database for MySQL

  • Databricks 文件系统

每个支持的数据存储都将与数据服务关联一个认证类型。在创建数据存储时,认证类型将在 Azure 机器学习工作区中选中并使用。请注意,目前 Azure Database for MySQL 仅支持 DataTransferStep 管道,因此无法使用 Azure 机器学习工作室创建。Databricks 文件系统仅支持 DatabricksStep 管道,因此无法利用 Azure 机器学习工作室创建。

下表提供了可用于与您的 Azure 机器学习工作区一起使用的 Azure 存储类型的认证选项:

存储类型 认证 选项
Azure Blob Container SAS 令牌,账户密钥
Azure SQL Database 服务主体, SQL 认证
Azure Data Lake Gen 1 服务主体
Azure Data Lake Gen 2 服务主体
Azure File Share SAS 令牌,账户密钥
Azure Database for PostgreSQL SQL 认证
Azure Database for MySQL SQL 认证
Databricks 文件系统 无认证

图 2.1 – Azure 存储类型的支持认证

现在您已经了解了支持的数据存储类型,在下一节中,您将学习如何将您的 Azure 机器学习工作区连接到您可以在您的 ML 工作流程中使用的数据存储。最常见且推荐的数据存储是一个 Azure Blob 容器。事实上,在 第一章介绍 Azure 机器学习服务,作为工作区部署过程的一部分,为您创建了一个。

在继续到下一节,使用 Azure Machine Learning Studio、Python SDK 和 Azure Machine Learning CLI 创建数据存储之前,我们将简要回顾为您创建的默认数据存储。

默认数据存储回顾

第一章中所述,介绍 Azure Machine Learning 服务,左侧导航包括一个数据部分,您可以使用它来访问数据存储,如图 图 2**.2 所示。

小贴士

在您工作区的左侧导航顶部点击汉堡图标,将在您的导航栏中包含带有图标的文字。

如果您点击数据存储选项卡,您可以看到为您的工作区已创建的存储账户:

图 2.2 – 数据存储

图 2.2 – 数据存储

workspaceblobstore 是默认的 Azure Machine Learning 工作区数据存储,包含实验日志以及工作区工件。数据可以上传到这个默认数据存储,将在下一节中介绍。workspacefilestore 用于存储您在 Azure Machine Learning 工作区中创建的笔记本。

在下一节中,我们将看到如何通过 Azure Machine Learning Studio、Azure Machine Learning Python SDK 以及 Azure Machine Learning CLI 连接到新的数据存储。这将使您能够使用数据所在的位置的数据,而不是将其带入与您的 Azure Machine Learning 工作区关联的默认数据存储。

创建 blob 存储账户数据存储

如前节所述,默认数据存储回顾,我们可以通过 Azure Machine Learning Studio、Azure Machine Learning Python SDK 和 Azure Machine Learning CLI 创建数据存储。在下一节中,我们将通过这些方法中的每一个创建 blob 存储账户的数据存储进行操作。

通过 Azure Machine Learning Studio 创建 blob 存储账户数据存储

为了创建一个包含 blob 的存储账户数据存储,首先您需要创建一个包含 blob 的存储账户。按照以下步骤创建 Azure 存储账户并在该存储账户中创建 blob 存储:

  1. 访问 Azure 门户,请点击ms.portal.azure.com/#home

  2. Azure 服务下找到存储账户

  3. 点击 amlv2sa

  4. 存储账户创建完成后,您可以在存储账户下看到它。

  5. 点击新创建的存储账户。

  6. 然后从左侧导航点击 datacontainer

现在,返回 Azure Machine Learning Studio,点击左侧导航中的数据图标,转到数据存储选项卡,如图 图 2**.2 所示,然后点击+创建。将打开一个新的创建数据存储面板,如图 图 2**.3 所示:

图 2.3 – 创建数据存储

图 2.3 – 创建数据存储

创建数据存储面板上,配置所需的设置:

  1. 设置 azureblobdatastore

  2. 由于这是一个 Azure blob 存储帐户,请保留 Azure Blob Storage

  3. 选择您的 订阅 ID – 注意它应该默认为您的 workspace 的 Azure 订阅。

  4. 通过点击 存储帐户 下拉菜单找到您刚刚创建的存储帐户 (amlv2sa)。

  5. 通过点击 Blob 容器 下拉菜单找到您刚刚创建的 blob 容器 (datacontainer)。

  6. 使用数据存储保存凭据以进行数据访问 设置为

  7. 身份验证类型 设置为 帐户密钥

  8. 通过输入存储帐户 访问密钥 部分找到的值来设置 帐户密钥

  9. 在 Azure Machine Learning Studio 中使用工作区托管身份进行数据预览和配置文件 设置为

这将授予您的 Azure Machine Learning 服务工作区的托管 身份读取器存储 Blob 数据读取器 访问权限。

  1. 点击 创建

您可以通过查看 图 2**.2 中显示的 数据存储 选项卡来验证是否为您创建了一个名为 azureblobdatastore 的数据存储。

现在我们已经看到如何通过 UI 轻松配置数据存储,我们将继续通过 Python SDK 创建数据存储。

通过 Python SDK 创建 blob 存储帐户数据存储

为了使用 Python SDK,您需要在 Jupyter 笔记本中运行 Python 脚本。要启动 Jupyter 笔记本,请点击左侧导航中的 计算 选项卡,如图 图 2**.4 所示:

图 2.4 – 从计算实例打开 Jupyter 服务器

图 2.4 – 从计算实例打开 Jupyter 服务器

接下来,从现有的计算实例点击 Jupyter 以打开 Jupyter 服务器。在 新建 中,点击 Python 3.10 – SDKV2 以创建一个新的 Jupyter 笔记本,如图 图 2**.5 所示:

图 2.5 – 创建新的 Jupyter 笔记本

图 2.5 – 创建新的 Jupyter 笔记本

使用 Azure Machine Learning Python SDK,可以通过 图 2**.6 中的以下代码将 Azure blob 容器注册到您的 Azure Machine Learning 工作区。回想一下,当我们通过 UI 创建新的数据存储时,帐户密钥的值可以在存储帐户的 访问密钥 部分找到:

图 2.6 – 使用 Python SDK 创建 blob 存储帐户数据存储

图 2.6 – 使用 Python SDK 创建 blob 存储帐户数据存储

如果您点击左侧导航中的 数据,然后选择 数据存储 选项,如图 图 2**.7 所示,您可以验证是否已创建了一个名为 blob_storage 的新 blob 存储数据存储:

图 2.7 – 工作区中创建的数据存储列表

图 2.7 – 工作区中创建的数据存储列表

接下来,让我们使用 Azure Machine Learning CLI 创建一个 blob 存储帐户数据存储。

通过 Azure Machine Learning CLI 创建 blob 存储帐户数据存储

假设您已按照第一章中“介绍 Azure Machine Learning 服务”的说明,在本地环境中安装了 Azure CLI 和机器学习扩展,您可以使用以下命令创建一个 blob 存储数据存储库:

图 2.8 – CLI 命令创建 blob 存储账户数据存储

图 2.8 – CLI 命令创建 blob 存储账户数据存储

在前面的命令中,blobstore.yml是一个 YAML 文件模式,指定数据存储类型、名称、描述、存储账户名称和存储账户凭据,如图图 2**.9所示:

图 2.9 – Blob 数据存储 YAML 模式文件

图 2.9 – Blob 数据存储 YAML 模式文件

如果您点击数据存储选项卡,如图图 2**.7中所示,您可以验证是否已创建一个名为blob_storage_cli的新 blob 存储数据存储库。

现在您已成功创建 blob 存储数据存储库,在您的 Azure Machine Learning 工作区中,您将能够使用此数据存储库为多个数据资产提供服务。此数据存储库的连接信息安全地存储在您的 Azure 密钥保管库中,并且您有一个存储生成数据的存储位置。

创建 Azure Machine Learning 数据资产

在创建完上一个数据存储库后,下一步是创建数据资产。请注意,在本章中,我们将交替使用“数据资产”和“数据集”这两个术语。数据集是对数据存储的逻辑连接,具有版本控制和模式管理,例如选择要使用的数据列、数据集中列的类型以及一些数据统计信息。数据资产抽象了从配置数据读取的代码。此外,当运行多个模型时,数据资产非常有用,因为每个模型都可以配置为读取数据集名称,而不是配置或编程如何连接到数据集并读取它。这使得模型训练的扩展变得更加容易。

在以下部分,您将学习如何使用 Azure Machine Learning Python SDK、CLI 和 UI 创建数据集。数据集允许我们根据模式更改创建版本,而无需更改存储数据的底层数据存储。可以在代码中使用特定版本。我们还可以为每个创建并存储的数据集创建数据配置文件,以进行进一步的数据分析。

使用 UI 创建数据资产

Azure Machine Learning Studio 提供了一个通过引导式 UI 创建数据集的出色界面。为了使用 Azure Machine Learning Studio 创建数据集,请按照以下步骤操作:

  1. 访问ml.azure.com

  2. 选择您的工作区名称。

  3. 在工作区 UI 中,点击数据并确保已选择数据资产选项。

  4. 接下来,点击 + 创建 并填写如图 图 2.10 所示的 创建数据资产 表单,并确保在 类型 字段中选择 表格

图 2.10 – 创建数据资产

图 2.10 – 创建数据资产

  1. 在下一屏幕上,选择 从本地文件 并点击 下一步 以查看如图 图 2.11 所示的 选择数据存储 屏幕。继续选择您在上一个部分中创建的 blob_storage 数据存储。

图 2.11 – 选择数据存储

图 2.11 – 选择数据存储

选择数据存储后,您可以选择文件所在的路径,如图 图 2.12 所示。在本例中,我们将使用 titanic.csv 文件,该文件可以从我们的 GitHub 仓库下载。输入您下载并保存文件的路径,然后点击 下一步

图 2.12 – 上传您的数据文件

图 2.12 – 上传您的数据文件

  1. 下一步是 设置和预览 屏幕。在此屏幕上,文件将自动解析,并显示检测到的格式的选项。在我们的案例中,它是一个 CSV 文件,并显示了 CSV 文件格式的设置。检查预览部分以验证数据集是否以正确的格式显示数据,例如识别列、标题和值。如果未检测到格式,则可以更改 文件格式分隔符编码列标题跳过行 的设置,如图 图 2.13 所示。如果数据集包含多行数据,则检查 数据集包含多行数据 选项。一旦为您的数据集正确配置了设置,请点击 下一步 按钮进入有关架构的下一部分:

图 2.13 – 设置和预览屏幕

图 2.13 – 设置和预览屏幕

在此屏幕上,系统将识别数据的架构并将其显示以供审查,允许根据需要做出更改。通常,CSV 或文本文件可能需要架构更改。例如,一个列可能具有错误的数据类型,因此请确保选择正确的数据类型。

重要提示

前两行用于检测列类型。如果数据集存在列类型不匹配,请在使用 Jupyter notebook 注册之前考虑清理您的数据集。

这里是可用的数据类型格式:

  • 字符串

  • 整数

  • 布尔值

  • 十进制(****点‘.’)

  • 十进制(****逗号‘,’)

  • 日期

图 2.14 展示了数据集的架构信息。检查 类型 标题下拉菜单以查看可用的数据类型:

图 2.14 – 架构屏幕

图 2.14 – 架构屏幕

  1. 滚动并审查所有列。对于您的已注册数据资产,您可以选择包含或排除特定的列。每个列都有包含的选项,如图 2.14 所示。此屏幕还包括搜索列的选项。一旦数据资产屏幕配置正确,点击下一步

  2. 接下来是审查屏幕。确认之前选择的设置是否正确,然后点击创建

图 2.15 – 确认审查屏幕

图 2.15 – 确认审查屏幕

在审查过程中,如果需要任何更改,请点击返回按钮并更改设置。

  1. 一旦数据资产创建完成,您将看到titanicdataset数据资产页面,其中包括不同的选项,例如探索消费生成配置文件

  2. 点击如图 2.16 所示的消费选项,以查看通过名称检索您的已注册数据集的代码,并显示数据集的 pandas 数据框:

图 2.16 – 使用 Python 消费数据资产

图 2.16 – 使用 Python 消费数据资产

如本章后面所述,图 2.16 中显示的代码可以直接复制粘贴到 Azure Machine Learning 笔记本中,并在您的 Azure Machine Learning 计算实例上运行。

  1. 在已注册数据集的消费选项中,您可以选择生成配置文件选项,开始对数据集进行配置的引导浏览,如图 2.17 所示:

图 2.17 – 生成配置文件屏幕

图 2.17 – 生成配置文件屏幕

  1. 如果您想创建数据集的新版本,请点击新版本

  2. 此外,还有探索选项来查看数据集的样本。仅显示前 50 行:

图 2.18 – 探索屏幕

图 2.18 – 探索屏幕

在本节中,我们向您展示了如何使用 UI 创建数据资产。在下一节中,我们将向您展示如何使用 Python SDK 创建数据资产。

使用 Python SDK 创建数据资产

在本节中,我们将向您展示如何使用 Python SDK 创建数据资产。如前所述,您可以从数据存储、本地文件和公共 URL 创建数据。从本地文件(例如,titanic.csv)创建数据资产的 Python 脚本如图 2.19 所示。

请注意,在下面的代码片段中,type = AssetTypes.mltable抽象了表格数据的模式定义,使其更容易共享数据集:

图 2.19 – 通过 Python SDK 创建数据资产

图 2.19 – 通过 Python SDK 创建数据资产

my_data文件夹内,有两个文件:

  • 实际的数据文件,在本例中是titanic.csv

  • mltable文件,这是一个 YAML 文件,指定了数据的模式,以便mltable引擎可以使用它来将数据转换为内存中的对象,如 pandas 或 DASK

图 2**.20显示了此示例的mltable YAML 文件:

图 2.20 – 创建 mltable 数据资产的 mltable YAML 文件

图 2.20 – 创建 mltable 数据资产的 mltable YAML 文件

如果您回到数据资产下的数据标签页,您将看到已创建了一个名为titanic-mltable-sdk的新数据集,其类型设置为Table(mltable),版本为1

在本节中,我们向您展示了如何使用 Python SDK 创建数据资产。在下一节中,您将学习如何消费数据资产。

使用 Azure Machine Learning 数据集

在本章中,我们介绍了 Azure Machine Learning 数据存储是什么以及如何连接到各种支持的数据源。我们使用 Azure Machine Learning Studio、Python SDK 和 Azure CLI 创建了到 Azure Machine Learning 数据存储的连接。我们刚刚介绍了 Azure Machine Learning 数据集,这是您 ML 项目中的一个宝贵资产。我们介绍了如何使用 Azure Machine Learning Studio 和 Python SDK 生成 Azure Machine Learning 数据集。一旦创建了 Azure Machine Learning 数据集,它就可以在您的 Azure Machine Learning 实验中整个使用,这些实验被称为作业

图 2.21显示了将mltable工件转换为 pandas 数据框的代码片段。请注意,您需要在您的环境中安装mltable库(使用pip install mltable命令)。

图 2.21 – 将 mltable 工件转换为 pandas 数据框

图 2.21 – 将 mltable 工件转换为 pandas 数据框

现在,让我们看看如何在 ML 作业中使用数据资产,这将在下一节中介绍。

在作业中读取数据

Azure Machine Learning 作业由一个 Python 脚本组成,这可能是一个简单的数据处理或用于模型开发的复杂代码,一个 Bash 命令用于指定要执行的任务,作业的输入和输出,指定运行作业所需的运行时库的 Docker 环境,以及 Docker 容器将运行的计算环境。在作业内部执行的代码可能需要使用数据集。将数据传递给 Azure Machine Learning 作业的主要方式是使用数据集。

让我们带您了解运行一个以数据集为输入的作业所需的步骤:

  1. 创建一个 Azure Machine Learning 环境,这是您训练模型或处理数据的过程所在的地方。图 2**.22显示了创建一个名为env_docker_conda的环境的代码片段,它将在步骤 4中使用:

图 2.22 – 创建 Azure Machine Learning 环境

图 2.22 – 创建 Azure Machine Learning 环境

在前面的代码中,env-mltable.yml,如 图 2.22 所示,是一个 YAML 文件,定义了需要在环境中安装的 Python 库:

图 2.23 – 环境规范 YAML 文件

图 2.23 – 环境规范 YAML 文件

  1. 编写一个 Python 脚本来处理你的数据并构建模型。对于本章,我们将向你展示一个简单的 Python 脚本,该脚本接受一个输入数据集,将其转换为 pandas 数据框,然后打印它。图 2.24 展示了保存为 read_data.py 文件的脚本,该脚本将在 步骤 4 中使用:

图 2.24 – 处理输入数据集的 Python 脚本

图 2.24 – 处理输入数据集的 Python 脚本

  1. 创建一个 Azure Machine Learning 计算集群,其中将提交 Azure Machine Learning 容器化作业。图 2.25 展示了创建一个名为 cpu-cluster 的计算集群的 Python 脚本,通过指定其类型和最小和最大节点数:

图 2.25 – 创建 Azure Machine Learning 计算集群

图 2.25 – 创建 Azure Machine Learning 计算集群

  1. 现在你已经拥有了构建 Azure Machine Learning 作业并提交执行的所有必要组件。图 2.26 展示了创建一个名为 job 的 Azure Machine Learning 作业的 Python 脚本。这个作业本质上是一个包含你的 Python 代码(read_data.py)的 Docker 容器,该代码正在处理你之前创建的输入数据集,并将其提交到你创建的计算集群:

图 2.26 – 创建 Azure Machine Learning 作业

图 2.26 – 创建 Azure Machine Learning 作业

Jupyter 笔记本单元格的输出是一个指向 Azure Machine Learning Studio 中作业的链接,该链接显示作业概述、状态、Python 代码和作业输出。如果你导航到这个链接并点击 输出 + 日志,然后点击 user_logs 下的 std_log.txt,你将看到由 Python 代码生成的输出,该代码将输入数据集打印到标准日志中,如 图 2.27 所示:

图 2.27 – Azure Machine Learning 作业执行成功后的输出

图 2.27 – Azure Machine Learning 作业执行成功后的输出

现在让我们总结本章内容。

摘要

在本章中,您已经探索了 Azure 机器学习数据存储,这些数据存储使您能够连接到数据存储服务。您还了解了 Azure 机器学习数据集,这使您能够创建对数据存储中位置的引用。在 Azure 机器学习中,这些资产可以通过 UI 创建以实现低代码体验,也可以通过 Azure 机器学习 Python SDK 或 Azure 机器学习 CLI 创建。一旦创建了这些引用,就可以通过 Azure 机器学习 Python SDK 检索和使用数据集。一旦检索到数据集,就可以轻松将其转换为 pandas dataframe 以在您的代码中使用。您还看到了如何在 Azure 机器学习作业中使用数据集,通过将它们作为作业的输入传递。

第三章 在 AMLS 中训练机器学习模型 中,您将探索模型训练;实验将成为您工具箱中的关键资产,在您在 AMLS 中构建模型时提供可追溯性。

第三章:在 AMLS 中训练机器学习模型

在 Azure Machine Learning (AML) 中训练机器学习 (ML) 模型是启用您的数据科学工作负载的关键。通常,在模型创建过程中,数据会被分成测试集和训练集。然后使用训练数据构建模型,并使用测试集进行评估。在这个过程中,选择了多种算法并使用它们来回答问题:哪个模型将在未见过的数据集上提供最佳结果?AML 具有记录指标的能力,对产生给定模型性能的代码进行快照,以回答这个问题。AML 提供了各种加速能力。在本章中,我们将重点关注创建用于训练模型的实验,以及 AML 实验的基本功能,以解锁使用计算实例、计算集群和已注册数据集。

模型训练可以通过 AML Python SDK 或设计器来实现低代码体验。在模型训练过程中,可以使用不同的计算资源来完成这项任务。在本章中,我们将探讨使用计算实例进行基本模型训练、使用计算集群进行可重复训练环境,以及通过设计器实现低代码体验。

在本章中,我们将学习如何使用数据集通过 AML 计算和数据集构建 ML 模型。

我们将涵盖以下主题:

  • 使用设计器训练无代码模型

  • 在计算实例上训练

  • 在计算集群上训练

技术要求

请参阅第一章介绍 Azure Machine Learning 服务,以创建用于使用的环境工作区。

本章的先决条件如下:

  • 有互联网访问权限。

  • 拥有一个网络浏览器,最好是 Google Chrome 或 Microsoft Edge Chromium。

  • 要访问 Azure Machine Learning 服务工作区,请访问此地址:ml.azure.com。从下拉列表中选择工作区。

使用设计器训练无代码模型

在本节中,让我们看看使用设计器进行无代码建模可用的选项。设计器使数据科学家能够在不编写代码的情况下创建模型。它使任何数据科学家都能够轻松构建和比较模型。在设计器中,开发环境是一个图形用户界面,允许右键单击以更改给定步骤的设置。该界面不仅允许开发模型,还可以一键部署到各种风格的 API,包括实时或批量端点,这些是其他业务应用或下游应用可以消费的 REST API。

例如,拖动一个任务以连接到数据源,并配置属性以连接到数据源。这些属性包括数据集名称和连接字符串参数,包括用户名和密码。

使用用户界面创建数据集

让我们一步步通过使用用户界面创建数据集的步骤:

  1. 前往 ml.azure.com

  2. 选择你的工作区名称。

  3. 在工作区的左侧,选择 Designer,如下截图所示:

图 3.1 – 设计师图标

图 3.1 – 设计师图标

  1. 一旦你进入 Designer 屏幕,你会看到屏幕分为两部分。顶部部分显示了一些可供任何人测试的示例或样本。所有样本都使用开源数据集,因此任何人都可以测试、开发和从中学习。底部部分显示你创建的实验,如果你点击一个实验,图表将显示在右侧的画布上。

设计师体验如下截图所示:

图 3.2 – 设计师体验

图 3.2 – 设计师体验

  1. 在创建实验之前,请确保已创建计算集群,如第一章“介绍 Azure 机器学习服务”中所示,或者你也可以在本章中找到它,我们展示了如何为远程作业创建集群。

  2. 点击 + 按钮创建一个新的实验:

图 3.3 – 创建新的设计实验

图 3.3 – 创建新的设计实验

  1. 点击 Classificationsample1 作为名称。现在,我们还需要提供一个计算目标。从下拉菜单中选择 Compute cluster,然后选择你已创建的集群。该集群可以是基于 CPU 或 GPU 的。

提示

计算集群提供了一种在多个虚拟机之间扩展计算的方法,以实现横向扩展。根据用例选择 CPU 或 GPU。例如,大多数小于 TB 大小的表格数据集可以使用基于 CPU 的集群。对于基于视觉的工作负载,请选择 GPU 集群。

  1. 选择默认的数据存储,通常会是 Azure 机器学习服务底层数据存储。选择 workspaceblobstore 作为你的选择,并在 草稿详情 部分提供实验详情。然后,点击右侧的 X 图标以查看整个画布:

图 3.4 – 创建新的设计实验画布

图 3.4 – 创建新的设计实验画布

注意,从图 3.4 中可以看到,在左侧有菜单选项。这是我们所有可以拖放到画布上构建模型的任务的地方。菜单按不同的操作分类,如数据集、数据输入和输出、数据转换和机器学习算法。建议阅读每个任务及其属性和功能的在线产品文档。

让我们构建一个模型。你将要带来的第一件事是你从第二章,“在 AMLS 中处理数据”中注册的数据集。在左侧菜单中展开数据集,选择要使用的选项,并将其拖放到画布上。

重要提示

在本章中,我将带您了解一个基本的机器学习建模步骤。

  1. 对于本章,我创建了一个泰坦尼克号开源数据样本并将其配置为数据集。当你将其拖放到画布上时,它看起来是这样的。右键单击数据集,属性表将显示在屏幕的右侧。选择输出并查看数据集样本行。还将提供查看数据概要的选项:

图 3.5 – 画布上的数据集

图 3.5 – 画布上的数据集

  1. 现在,在左侧菜单的搜索框中输入数据集中的选择列并将其拖放到画布上,然后将其连接到数据集中的选择列。现在,点击数据集中的选择列,转到选择列,并选择用于建模的编辑列。这个任务允许我们选择我们可以使用的列:

图 3.6 – 数据集中的选择列

图 3.6 – 数据集中的选择列

编辑列部分,选择我们需要的列。有选项可以选择所有列、所有特征或所有标签,或者通过名称选择。对于前面的示例,我们选择通过列名选择,并从列表中选择列。

  1. 下一个转换将是清理数据。这是一个常见的任务,用于去除没有值、空值等不想要的行。在搜索框中输入清理缺失数据并将其拖放到画布上,然后将其连接到前面的任务,在这种情况下,是数据集中的选择列

图 3.7 – 清理缺失数据

图 3.7 – 清理缺失数据

  1. 点击编辑列并选择要清理的列或特征。特征或列的选择可以是按规则或按名称。当你点击文本框时,将弹出一个列表,如图 3.8 所示。选择你需要建模的列或特征。在这个例子中,选择所有列:

图 3.8 – 编辑列

图 3.8 – 编辑列

  1. 现在我们已经进行了一些特征工程,是时候将数据分割为训练和测试了。在机器学习中,将数据集分割为训练和测试是一个非常常见的做法。通常,分割是 70% 的训练和 30% 的测试。在搜索框中输入分割数据并将其拖放到画布上以连接到前面的任务。属性表将显示在右侧。对于0.7,这个设置允许我们将数据集分割为 70% 用于训练,剩余的 30% 用于测试数据集。

分割数据活动允许你选择分割方式,分割是否应该随机化,分割使用的种子,以及分割是否应该分层,如以下截图所示:

图 3.9 – 分割数据

图 3.9 – 分割数据

  1. 双类提升决策树后将其拖放到画布上。由于这是一个简单的存活机器学习任务,我们选择双类提升决策树。根据需要,你可以选择另一个双类算法。一旦选择了算法,我们需要配置其参数。通常,你可以将大多数设置为默认值,因为这些参数是基于各种模型运行统计选择的。你应该确保设置你的随机种子,如图 3.10所示。

以下截图展示了为双类提升 决策树设置的参数:

图 3.10 – 双类提升决策树

图 3.10 – 双类提升决策树

  1. 现在,在左侧菜单中,在搜索框中输入训练模型并将其拖放到画布上。对于训练模型,我们需要连接到两个输入,一个来自模型输出,另一个来自分割数据的第一个输出。确保算法和训练数据已连接。然后,选择训练模型和预测的标签列。

  2. 选择编辑列然后设置标签列存活模型解释是一个允许我们启用模型可扩展性的功能:

图 3.11 – 训练模型

图 3.11 – 训练模型

  1. 现在,你可以评分模型。转到左侧菜单,在搜索框中输入评分模型并将其拖放到画布上。评分模型必须连接到两个输出。第一个输入应该连接到训练模型的输出,第二个输入必须连接到分割数据的第二个输出。评分模型接受训练输出模型,然后消耗测试数据集以评分测试数据集:

图 3.12 – 评分模型

图 3.12 – 评分模型

  1. 现在,这里的最后一步是添加评估模型输出并获取模型准确度分数。为此,从左侧菜单中,将评估模型拖放到画布上。对于评估模型,第一个输入应该连接到评分模型输出。此任务没有设置:

图 3.13 – 评估模型

图 3.13 – 评估模型

  1. 现在,在画布上点击保存。我们现在已经完成了模型开发。在右上角,你会看到一个用于提交的按钮:

图 3.14 – 提交实验

图 3.14 – 提交实验

  1. 点击提交并为实验提供一个名称:

图 3.15 – 新实验

图 3.15 – 新实验

  1. 然后,点击Classificationsample1。为实验提供作业描述,这是可选的。将计算目标保留为默认,因为我们已经在实验开始时选择了它。等待实验完成。一旦实验开始,你应该看到以下截图:

图 3.16 – 实验状态

图 3.16 – 实验状态

可选地,你也可以通过点击作业来查看运行详情,然后对于Classificationsample1,点击其最新的作业。

  1. 一旦实验完成,你应该看到所有任务都显示为绿色,如下面的截图所示:

图 3.17 – 实验完成

图 3.17 – 实验完成

通过点击评估模型任务,我们可以查看评估模型任务的结果。在我们的案例中,我将只展示评估模型以查看混淆矩阵和接收者操作特征ROC)曲线:

图 3.18 – ROC 曲线

图 3.18 – ROC 曲线

除了审查 ROC 曲线,我们还可以审查混淆矩阵,如下面的截图所示:

图 3.19 – 混淆矩阵

图 3.19 – 混淆矩阵

在本节中,我们看到了如何使用 AMLS 中的设计器来训练模型。使用设计器,我们可以通过拖放界面来训练模型,同时进行特征工程以提供改进的模型。作为后续,查看用户界面中的每个任务。

在下一节中,你将学习如何通过编写 Python 代码并在计算实例上运行它来训练模型。

在计算实例上训练

你可以在计算实例或计算集群上训练模型。在本节中,我们将在继续在计算集群上训练之前使用现有的计算实例。

要开始使用计算实例,我们需要打开在第一章,“介绍 Azure 机器学习服务”中创建的计算实例。

按照以下步骤在 AMLS 中计算实例上训练模型:

  1. 前往ml.azure.com

  2. 选择你的工作区名称。

  3. 在工作区的左侧,点击计算

图 3.20 – 计算实例图标

图 3.20 – 计算实例图标

  1. 计算屏幕上,选择你的计算实例并选择开始

图 3.21 – 开始计算

图 3.21 – 开始计算

你的计算实例将从停止状态变为启动状态。一旦计算实例从启动状态变为运行状态,它就准备好使用。

  1. 在应用程序下点击终端蓝色的超链接。

  2. 这将在您的计算实例上打开终端。请注意,您的用户名将包含在目录路径中。在终端中输入以下内容以将示例笔记本克隆到您的工作目录:github.com/PacktPublishing/Azure-Machine-Learning-Engineering.git

  3. 点击显示在图 3.22中的刷新图标,将在您的当前工作目录中显示仓库:

图 3.22 – 刷新

图 3.22 – 刷新

在 AML 中点击刷新图标后,克隆的仓库将显示在您的工作目录中,如下面的截图所示:

图 3.23 – Azure-Machine-Learning-Engineering

图 3.23 – Azure-Machine-Learning-Engineering

  1. 点击train-on-compute-instance.ipynb笔记本将打开笔记本。

  2. 图 3.24所示的代码片段使您能够连接到计算实例中的 Azure ML 工作区:

图 3.24 – 连接到工作区

图 3.24 – 连接到工作区

  1. 图 3.25所示的代码片段使用 pandas 读取位于my_data文件夹中的数据集,然后查看它:

图 3.25 – 数据探索:读取数据集并查看数据

图 3.25 – 数据探索:读取数据集并查看数据

下一个单元格将检查哪些列有空数据,以便我们可以清洗数据集:

图 3.26 – 数据探索:查看数据集中的空值

图 3.26 – 数据探索:查看数据集中的空值

  1. 当值为null时的PclassSex

图 3.27 – 数据清洗:用 Pclass 和 Sex 的中位数填充 Age 列的空值

图 3.27 – 数据清洗:用 Pclass 和 Sex 的中位数填充 Age 列的空值

  1. 对于Cabin,我们可以在创建模型时使用第一个字符,将其视为分类变量来表示船上的位置。如果值为null,我们将将其替换为X,表示未知的Cabin类型,如图图 3.28所示:

图 3.28 – 特征工程:填充 Loc 列

图 3.28 – 特征工程:填充 Loc 列

  1. 我们将删除Cabin列,因为我们已经从其中检索了有用的信息,并且也将删除Ticket列,因为Loc列现在将代表船上的位置,如图图 3.29所示:

图 3.29 – 数据清洗:删除不必要的列

图 3.29 – 数据清洗:删除不必要的列

  1. 在继续特征工程时,我们将创建一个名为GroupSize的列,因为可能是家庭成员的乘客群体通过合作有更大的生存机会:

图 3.30 – 特征工程:组大小

图 3.30 – 特征工程:组大小

  1. 由于'Embarked'列的值有限,我们只有两行带有空值,我们将任意地将它们设置为'S'的值,如图3.31所示:

图 3.31 – 数据清洗:用默认值填充空值

图 3.31 – 数据清洗:用默认值填充空值

图 3.32所示,我们将删除在训练过程中不会使用的列:

图 3.32 – 数据清洗:删除模型训练不需要的列

图 3.32 – 数据清洗:删除模型训练不需要的列

  1. 我们将创建一个文件夹来存放我们的训练数据,如图3.33所示。这不是必需的,但会使我们的目录更清晰:

图 3.34 – 在目录中查看 clean_training_data 文件夹

图 3.33 – 创建文件夹

在点击刷新按钮后,可以在Notebooks部分的左侧面板中看到目录,如图3.34所示:

图 3.34 – 在目录中查看 clean_training_data 文件夹

  1. 使用新创建的目录,我们可以将数据集保存到clean_training_data目录中,如图3.35所示:

图 3.35 – 保存工程化数据集

图 3.35 – 保存工程化数据集

  1. 我们将开始导入创建逻辑回归模型所需的库,如图3.36所示:

图 3.36 – 导入库

图 3.36 – 导入库

在导入实验所需的库之后,我们将重点关注主方法,该方法将在计算实例上执行代码时被调用:

图 3.37 – 实验的主模块

图 3.37 – 实验的主模块

使用 MLflow,这是一个开源的机器学习生命周期管理框架,与 AMLS 完全集成,我们将创建一个名为'titanic_local_compute'的实验,如图3.37所示,在主方法内部。如果笔记本第一次运行时不存在,它将在 AML 工作区中创建。这个实验可以在mlflow.start_run()方法中查看,它将在实验中开始一个新的运行。使用mlflow.sklearn.autolog()mlflow.log_metric()方法,我们可以记录当前运行的参数和机器学习指标。

接下来,我们将讨论model_train函数,如图3.38所示:

图 3.38 – 模型 _train

图 3.38 – 模型 _train

model_train函数中创建了一个逻辑回归模型,如图图 3.38所示。输入变量和响应变量被分离,并使用sklearn库应用了训练-测试分割。模型被拟合,AUC 和准确率作为笔记本中的输出打印出来,同时利用 MLflow 框架,它们也被记录到实验中作为输出。除了将关键指标和参数作为实验的一部分进行记录外,与这些指标相关的图表也将自动使用 MLflow 进行记录,我们将在本节稍后讨论。

由于训练已经处理完毕,我们还想将预处理管道包含在我们的管道中,以处理数据转换,如图中所示:

图 3.39 – 预处理

图 3.39 – 预处理程序

  1. 我们已经集成了一个预处理管道来处理数据转换,如图图 3.39所示。创建一个数据转换的管道确保当我们对未见过的数据进行评分时,应用于我们的训练数据集的相同转换也会应用于测试数据和模型之前未见过的新的数据。这使模型部署能够在到达该步骤时在部署的模型中使用相同的转换。

  2. model_train方法中,在绘制 ROC 曲线之后,我们使用confusion_Matrix()方法计算实验运行的混淆矩阵,它也将自动在 AML 中记录,如图中所示。

  3. 这个实验直接在 AML 计算实例上运行,因为笔记本中的单元格是逐个执行的。打印语句和plt.show命令会在笔记本中直接提供输出,如图图 3.40所示。但是,Azure Machine Learning 服务也捕获了实验运行中的这些信息,所以当笔记本被清空时,模型评估的关键指标不会丢失:

图 3.40 – 笔记本输出

图 3.40 – 笔记本输出

  1. 在左侧面板中,通过点击作业图标,我们可以在实验下看到蓝色的超链接titanic_local_compute。通过点击这个实验,我们可以深入了解实验的不同运行情况,如图图 3.41所示:

图 3.41 – 实验运行输出

图 3.41 – 实验运行输出

  1. 在实验中点击某个运行显示名称,可以提供有关实验运行的详细信息,如图图 3.42所示:

图 3.42 – 运行详情

图 3.42 – 运行详情

  1. 通过点击指标选项卡,我们可以看到我们的AUC准确率值,如图图 3.43所示。这使数据科学家能够轻松比较模型,了解模型的变化如何影响性能,从而加速模型开发:

图 3.43 – 运行指标

图 3.43 – 运行指标

  1. 图片 标签页捕获与模型指标相关的图表,例如 ROC 曲线、精确率-召回率曲线和混淆矩阵,如图 3.44 所示:

图 3.44 – 图片标签页

图 3.44 – 图片标签页

本节展示了如何使用 AML 计算实例来训练模型。目标是展示我们如何使用以代码优先的方法,结合常见的开源库来处理数据工程、特征选择和模型开发的任务。

在下一节中,我们将使用计算集群来训练模型。

在计算集群上训练

在上一节中,我们展示了如何在计算实例上训练您的模型。在本节中,我们将向您展示如何在需要扩展的训练作业时将训练作业提交到计算集群。AML 使您能够在各种计算目标上运行训练代码变得极其简单,而无需更改训练脚本。您需要创建一个 AML 管道来处理数据处理、模型训练和注册训练好的模型,如本节所述。

以下是在计算集群上训练您的模型的步骤:

  1. 转到 ml.azure.com

  2. 选择您的工作区名称。

  3. 在工作区用户界面的左侧,点击 计算

图 3.45 – 计算图标

图 3.45 – 计算图标

  1. 计算 屏幕上,点击 计算集群 标签,然后点击 + 新建,如图 3.46 所示:

图 3.46 – 创建新的计算集群

图 3.46 – 创建新的计算集群

  1. 接下来的几个屏幕允许您根据需要创建和配置计算集群。完成后,点击 创建,如图 3.47 所示:

图 3.47 – 配置计算集群

图 3.47 – 配置计算集群

  1. 几秒钟后,您的新计算集群将启动,如图 3.48 所示:

图 3.48 – 计算集群列表

图 3.48 – 计算集群列表

  1. 按照如图 3.49 所示,转到您的工作目录:

图 3.49 – 工作目录

图 3.49 – 工作目录

  1. 点击 train-on-compute-cluster.ipynb 将会打开笔记本,它与上一节中的笔记本非常相似。我们在此不再重复所有步骤,只介绍如何在您刚刚创建的远程集群上运行训练所需的步骤。要了解更多关于 AML 管道和提交远程作业的信息,请参阅 github.com/Azure/azureml-examples

3.50 中所示的代码片段用于创建一个对象以访问您的 AML 工作区:

图 3.50 – 工作目录

图 3.50 – 工作目录

  1. 接下来,我们将创建一个 AML 环境,这是一个封装的 Python 环境,其中 ML 管道的不同步骤,如训练步骤,会发生。图 3.51 展示了如何使用 conda.yaml 文件为你的作业创建一个 conda 环境:

图 3.51 – conda 环境

图 3.51 – conda 环境

  1. 前面的 .yaml 规范文件包含在管道中使用的 Python 包。然后你可以使用这个 .yaml 文件在你的 AML 工作区中创建和注册这个自定义环境,如图 3.52 所示:

图 3.52 – 在 AML 中创建和注册自定义环境

图 3.52 – 在 AML 中创建和注册自定义环境

要创建 AML 组件,你需要编写一个 Python 脚本来实现 ML 任务。此脚本可以接受输入数据和输入参数,这些参数在代码中使用,并将结果(例如,转换后的数据集或训练好的模型)输出到一个持久位置,例如挂载的文件夹。ML 组件的输出可以通过其 ML 组件的输入用作管道中下一步的输入。一旦你有了 Python 脚本,你可以通过编程方式或使用 .yaml 定义来创建组件。

  1. 接下来,我们需要为管道的数据处理步骤编写一个 Python 脚本,如图 3.53 所示:

图 3.53 – 管道数据准备步骤的 Python 脚本

图 3.53 – 管道数据准备步骤的 Python 脚本

  1. 现在我们有了执行数据处理任务的脚本,我们可以使用程序定义来创建一个 AML 组件。要创建 ML 组件,我们将使用 command 类来指定 Python 脚本的输入和输出、脚本的源代码目录、运行脚本的命令行以及此作业将运行的 Python 环境,如图 3.54 所示:

图 3.54 – 使用命令类创建数据处理组件

图 3.54 – 使用命令类创建数据处理组件

  1. 接下来,我们需要为管道的模型训练步骤编写一个 Python 脚本,然后从中创建一个 AML 组件。请参考我们的 GitHub 以使用模型训练的 Python 代码。要创建 AML 组件,我们将这次使用 .yaml 定义,如图 3.55 所示:

图 3.55 – 使用 yaml 定义创建模型训练组件

图 3.55 – 使用 yaml 定义创建模型训练组件

  1. 我们可以从 .yaml 文件中加载训练组件,然后使用图 3.56 中所示的代码片段将其注册到工作区:

图 3.56 – 加载和注册模型训练组件

图 3.56 – 加载和注册模型训练组件

  1. 现在数据预处理和模型训练组件都已创建,我们可以开始编写管道定义的代码,该代码将在后续步骤中调用。我们将使用@dsl.pipeline装饰器来告诉 SDK 我们正在定义一个 AML 管道,如图图 3**.57所示。如图所示,这里指定了计算目标,即我们在此节之前创建的计算集群:

图 3.57 – 使用@dsl.pipeline 装饰器定义 AML 管道

图 3.57 – 使用@dsl.pipeline 装饰器定义 AML 管道

  1. 现在我们已经定义了我们的管道,让我们通过传递我们的数据集、分割率和训练模型的名称来实例化它,如图图 3**.58所示:

图 3.58 – 通过传递数据和参数实例化管道

图 3.58 – 通过传递数据和参数实例化管道

  1. 现在我们已经实例化了管道对象,我们可以将作业提交到 AML 中运行,AML 使用计算集群来运行管道内的步骤,如图图 3**.59所示:

图 3.59 – 将管道作业提交到 AML 中运行

图 3.59 – 将管道作业提交到 AML 中运行

  1. 要查看管道进度和每个步骤的详细信息,你可以点击图图 3**.61中显示的链接,或者点击作业选项卡,这将显示一个包含titanic_remote_cluster等实验的列表,如图图 3**.60所示:

图 3.60 – 将管道作业提交到 AML 中运行

图 3.60 – 将管道作业提交到 AML 中运行

  1. 点击titanic_remote_cluster实验,查看与该管道作业关联的所有运行的列表。你应该只看到这个作业的一个运行,这是我们刚刚在笔记本中运行的。点击它将带你去一个带有管道图形表示的屏幕,如图图 3**.61所示:

图 3.61 – AML 管道的图形视图

图 3.61 – AML 管道的图形视图

  1. 点击管道的不同步骤,查看每个步骤的详细信息。例如,通过点击训练泰坦尼克号生存模型步骤,你可以看到模型指标,如准确率、精确率和召回率,如图图 3**.62所示:

图 3.62 – 管道步骤的详细视图

图 3.62 – 管道步骤的详细视图

你已经成功训练了一个模型,并使用 AML 计算集群在你的 AML 工作区中查看了指标。现在,让我们回顾本章。

摘要

我们在本章中涵盖了大量的主题。我们向您展示了如何使用 AML Designer 训练一个机器学习模型,这不需要编写代码。这对于希望快速探索不同算法并评估其性能的公民数据科学家或高级数据科学家来说是一个很好的选择。接下来,您学习了如何通过 AML Python SDK 训练一个机器学习模型,该 SDK 可以在计算实例和计算集群上运行,以处理更计算密集型的机器学习任务。

在下一章中,您将学习如何使用 AML HyperDrive 调整您的机器学习模型的超参数。

第四章:使用 AMLS 调整您的模型

调整您的模型是您数据科学之旅中的一个重要步骤。数据科学工作负载的目标是在最短的时间内提供最佳的模型,以应对未见过的数据。为了提供可靠的模型,您不仅需要调整作为模型输入的特征,还需要调整模型本身的参数。模型参数,也称为超参数,可以对您训练的模型性能产生重大影响。调整模型可能需要大量努力,并涉及试错。可以利用几个框架来自动化此任务。AMLS 提供了这项功能,我们将在本章中探讨。AMLS 允许您定义应调整以找到最佳模型的模型参数,通过使用称为扫描作业的特殊类型的工作来实现。这些超参数将为给定的 AMLS 作业定义,并且 AMLS 将在可能定义的值范围内运行许多试验,以确定最佳模型。

在本章中,我们将探讨 AMLS 如何通过扫描作业实现超参数调整。

在本章中,我们将涵盖以下主题:

  • 理解模型参数

  • 超参数采样

  • 理解扫描作业

  • 使用网格采样设置扫描作业

  • 使用随机采样设置扫描作业

  • 使用贝叶斯采样设置扫描作业

  • 查看扫描作业的结果

技术要求

为了访问您的工作区,回想一下上一章中的步骤:

  1. 前往ml.azure.com

  2. 选择您的工作区名称。

  3. 在工作区用户界面UI)的左侧,点击计算

  4. 计算屏幕上,选择您的计算实例并选择启动

图 4.1 – 开始计算

图 4.1 – 开始计算

  1. 您的计算实例将从停止状态变为启动状态。

  2. 在上一章中,我们克隆了 Git 仓库——如果您还没有这样做,请继续遵循这里提供的步骤。如果您已经克隆了仓库,请跳转到步骤 7

在您的计算实例上打开终端。请注意,路径将包括您的用户目录。在终端中输入以下内容以将示例笔记本克隆到您的工作目录:

git clone https://github.com/PacktPublishing/Azure-Machine-Learning-Engineering.git
  1. 点击图 4.2中显示的刷新图标将更新并刷新您屏幕上显示的笔记本:

图 4.2 – 刷新图标

图 4.2 – 刷新图标

  1. 查看您Azure-Machine-Learning-Engineering目录中的笔记本。这将显示克隆到您工作目录中的文件,如图图 4.3所示:

图 4.3 – Azure-Machine-Learning-Engineering

图 4.3 – Azure-Machine-Learning-Engineering

理解模型参数

在你的数据科学工作中,当你定义你的特征时,你确定你的模型应该利用哪些参数。然而,根据所选算法的不同,你可以通过改变模型本身的参数来控制训练行为——这被称为超参数调整。使用超参数调整,我们可以探索各种模型参数,以确定建立最佳模型结果的最佳模型参数。为了评估模型结果,选择一个主要指标。主要指标被定义为评估模型的关键指标。每次更改超参数时,主要指标的价值要么上升要么下降,基于主要指标,这将产生更好的或更差的模型。

在本章中,我们将利用 sklearn 的逻辑回归实现和 sklearn 管道创建一个逻辑回归模型。对于一个逻辑回归模型,我们可以调整几个模型参数来提高我们模型的表现。对于一个逻辑回归模型,一个参数是惩罚项。将惩罚项定义为 l2,称为岭回归,是逻辑回归估计器在模型过于复杂时对模型应用惩罚所使用的。这使用模型系数的 l2 归一化作为惩罚。通常,l2 归一化通过惩罚复杂模型来防止模型过拟合。l2 范数平方模型系数,求和它们,然后取值的平方根。在创建模型时,我们可以选择 l1 范数,称为 lasso 回归,这将是系数绝对值的和作为惩罚项。将代码从利用 l2 归一化惩罚更改为 l1 归一化惩罚将利用超参数调整或调整模型参数的技术。如果我们不打算依赖超参数调整来选择惩罚项,我们可以说当少数预测变量显著时,lasso 回归通常比岭回归表现更好,而当有多个显著预测变量时,岭回归通常表现更好。

除了惩罚项之外,我们还可以指定 C 的值,它是正则化强度的倒数,作为调整我们模型的超参数。

我们将要调整的最后超参数是 max_iter,这是求解器在收敛之前可以进行的最大迭代次数。当你考虑在构建模型时想要探索的模型参数时,你正在定义搜索空间。搜索空间是一个定义超参数和超参数调整期间可能值的范围的概念。

现在我们已经了解了超参数调优和定义搜索空间,我们将探讨在 AMLS 作业中选择模型超参数组合的方法,以利用这些参数,这被称为扫描作业

超参数采样

在搜索空间内,超参数可以是连续值或离散值。连续超参数可以在一个连续的值范围内,而离散超参数只能使用某些特定的值。对于逻辑回归,惩罚项可以有两个离散值之一:l1l2。AMLS 可以使用列表或范围来设置超参数,正如我们将在深入研究代码时看到的。

对于C超参数,我们可以将其定义为离散值,或者我们可以将C定义为具有指定分布的连续范围内的值。

对于max_iter超参数,sklearn逻辑回归模型的默认值是100。我们可以将其设置为离散值,如penality_term,或均匀值,如C

下面的代码显示在图 4**.4中定义了惩罚项、模型的逆正则化强度和最大迭代次数的选择,这些是定义作业命令的离散值:

图 4.4 – 定义搜索空间

图 4.4 – 定义搜索空间

一旦定义了搜索空间,我们就可以选择我们的扫描作业想要运行哪种类型的采样。对于搜索空间中定义的每个参数,都会根据采样的模型超参数创建试验。在 AMLS 的扫描作业中有三种可用的采样类型:随机网格贝叶斯

网格采样将为每个超参数组合创建一个试验。例如,如果我们指定搜索空间以检查l1l2,并选择C为离散值0.01.1110,以及max_iter10100150200,那么将创建2x4x4=32个试验。由于网格采样将为每个超参数组合创建一个试验,因此网格采样仅支持离散超参数。

当利用随机采样时,超参数值将在试验期间随机选择。

图 4**.5显示了在此搜索空间中定义的离散和连续超参数。在此代码中,C的值遵循在0.0110之间的均匀分布,这是定义作业命令的值,这显示了我们可以如何将C定义为连续值,而不是像在图 4**.5中显示的那样,当C被定义为列表中的值时:

图 4.5 – 离散和连续超参数

图 4.5 – 离散和连续超参数

在前面的例子中,由于C是一个连续超参数,我们无法利用网格采样,但我们可以利用随机或贝叶斯采样。

贝叶斯采样利用前一次试验的主要指标输出,以确定运行下一组超参数。

注意

网格空间采样不支持连续超参数 – 它将仅支持包含离散值的选项超参数。

由于超参数可以是离散的或连续的,我们将定义网格空间搜索的全面性以及如何结束搜索空间以提供给定模型最佳主要指标的作业。在下一节中,我们将探讨如何设置我们的作业以有效地和高效地搜索最佳超参数。

理解 sweep 作业

AMLS 中的 sweep 作业允许数据科学家在单个作业中定义要探索的超参数。在作业过程中,这将自动化搜索提供最佳主要指标结果的超参数的任务,创建并评估基于所选采样方法在搜索空间内定义的超参数的多个试验。通过定义搜索空间,我们可以创建单个作业的单一运行,以同时测试多个假设,而不是重写代码和重新运行作业,从而减少探索搜索空间所花费的时间。

为了利用您工作中的超参数,您的代码需要更新以通过 Python 的ArgumentParser将这些新参数传递到代码中,如下所示:

图 4.6 – 将参数列表传递到作业中

图 4.6 – 将参数列表传递到作业中

现在将参数传递到主函数后,它们可以在模型训练脚本中通过传递到model_train函数来利用。

这是将参数传递到model_train函数的代码:

图 4.7 – 传递模型训练参数

图 4.7 – 传递模型训练参数

model_train函数中,您可以在构建逻辑回归模型时利用超参数。

这是将参数传递到逻辑回归模型的代码:

图 4.8 – 利用超参数

图 4.8 – 利用超参数

与所有 AML SDK v2 作业一样,sweep 作业最初定义为job命令。在作业命令中,您指定代码、文件位置、带有参数的命令、输入、环境、计算和显示名称,但对于 sweep 作业,我们还会指定如图 4.4图 4.5中所示的超参数。

一旦将作业命令更新为包括超参数,你就可以指定命令的扫描参数。在扫描方法中,你指定将要利用的计算资源、抽样算法、主要指标和目标。抽样算法可以设置为randombayesiangrid,如前所述。主要指标是你希望在作业中记录并评估试验的指标。目标指定了你希望如何评估主要指标。目标可以是最小化或最大化主要指标,这用于评估你的模型性能。

这里展示了扫描作业命令的代码:

图 4.9 – 设置扫描参数

图 4.9 – 设置扫描参数

在此处的图 4.9中,你可以看到正在设置的扫描参数值。在这种情况下,我们将评估test_AUC主要指标,通过在名为cpu-cluster的计算集群上利用网格抽样算法来最大化。

要设置扫描作业的限制,我们指定最大总试验次数 – max_total_trials – 默认为1000。最大并发试验次数 – max_concurrent_trials – 如果未设置,则默认为max_total_trials指定的数字,将指定在任何给定时间内应运行多少并发试验。另一个需要设置的参数是超时时间:timeout。超时时间以秒为单位。超时时间适用于整个扫描作业,默认值为100800

图 4.10 – 设置网格抽样的作业限制

图 4.10 – 设置网格抽样的作业限制

注意,在本章中探索的网格抽样实验中,实际的总运行次数最大为 32,但如果我们添加了额外的选择作为超参数,设置试验限制将确保作业的总试验次数不超过图4.10中的 60 次。

使用随机抽样时,超参数是随机选择的,因此在这里设置作业限制将非常重要。正如所述,max_total_trials的默认值为1000,因此我们可以看到,当max_total_trials等于120时,将只为特定的作业运行创建120次试验。

设置扫描作业的最大限制如下:

图 4.11 – 设置随机抽样的作业限制

图 4.11 – 设置随机抽样的作业限制

当利用贝叶斯抽样时,将利用先前试验的信息来确定搜索空间中要搜索的下一个参数。对于网格和随机抽样,每个试验与其他试验独立。鉴于网格抽样和随机抽样的每个试验都是独立的,一旦在给定试验中确定了主要指标,如果它不会产生最佳模型,则无需代码继续运行。这些试验可以提前终止,以便将计算资源用于下一个试验的主要指标评估。

为了启用早期终止,AMLS 扫描作业结合了早期终止策略的概念。如果未满足定义的标准,早期终止策略将在主要指标记录后提前结束一个给定的试验。对于早期终止,AMLS 支持几种策略,包括截断选择策略、中值停止策略和赌博策略。

如果未选择早期终止策略,试验运行将执行至完成 – 如前所述,这是贝叶斯抽样的要求。然而,当利用网格或随机抽样时,如果选择截断策略,AMLS 将根据所选的早期终止策略终止试验。

截断策略

如果选择截断策略,AMLS 将根据truncation_percentage中的值取消一部分表现最差的运行。

以下是一个早期终止策略的示例代码,该策略以1个间隔开始评估,并使用截断策略终止所有试验中最低的75%:

图 4.12 – 截断早期终止策略

图 4.12 – 截断早期终止策略

当使用截断早期终止策略执行扫描作业时,在 AMLS 的概览选项卡中,您可以在作业概览屏幕上查看策略。无论选择哪种早期终止策略,都可以在作业 概览屏幕上查看。

早期终止策略在工作区中的显示如下:

图 4.13 – 扫描作业的早期终止策略

图 4.13 – 扫描作业的早期终止策略

除了截断策略之外,我们还可以设置一个中值策略,我们将在下一节中探讨。

中值策略

另一种早期终止策略是中值停止策略。该策略将根据所有训练试验的中值提前结束试验。如果给定试验的值低于中值平均值,它将被终止。

下面是早期终止策略的示例代码,该策略以 2 个间隔开始评估,并终止所有试验中低于中值的任何试验:

图 4.14 – 中值早期终止策略

图 4.14 – 中值早期终止策略

赌博策略

一种称为“老丨虎丨机策略”的早期终止策略会在主要指标不在当前最成功试验的某个范围内时提前结束运行。这个范围由slack_factor定义。在评估时,最佳主要指标值除以(1+slack_factor),如果一个试验没有比这个值更好的主要指标,它将被提前终止。如果数据科学家更愿意设置一个值而不是用slack_factor设置一个比率,可以使用slack_amount代替:

图 4.15 – 老丨虎丨机早期终止策略

图 4.15 – 老丨虎丨机早期终止策略

为了为老丨虎丨机策略提供一些背景,让我们假设到目前为止的间隔2中,我们的test_AUC的最佳指标为.85。在这个例子中,如果指标低于.85/1.1.773,它将被终止。

随着训练变得越来越复杂,建立提前终止试验的能力可以确保在最终无法实现所需结果时不会消耗计算资源。

在下一节中,我们将探讨设置利用网格采样确定最佳模型超参数的扫描作业。

设置网格采样扫描作业

在本章的早期部分,我们克隆了我们的示例笔记本以利用这些材料。本章的笔记本,'Chapter 4 – Hyperparameter Tuning',提供了利用sklearn管道和mlflow功能创建工作命令以创建逻辑回归模型的回顾。

然后更新代码并将其放置到一个新的目录中——hyperparametertune文件夹。代码利用 python 的argparse模块,该模块允许你将参数传递到脚本中。要运行由这个笔记本生成的脚本,我们将创建一个工作命令并更新工作命令以包括以下代码片段中的超参数:

图 4.16 – 用于网格采样的超参数扫描命令

图 4.16 – 用于网格采样的超参数扫描命令

注意,超参数已被包括在命令的输入中,但它们的值在前面图中的第 22 行添加到命令中。这可以作为一个单独的命令来完成,但为了说明目的,它被单独提供作为对grid_sampling_job_command的更新。

一旦准备就绪,我们调用扫描方法,提供计算、采样算法、主要指标和目标。回想一下,我们预计将看到 32 次运行,所以将max_total_trials设置为60不会产生影响,但如果我们更新超参数以包括更多的选择,我们可能会达到max_total_trials

图 4.17 – 在网格采样期间调用扫描方法

图 4.17 – 在网格采样期间调用扫描方法

在笔记本的后面,当我们查看随机采样和贝叶斯采样时,我们将C的值定义为连续值 - 然而,为了利用网格采样,我们将其定义为选择,即一系列离散值。

要提交grid_sweep_job,我们将命令传递给ml_client,它是为了管理到 AMLS 的连接而创建的:

图 4.18 – 执行扫描作业

图 4.18 – 执行扫描作业

当扫描作业正在执行时,获取正在运行的作业的状态可能会有所帮助。鉴于我们正在利用mlflow来记录sklearn模型的指标,我们可以请求给定父run_id值的所有试验,这是grid_sweep_job的运行。

在以下代码片段中,我们传递experiment_idrun_id值,并获取作业状态:

图 4.19 – 获取扫描作业的状态

图 4.19 – 获取扫描作业的状态

我们在运行中搜索给定的experiment_id值。我们的experiment_id值将是'chapter4',因此我们请求所有为'chapter4'创建的运行,并根据tags.mlflow.parentRunId进一步精炼该列表,它是与网格采样运行关联的run_id值。在*图 4**.19 的第 3 行中,我们请求与网格扫描作业运行关联的run_id值的运行。如果我们得到0的值,那么我们知道我们必须等待运行在 AMLS 中建立。一旦提供了运行,我们就继续到下一个while循环,在那里我们检查是否所有运行都已完成。一旦网格扫描作业的所有运行都已完成,第 24 行的消息将被打印出来。

恭喜你利用了带有网格采样的扫描作业!当你的超参数搜索空间包含离散值时,网格采样效果很好。接下来,我们将探索利用带有随机采样的扫描作业来探索超参数的连续值。

设置随机采样的扫描作业

正如我们在设置网格采样命令时看到的那样,随机采样的命令只是一个包含超参数的作业命令。grid命令和random命令之间有一个区别是,在随机采样扫描作业中,超参数可以是连续的。

这是随机采样的作业命令代码:

图 4.20 – 带有随机采样超参数的扫描作业命令

图 4.20 – 带有随机采样超参数的扫描作业命令

如第 25 行中的*图 4**.20 所示,C的值被定义为从0.0110.0的均匀分布,这使得在整个搜索空间中这是一个连续的超参数。

就像网格采样扫描作业一样,我们为扫描设置参数,但如这里所示,我们使用随机采样算法来指定它们:

图 4.21 – 在随机采样期间调用扫描方法

图 4.21 – 在随机采样期间调用扫描方法

给定扫描作业的参数和限制已设置,我们准备执行扫描作业。为了执行代码,我们再次利用 ml_client 方法创建或更新一个作业,如图 4.18 所示。

现在您已经完成了网格和随机采样,还有另一种可以应用的超参数采样类型,我们将在下一节中探讨。

设置贝叶斯采样扫描作业

在本章早期,我们克隆了我们的样本笔记本以利用这些材料。本章的笔记本 '``Chapter 4 - Hyperparameter Tuning' 提供了创建创建 sklearn 管道和 mlflow 功能的作业命令的回顾。

然后更新代码并将其放置到一个新的目录中 – hyperparametertune 文件夹,该文件夹利用 Python 的 argparse 模块,并允许您将参数传递到脚本中。要运行由该笔记本生成的脚本,我们将创建一个作业命令并更新作业命令以包括超参数,如代码片段所示。方便的是,作业命令与 图 4.16 中显示的随机采样作业命令相同。

这里的唯一区别是采样算法被定义为 bayesian,如图所示:

图 4.22 – 使用贝叶斯采样调用扫描方法

图 4.22 – 使用贝叶斯采样调用扫描方法

为了执行代码,我们再次利用 ml_client 的方法创建或更新一个作业,并继续利用 get_job_status 方法,如图 4.19 所示。

您现在已经完成了 AMLS 中的网格、随机和贝叶斯超参数调优作业命令。我们将继续在 AMLS 中查看作业结果。

查看扫描作业结果

回想一下,对于扫描作业的单次试验,将创建多个试验以确定将提供最佳主要指标的模型。点击 AMLS 工作区左侧菜单面板中的 作业 将显示您要查看的作业列表。到目前为止,您已经运行了本章提供的样本笔记本 – 让我们查看您的结果。

点击 chapter4 作业将带您到您在本章中执行的作业。选择显示名称将深入查看特定作业的详细信息。让我们首先查看我们已运行的作业结果,如下所示:

图 4.23 – 作业结果

图 4.23 – 作业结果

要查看作业结果,请按照以下步骤操作:

  1. 点击 实验 名称,Chapter04,将带我们到本章中执行的不同作业扫描。

  2. 点击您实验的给定运行将提供特定作业运行的详细信息,如图 4.24 所示:

图 4.24 – 作业扫描详情

图 4.24 – 作业扫描详情

关键信息被捕获为元数据,为给定作业运行提供可追溯性。这些信息包括以下内容:

  1. 样本策略

  2. 参数空间

  3. 主要指标

  4. 最佳试验

  5. 完成的运行次数

  6. 点击运行详情中的试验超链接,将显示具有所选主要指标最佳结果的试验:

图 4.25 – 最佳试验运行

图 4.25 – 最佳试验运行

  1. 点击最佳试验运行的 指标 选项卡,可以提供给定试验的评估指标:

图 4.26 – 扫描作业最佳试验运行的指标

图 4.26 – 扫描作业最佳试验运行的指标

  1. 要全面审查为作业运行创建的所有试验,您可以点击作业运行并转到如图 4.27 所示的 试验 选项卡:

图 4.27 – 网格采样扫描作业的试验运行

图 4.27 – 网格采样扫描作业的试验运行

不仅可以通过 AMLS 工作空间 UI 对给定作业运行的每个指标进行审查,还可以查看一个平行坐标图,显示所选的不同超参数如何影响主要指标。

要全面审查搜索空间及其对主要指标的影响,请查看 试验 选项卡中的平行坐标图:

图 4.28 – 网格搜索空间平行坐标图

图 4.28 – 网格搜索空间平行坐标图

除了平行坐标图之外,AMLS 还提供了二维散点图和三维散点图来评估超参数调整。

超参数调整的 3D 散点图如下所示:

图 4.29 – 3D 散点图

图 4.29 – 3D 散点图

我们已经看到了如何在 AML Studio 中通过图表图形化地查看和比较模型,但我们并不局限于通过 UI 访问这些有价值的信息。

我们不仅可以通过在实验选项卡中查看结果来通过 AMLS Studio 获取扫描作业的最佳试验,还可以通过利用 AMLS Python SDK v2 来访问这些信息。

将作业运行的输出放入 pandas DataFrame 的示例如下:

图 4.30 – 将作业结果放入 pandas DataFrame

图 4.30 – 将作业结果放入 pandas DataFrame

在笔记本的末尾,我们包含了返回完成作业运行的 pandas DataFrame 的代码:

图 4.31 – 对试验进行排序以获得最高的 test_AUC

图 4.31 – 对作业试验进行排序以获得最高的 test_AUC

假设我们已经根据主要指标对 pandas DataFrame 进行了适当的排序,我们可以轻松地提取出最佳试验运行的 run_id 值,如下所示:

图 4.32 – 从排序的 pandas DataFrame 获取最佳 run_id 值

图 4.32 – 从排序的 pandas DataFrame 获取最佳 run_id 值

现在我们已经将最佳运行检索到best_run_id变量中,如图所示,我们可以利用扫描作业中的最佳模型。

从最佳扫描作业试验中加载模型如下所示:

图 4.33 – 加载最佳模型

图 4.33 – 加载最佳模型

一旦模型被加载,并且我们使用创建模型时使用的虚拟环境,我们就可以使用加载的模型进行推理,如下所示:

图 4.34 – 使用扫描作业中的最佳模型进行推理

图 4.34 – 使用扫描作业中的最佳模型进行推理

恭喜您 – 您已从 SDK v2 中检索到给定扫描作业的最佳试验运行!此运行信息可以在 UI 中查看,也可以通过编程方式查看。

摘要

在本章中,我们探讨了模型参数是什么以及如何利用扫描作业来调整给定模型定义的超参数。我们还探讨了基于所选搜索空间和采样方法设置扫描作业的选项。AMLS 提供了在搜索空间中扫描以调整模型的能力,自动化计算集群上的超参数调整过程,在试验完成后,在空闲期间自动关闭,明智地消耗计算资源。

除了设置扫描作业外,您还能够在 Studio 以及代码中查看您的结果 – 提供了对您用例中表现最佳模型的直观洞察。现在您已经完成了本章,请务必关闭您的计算资源以节省成本。

在下一章中,我们将向您展示如何利用 AMLS 来接管模型开发这一耗时任务。此功能不仅可通过 SDK 和 CLI 访问,还可在 AMLS Studio 本身中访问。

第五章:Azure 自动化机器学习

自动化机器学习,也称为 AutoML,是机器学习模型开发中迭代和时间消耗过程的自动化。AutoML 使数据科学家和机器学习工程师能够以高效的方式开发高性能模型,使他们能够快速扩展和构建最佳模型。数据科学家可以依赖 AutoML 来执行繁琐的模型开发任务,如特征工程、算法选择、超参数调整和模型评估。

在本章中,我们将涵盖以下主题:

  • Azure AutoML 简介

  • AML 中的特征化概念

  • 使用 AMLS 进行 AutoML

  • 使用 AML Python SDK 进行 AutoML

  • 通过 AML 和 AML SDK 解析您的 AutoML 结果

技术要求

在本节中,我们将通过逐步操作来展示如何从头到尾创建一个自动化机器学习模型。

为了访问您的 workspace,回顾前一章中的步骤:

  1. 前往 ml.azure.com

  2. 选择您的 workspace 名称。

  3. 在左侧工作区的 用户 界面上,点击 计算

  4. 计算 屏幕上,选择您的计算实例并选择 启动

图 5.1 – 开始计算

图 5.1 – 开始计算

  1. 您的计算实例将从 停止 状态变为 启动 状态。

  2. 第二章,“在 AMLS 中处理数据”,我们克隆了 Git 仓库 – 如果您还没有这样做,请继续按照这里提供的步骤操作。如果您已经克隆了仓库,请跳转到 步骤 7

  3. 在您的计算实例上打开终端。注意路径将包括您的用户目录。在终端中输入以下内容以将示例笔记本克隆到您的工作目录:

    git clone (https://github.com/PacktPublishing/Azure-Machine-Learning-Engineering.git)
    
  4. 点击图 图 5.2 中显示的刷新图标将更新并刷新屏幕上显示的笔记本:

图 5.2 – 刷新

图 5.2 – 刷新

  1. 查看您 Azure-Machine-Learning-Engineering 目录中的笔记本。这将显示克隆到您工作目录中的文件,如图 图 5.3 所示:

图 5.3 – Azure-Machine-Learning-Engineering

图 5.3 – Azure-Machine-Learning-Engineering

现在,让我们了解 Azure Machine Learning(AML)AutoML 是什么,它的一些好处以及如何使用它们。

Azure AutoML 简介

AutoML 是一个强大的解决方案,它不仅使数据科学家能够构建机器学习模型,还使公民数据科学家能够构建支持各种用例的机器学习模型。目前,AutoML 支持预览中的分类、回归、时间序列预测和计算机视觉。分类涉及一个响应变量,用于标识一个类别。输入训练数据集将被用来构建一个模型,以预测新样本将落入哪个类别。利用泰坦尼克号数据集,我们可以利用分类模型来预测乘客是否能在泰坦尼克号上幸存。除了支持分类模型创建外,AutoML 还能够生成回归模型。回归模型将提供模型输出的连续值。回归模型的一个例子是预测汽油价格或出租车费用。AutoML 还可以根据时间序列预测预测值。不仅如此,AutoML 还支持使用AML StudioAMLS)Python SDK 进行图像分类、目标检测和实例分割。

虽然 AMLS 支持各种 AutoML 任务,但 AMLS Python SDK 支持各种功能,供开发人员和数据科学家利用,这些功能目前仅通过 AMLS 本身无法获得。

使用 Python SDK,我们不仅找到了对计算机视觉任务的支持,还包括查看特征化信息、启用投票集成模型、根据非主要指标显示最佳模型,以及启用和禁用开放神经网络交换ONNX)模型兼容性。

AML 中的特征化概念

为了提供最佳的模型,无论是否利用 AutoML,模型创建的一个重要步骤是特征工程。在 AMLS 中,AutoML 将默认利用特征化。如果特征工程步骤已经完成,可以在 UI 和 SDK 中禁用此功能。这些对您的数据集进行的特征化转换不仅可以启用或禁用,还可以自定义或排除特定列。根据列的类型和数据类型,您的数据集将应用几种特征化步骤。

在训练过程中,AutoML 利用缩放或归一化来确保模型性能。AutoML 利用各种技术,包括缩放到单位方差、按分位数范围缩放、按最大绝对值缩放、按列的最小值和最大值缩放,以及应用主成分分析PCA)进行降维、奇异值分解SVD)进行降维,以及将每个样本缩放到 1 的范数。

假设特征化已启用,某些列将在训练过程中被删除。没有方差(意味着所有行都有相同的值)的列或具有高基数(意味着它们具有非常高的方差,例如具有 GUID 值的列)的行将被删除。如果一个列具有数值但方差低,AutoML 会将该值转换为分类特征并应用独热编码。如果一个分类列具有高方差,将利用独热哈希编码。

AutoML 还将为每个数值列生成一个 k-means 聚类模型。每个样本将添加其与簇中心的距离到数据集中。

通常,数据集会包含缺失值。如果列是数值型的,AutoML 会用平均值替换缺失值;如果列是分类型的,它会使用给定列中最常见的值来填充。实际上,这可以通过在 AutoML 中利用FeaturizationConfig来自定义。缺失值填充器可以用值的均值、中位数或众数来替换值。

对于日期时间值特征,将生成包括年份、月份、日、年中的日、星期几、季度、小时、分钟和秒在内的附加特征。

对于预测任务,利用TimeIndexFeaturization类生成许多不同的特征。例如,包括一个整数值,指定是否在某个日期之前或之后(例如 7 月 1 日),年份、日历季度、日历月份、日、小时、分钟、秒、上午或下午指示符、星期几、季度中的天数(1 到 92)、年中的天数(1 到 366),以及由 ISO 8601 标准定义的 ISO 周和年。

对于文本特征,将基于三元组、二元组和单语元添加词频。文本特征被转换为文档特征向量。通过启用深度学习,AutoML 可以在特征化过程中配置利用双向编码器表示从 TransformerBERT)。

AutoML 不仅可以处理各种特征化步骤以准备模型进行训练,还可以在 AMLS 中直接处理分类、回归和时间序列预测,并完成相同的建模任务,以及通过 AML Python SDK 完成计算机视觉任务。

在下一节中,我们将探讨如何利用 AMLS 来完成对著名泰坦尼克号数据集的分类。数据集链接将在本书的 GitHub 存储库中提供。

使用 AMLS 的 AutoML

如本章前面所述,在 AML 中可以使用两种方式使用 AutoML。对于公民数据科学家或偏好无代码方法的数据科学家,可以使用 AMLS;对于有编码经验的数据科学家,可以使用 AML Python SDK。在本节中,我们将向您展示如何使用 AMLS 在您的泰坦尼克号数据集上训练分类模型,以预测乘客是否能在泰坦尼克号灾难中幸存。

请在 ml.azure.com 上登录到 AMLS 并按照以下说明操作:

  1. 选择您在整个书中使用的订阅和工作室。

  2. 在工作室的左侧,如图 图 5.4 所示点击 自动化机器学习

图 5.4 – 导入 AutoMLConfig

图 5.4 – 导入 AutoMLConfig

  1. 从您的本地计算机选择 titanic.csv 上传到 Azure,如图 图 5.5 所示:

图 5.5 – 通过从本地计算机上传 titanic.csv 创建新的数据集

图 5.5 – 通过从本地计算机上传 titanic.csv 创建新的数据集

  1. 按如图 图 5.6 所示为数据集提供基本信息:

图 5.6 – 为数据集提供基本信息

图 5.6 – 为数据集提供基本信息

  1. 在下一屏幕上,如图 图 5.7 所示点击 titanic.csv。数据集可在本书的 GitHub 仓库中找到:

图 5.7 – 提供存储数据文件的位置

图 5.7 – 提供存储数据文件的位置

  1. 上传后,下一屏幕将显示基于上传文件的设置和预览。您唯一需要更改的设置是在 列标题 下,您应该将其设置为 只有第一个文件有标题,如图 图 5.8 所示:

图 5.8 – 数据集预览

图 5.8 – 数据集预览

  1. 下一屏幕将显示数据集的模式,该模式已从文件自动检测到,如图 图 5.9 所示:

图 5.9 – 数据集设置

图 5.9 – 数据集设置

  1. 最后一步是审查并确认细节,然后如图 图 5.10 所示点击 创建

图 5.10 – 审查和确认数据集的创建

图 5.10 – 审查和确认数据集的创建

  1. 您将被带回到数据集列表。您应该在列表顶部看到我们命名为 训练 的泰坦尼克号数据集。继续,选择它,然后如图 图 5.11 所示点击 下一步

图 5.11 – 选择训练数据集并点击 **下一步**

图 5.11 – 选择训练数据集并点击 下一步

  1. 在此步骤中,您需要为您的 AutoML 运行创建一个实验,然后选择目标列,有时称为 因变量,最后选择用于模型训练的计算集群,如图 图 5.12 所示:

图 5.12 – 创建新的 AutoML 实验,选择目标列和计算集群

图 5.12 – 创建新的 AutoML 实验,选择目标列和计算集群

  1. 在下一屏幕上,您可以选择机器学习任务。AutoML 已根据目标列自动检测到任务。在这种情况下,它应该是 分类,如图 图 5.13 所示:

图 5.13 – 选择机器学习任务(例如,在本例中,分类)

图 5.13 – 选择机器学习任务(例如,在本例中,为分类)

  1. 接下来,点击 0.5 小时)。点击 保存 以退出,如图 图 5.14 所示:

图 5.14 – 配置训练作业设置

图 5.14 – 配置训练作业设置

  1. 点击 3。对于 10,最后,点击 完成,如图 图 5.15 所示:

图 5.15 – 设置验证类型和测试数据集

图 5.15 – 设置验证类型和测试数据集

  1. 一旦模型训练完成,你将看到一个屏幕,其中总结了训练统计信息,例如训练持续时间、训练数据集的链接以及最佳性能模型的摘要,包括其算法名称和性能指标(例如,AUC 加权),如图 图 5.16 所示:

图 5.16 – 训练完成后模型和运行摘要

图 5.16 – 训练完成后模型和运行摘要

现在,你已经看到了如何通过 AMLS 利用 AutoML,请花点时间回顾输出,不仅是在 详细信息 部分,如图 图 5.16 所示,还要查看每个选项卡并探索 AutoML 实验运行期间提供的大量信息。

接下来,我们将探索如何通过 AML Python SDK 利用 AutoML。AML Python SDK 提供了对实验的精细控制,我们将在下一节中看到。

使用 AML Python SDK 进行 AutoML

现在,你已经看到了如何在 AMLS 中利用 AutoML,我们将探索如何利用 AML Python SDK 创建模型。

在本章前面的部分,在 AutoML 简介 中,我们克隆了我们的示例笔记本以利用这些材料。对于本章,请注意,有一个名为 Chapter5_Titanic_AutoML 的单个笔记本。初始代码应该看起来很熟悉,因为数据集的准备没有变化。然而,当我们运行实验时,我们现在将利用一个 AutoML 实验。

为了运行一个 AutoML 实验,我们需要导入 AutoMLConfig,如图中 第 8 行 所示。

下面是使用 Python SDK 导入 AutoMLConfig 的示例:

图 5.17 – 导入 AutoMLConfig

图 5.17 – 导入 AutoMLConfig

作为 AutoML 实验的一部分,我们需要指定一个训练数据集,但不需要指定验证或测试数据集。然而,我们可以指定训练和验证数据集,并在预览中指定测试数据集。在我们的示例中,我们将数据集分为训练、测试和验证数据集。

通过使用 sklearn 中的 train_test_split 方法,我们将数据集分成三个数据集,分别用于训练、验证和测试。

现在我们来探讨如何分割数据以训练模型,以及测试模型以分析所建模型的准确性:

  1. 以下代码将分割数据集用于模型训练和模型评估。我们还指定了用于预测的列 – 在以下情况下,它是Survived。然后,我们将打印输出以验证分割是否成功。以下是用于模型训练、测试和验证的数据集分割:

图 5.18 – 数据集分割

图 5.18 – 数据集分割

一旦数据集被分割,我们可以从本地目录上传数据集,这些数据集被保存在automl_train文件夹中,当放置到 blob 存储时,它们将被放置在名为titanic-auto-ml的目录中。

  1. 在下面的屏幕截图中,目录被上传到默认的数据存储:

图 5.19 – 将数据集上传到数据存储

图 5.19 – 将数据集上传到数据存储

  1. 由于数据现在在 blob 存储中,我们可以利用这些文件使用 AML Python SDK 创建表格数据集,并注意它们在 blob 存储中的位置,如下所示:

图 5.20 – 创建 AML 表格数据集

图 5.20 – 创建 AML 表格数据集

  1. 使用 AML Python SDK,我们可以在第 4 行的代码块中创建一个实验,如下所示:

图 5.21 – 创建 Azure ML 实验

图 5.21 – 创建 Azure ML 实验

AutoML 实验可以在计算实例上运行,但考虑到实验的持续时间将比我们迄今为止看到的要长,我们将它在计算集群上运行。以下代码显示了如何创建计算集群,正如我们在第一章**,介绍 Azure 机器学习服务中看到的。

  1. 接下来,我们将创建一个计算集群以便我们编写代码:

图 5.22 – 为运行 AML 实验运行创建计算集群

图 5.22 – 为运行 AML 实验运行创建计算集群

对于 AutoML 实验,我们能够通过 Python SDK 提供对正在运行的实验的精细控制。

  1. 通过 SDK 运行的 AutoML 实验可以在实验运行期间指定其行为:

图 5.23 – AutoML 实验设置

图 5.23 – AutoML 实验设置

图 5.23所示,我们可以指定experiment_time_hours。如果没有提供值,实验运行将在 6 天后超时。enable_early_stopping默认为True,如果模型在n_interations后没有改进,它将提前停止实验。这种行为确保在实验运行提前停止之前至少运行 20 次迭代。

iteration_timeout_minutes是每个迭代可以运行的最长时间,在此之后它将被终止。如果没有指定,将使用默认值 1 个月。另一个可以配置的设置是max_concurrent_iterations。AML 计算集群可以处理每个节点一个迭代。指定此值将扩展给定集群中活动节点的数量。如果max_concurrent_iterations大于给定集群中的节点数,那么实验运行将被排队,并在集群中有一个节点可用时执行。将max_cores_per_iteration设置为–1表示应该利用计算运行迭代时所有可用的核心。此值默认为1。提供–11或小于或等于运行训练实验的计算上核心数的数值是可以接受的。

我们可以指定n_cross_validations,这将确保验证数据集将从训练数据中提取。然而,在我们的实验中,我们明确传递了一个验证数据集,所以这在图 5.23 的第 7 行被注释掉了。如果既没有设置n_cross_validations,也没有提供验证数据集,AutoML 将使用它自己的验证技术。如果两者都没有提供,并且一个 AutoML 实验运行正在使用大于 20,000 行的数据集,那么将使用 10%的数据作为验证数据集。如果数据集小于 20,000 行,则利用交叉验证。如果数据集小于 1,000 行,则使用 10 个折进行交叉验证;如果数据集在 1,000 到 20,000 行之间,则使用 3 个折进行交叉验证。

primary_metric是用于评估模型的指标。每个任务类型都有一个有效的指标列表。这里的代码提供了一个可用于分类模型评估的指标列表:

图 5.24 – 分类的主要指标

图 5.24 – 分类的主要指标

可以设置的另一个 AutoML 实验运行属性是特征化。这里的值可以是设置为autooffFeaturizationConfig。如果指定了FeaturizationConfig的值,你可以提供自定义特征化,这将允许你指定支持使用均值、中位数或众数作为填充器的列转换器属性,以及一个热哈希编码。对于我们的示例,我们将保持特征化为auto

通过设置图 5.23 中的详细程度值,我们指定了给定实验中记录的信息的粒度。将日志保持在INFO级别将在 AutoML 实验的运行中提供细粒度的日志。

下一步需要做的是创建用于运行实验的 AutoMLConfig 对象。有许多属性支持 AutoML 实验运行。我们将首先审查的属性是 任务 属性。支持的任务类型包括分类、回归和预测。目前,在公共预览版中,多类别和多标签图像分类、目标检测和实例分割是可用的。对于我们的任务类型,我们将选择 'classification',如下面的截图所示:

图 5.25 – AutoMLConfig 对象

图 5.25 – AutoMLConfig 对象

debug_log 属性指定了调试信息写入的日志文件。如果没有指定,则使用 'automl.log' 作为日志文件名。

compute_target 被指定,可以是计算实例或计算集群。利用计算集群可以实现 AutoML 实验运行的并发运行,而计算实例无法实现这一点。

blocked_models 是一个要排除在给定 AutoML 实验运行之外的模型列表。对于分类模型,以下是可以排除在给定实验之外的模型列表:

分类模型 AutoML 配置值
平均感知器分类器 AveragedPerceptronClassifier
伯努利朴素贝叶斯 BernoulliNaiveBayes
决策树 DecisionTree
极端随机树 ExtremeRandomTrees
梯度提升 GradientBoosting
K 近邻分类器 KNN
Light GBM 分类 LightGBM
线性支持向量机 LinearSVM
逻辑回归 LogisticRegression
多项式朴素贝叶斯 MultinomialNaiveBayes
随机森林 RandomForest
SGD 分类器 SGD
支持向量机 SVM
TabNet 分类器 TabNetClassifier
TensorFlow DNN 分类器 TensorFlowDNN
TensorFlow 线性分类器 TensorFlowLinearClassifier
XGBoost 分类器 XGBoostClassifier

图 5.26 – 可用以阻止的模型列表

enable_onnx_compatible_models 的默认值为 False。如果将该值设置为 True,则可以将模型导出为 ONNX 格式,以便在推理期间利用它们实现高性能提升。

training_data 可以是 pandas DataFrame、AML 数据集或表格数据集。图 5.20 展示了如何创建表格训练数据集,该数据集在 图 5.25 上的第 19 行传递给 AutoMLConfig 对象。请注意,训练数据集确实包括响应变量 Survived,该变量在第 20 行的 label_column_name 属性中指定为响应变量。

注意,验证数据集在 AutoMLConfig 中以 validation_data 属性名提供,这意味着 n_cross_validations 不能在 automl_settings 中提供。如前所述,同时提供两者是不合法的。

作为 AML Python SDK 的一部分,您可以指定 test_data。此功能目前处于预览阶段。通过使用此数据集来计算指标。

experiment_exit_score 是主要指标需要达到的值。如果主要指标达到该值,则实验将提前终止。

为了运行实验,将 automl_config 对象提交给实验,如下所示:

图 5.27 – 提交 AutoML 实验运行

图 5.27 – 提交 AutoML 实验运行

在笔记本中,虽然不是必需的,但我们可以通过执行以下代码来指定在运行完成之前暂停后续单元格的执行:

图 5.28 – 等待完成

图 5.28 – 等待完成

等待实验完成,然后继续查看模型训练的输出。我们还可以查看指标以了解模型的性能。

通过 AMLS 和 AML SDK 解析您的 AutoML 结果

当实验运行完成后,我们可以通过利用 AML Python SDK 从 AutoML 实验运行中提取有价值的信息:

  1. 对于 AutoML 实验运行,每个运行都作为 AutoML 实验运行的子运行执行。这意味着我们可以通过查看给定运行的子运行来获取实验运行的最佳运行,如图 图 5.29 所示:

图 5.29 – 检索 AutoML 实验运行的最佳子运行

图 5.29 – 检索 AutoML 实验运行的最佳子运行

  1. 由于我们可以以编程方式查看信息,我们也能够通过 AMLS 获取最佳模型。在工作室中,通过单击 automl-classification-titanic 实验项目,我们可以看到为实验创建的运行。

  2. 单击运行超链接将带我们到实验运行的详细信息。如果我们切换到 模型 选项卡,我们可以根据主要指标的值查看模型,并查看最佳模型提供的解释:

图 5.30 – 在 AMLS 中检索 AutoML 实验运行的最佳子运行

图 5.30 – 在 AMLS 中检索 AutoML 实验运行的最佳子运行

图 5.30,如果我们单击 查看解释 超链接,我们可以探索 AutoML 能够创建的最佳模型的信息。

  1. 通过单击 聚合特征重要性 选项卡,我们可以看到对模型影响最大的特征。我们可以看到,性别舱位等级年龄票价是创建的模型中最重要的前四个特征:

图 5.31 – 聚合特征重要性

图 5.31 – 聚合特征重要性

  1. best_run对象中,我们可以通过从outputs目录下载featurization summary json文件来程序化地检索数据集上发生的特征化。这使我们能够了解对数据集进行的自动化特征化,以提供最佳模型:

图 5.32 – 获取特征化结果

图 5.32 – 获取特征化结果

  1. 特征化结果不仅可以程序化地审查,而且 AMLS 中最佳模型的解释也可以审查,如下所示:

图 5.33 – AutoML 实现的数据转换过程

图 5.33 – AutoML 实现的数据转换过程

  1. 可以通过利用RunDetails小部件直接在笔记本中查看运行详情,如图图 5.34中的代码所示:

图 5.34 – RunDetails 小部件

图 5.34 – The RunDetails widget

  1. 使用该小部件,您可以在以下图中查看主要指标(以及其他指标)在训练运行每次迭代的指标值:

图 5.35 – AutoML 实验运行的训练迭代

图 5.35 – AutoML 实验运行的训练迭代

  1. 对于训练运行,我们能够通过 SDK 程序化地提取最佳运行和拟合的模型,如下所示:

图 5.36 – 获取最佳模型

图 5.36 – 获取最佳模型

  1. 我们还能够检索 AutoML 使用的估计器,如下所示。estimator是一个类,它帮助组织特定运行使用的执行和配置。它还允许我们配置建模使用的规模和计算。estimator内部有多个步骤用于代码,而[-1]则返回到之前的步骤:

图 5.37 – 获取估计器

图 5.37 – 获取估计器

  1. 由于已经检索到模型,我们可以直接利用它进行预测,如图图 5.38所示:

图 5.38 – 直接利用 AutoML 模型

图 5.38 – 直接利用 AutoML 模型

  1. 我们可以利用测试数据集获取实验的指标,但也可以查看为最佳模型创建的运行子运行,并检索测试数据集的主要指标:

图 5.39 – 最佳模型子运行

图 5.39 – 最佳模型子运行

  1. 点击模型测试的运行,将显示为提供的测试数据集计算的指标。这是在模型创建时未使用的未见数据:

图 5.40 – 最佳模型子运行指标

图 5.40 – 最佳模型子运行指标

  1. 作为模型输出的结果,会生成一个scoring文件,该文件可用于模型部署。这个score.py文件可以从图 5中显示的最佳运行中下载。41*:

图 5.41 – 下载评分文件

图 5.41 – 下载评分文件

  1. 利用 AML Python SDK,可以将模型注册到 AML 工作区,以便像图 5中所示的那样进行模型部署:

图 5.42 – 注册 AutoML 模型

图 5.42 – 注册 AutoML 模型

  1. 由于模型已注册且评分脚本已定义,我们可以像图 5中所示的那样将模型作为 ACI 服务部署。一旦模型部署完成,通常需要几分钟,我们就可以使用 Postman 或其他基于 REST 或 HTTP 的客户端调用推理 API 进行测试或消费其他应用程序:

图 5.43 – 模型部署

图 5.43 – 模型部署

  1. 然后,我们可以调用测试端点进行实时推理,如图图 5中所示:

图 5.44 – AutoML 最佳模型部署

图 5.44 – AutoML 最佳模型部署

接下来,让我们总结本章内容。

概述

在本章中,我们为您概述了 Azure AutoML。我们讨论了特征化,这可能是一个耗时极长的任务,是如何由 AutoML 处理的。然后我们探讨了如何通过 AMLS 使用 AutoML 实现无代码体验。最后,我们向您展示了如何使用 AML Python SDK 编写代码,以及如何查看和解析输出。

在下一章中,我们将向您展示如何部署您的 ML 模型进行实时推理——例如,调用暴露训练模型的 REST API——以及批量评分。

第二部分:在 AMLS 中部署和解释模型

第二部分中,读者将学习如何在 AMLS 中批量和实时部署模型。此外,他们还将学习如何使用 AMLS 解释 ML 模型并减轻偏差。

本节包含以下章节:

  • 第六章部署 ML 模型进行实时推理

  • 第七章部署 ML 模型进行批量评分

  • 第八章负责任的 AI

  • 第九章使用 MLOps 生产化您的作业

第六章:为实时推理部署 ML 模型

在本章中,我们将探讨数据科学家和 ML 专业人士如何通过在 Azure 中托管的 REST 服务提供预测,以支持实时预测。数据被发送到 REST API,预测结果在响应中提供。这允许各种应用程序消费和使用由 AMLS 创建的模型。我们将探索使用 AML 在实时使模型可用的各种选项。

到目前为止,我们已经利用 AMLS 处理特征工程并构建和注册了模型。在本章中,我们将专注于提供利用您的模型在实时数据集上提供预测的解决方案。

Azure Machine Learning 为业务用户提供多种推理选项,以支持批量实时推理用例。

在本章中,我们将涵盖以下主题:

  • 理解实时推理和批量评分

  • 通过 AML Studio 部署具有托管在线端点的 MLflow 模型

  • 通过 Python SDK v2 部署具有托管在线端点的 MLflow 模型

  • 通过 Python SDK v2 部署具有托管在线端点的模型

  • 通过 Azure CLI v2 部署具有托管在线端点的模型

技术要求

为了访问您的 workspace,请重复上一章中的步骤:

  1. 前往 ml.azure.com

  2. 选择你的工作区名称。

  3. 在左侧的工作区用户界面中,点击 计算

  4. 计算 屏幕上,选择您的计算实例并选择 启动

图 6.1 – 启动计算

图 6.1 – 启动计算

  1. 您的计算实例将从 停止 状态变为 启动 状态。

  2. 在上一章中,我们已克隆了 Git 仓库;如果您尚未这样做,请继续按照以下步骤操作。如果您已经克隆了仓库,请跳转到 步骤 9

  3. 在您的计算实例上打开终端。注意路径将包括您的用户目录。在终端中输入以下内容以将示例笔记本克隆到您的当前工作目录:

    git clone https://github.com/PacktPublishing/Azure-Machine-Learning-Engineering.git
    
  4. 点击 图 6**.2 中显示的刷新图标将更新并刷新屏幕上显示的笔记本。

图 6.2 – 刷新图标

图 6.2 – 刷新图标

  1. 查看您的 Azure-Machine-Learning-Engineering 目录中的笔记本。这将显示克隆到您的当前工作目录中的文件,如图 图 6**.3 所示:

图 6.3 – Azure-Machine-Learning-Engineering

图 6.3 – Azure-Machine-Learning-Engineering

理解实时推理和批量评分

模型可以部署以支持不同的用例和不同的业务需求。在生产环境中部署模型时,您选择如何部署模型应基于您的用户需求。如果您需要实时预测以支持流式传输或与其他应用程序中的预测进行交互,则需要实时推理。实时推理需要计算资源保持活跃并可用,以便您的模型提供响应。如果您的应用程序需要响应较慢的预测,这些预测存储在文件或数据库中,那么批量推理将是正确的选择。批量推理允许您启动和关闭计算资源。

在模型部署之前,需要选择用于托管实时 Web 服务的计算资源。对于实时推理,Azure Kubernetes 服务AKS)、Azure 容器实例ACI)和Azure Arc 启用Kubernetes是通过您的 AML 工作区支持的计算资源。AKS 通常用于支持生产工作负载,而 ACI 通常用于支持基于 CPU 的工作负载的较低环境。Azure Arc 启用的 Kubernetes 通常用于在 Azure Arc 中管理的集群上运行推理。在本章中,我们还将探讨利用托管在线端点的选项,这将提供对模型部署所需的计算资源的一定程度的抽象。

注意,实际上有几种不同的计算类型可以用于在线端点。一种类型是前面提到的托管在线端点,另一种是Kubernetes 在线端点。托管在线端点提供完全托管的计算资源提供、扩展以及主机操作系统镜像更新。Kubernetes 在线端点是为那些希望通过自己的 Azure Kubernetes 集群来管理这些项目的团队设计的。托管在线端点自动化了计算资源的提供,自动更新主机操作系统镜像,并在系统故障的情况下提供自动恢复。由于这些优势,我们将集中精力在托管在线端点上。

托管在线端点不仅提供了一种围绕部署 REST 端点所需的计算资源的抽象级别;它们还支持将多个部署到单个端点,通常称为蓝/绿部署。蓝/绿部署是将流量从一个版本移动到另一个版本的做法。因此,当我们部署托管在线端点时,我们可以有一个初始模型被部署,然后在该端点部署一个新的模型。当新模型在托管在线端点上可用后,我们可以将用户转移到使用新模型的新的部署。这意味着对于每个托管在线端点,我们不仅将部署托管在线端点,还将部署端点部署。

注意

托管在线端点需要在 Azure 区域内具有一个唯一名称。如果不提供唯一名称,将导致部署失败。

在本章中,我们将探讨使用托管在线端点和部署来使你的模型可用于支持实时用例的选项。在下一节中,我们将探讨使用 AMLS Studio 部署你的模型以获得低代码体验。

通过 AML Studio 部署带有托管在线端点的 MLflow 模型

为了将模型部署到网络服务中,我们需要定义环境,这包括 Conda 和 pip 依赖项、我们的计算资源以及评分脚本。评分脚本,也称为入口脚本,将在初始化函数中加载模型,并处理对网络服务的传入数据进行预测。

使用 MLflow 模型时,不仅模型被打包,AML 还理解如何消费模型,因此无需为具有托管在线端点的模型部署配置环境或入口脚本;AML 本地理解这些模型。这使得从 UI 和代码中部署模型变得非常容易。

在前面的章节中,我们利用 MLflow 创建并注册了模型。继续到 第六章Prep-Model Creation & Registration.ipynb 笔记本以创建和注册模型,就像我们在前面的章节中所做的那样,利用 MLflow。

这个笔记本将带你通过创建模型并将其注册到工作区的过程,正如我们在前面的章节中所讨论的那样。然而,在创建模型之前,有一些要点需要回顾。

当利用 MLflow 时,我们可以使用 autolog 为我们生成模型和环境信息,但在笔记本中,我们实际上设置了 log_models=False,如图所示:

图 6.4 – 禁用模型的日志记录

图 6.4 – 禁用模型的日志记录

我们将模型日志记录设置为 false,但在训练脚本中,我们明确打包模型并记录它,如图所示:

图 6.5 – MLflow 模型日志记录

图 6.5 – MLflow 模型日志记录

这为我们提供了对部署所使用的包的控制。当 MLflow 发布新版本时,最新版本的 MLflow 和 Azure Machine Learning 托管在线端点之间可能存在问题。理想情况下,这种情况不会发生;然而,随着开源的持续发展,在打包模型时包含版本是一个好习惯,以确保你对模型部署有完全的控制。

在运行你的 第六章 模型创建准备与注册.ipynb 笔记本之后,模型将在工作区中注册。一旦我们在工作区中注册了 MLflow 模型,我们就可以利用 AMLS Studio 来部署模型。为此过程,请按照以下步骤操作:

  1. 模型列表中选择模型:

图 6.6 – 从模型列表中选择模型

图 6.6 – 从模型列表中选择模型

  1. 在点击 MLflow 模型后,选择部署选项,然后选择第一个选项,部署到实时端点,如图所示。

图 6.7 – 部署 MLflow 模型

图 6.7 – 部署 MLflow 模型

  1. 由于模型已被选择且是用 MLflow 创建的,AMLS Studio 理解这是 MLflow 模型。在点击部署到实时端点选项后,您将指导创建模型的部署。

图 6.8 – 配置端点

图 6.8 – 配置端点

要为您的模型创建部署,请按照图 6.8中的选项操作:

  • 对于azure-ui-endpoint,在名称前或后添加前缀或后缀,使其在您的区域中唯一。

  • 对于UI 创建的端点

  • 计算类型选择为托管

  • 选择基于密钥的认证

  1. 点击下一步并查看所选模型,如图所示:

图 6.9 – 模型选择

图 6.9 – 模型选择

由于您是通过选择模型开始部署的,因此不需要进行其他选择。如图 6.9所示,您已配置了端点以及模型选择,所以下一步是进行部署配置。

  1. 通过点击模型屏幕上的下一步图标,您将进入配置部署的屏幕:

图 6.10 – 配置部署

图 6.10 – 配置部署

作为部署配置的一部分,提供了一个部署名称。对于特定的端点,如理解实时推理和批量评分部分所述,可以创建多个部署。这允许您配置流量模式以测试已部署的模型。

除了部署名称外,您还可以配置评分超时。这是强制评分调用的超时时间。您还可以为部署启用应用程序洞察诊断和数据收集。这将使您能够使用监控选项卡查看托管在线端点的活动。

  1. 一旦配置了部署,您将再次点击下一步按钮,进入环境选择选项卡。鉴于此模型是用 MLflow 创建的,因此不需要进行环境选择。

模型的环境已经创建,如图所示:

图 6.11 – 环境选择

图 6.11 – 环境选择

  1. 现在环境已经建立,应选择模型的计算资源。如图所示,在1

图 6.12 – 计算选择

图 6.12 – 计算选择

  1. 现在已经选择了计算资源,应配置此部署的流量分配。如果您已更新了模型,最初应将流量设置为0进行部署,确认其正确无误后,然后,如图所示,将新模型的流量更新为100%,因为这是我们第一次模型部署。这应该为旧模型到新模型的 REST API 消费者提供无缝体验。

图 6.13 – 配置部署流量

图 6.13 – 配置部署流量

  1. 配置流量后,我们可以查看即将发生的部署。通过点击下一步,AMLS Studio 将带您进入引导式模型部署的审查阶段。

图 6.14 – 检查模型部署

图 6.14 – 检查模型部署

  1. 屏幕上显示的信息将反映您在引导式在线托管部署过程中提供的输入。在确认了前一个屏幕中显示的设置后,点击创建按钮以创建端点以及部署。

下图显示了部署进度。托管在线端点正在配置中,因为配置状态状态创建中,蓝色部署也在配置中。目前,蓝色部署的流量设置为0

图 6.15 – 正在进行的托管在线端点部署

图 6.15 – 正在进行的托管在线端点部署

  1. 一旦部署完成,端点将显示配置状态状态成功流量分配将是部署的100%,如图所示。

图 6.16 – AMLS Studio 部署完成

图 6.16 – AMLS Studio 部署完成

恭喜!您已成功部署了托管在线端点以供消费。回想一下,模型有列 – EmbarkedLocSexPclassAgeFareGroupSize – 作为输入参数。我们可以向 REST 端点发送 JSON,指定输入数据列和我们希望接收预测的数据,以利用 AMLS 使用的 JSON 模式。

图 6.17 – 测试托管在线端点

图 6.17 – 测试托管在线端点

此请求文件的样本位于 Git 仓库中chapter 6文件夹下的prepped_data文件夹中。您可以将此文本复制并粘贴到图 6.17所示的工作室测试屏幕中。

现在已经从 AMLS Studio 体验中测试了托管在线端点,我们将接下来通过 Python SDK 部署托管在线端点。

通过 Python SDK V2 部署带有托管在线端点的 MLflow 模型

在上一节中,我们利用 AMLS Studio 部署了我们的 MLflow 模型。在本节中,我们将探索通过 SDK v2 将 MLflow 模型部署到托管在线端点的代码。

为了利用 SDK v2 进行模型部署,我们将使用第六章 MLFlow 模型部署 SDK V2.ipynb笔记本。

要通过 SDK V2 部署托管在线端点,请按照以下步骤操作:

  1. 要部署模型,我们将创建具有适当配置的ManagedOnlineEndpoint。对于 MLflow 模型,我们需要指定nameauth_mode。此外,我们还将提供description以及tags

图 6.18 – 配置 ManagedOnlineEndpoint

图 6.18 – 配置 ManagedOnlineEndpoint

  1. 端点配置完成后,我们可以调用createupdate方法,传入端点以使用create_or_update命令在工作区中创建端点,如下所示。

图 6.19 – 利用 ml_client 创建托管在线端点

图 6.19 – 利用 ml_client 创建托管在线端点

  1. 端点创建完成后,您就可以创建部署了。对于部署,我们将传递一个名称、上一图创建的端点名称、要部署的模型、用于计算资源的 VM 实例类型以及实例数量。

模型可以直接通过其名称和版本从工作区检索,如下所示:

图 6.20 – 根据名称和版本从注册表中获取模型

图 6.20 – 根据名称和版本从注册表中获取模型

  1. 托管在线部署需要模型。现在模型已经从工作区检索出来,可以传递给ManagedOnlineDeployment,如下所示:

图 6.21 – 配置部署

图 6.21 – 配置部署

注意instance_type,这是我们托管在线端点所使用的计算资源。我们在这里指定了使用Standard_F4s_v2,因为我们有很高的灵活性来选择用于服务实时预测请求的计算资源类型。

  1. 部署配置完成后,通过ml_client,可以将托管在线端点部署到初始流量设置为0,如下所示:

图 6.22 – 创建部署

图 6.22 – 创建部署

  1. 部署成功后,可以使用部署名称将端点的流量设置为 100%。

图 6.23 – 更新部署流量

图 6.23 – 更新部署流量

  1. 现在端点已经部署,可以检索端点的 URI 和主键来调用 REST API 以获取预测。对于在线端点,我们可以轻松地检索评分 URI 和主键,如下面的代码所示。

图 6.24 – 检索 URI 和主键

图 6.24 – 检索 URI 和主键

  1. 最后,可以调用 REST 端点以检索预测。下面的代码将 dataframe 传递给make_predictions函数,准备请求,并从受管理的在线端点返回结果。

图 6.25 – 进行预测

图 6.25 – 进行预测

运行前面的代码允许传递 dataframe 并返回预测结果。此模型可以通过在 Git 仓库中chapter 6文件夹下的prepped_data文件夹中提供的样本输入进行测试。无论受管理的在线端点是通过对 SDK 还是 AMLS Studio 进行部署,功能都是相同的。

您已经能够通过 AMLS Studio 和 SDK 部署模型,因为它被创建为 MLflow 模型。如果未使用 MLflow 创建模型,则可以轻松部署,但需要额外的配置来部署。在下一节中,我们将继续部署模型,指定推理所需的环境和脚本。

通过 Python SDK v2 使用受管理的在线端点部署模型

在前一节中,我们部署了 MLflow 模型,但当你创建不使用 MLflow 的模型时,你需要提供两个额外的细节以成功部署受管理的在线端点。在本节中,我们将专注于添加功能,以便我们可以不依赖于 MLflow 提供环境和评分脚本来部署我们的模型。

为了使用 SDK v2 部署受管理的在线端点并利用笔记本:第六章 模型部署 SDK V2.ipynb,而不依赖于 MLflow 提供环境和评分脚本,我们将在本节中创建这些内容:

  1. 我们的第一步是创建我们的score.py文件。这是用于加载模型并向端点发送请求的文件。

下面的代码片段提供了入口脚本所需的信息:

图 6.26 – score.py 脚本

图 6.26 – score.py 脚本

在前一个图中所示的评分脚本中,有两个必需的函数,initruninit函数告诉 AML 如何加载模型。模型将作为部署配置的一部分提供,模型路径被设置,并利用joblib来加载模型。model全局变量被用来保存模型。当 REST 端点被调用时,run函数将被调用。API 调用的数据将被传递到run函数。在这里,设置了一个字典来检索信息,该信息被转换成一个 dataframe,然后传递给model.predict函数。model.predict的结果被传递到一个列表中,并从函数中返回。

除了评分脚本,我们还需要拥有模型。在上一节中,我们根据名称和版本使用 SDK v2 检索了已注册的模型,但我们也可以在实验中搜索并从中检索模型。这里提供的示例代码展示了如何从实验中搜索模型并下载它。

图 6.27 – 查找并下载模型

图 6.27 – 查找并下载模型

  1. 除了评分脚本,我们还需要提供一个用于部署的环境。

图 6.28 – 部署环境

图 6.28 – 部署环境

在之前的 Jupyter 笔记本中,当我们创建模型时,我们已经创建了一个环境,但我们需要添加azureml-defaults包以确保成功部署到管理的在线端点。因此,我们不是使用已注册的环境,而是创建一个新的环境以传递给部署。

  1. 为了部署一个未使用 MLflow 创建的管理在线端点,关键区别在于部署配置。请注意,图 6**.21 提供了部署使用 MLflow 创建的模型的代码片段。将此代码与以下片段中的代码进行比较:

图 6.29 – 使用评分脚本和环境的在线端点部署

图 6.29 – 使用评分脚本和环境的在线端点部署

注意,在前面的代码块中,指定了score.py文件以及环境。

  1. 这个管理在线端点又可以进行测试。正如score.py文件所强调的,这个 REST API 将期望其输入有不同的模式:

    {"raw_data": [{"Pclass":3,"Sex":"male","Age":22.0,"Fare":7.25,"Embarked":"S","Loc":"X","GroupSize":2},{"Pclass":1,"Sex":"female","Age":38.0,"Fare":71.2833,"Embarked":"C","Loc":"C","GroupSize":2},{"Pclass":3,"Sex":"female","Age":26.0,"Fare":7.925,"Embarked":"S","Loc":"X","GroupSize":1},{"Pclass":1,"Sex":"female","Age":35.0,"Fare":53.1,"Embarked":"S","Loc":"C","GroupSize":2},{"Pclass":3,"Sex":"male","Age":35.0,"Fare":8.05,"Embarked":"S","Loc":"X","GroupSize":1}]}
    

您现在已经了解了工具管理的在线端点对于模型部署是多么强大的工具。除了引导式的 AMLS Studio 体验以及 SDK 中的全部功能外,我们还可以利用 Azure CLI v2 来管理部署过程。在下一节中,我们将探讨如何利用 Azure CLI v2 来实现这一功能。

通过 Azure CLI v2 部署模型以进行实时推理

在本节中,我们将利用托管在线端点,并使用 Azure 机器学习 CLI v2 部署它。CLI v2 将在我们的调用命令中利用包含我们部署所需配置的 YAML 文件。请记住,对于唯一的托管在线端点名称的要求,所以在运行代码时,务必在 YAML 文件和 CLI 命令中更新您的托管在线端点名称。

要使用新的 Azure CLI v2 扩展,我们需要拥有一个大于 2.15.0 的 Azure CLI 版本。这可以通过使用 az version 命令来检查您的 Azure CLI 版本来轻松完成:

  1. 在您的计算实例上,导航到终端并输入以下命令:az version。在输入该命令后,您应该看到 Azure CLI v2 已安装在您的计算实例上,如图所示。

图 6.30 – 安装了 ml 扩展的 Azure CLI v2

图 6.30 – 安装了 ml 扩展的 Azure CLI v2

  1. 您可以通过以下命令更新您的 ml 扩展:

    az extension update -n ml
    

安装新扩展后,我们再次运行 az version 以确认扩展已安装并更新,以便我们可以继续登录。

  1. 您需要使用 Azure CLI 登录来处理您的部署,通过输入 az login。您将被提示打开浏览器并输入设备登录以进行认证。

  2. 在认证后,您应该设置您的默认 Azure 订阅。您可以通过在门户中找到一个 Azure 机器学习工作区并复制显示在 概述 选项卡的 订阅 ID 部分的指南来轻松检索您的 Azure 订阅 ID,如图所示。

图 6.31 – Azure 订阅 ID

图 6.31 – Azure 订阅 ID

  1. 在您的计算实例的终端中,通过输入 az account set -s XXXX- XXXX - XXXX - XXXX – XXXX 来设置 Azure CLI 以利用的帐户,用您的订阅 ID 替换 XXXX- XXXX - XXXX - XXXX – XXXX。然后,设置变量以保存您的资源组名称、AML 工作区位置和您的工区名称:

    GROUP=amlworkspace-rg
    
    LOCATION=westus
    
    WORKSPACE=amworkspace
    

根据您的 AMLS 工作区部署的位置,LOCATION 值可以在以下位置找到:github.com/microsoft/azure-pipelines-extensions/blob/master/docs/authoring/endpoints/workspace-locations

  1. 一旦设置了变量,您就可以运行以下命令:

    az configure --defaults group=$GROUP workspace=$WORKSPACE location=$LOCATION
    
  2. 导航到您的 AML 工作区中的 第六章 目录。

要创建所需的文件,请运行 第六章 模型部署 CLI v2 - 创建脚本.ipynb 笔记本,这将创建一个 endpoint.yml 文件、一个 deployment.yml 文件和一个 score.py 文件用于推理。这些文件将在名为 CLI_v2_ManagedOnlineEndpoint 的文件夹中生成。

  1. 在笔记本中,我们将通过运行以下代码来创建目录:

图 6.32 – 目录创建

图 6.32 – 目录创建

  1. 对于托管在线端点,我们还将创建一个score.py文件。score脚本将利用我们的模型,并提供之前score.py文件提供的initrun函数。

图 6.33 – score.py 文件

图 6.33 – score.py 文件

  1. 接下来,我们将创建端点.yml文件。我们可以创建一个包含名称和授权模式所需属性的基文件。授权模式可以指定为密钥或aml_token。基于密钥的认证不会过期,但 Azure ML 基于令牌的认证会。我们将继续使用基于密钥的认证。

注意

当使用aml_token时,您可以通过运行az ml online-endpoint get-credentials命令来获取一个新的令牌。

  1. 运行命令以生成与auth_mode相同的键值的endpoint.yml文件,如下所示:

图 6.34 – 托管在线端点配置

图 6.34 – 托管在线端点配置

请记住将您的名称更新为唯一的名称;如果titanic-managed-online-endpoint已在您的区域部署,您的部署将失败。

  1. 对于托管在线端点部署,我们还将生成一个deployment.yml文件。在此文件中,我们需要指定模型、评分脚本、环境和用于模型部署的实例类型。

创建deployment.yml文件:

图 6.35 – 创建文件

图 6.35 – 创建deployment.yml文件

在此文件中,您需要指定已注册的模型名称和版本、已注册的环境名称和版本、用于部署模型的计算资源类型,以及评分脚本所在的位置。在deployment.yml文件中,您应更新endpoint_name以反映您在endpoint.yml文件中选择的名称。

运行笔记本并选择一个唯一的端点名称后,我们可以利用 CLI v2 来部署我们的模型。

  1. 在命令行中,打开CLI_v2_ManagedOnlineEndpoint目录,并从该目录创建您的online-endpoint,使用以下命令:

    az ml online-endpoint create --name titanic-online-endpoint -f endpoint.yml
    

注意titanic-online-endpoint应替换为您的托管在线端点名称。

  1. 端点创建后,您现在可以创建online-deployment,使用以下命令:

    az ml online-deployment create --name deploytitaniconline --endpoint titanic-online-endpoint -f deployment.yml --all-traffic
    

再次注意titanic-online-endpoint应替换为您的托管在线端点名称。

  1. 部署完成后,端点将可用于测试。端点可通过 AML 工作区的端点部分访问,如下所示。

图 6.36 – 在线端点

图 6.36 – 在线端点

  1. 我们可以通过单击端点名称并选择端点的测试选项卡来测试端点。

  2. 在测试部分,我们可以在测试框中输入数据以进行推理,然后从网络服务中检索结果,如下所示:

    {"raw_data": [{"Embarked":"S","Loc":"X","Sex":"m","Pclass":3,"Age":22.0,"Fare":7.25,"GroupSize":2},{"Embarked":"C","Loc":"C","Sex":"f","Pclass":1,"Age":38.0,"Fare":71.2833,"GroupSize":2},{"Embarked":"S","Loc":"X","Sex":"f","Pclass":3,"Age":26.0,"Fare":7.925,"GroupSize":1},{"Embarked":"S","Loc":"C","Sex":"f","Pclass":1,"Age":35.0,"Fare":53.1,"GroupSize":2},{"Embarked":"S","Loc":"X","Sex":"m","Pclass":3,"Age":35.0,"Fare":8.05,"GroupSize":1}]}
    

图 6.37 – 测试在线端点

图 6.37 – 测试在线端点

此示例请求可以在prepped_data文件夹下的chapter 6文件夹中名为sample_request_cli.json的文件中找到。

在本节中,您能够通过 Azure CLI v2 在 AMLS 中利用托管在线端点部署网络服务。该功能利用模式文件在配置文件中提供部署定义,以实现部署。托管在线端点可以防止数据科学家或公民数据科学家担心支持托管网络服务所需的基础设施,以提供支持您的用例的实时推理。

恭喜您通过 CLI 部署了托管在线端点!这将在第九章中特别有用,使用 MLOps 生产化您的负载。在测试您的托管在线端点后,请务必删除它们,因为它们会消耗计算资源。

摘要

在本章中,重点在于将您的模型作为 REST 端点部署,以支持实时推理用例。我们了解到,我们可以利用 AMLS Studio 实现低代码部署体验。我们还利用 SDK v2 将模型部署到托管在线端点。接着,我们通过 CLI v2 部署模型以支持实时推理的模型部署。这些部分展示了通过低代码、代码优先和配置驱动的方法部署实时网络服务。这些功能使您能够以多种方式部署。

在下一章中,我们将学习如何利用批量推理来支持我们的用例。

第七章:部署用于批量评分的 ML 模型

部署用于批量评分的 ML 模型支持使用大量数据进行预测。此解决方案支持您不需要立即获得模型预测,而是需要几分钟或几小时后的用例。如果您需要每天、每周或每月提供一次推理,使用大型数据集,批量推理是理想的。

批量推理允许数据科学家和 ML 专业人员在需要时利用云计算,而不是为实时响应支付计算资源。这意味着计算资源可以启动以支持批量推理,在向业务用户提供结果后关闭。我们将向您展示如何利用 Azure 机器学习服务将训练好的模型部署到管理端点,这些端点是客户端可以调用的 HTTPS REST API,用于使用 Studio 和 Python SDK 对训练模型进行批量推理以获取评分结果。

在本章中,我们将涵盖以下主题:

  • 使用 Studio 部署用于批量推理的模型

  • 通过 Python SDK 部署用于批量推理的模型

技术要求

为了访问您的 workspace,回想一下上一章中的步骤:

  1. 前往ml.azure.com

  2. 选择您的 workspace。

  3. 在工作区 UI 的左侧,点击计算

  4. 在计算屏幕上,选择您的计算实例并选择启动

图 7.1 – 开始计算

图 7.1 – 开始计算

  1. 您的计算实例将从停止状态变为启动状态。

  2. 在上一章中,我们克隆了 Git 仓库。如果您还没有这样做,请继续此步骤。如果您已经克隆了仓库,请跳转到步骤 7

在您的计算实例上打开终端。请注意,路径将包括您的用户目录。在终端中输入以下内容以将示例笔记本克隆到您的工作目录:

git clone https://github.com/PacktPublishing/Azure-Machine-Learning-Engineering.git
  1. 点击图 7.2中显示的刷新图标将更新并刷新屏幕上显示的笔记本。

图 7.2 – 刷新图标

图 7.2 – 刷新图标

  1. 查看您Azure-Machine-Learning-Engineering目录中的笔记本。这将显示克隆到您工作目录中的文件,如图图 7.3所示:

图 7.3 – Azure-Machine-Learning-Engineering

图 7.3 – Azure-Machine-Learning-Engineering

让我们接下来使用 Studio 部署用于批量推理的模型。

使用 Studio 部署用于批量推理的模型

第三章“在 AMLS 中训练机器学习模型”中,我们训练了一个模型并将其注册到 Azure 机器学习工作区。我们将部署该模型到管理的批量端点进行批量评分:

  1. 导航到你的 Azure 机器学习工作区,从左侧菜单栏选择模型以查看你工作区中注册的模型,并选择titanic_survival_model_,如图图 7**.4所示:

图 7.4 – 工作区中注册的模型列表

图 7.4 – 工作区中注册的模型列表

  1. 点击部署,然后选择部署到批处理端点,如图图 7**.5所示:

图 7.5 – 将所选模型部署到批处理端点

图 7.5 – 将所选模型部署到批处理端点

这将打开部署向导。为所需的字段使用以下值:

  • titanic-survival-batch-endpoint

  • 模型:保留默认的titanic_survival_model_

  • titanic-deployment

  • 环境:对于所选模型,评分脚本和环境为你自动生成

  • cluster cpu-cluster

审查你的批处理部署规范,并点击创建部署,如图图 7**.6所示:

图 7.6 – 创建批处理部署

图 7.6 – 创建批处理部署

  1. 一分钟左右,你应该会看到一个页面显示你的批处理端点已成功部署。它还包含有关你的批处理端点的一些信息,如图图 7**.7所示:

图 7.7 – 成功的批处理部署

图 7.7 – 成功的批处理部署

现在你已经有一个批处理端点正在运行,让我们创建一个调用你的端点的评分/推理作业。为此,请按照以下步骤操作:

  1. 在左侧菜单栏中点击端点,然后点击你最近创建的批处理端点,如图图 7**.8所示:

图 7.8 – 已部署批处理端点列表

图 7.8 – 已部署批处理端点列表

  1. titanic-survival-batch-endpoint页面,选择作业标签,如图图 7**.9所示:

图 7.9 – titanic-survival-batch-endpoint 作业标签

图 7.9 – titanic-survival-batch-endpoint 作业标签

  1. 点击创建作业,并在向导中为字段选择相应的值,如图图 7**.10所示。完成后点击创建。请注意,部署已为你预选,但请确保预选了正确的部署。你还应该有一个名为titanic-test-data的测试数据集,该数据集在第三章**,在 AMLS 中训练机器学习模型时创建。

图 7.10 – 创建批评分作业

图 7.10 – 创建批评分作业

  1. 根据你在上一步中选择的测试数据集的大小,作业完成可能需要一些时间。一旦完成,你将看到一个表示titanic-survival-batch-endpoint批评分作业的管道,如图图 7**.11所示:

图 7.11 – titanic-survival-batch-endpoint 批评分作业

图 7.11 – titanic-survival-batch-endpoint 的批量评分作业

  1. 现在,为了查看评分结果,点击管道中的 batchscoring 步骤,在右侧点击 作业概述,选择 输出 + 日志 选项卡,最后点击 显示数据输出,如图 7.12 所示:

图 7.12 – 批量评分结果

图 7.12 – 批量评分结果

  1. 点击后,predictions.csv 文件已被保存。点击此文件并选择 编辑 选项卡以查看评分结果,如图 7.13 所示:

图 7.13 – 查看批量评分结果

图 7.13 – 查看批量评分结果

在本节中,你学习了如何使用工作室将现有模型部署到管理端点进行批量推理。在下节中,我们将向你展示如何使用 Python SDK 将模型部署到管理端点进行批量评分。

通过 Python SDK 部署用于批量推理的模型

在本节中,我们将通过以下步骤使用 Python SDK 将现有模型部署到管理端点进行批量推理:

  1. 前往 ml.azure.com

  2. 选择你的工作区。

  3. 在左侧的工作区用户界面中,点击 计算

图 7.14 – 计算实例图标

图 7.14 – 计算实例图标

  1. 计算 屏幕上,选择你的计算实例并选择 启动

图 7.15 – 开始计算

图 7.15 – 开始计算

你的计算实例将从 停止 变为 启动。一旦计算实例从 启动 变为 运行,它就准备好使用,因此继续克隆我们的仓库,其中包含一些示例笔记本以供学习。

  1. 在应用程序下点击 终端 超链接。

这将在你的计算实例上打开终端。请注意,路径将包括你的用户在目录路径中。在终端中输入以下内容以将示例笔记本克隆到你的工作目录:

git clone https://github.com/PacktPublishing/Azure-Machine-Learning-Engineering.git
  1. 在应用程序下点击 Jupyter 链接,这将显示刚刚克隆的文件夹。导航到 第七章 并点击 Deploy_Model_for_Batch_Scoring.ipynb 以打开本节的工作簿。

  2. 图 7.16 中显示的代码片段展示了需要导入的库以及如何在计算实例中连接到 Azure ML 工作区:

图 7.16 – 导入所需的库并连接到 Azure 机器学习工作区

图 7.16 – 导入所需的库并连接到 Azure 机器学习工作区

  1. 图 7.17 中显示的代码片段展示了如何创建批量端点:

图 7.17 – 创建用于推理的批量端点

图 7.17 – 创建用于推理的批量端点

  1. 图 7.18 中所示的代码片段展示了如何从工作区检索现有模型以及如何创建批量部署。批量部署必须指定批量端点、训练模型以及用于评分的计算集群,以及其他部署参数:

图 7.18 – 创建批量部署

图 7.18 – 创建批量部署

  1. 现在,您的批量端点已准备好调用,您将传递一些测试数据到端点,如图图 7.19所示:

图 7.19 – 创建批量部署

图 7.19 – 创建批量部署

  1. 图 7.20 中所示的代码片段展示了在上一步骤中提交的批量评分作业所需的 Python 代码:

图 7.20 – 创建批量部署

图 7.20 – 创建批量部署

  1. 点击上一步骤的输出链接将打开显示批量评分作业的工作区,如图图 7.21所示。您可以遵循上一节的步骤 9步骤 10来查看结果。

图 7.21 – 批量评分结果

图 7.21 – 批量评分结果

让我们接下来总结本章内容。

摘要

在本章中,我们涵盖了众多主题。我们向您展示了如何使用工作室和 Python SDK 来部署模型进行批量评分。我们还向您展示了如何通过调用批量端点将一些测试数据传递给部署的模型进行评分。

在下一章中,您将了解负责任的 AI 以及 Azure 机器学习中的功能,这些功能允许您更负责任地开发、评估和部署模型,以最小化 AI 系统中的不希望出现的偏差。

第八章:负责任 AI

在人工智能(AI)领域最近出现的研究领域之一是使模型具有责任感和可问责性,从而产生准确的结果,而不是产生有偏见或不完整的结果。这是一个计算机科学的新领域,但也是数据科学领域许多人正在研究的内容。微软正集中精力在多个领域开展工作,包括公平性可靠性及安全性隐私 安全性包容性透明度问责性。微软提供了一套工具箱,可用于处理数据集和模型以解决这些问题。在本章中,我们将探讨这些术语的含义以及如何利用微软的负责任 AI 工具箱来解决这些问题。

在本章中,我们将涵盖以下主题:

  • 负责任 AI 原则

  • 响应 AI 工具箱概述

  • 负责任 AI 仪表板

  • 错误分析

  • 可解释性仪表板

  • 公平性仪表板

负责任 AI 原则

如前所述,微软在其负责任 AI 工具箱中纳入了六个核心原则——公平性可靠性及安全性隐私安全性包容性透明度问责性。我们将简要解释如下:

  • 在人工智能系统的公平性方面是一个社会技术挑战,科学家和开发者需要解决,以确保人们受到平等对待,并减少与我们构建模型的具体用例相关的公平性问题。在各个领域和用例中,人工智能系统可以用来提供资源和机会,通过检查公平性,我们可以确保我们不会强化现有的刻板印象。

例如,如果我们正在预测某个人口特定段落的民族群体及其食物偏好,并非所有城市或州的客户群体都具有相同的民族多样性。因此,当我们设计模型时,我们必须考虑所有民族群体,在数据中给予每个群体平等分布,将公平性融入模型。否则,模型可能会因为测试集中人口最多的民族群体而出现偏差。这也很难,因为所有城市和州民族群体的分布都是不均匀的。

  • 可靠性及安全性:需要记住的一个重要事项是确保模型对他人来说是安全的,并且输出不会造成伤害。当模型做出预测时,确保这些预测对所有消费者来说都是安全且可靠的决策。理解到错误的预测在应用模型结果时可能会产生负面效应。花时间确保模型的结果对其设计和开发的目的来说是安全且可靠的。

  • 隐私和安全:依赖于人类相关数据的用例,例如预测患者诊断或公司的流失分析,使用了大量个人数据。必须采取适当的预防措施来保护个人可识别信息PII)和隐私。根据模型运行的位置,尽量将模型运行在数据存储附近,并确保不将其移动或复制,以保护隐私。同时,确保仅对需要访问数据的人员授予许可,而不是所有人。在某些情况下,如果可能,我们可以在构建模型之前对数据进行加密或将 PII 转换为不可识别的信息。还有关于为建模创建合成数据的讨论。根据用例,我们试图解决的商业问题必须驱动如何保护隐私和实施安全性的决策。

  • 包容性是一个核心价值观,表明系统应该赋予所有人、用户和客户权力。AI 系统与地球上每个不同的人都能协同工作的能力始终是目标。包容性与公平性非常相似。我们要问的问题是,我们如何包括所有不同的群体或包括所有少数民族社区在模型中,确保没有人被排除在外。我们的数据集应该代表所有社区,以便在构建我们的模型时,每个人都能得到适当的代表。

  • 系统的透明度是确保系统能够被信任的关键。系统应该是透明的,使用户能够了解任何给定时间正在发生的事情。这提高了对系统的信任。我们可以讨论两种不同的透明度类别:

    • AI 系统构建的透明度:我们需要在 AI 系统的构建上保持透明,并提供关于我们构建的模型的过程和目的的适当文档。任何使用该模型的人都应该感到舒适并能够信任该模型。

    • 模型陷阱的透明度:使用可解释性来解释决策是如何做出的以及使用了哪些特征,这也是获得对即将使用的模型信任的重要方式。

  • 问责制:鉴于模型构建具有一定的不确定性,我们必须对我们所构建的内容负责。必须建立适当的流程,以便我们能够对我们的模型建设承担问责制。我们应该确保我们所构建的内容考虑到隐私,并且我们接受对模型可信度的责任。例如,构建模型的科学家必须遵循所有这些原则来构建模型,并将对该模型承担问责。首先,每个组织都必须具备以下条件:

    • 负责任的 AI 策略

    • 一种负责任地开发 AI/机器学习ML)的方法

为了有一个负责任的人工智能策略,您需要制定与如何使用 AI/ML 来推动业务成果相关的业务指南,确定团队如何应用负责任的人工智能以及构建更好的模型结果,并决定需要哪些工具和技术来确保负责任的人工智能。这个策略应该是所有 AI/ML 模型开发的基础,并应用于任何其他系统。您还应该创建一个框架,用于报告和监控风险或泄露的 AI/ML 行为。

在本章的下一节中,我们将讨论如何利用raiwidgets(或Responsible AI Toolkit SDK)以及我们如何分析六个核心原则。并非所有这些原则都由 SDK 涵盖。例如,虽然公平性和透明度由 SDK 涵盖,但隐私和安全、可靠性和问责制将由其他编程机制来处理。

查阅以下 URL 以获取更多详细信息和新信息:www.microsoft.com/en-us/ai/responsible-ai

负责任的人工智能工具箱概述

我们在数据科学中面临的最大挑战之一是理解模型的作用。例如,如果我们使用的算法都是黑盒,那么了解决策是如何做出的并不那么容易。为了辨别我们的算法是如何做出决策的,我们可以利用负责任的人工智能。这将给我们机会解释模型的决策,找到对预测有贡献的特征,对数据集进行错误分析,并确保数据集的公平性。

微软最近开发了一个包含可解释性、公平性、反事实分析和因果决策的负责任人工智能工具箱,通过三个仪表板:一个公平性仪表板、一个错误分析仪表板和一个可解释性仪表板

仪表板通过将所有工具箱输出集中在一个 UI 中简化了用户界面UI)。在工具箱之前,这很困难,因为我们需要为每个仪表板下载一个单独的库并编写代码。现在,这非常简单,我将展示一些使用负责任的人工智能工具箱实现这一点的代码。

备注

工具箱处于公开预览阶段,并且正在开发新的功能。请确保您的库经常更新,以检查哪些新功能可供您使用。

工具箱可在以下位置获取:github.com/microsoft/responsible-ai-toolbox

负责任的人工智能仪表板

为了利用工具箱,我们将创建一个模型来应用工具箱。让我们看看创建和分析负责任的人工智能的过程。

让我们通过以下步骤在 Azure ML 服务中创建一个模型:

  1. 前往 Azure ML Studio UI。

  2. 启动计算实例。

  3. 作者部分点击笔记本

  4. 使用 Python 3.8 创建一个新的笔记本,以 Azure ML 作为内核。

  5. 将笔记本命名为RAIDashboard.ipynb

  6. 现在,我们需要安装或升级库。只有当它们尚未在您的系统上时才安装库。在撰写本文时,使用了 Python 3.8 和 Azure ML 内核,并且已经安装了raiwidgets。如果有旧版本,请使用以下升级命令升级到最新版本:

图 8.1 – 安装或升级责任 AI 工具箱

图 8.1 – 安装或升级责任 AI 工具箱

  1. 现在,让我们升级依赖项:

图 8.2 – 升级 pandas 库到最新版本

图 8.2 – 升级 pandas 库到最新版本

  1. 重新启动内核并清除所有输出。一旦安装了库,重新启动内核以反映已安装的库总是一个好习惯。一些包强制我们重新启动内核才能生效。

  2. 我们现在将加载用于在笔记本中使用的库。责任 AI 仪表板用于生成一个漂亮的用户界面,以便与之交互并进行假设分析,以及其他类型的分析,包括错误分析特征排列反事实分析,针对创建的模型。

对于RAIInsights,这是我们进行所有计算以生成仪表板的地方。执行和分析模型并了解模型正在做什么通常需要时间。在责任 AI 仪表板上显示的所有内容都将由RAIInsights库计算得出。

图 8.3 – 导入责任 AI 库

图 8.3 – 导入责任 AI 库

  1. 接下来,我们创建一个用于应用责任 AI 的样本回归模型。让我们导入shapsklearn库来构建我们的模型。在这里,我们将加载机器学习库以及用于分割训练和测试数据的库。稍后,我们将数据集分成两部分:一部分用于训练,另一部分用于测试。通常,80%用于训练,20%用于测试。

图 8.4 – 导入模型的库

图 8.4 – 导入模型的库

  1. 现在,让我们加载样本数据集并分割用于训练和测试的数据。同时,让我们指定用于目标特征的列,或者标记要预测的列。在这里,我们正在加载一个用于糖尿病的样本数据集。然后,我们将预测列指定为'y'。有时,它被称为target_feature。然后,我们使用剩余的列作为特征来训练模型。

图 8.5 – 加载样本数据集

图 8.5 – 加载样本数据集

  1. 分割数据并将其分配给不同的数据框进行建模。通常,在建模时,训练数据被分割成两个数据集,一个用于训练,一个用于测试。接下来,预测列,也称为标签或目标,也被分割成训练和测试。以下截图显示了用于建模的特征。

图 8.6 – 分割数据以进行训练和测试

图 8.6 – 分割数据以进行训练和测试

现在我们已经构建了模型,我们需要运行它。在使用负责的人工智能工具箱分析模型的公平性、隐私、可靠性和偏差之前,这是必要的。偏差意味着我们希望我们使用的类别有相等的记录。例如,如果我们使用包含种族或性别特征的数据库,我们必须确保每个代表组的数据量相等,以避免偏差。

让我们现在按照以下步骤创建负责的人工智能代码:

  1. 首先,在我们将模型传递给RAIInsights以计算公平性、偏差和其他错误分析之前,我们需要训练模型。

图 8.7 – 模型配置和训练

图 8.7 – 模型配置和训练

  1. 模型已准备就绪。下一步是应用负责的人工智能。让我们配置RAIInsights的详细信息。

我们需要传递以下参数:modeltrain_datatest_datatarget_feature、模型类型(例如,regressionclassification)以及categorical_features

因此,RAIInsights将生成以下内容:

  • 错误分析仪表板

  • 可解释性仪表板

  • 公平性仪表板

  • 负责的人工智能仪表板

图 8.8 – 调用 RAIInsights

图 8.8 – 调用 RAIInsights

  1. 下一步是调用可解释性、错误分析和公平性,并构建仪表板:

    • IntepretML用于理解列如何影响模型做出的预测。IntepretML是一个开源软件包。在这里,我们结合所有开源软件包的输出,使其无缝,并在ResponsibleAIDashboard中展示。

    • 为此使用Error Analysis软件包。

    • DiCE是我们用来进行此分析的开源软件包。

    • EconML开源软件包。此软件包允许我们更改条件并查看影响。例如,如果我们向客户细分市场引入新产品或向公司引入新策略,会有什么影响?

图 8.9 – 添加解释器、错误分析和反事实包

图 8.9 – 添加解释器、错误分析和反事实包

现在,让我们进行可解释性、错误和反事实分析:

  1. 通常,进行所有计算需要一些时间。根据模型类型和数据集的大小,请做好在这里花费一些时间的准备。根据机器学习类型,使用EconML进行的因果分析也将用于假设分析。

图 8.10 – 计算负责的 AI 计算洞察

图 8.10 – 计算负责的 AI 计算洞察

  1. 接下来,我们需要构建负责的 AI 仪表板。工具箱将所有输出汇总到仪表板中,并提供一个地方进行分析。请记住,并非所有原则都已实施,SDK 的研发仍在进行中。图 8.11 展示了负责的 AI 仪表板的创建。

图 8.11 – 负责的 AI 仪表板

图 8.11 – 负责的 AI 仪表板

  1. 一旦构建了仪表板,请单击超链接以打开它。对于每种类型的分析,请参阅仪表板链接中的标题。

链接在此处可用:responsible-ai-toolbox/tour.ipynb at main · microsoft/responsible-ai-toolbox (github.com/microsoft/responsible-ai-toolbox/blob/main/notebooks/responsibleaidashboard/tour.ipynb)。

从前面的代码创建的仪表板将有一些选项来定制和与队列一起工作:

  • 仪表板导航:允许我们过滤任何分析

  • 队列设置:允许我们与队列一起工作

  • 切换全局队列:允许我们在队列之间切换,并在弹出窗口中显示统计数据

  • 创建新队列:允许我们根据需要创建新的队列

接下来,我们将深入探讨错误分析仪表板,以了解特征错误。

错误分析仪表板

错误分析使我们能够分析模型表现不佳的地方,并找到决策过程中的错误。

错误分析可以是树状图或热图。根据分析,红色代表错误。如果您点击其中一个洞察气泡,您将看到模型遍历的路径。

仪表板分析将基于我们选择的 ML 模型类型。有两种类型:分类和回归。在我们的例子中,我们选择了回归。以下是我们使用的两个准确性指标:

  • 均方误差

  • 均绝对误差

以下截图显示了由负责的 AI SDK 创建的错误分析仪表板 UI。

图 8.12 – 错误分析仪表板

图 8.12 – 错误分析仪表板

此仪表板提供选项保存错误分析以供进一步分析或与他人共享。如果我们需要与其他数据科学家或领域专家共享信息以了解模型性能,此功能非常有用。

以下截图显示了选择热图的错误分析屏幕:

图 8.13 – 热图错误分析

图 8.13 – 热图错误分析

在这个热图中,我们需要选择我们想要进行错误分析的特征。一旦我们选择了特征,系统将分析错误百分比。

提供了分位数分箱分箱阈值的选项。

以下截图显示了特征列表。本节显示了哪些特征已被选择,以及每个特征对预测的重要性。

图 8.14 – 特征列表

图 8.14 – 特征列表

此功能说明了列或特征对预测的重要性。有选项可以更改由负责 AI 仪表板创建的决策树的最大深度和叶子数,以及分析一个叶子中样本的最小数量。

可解释性仪表板

现在,让我们看看仪表板的可解释性部分。这是分析每个特征并显示特征的重要性和影响的地方。顶级特征要么是聚合的,要么可以单独进行分析。

图 8.15 – 聚合特征重要性

图 8.15 – 聚合特征重要性

在前面的截图中,您可以查看聚合的特征重要性。

选择单个特征重要性以逐行分析数据。然后,选择要分析的数据行,如下所示:

图 8.16 – 选择数据点进行特征重要性分析

图 8.16 – 选择数据点进行特征重要性分析

一旦选择了特征数据点,向下滚动以查看图表。以下图表显示了特征重要性和其对所选行的影响。对于数据集中的每一行,您可以通过选择一行来分析数据集。

图 8.17 – 单个特征重要性图

图 8.17 – 单个特征重要性图

现在点击个体条件期望(ICE)图来更改图表。ICE 图将显示所选特征的所有行,并显示每一行对模型的影响程度。

在选择个体条件期望(ICE)图后,您应该看到图 8.17中所示的内容。x 轴应该是所选特征,而 y 轴是预测值。点击特征下拉菜单并选择特征以查看其影响。此外,还有设置最小和最大步数的选项。要获取更多信息,请点击如何阅读****此图表

图 8.18 – 个体条件期望(ICE)图

图 8.18 – 个体条件期望(ICE)图

现在让我们看看模型统计信息。

模型统计信息使我们能够分析预测值分布、模型性能和模型指标。还有在队列和数据集之间切换的选项。选择 y 值以查看数据集中的错误、预测的 Y 值(模型预测的列的标签)以及真实的 Y 值(训练数据集中提供的列的标签)。这些选项使我们能够了解模型性能。

您还可以交换轴以在 x 轴上显示错误并在 Y 轴上显示预测值。此外,如果您点击队列,您可以选择数据集和要绘制的特征,并查看模型的性能。

图 8.19 – 模型统计

图 8.19 – 模型统计

接下来,我们将查看负责任 AI 仪表板上的数据探索器功能。

数据探索器

数据探索器是分析预测值、误差和特征的另一个可视化工具。您可以使用聚合或单个特征。它还允许您为假设分析选择预测特征和训练特征。

图 8.20 展示了年龄如何分组或分箱成块的情况。x 轴是索引,y 轴是年龄组,可以是年龄数据点或年龄的箱。您可以选择选择聚合图单个数据点来可视化聚合图和单个图之间的差异。箱形图清晰地显示了异常值的位置,并显示了绘图点的范围。

我们可以将x轴从索引更改为预测的y值或真实的y值以查看模式。还有更改箱数的选项。在以下示例中,我们选择了五个箱。此外,如果您点击年龄,您还可以更改特征以查看预测值的变化。

图 8.20 – 聚合图

图 8.20 – 聚合图

数据探索器允许我们选择预测值和原始值,并绘制聚合图或单个散点图以查看值如何对齐或相交。在下面的图表中,y 轴是年龄,x 轴是索引,预测结果是一个散点图。您可以选择不同的队列来查看不同的值。

图 8.21 – 单个值的散点图

图 8.21 – 单个值的散点图

上述图表提供了一种可视化模型预测值和误差值的方法。这使我们能够构建一个更准确、更现实的更好模型。

假设反事实

现在,我们可以更改数据点并点击创建假设反事实。假设分析允许我们选择预测因子并与特征进行比较,以查看对结果的影响。我们还可以更改索引和年龄,切换到查看预测的y值或真实的y值以及特征以查看反事实。然后,我们可以选择索引值并选择一个来查看图表如何变化。

在以下屏幕截图中,我们可以看到一个反事实图表,并通过更改特征来分析图表。

图 8.22 – 反事实

图 8.22 – 反事实

选择索引然后点击创建假设反事实以查看分布图中的特征百分比。您还可以保存图表。

图 8.23 – 假设反事实

图 8.23 – 假设反事实

在下一节中,我们将看到如何使用 SDK 分析公平性。

公平性

公平性是我们需要在涉及人的用例中调查的一个主题。应采取适当的预防措施来确定数据集是否公平。在 Azure ML 中,使用负责任的 AI 工具箱,我们可以创建一个公平性仪表板。为此,首先,我们需要知道哪些特征需要公平,例如性别和种族。一旦我们知道这一点,我们就可以创建一个仪表板,如图图 8**.24所示。

在本节中,我们将使用样本数据集创建一个公平性仪表板:

  1. 前往 Azure ML Studio UI。

  2. 启动计算实例。

  3. 作者部分点击笔记本

  4. 使用 Python 3.8 创建一个新的笔记本,以 Azure ML 作为内核。

  5. 创建一个名为FairnessDashboard的新笔记本。

  6. 导入所有必需的库:

图 8.24 – 公平性导入

图 8.24 – 公平性导入

  1. 接下来,我们将加载样本数据集:

图 8.25 – 获取样本数据

图 8.25 – 获取样本数据

  1. 然后,我们将指定敏感特征,然后使用分类列和标签编码器将字符串转换为数字:

图 8.26 – 特征工程

图 8.26 – 特征工程

  1. 现在我们已经处理好了特征工程,下一步是将数据集分割为训练和测试。我们将数据集分割为 80%用于训练和 20%用于测试:

图 8.27 – 分割数据以进行训练和测试

图 8.27 – 分割数据以进行训练和测试

  1. 接下来,配置训练:

图 8.28 – 训练

图 8.28 – 训练

使用数据集训练模型。在这里,我们使用逻辑回归进行建模。

  1. 接下来,让我们创建一个公平性仪表板。一个公平性仪表板至少需要这三个参数:

    • 敏感特征 – 包含敏感数据的列,例如性别或种族

    • 原始 标签值

    • 预测值 进行分析

点击由负责的 AI SDK 创建的 URL。将打开一个新的网页。按照仪表板中的导航选择敏感列,查看数据如何分布在这些特征上。这里的主要目的是提供关于特征如何与敏感信息平衡的见解。例如,如果我们有包含男性和女性数据点的数据,我们想确保男性和女性在数据集中有相同数量的代表性。

图 8.29 – 创建公平性仪表板

图 8.29 – 创建公平性仪表板

这里是仪表板的主页:

图 8.30 – 公平性仪表板 – 简介页面

图 8.30 – 公平性仪表板 – 简介页面

  1. 点击开始以查看分析公平性的选项。

  2. 该过程的第一个步骤是选择敏感特征。在下面的屏幕截图中,我们有两个列,性别种族。在性别列中,我们有两个类别,男性女性。对于种族,我们有白人黑人亚洲-太平洋岛民其他美洲印第安人-爱斯基摩人。让我们首先选择性别来检查敏感特征,然后点击下一步

图 8.31 – 公平性仪表板 – 01 敏感特征

图 8.31 – 公平性仪表板 – 01 敏感特征

  1. 现在,让我们选择用于我们分析的性能指标。性能指标选项如下:

    • 准确率

    • 平衡准确率

    • F1 分数

    • 精确率

    • 回忆

这些指标的定义在图 8**.32中提供。对于我们来说,我们将选择准确率作为指标,以性别作为我们分析的敏感列。点击下一步进入公平性指标

图 8.32 – 公平性仪表板 – 02 性能指标

图 8.32 – 公平性仪表板 – 02 性能指标

  1. 接下来是最重要的筛选之一。选择适合我们分析的正确公平性指标。在下面的屏幕截图中,你可以看到选择。在我们的例子中,我们选择人口统计学差异。然后点击下一步来查看分析图表。

图 8.33 – 公平性仪表板 – 03 公平性指标

图 8.33 – 公平性仪表板 – 03 公平性指标

  1. 在下一个屏幕上,我们可以更改这些选择,查看公平性指标是如何计算的,并检查哪些敏感特征被选中以及它们的公平性如何。

图 8.34 – 公平性结果

图 8.34 – 公平性结果

前面的图表显示,模型中女性的代表性不足,这也表明模型可能对男性有偏见。因此,现在我们可以回过头来看看我们是否可以得到一个更平衡的数据集,以使我们的模型更加公平。尝试切换图表到假阳性和假阴性率,以深入查看假阳性和假阴性的比率。你还可以更改性能指标敏感特征公平性指标并分析公平性。随着这些选项的变化,图表将反映这些变化。这个工具提供了一个单一的地方来分析数据以查找偏差和公平性。

图 8.35 – 公平性结果 – 假阳性率和假阴性率

图 8.35 – 公平性结果 – 假阳性率和假阴性率

我们现在可以深入挖掘黑盒模型,看看模型是如何做出决策的,并分析数据集以查找任何偏差或错误,并确保公平性。

摘要

通过使用负责任的 AI 工具箱 SDK,我们可以分析数据以评估公平性和错误,并深入挖掘决策树以理解模型是如何做出决策的。请注意,在这个领域还有工作要做。SDK 仍在开发中,功能正在增加,所以请记住,功能将会改变,并将添加新功能。在撰写本文时,我们已使用 LightGBM、XGBoost 和 PyTorch 算法对公平性进行了测试。工具箱允许我们打开黑盒模型并查看决策是如何做出的,并且还能生成公平且无偏的输出。

在下一章中,我们将学习如何将机器学习模型投入生产。

第九章:使用 MLOps 生产化您的负载

MLOps是一个概念,它通过自动化模型训练、模型评估和模型部署,使机器学习ML)工作负载能够进行扩展。MLOps 通过代码、数据和模型实现可追溯性。MLOps 允许数据科学家和 ML 专业人士通过Azure Machine LearningAML)服务以规模化的方式将预测结果提供给商业用户。

MLOps 建立在CI/CD的概念之上。CI/CD 代表持续集成/持续交付,这个术语在软件开发中已经使用了数十年。CI/CD 使公司能够扩展其应用程序,通过利用这些相同的概念,我们可以扩展我们的 ML 项目,这些项目将依赖于 CI/CD 实践来实施 MLOps。

这个领域的挑战之一是其复杂性。在本章中,我们将探讨以下场景:检索数据、转换数据、构建模型、评估模型、部署模型,然后等待批准,将其注册到更高环境,并将模型作为托管在线端点发布,将流量路由到模型的最新版本。这个过程将利用 Azure DevOps、AML SDK v2 和 CLI 的 v2。

在本章中,我们将涵盖以下主题:

  • 理解 MLOps 实现

  • 准备您的 MLOps 环境

  • 运行 Azure DevOps 管道

技术要求

要继续本章,以下是需要满足的要求:

  • 两个 AML 工作区

  • 一个 Azure DevOps 组织,或者有创建一个的能力

  • 在 Azure DevOps 组织中有一个 Azure DevOps 项目,或者有创建一个的能力

  • 在 AML 部署的关键保管库中分配权限的能力

  • 创建 Azure DevOps 变量组的能力

  • 将 Azure DevOps 变量组链接到 Azure 关键保管库的权限

  • 两个服务主体,或者有创建服务主体的权限

  • 两个服务连接,每个环境一个,或者有创建服务连接的权限

  • 在 Azure DevOps 项目中创建 Azure DevOps 管道的能力

  • 在 Azure DevOps 项目中创建环境的能力

理解 MLOps 实现

如前所述,MLOps 是一个概念,而不是一个实现。我们将提供 MLOps 的实现作为本章的基础。我们将建立一个 Azure DevOps 管道来编排 AML 管道,以在dev环境中转换数据,利用 MLflow 创建模型,并评估模型是否比现有模型表现更好或相等。在此管道之后,如果注册了新模型,我们将利用dev环境部署此新模型,然后触发一个审批流程,将新模型注册和部署到qa环境,该环境将利用蓝/绿部署。

一些组织可能会选择不注册表现与现有模型一样好的模型,尤其是如果训练数据没有变化,但这将使我们能够看到 AML 如何强大地处理更新托管在线端点。在打下坚实基础之后,您可以更新代码,仅在模型表现优于现有模型时才注册模型,但改进模型是留给您的一项练习。

在本章中,我们将利用 AML SDK v2、CLI v2、Azure DevOps 组织和 Azure DevOps 项目中的 AML 管道,并利用在部署环境时自动为您部署的 Azure Key Vault。您将利用两个 AML 工作区。对于本章,我们将称它们为devqa

为了分解 MLOps 的实施过程,以下图表展示了我们将为您创建的 MLOps 实施流程:

图 9.1 – MLOps 实施

图 9.1 – MLOps 实施

在前面的图中,Azure DevOps 是协调器。当代码被检入分支时,Azure DevOps 将触发 Azure DevOps 管道。

我们将创建一个包含两个阶段的 Azure DevOps 管道。一个阶段是dev 阶段,另一个是qa 阶段。在dev 阶段,我们将利用 AML CLI 首先获取初始模型版本并将其放置到 DevOps 管道中的一个变量中。在检索模型版本后,我们将运行处理模型创建和注册的 AML 管道。在运行 AML 管道后,我们将在 Azure DevOps 管道中再次检索模型版本。如果模型版本没有变化,我们知道没有新模型被注册。如果模型版本增加,那么我们知道我们想要通过 Azure DevOps 在dev环境中部署此模型,并继续将此模型部署到qa环境。鉴于qa环境是一个更高环境,我们将包括一个审批流程。注册和部署到qa环境必须首先获得批准。一旦获得批准,注册和部署到qa环境将进行。

作为托管在线端点的一部分,我们可以通过蓝绿部署将新模型部署到现有的托管在线端点。当一个模型首次部署到托管在线端点时,我们将流量设置为 100%。在部署模型的新版本时,我们最初将新模型的流量设置为 0,等待其成功部署,然后对于给定的托管在线端点,我们将流量切换到最新版本的模型,设置为 100%,并删除旧模型部署。这确保了给定托管在线端点的正常运行时间。一旦部署了托管在线端点,在模型部署过程中,其他端点的用户不会受到干扰。

为了设置我们的 MLOps 管道,我们将利用几个关键资源。在 MLOps 自动化管道中,我们将利用一个 dev AML 工作区,以及一个用于连接到 qa AML 工作区的工作区。除了服务连接外,我们还将利用每个环境中存储敏感信息的密钥保管库。我们将使用 Azure DevOps 中的变量组链接这些密钥保管库。这将使我们的 Azure DevOps 管道保持清洁且易于理解。请参阅图 9**.1以了解我们将利用的资源概述。

本章是利用你对本书中迄今为止实现的功能的理解并将其付诸实践的机会。让我们开始查看成功利用 AML CLI v2 和 SDK v2 以及 Azure DevOps 实现的 MLOps 管道的技术要求。

准备你的 MLOps 环境

在本节中,我们将确保技术要求得到满足,前提是你有权限这样做。为了准备你的环境,我们将执行以下操作:

  1. 创建第二个 AML 工作区

  2. 创建 Azure DevOps 组织和项目

  3. 确认 dev AML 工作区中的代码

  4. 将代码移动到你的 Azure DevOps 仓库

  5. 在 Azure Key Vault 中设置变量

  6. 设置 Azure DevOps 环境变量组

  7. 创建 Azure DevOps 环境

  8. 设置你的 Azure DevOps 服务连接

  9. 创建 Azure DevOps 管道

  10. 运行 Azure DevOps 管道

创建第二个 AML 工作区

到目前为止,你一直在单个 AML 工作区中工作。通过我们的 MLOps 管道实现,我们将使用两个工作区。有关部署第二个 AML 工作区的信息,请参阅第一章介绍 Azure 机器学习服务。在创建第二个 AML 工作区后,继续下一步:创建 Azure DevOps 组织 和项目

创建 Azure DevOps 组织和项目

Azure DevOps 管道位于Azure DevOps 项目中。Azure DevOps 项目位于Azure DevOps 组织中。您将需要一个 Azure DevOps 项目来托管您的代码存储库,您可以在其中编写代码并创建 Azure DevOps 管道,创建服务连接,创建变量组,并将它们链接到您的密钥保管库。您可能已经设置了 Azure DevOps 组织。您的管理员可以选择在 Azure DevOps 组织中有一个支持多个存储库和多个 Azure DevOps 管道的单个项目,或者有多个项目,每个项目有一个或多个存储库。如果您的管理员已经创建了 Azure DevOps 组织,您可以在 Azure DevOps 组织中请求一个新的 Azure DevOps 项目,或者访问一个现有的 Azure DevOps 项目,该项目包含存储库以保存您的代码,并具有创建 Azure DevOps 管道的能力。如果您已经有一个 Azure DevOps 组织和项目,请继续下一小节,确认 dev AML 工作区中的代码

我们将通过 Web 门户继续设置 Azure DevOps 组织。Azure DevOps 组织将托管您的项目,而项目将在存储库中保存您的源代码,以及用于自动化 MLOps 管道的 Azure DevOps 管道。

如果您没有 Azure DevOps 组织,请按照以下步骤创建一个:

  1. dev.azure.com/登录 Azure DevOps。

  2. 在左侧菜单中,选择如图所示新建组织

图 9.2 – 新组织

图 9.2 – 新组织

  1. 这将打开一个新窗口,用于开始创建 Azure DevOps 组织的流程。然后,点击继续按钮。

图 9.3 – 开始使用 Azure DevOps

图 9.3 – 开始使用 Azure DevOps

  1. 这将带您进入创建 Azure DevOps 组织的下一屏幕:

图 9.4 – 创建您的 Azure DevOps 组织

图 9.4 – 创建您的 Azure DevOps 组织

Azure DevOps 组织必须是唯一的,因此您需要使用尚未被占用的名称创建自己的组织。如图图 9.4所示,填写以下信息:

  1. 命名您的组织。需要一个唯一的组织。在先前的示例中,我们选择了mmxdevops

  2. 存储项目的位置 – 我们已选择美国中部

  3. 输入屏幕上显示的字符 – 我们已输入Dp5Ls进行验证。

  4. 点击继续按钮。

  5. 下一屏将要求您填写项目名称字段,您的代码和 MLOps 管道将在此处存放。如图 9.5*所示,我们已选择私有项目。如果您在组织中工作,您可能会看到一个企业项目的选项。如果此选项对您不可用,请创建一个私有项目。创建公共项目将允许公众访问您的项目。私有项目将允许您添加您选择的用户到项目中,如果您想分享它。最后,点击+ 创建项目按钮。

图 9.5 – 创建 Azure DevOps 组织

图 9.5 – 创建 Azure DevOps 组织

  1. 现在您的项目已经创建,您将有一个地方来存放 MLOps 所需的关键资源。

Azure DevOps 项目包括以下两个关键组件:

  • Repos:存储您的代码的地方

  • Pipelines:创建您的 MLOps 管道自动化的地方

我们将利用这些,如图 9.6*所示:

图 9.6 – 创建 Azure DevOps 组织

图 9.6 – 创建 Azure DevOps 组织

我们将在本章后面探索利用ReposPipelines

恭喜您 – 您已设置好 Azure DevOps 组织和项目。现在,是时候深入创建用于存放代码的仓库了。

图 9.6中,你可以看到Repos是菜单选项之一。选择此选项即可进入 Azure DevOps 项目的仓库部分,如图 9.7*所示:

图 9.7 – 空仓库

图 9.7 – 空仓库

有三个重要项目我们将复制并保存以供将来使用。选择复制按钮,如图 9.7*中标记为a所示,将复制 Git 仓库的 URL。选择生成 Git 凭据按钮,如图中标记为b所示,将为您提供用户名和密码。我们将在 AML 终端中提供这些信息,以将 AML 工作区中的代码链接到您的 Azure DevOps 仓库。

小贴士

在任何时候,要前往您的 DevOps 项目,您可以输入以下 URL:https://dev.azure.com/<组织名称>/<项目名称>.

现在我们已经复制了连接到您的 Azure DevOps 项目的 URL、用户名和密码,我们已准备好审查您 AML 工作区下一个要求。

连接到您的 AML 工作区

除了您的 Azure DevOps 组织和项目,我们还需要连接到您的 AML 工作区,以便利用 SDK v2 和 AML CLI v2 实现 MLOps 管道,正如前几章所做的那样。

在前一章中,我们克隆了 Git 仓库。如果您还没有这样做,请继续按照前面提供的步骤操作。如果您已经克隆了仓库,请跳到下一节:

  1. 在您的 Compute 实例上打开终端。请注意,路径将包括您的用户目录。在终端中输入以下内容以将示例笔记本克隆到您的工作目录:

     git clone https://github.com/PacktPublishing/Azure-Machine-Learning-Engineering.git
    
  2. 点击刷新图标将更新并刷新屏幕上显示的笔记本。

  3. 检查您的 Azure-Machine-Learning-Engineering 目录中的笔记本。这将显示克隆到您工作目录中的文件,如图 图 9.8 所示:

图 9.8 – Azure-Machine-Learning-Engineering 目录

图 9.8 – Azure-Machine-Learning-Engineering 目录

现在您的代码已经在您的 dev AML 环境中,您已经准备好将代码移动到您的 Azure DevOps 仓库。在此阶段,构建 MLOps 管道所需的代码已经在您的 ALMS 工作空间中。在下一个小节中,我们将把您的代码从 AML 工作空间移动到 Azure DevOps 项目中的 DevOps 仓库。这种连接将模拟数据科学家或 MLOps 工程师的工作。在 AML 工作空间中编写代码,并将该代码提交到您的 Azure DevOps 仓库。

将代码移动到 Azure DevOps 仓库

我们已经在我们的第一个 AML 工作空间中有了您的代码,该工作空间被称为我们的 dev AML 工作空间。现在,我们将把您的代码移动到我们的 Azure DevOps 仓库中。

导航到您的 dev AML 工作空间中的终端会话:

  1. 在您的终端中,按照以下步骤导航到您的 Azure-Machine-Learning-Engineering 文件夹:

    cd Azure-Machine-Learning-Engineering
    
  2. 首先,我们需要通过输入以下命令来指定目录是安全的:

    git config --global --add safe.directory '*'
    
  3. 我们希望更新您的源,它指定了代码所在的远程位置,到 Azure DevOps 项目中的仓库。在以下命令中,我们将用您的 Azure DevOps 仓库的 URL 替换它。这将是从 图 9.7 复制的 URL。一般而言,执行此操作的命令如下:

    git remote set-url origin https://<organization_name>@dev.azure.com/ <organization_name> /<project_name>/_git/mlops
    
  4. 为了检查您的源设置是否正确,您可以在终端中输入以下命令:

    git remote -v
    
  5. 要使您的 Git 用户信息被保存,您可以设置以下:

    git config --global credential.helper store
    
  6. 接下来,我们将按照以下方式设置 Git 用户信息:

    git config --global user.email <username_from_azuredevOps>
    
    git config --global user.name "Firstname Lastname"
    
    git config --global push.default simple
    
  7. 要将代码推送到源,即 Azure DevOps 项目中的仓库,您可以输入以下命令:

    git status
    
    git add –A
    
    git commit –m "updated"
    
    git push origin main
    
  8. 这将提示输入密码,该密码是在您点击 Azure DevOps 项目凭据时提供的,如图 图 9.9 所示。

使用前面的命令后,代码现在将从您的 AML 工作空间复制到 Azure DevOps 项目中的仓库,如图中所示以下截图:

图 9.9 – Azure DevOps MLOps 项目

图 9.9 – Azure DevOps MLOps 项目

在此阶段,您已成功将代码移动到您的 Azure DevOps 仓库。对 AML 计算资源上的代码所做的更改,如果提交到您的仓库,将在您的 Azure DevOps 仓库中反映和更新。

在下一个小节中,我们将为每个 AML 工作空间环境在 Azure Key Vault 中设置变量。

在 Azure 密钥保管库中设置变量

当您的 AML 工作空间部署时,Azure 密钥保管库也会为您的每个工作空间部署。我们将利用每个密钥保管库来存储与每个工作空间相关的敏感信息,以便 Azure DevOps 可以连接并运行 Azure DevOps 构建代理上的 AML 管道和 AML CLI v2 命令。我们本可以选择不利用与 AML 工作空间一起部署的默认密钥保管库,并为这项任务启动两个单独的密钥保管库,但鉴于资源已经可用,我们将选择继续利用默认部署的密钥保管库。要在 Azure 密钥保管库中设置变量,请按照以下步骤操作:

  1. 通过访问portal.azure.com/进入 Azure 门户,找到您的 AML 工作空间。点击资源,如图所示:

图 9.10 – Azure 门户中的 AML 工作空间图标

图 9.10 – Azure 门户中的 AML 工作空间图标

  1. 点击资源,我们可以看到 AML 工作空间的概览包括密钥 保管库信息:

图 9.11 – AML 工作空间概览

图 9.11 – AML 工作空间概览

点击密钥保管库名称将直接带我们到 Azure 密钥保管库,如图所示:

图 9.12 – Azure 密钥保管库概览

图 9.12 – Azure 密钥保管库概览

  1. 目前,您没有权限查看机密,因此请点击左侧的访问策略菜单,如图所示。这将显示访问策略选项,如图所示:

图 9.13 – Azure 密钥保管库访问策略

图 9.13 – Azure 密钥保管库访问策略

  1. 点击如图图 9.14所示的+ 创建将提供分配权限的选项。在机密权限下,勾选获取列出设置删除,然后点击下一步

图 9.14 – 设置机密权限选项

图 9.14 – 设置机密权限选项

  1. 然后,您可以通过名称或电子邮件地址自行搜索以分配权限,如图所示:

图 9.15 – 通过电子邮件搜索以分配 Azure 密钥保管库所选权限

图 9.15 – 通过电子邮件搜索以分配 Azure 密钥保管库所选权限

  1. 在如图图 9.16所示的文本框中,输入您的电子邮件地址并找到自己以分配访问权限:

图 9.16 – 定位您的电子邮件地址

图 9.16 – 定位您的电子邮件地址

  1. 找到您自己后,选择您的名称,然后点击下一步按钮。

  2. 然后,您将获得选择应用程序的选项 - 在应用程序(可选)部分不要选择任何内容,然后点击下一步

图 9.17 – 跳过应用程序(可选)

图 9.17 – 跳过应用程序(可选)

  1. 最后,在审查+创建部分下点击创建按钮。

图 9.18 – 创建 Azure 密钥保管库权限

图 9.18 – 创建 Azure 密钥保管库权限

  1. 现在您有权限查看和创建密钥,请转到左侧菜单中的密钥选项:

图 9.19 – 左侧菜单中的“密钥”选项

图 9.19 – 左侧菜单中的“密钥”选项

  1. 点击此处所示的+ 生成/导入按钮:

图 9.20 – 生成新的密钥

图 9.20 – 生成新的密钥

  1. 这将显示创建密钥的屏幕,如图下所示:

图 9.21 – 创建密钥

图 9.21 – 创建密钥

为以下表格中列出的每个值填充密钥并点击创建按钮,因为它们将被您的 Azure DevOps 管道利用。这里提供的表格在列中提供了示例信息。此示例信息应从您的 AML 工作区的概述中获取,如图 9.11 所示,除了位置。根据您的 AML 工作区部署的位置,位置值可以在以下位置找到 – github.com/microsoft/azure-pipelines-extensions/blob/master/docs/authoring/endpoints/workspace-locations

密钥 保管库变量
resourceGroup aml-dev-rg
wsName aml-dev
location eastus

图 9.22 – 开发 Azure 密钥保管库变量

现在您已经为您的第一个 AML 工作区设置了 Azure 密钥保管库,我们将按照相同的步骤 1 到 13来设置第二个 AML 工作区的 Azure 密钥保管库和值。此信息应从您的第二个 qa AML 工作区的概述中获取,如图 9.11 所示:

密钥 保管库变量
resourceGroup aml-qa-rg
wsName aml-qa
location eastus

图 9.23 – qa Azure 密钥保管库变量

注意

在实际场景中,我们通常会看到非生产环境和生产环境,或者devqaprod。此代码可以扩展以支持n个环境。

完成这两个环境后,您就可以继续下一步 – 设置您的环境变量组。

设置环境变量组

现在您的变量已安全存储在 Azure 密钥保管库中,我们将设置变量组以保存您在 Azure DevOps 管道中使用的设置。变量组是一组在 Azure DevOps 管道任务中一起使用的变量。这意味着每个任务都可以使用指定我们将使用dev服务连接访问dev环境或利用qa服务连接连接到qa环境的变量。

我们将创建两个变量组,devops-variable-group-devdevops-variable-group-qa,以模拟从一个环境移动到另一个环境:

  1. 从左侧菜单中选择管道蓝色火箭图标,并选择选项,如下所示:

图 9.24 – 库选项

图 9.24 – 库选项

  1. 选择选项,您将提示创建一个新的变量组,如下所示:

图 9.25 – 新变量组

图 9.25 – 新变量组

  1. 点击devops-variable-group-dev,并启用从 Azure 密钥保管库链接机密作为变量选项,如下截图所示:

图 9.26 – 变量组创建

图 9.26 – 变量组创建

  1. 您需要点击您的 Azure 订阅的授权按钮。

  2. 当选择要链接到变量组的 Azure 密钥保管库时,请确保将dev密钥保管库与devops-variable-group-dev变量组链接,以及将qa密钥保管库与devops-variable-group-qa变量组链接。

图 9.27 – 变量组链接到 Azure 密钥保管库

图 9.27 – 变量组链接到 Azure 密钥保管库

  1. 完成密钥保管库的授权后,点击+ 添加图标,将您的密钥保管库中的机密添加到您的 Azure DevOps 变量组中,如下所示:

图 9.28 – 向 Azure DevOps 变量组添加变量

图 9.28 – 向 Azure DevOps 变量组添加变量

  1. 点击+ 添加图标,您将提示从已链接到变量组的 Azure 密钥保管库中选择机密,如下所示:

图 9.29 – 选择 Azure 密钥保管库变量

图 9.29 – 选择 Azure 密钥保管库变量

图 9.22图 9.23中选择您填充的三个变量,并点击devops-variable-group-dev应链接到您的dev Azure 密钥保管库,而devops-variable-group-qa应链接到您的qa Azure 密钥保管库。

  1. 请务必点击每个变量组的保存图标:

图 9.30 – 保存 Azure DevOps 变量组

图 9.30 – 保存 Azure DevOps 变量组

到目前为止,您应该确保已链接两个变量组,并且每个变量组应链接到特定环境的密钥保管库。

  1. 点击 Azure DevOps 左侧菜单中的 图标将弹出您已填充的 变量组,如下所示:

图 9.31 – Azure DevOps 变量组

图 9.31 – Azure DevOps 变量组

恭喜您 – 您已设置两个变量组,分别指向两个不同的密钥保管库,每个密钥保管库都包含有关特定工作区的信息。请注意,这非常灵活。任何包含您希望传递到管道中的敏感信息的变量都可以利用变量组中存储在密钥保管库中的密钥。Azure Key Vault 为您提供了在 MLOps 管道中为每个 AML 工作区提供独特安全信息的灵活性。

下一个我们将设置的 Azure DevOps 组件是为 qa AML 工作空间中的模型注册和模型部署提供审批的环境。

创建 Azure DevOps 环境

在本小节中,我们将创建一个名为 qa 的 Azure DevOps 环境,以便我们可以对 qa 环境中的模型部署进行治理。Azure DevOps 环境需要审批者。随着我们向 qa 环境的进展,我们将在 Azure DevOps 管道中引用此环境:

  1. 在 Azure DevOps 项目的左侧面板中的 管道 部分选择 环境 图标,然后选择 新建环境

这将弹出一个新的弹出窗口,如下截图所示:

图 9.32 – Azure DevOps 环境

图 9.32 – Azure DevOps 环境

  1. 对于名称,键入 qa,将资源设置为 ,然后选择 创建 按钮。

  2. 在环境的右上角,您将看到一个带有三个点的 添加资源 按钮,如下图所示。点击三个点:

图 9.33 – 添加资源

图 9.33 – 添加资源

  1. 点击三个点,转到 审批和检查,如下截图所示:

图 9.34 – 审批和检查

图 9.34 – 审批和检查

  1. 点击 审批和检查 选项后,将显示一个新屏幕,允许您输入您的审批者。

将显示一个屏幕,添加第一个检查,如下所示:

图 9.35 – 审批和检查

图 9.35 – 审批和检查

  1. 选择 审批,这将弹出如下的 审批 配置:

图 9.36 – 设置审批者

图 9.36 – 设置审批者

  1. 将自己添加到 审批 中,确保在 高级 下已勾选 允许审批者审批自己的运行,然后选择 创建

现在您已经创建了 Azure DevOps 环境,我们准备创建 Azure DevOps 服务连接。

设置您的 Azure DevOps 服务连接

Azure DevOps 服务连接使用服务主体来连接并代表您运行代码。服务连接将以服务连接中指定的服务主体身份运行您的 Azure DevOps 管道。AML 服务连接允许您将 Azure DevOps 连接到您的工作区。这意味着我们将创建两个服务连接,每个 AML 工作区一个。

有一种特殊类型的服务连接,指定它是一个 ML 工作区服务连接。此扩展不是必需的,所以如果您的 Azure DevOps 组织有管理员,他们可以为您提供服务主体而不使用此扩展,但这很理想,因为它表明服务主体将被用于什么。

我们将首先为您在 Azure DevOps 组织中安装一个 AML 扩展。要将此扩展安装到您的 Azure DevOps 环境中,请执行以下步骤:

  1. 导航到 marketplace.visualstudio.com/,并选择Azure Machine Learning,如图下截图所示:

图 9.37 – Visual Studio 商店

图 9.37 – Visual Studio 商店

  1. 这将显示以下 AML Azure DevOps 扩展:

图 9.38 – Azure DevOps ML 扩展

图 9.38 – Azure DevOps ML 扩展

  1. 点击如图 9.38 所示的图标将显示有关扩展的详细信息。

  2. 点击“免费获取”按钮开始安装过程。这将带您进入下一个屏幕,其中正在验证您是否有权限在您的 Azure DevOps 组织中安装扩展,如图下截图所示:

图 9.39 – 验证安装权限

图 9.39 – 验证安装权限

  1. 权限确认后,您将被提示为您的 Azure DevOps 组织安装,如图所示:

图 9.40 – 安装选项

图 9.40 – 安装选项

  1. 点击“安装”按钮,您将被提示现在前往您的 Azure DevOps 组织,如图下截图所示:

图 9.41 – 安装确认

图 9.41 – 安装确认

  1. 点击前面的截图所示的“进入组织”按钮。这将带您进入您的 Azure DevOps 组织。

  2. 然后,点击您在 Azure DevOps 组织中的项目,如图下截图所示:

图 9.42 – Azure DevOps 项目

图 9.42 – Azure DevOps 项目

  1. 在您的项目中,在左侧菜单中,您可以在菜单中看到“项目设置”。点击“项目 设置”图标。

  2. 点击“项目设置”,您将在菜单中看到“服务连接”。点击“服务连接”图标。

  3. 点击屏幕左上角的创建服务连接图标;这将打开如图所示的新服务连接窗口:

图 9.43 – 新服务连接

图 9.43 – 新服务连接

  1. 在这里点击Azure 资源管理器选项,滚动到页面底部,然后点击下一步

这将打开另一个屏幕,如下所示:

图 9.44 – 自动创建服务主体

图 9.44 – 自动创建服务主体

为了利用服务主体(自动)选项,你需要在你的 Azure 订阅中拥有创建服务主体实例的授权。如果你在一个此选项未被授权的环境中工作,你将能够从你的 Azure 订阅管理员那里请求一个服务主体,他们可以提供你创建服务连接所需的信息。请参考以下截图:

图 9.45 – 服务连接信息

图 9.45 – 服务连接信息

  1. 按照如图 9.45所示的屏幕上的信息进行填写。订阅 ID订阅名称资源组ML 工作区名称信息都在如图 9.11所示的 AML 资源概览屏幕上。ML 工作区位置基于资源部署的位置。为了确认你使用的是正确的值,这里有一个表格:github.com/microsoft/azure-pipelines-extensions/blob/master/docs/authoring/endpoints/workspace-locations

在点击你的 Azure 服务连接上的保存按钮之前,务必检查授予所有管道访问权限

定义你的 Azure DevOps 管道的.yml文件将期望服务连接的某些值。将你的服务连接到dev环境作为aml-dev,并将你的服务连接到qa环境作为aml-qa

恭喜你 – 你已经设置了两个服务连接,一个指向你的dev AML 工作区,另一个指向你的qa AML 工作区。我们将继续到下一个子节,创建你的 Azure DevOps 管道。

创建 Azure DevOps 管道

要设置你的 Azure DevOps 管道,我们将生成一些代码。回想一下,你的代码在你的dev AML 工作区中。为了指导你创建 Azure DevOps 管道,我们在第九章第九章 MLOps.ipynb中创建了一个示例笔记本,如下截图所示。

在你的 AML 工作区的dev实例中,你会看到如下笔记本:

图 9.46 – 第九章 MLOps 笔记本

图 9.46 – 第九章 MLOps 笔记本

打开笔记本,并逐步通过代码,执行每个单元格,并为你的 MLOps 流水线创建所需的文件。

我们首先通过连接到我们的 AML 工作区并确保我们的数据准备好被我们的 MLOps 流水线利用来开始笔记本。通常,演示包括你将作为流水线一部分利用的数据,但在现实世界的流水线中,你的数据将驻留在不在你的 MLOps 文件夹中的某个地方,因此我们将从文件夹中获取数据,并在尚未注册的情况下进行注册。

我们将创建一个 AML 流水线,为了实现这一点,我们为流水线中的每个步骤创建单独的文件夹。我们将创建一个数据准备、模型训练和模型评估的步骤。我们将利用我们的 Azure DevOps 流水线来处理部署,但我们将创建 AML 流水线的.yml文件定义,并且我们还创建一个文件夹来存放该流水线定义,以及一个文件夹来存放我们的conda环境.yml文件。

我们将为 AML 流水线创建一个计算集群以利用它。我们可以争论说这应该包含在 MLOps 流水线中,但这个资源将根据我们的流水线需求自动扩展和缩减,因此我们将这个资源留在了 Azure DevOps 流水线之外——然而,你当然可以将这个流水线扩展以包括这个功能。

在创建用于处理环境的conda .yml文件以及 AML 流水线中每个步骤的脚本之后,我们在 AML 流水线作业中将代码拼接在一起,这在第七章中有所介绍,部署 ML 模型进行 批量评分

这是创建流水线利用环境的脚本:

图 9.47 – 环境信息 conda .yml 文件

图 9.47 – 环境信息 conda .yml 文件

复习本章中流水线中的每个步骤以及笔记本中的代码,因为它创建了一个 AML 作业流水线来创建模型并注册模型。

注意,第一步将期望一个原始数据参数,这将告诉代码在哪里找到titanic.csv文件。除了源位置外,流水线定义还指示数据将存储的位置。这个脚本对于为你的流水线提供通用的数据利用解决方案非常有帮助。AML 流水线中的每个步骤都有一组定义好的输入和输出参数,这些参数在流水线定义.yml文件中捕获,该文件由笔记本在章节文件夹目录下的src目录中的流水线目录生成。通过审查此代码,你可以看到脚本中的输入和输出是如何在管道定义中指定的:

图 9.48 – AML 流水线定义

图 9.48 – AML 流水线定义

注意

管道作业定义具有很大的灵活性。定义作业的架构可以在此处查看:azuremlschemas.azureedge.net/latest/commandJob.schema.json

在这里的管道定义中,我们根据架构定义指定了预处理器作业的类型为command。我们指定了代码可以找到的位置。对于命令本身,我们指定运行 Python 并提供文件以及将从我们的定义输入和输出传递给 Python 脚本的参数。我们可以看到输入被定义为ro_mount,或对指定文件的只读挂载,输出被定义为rw_mount,或对指定文件位置的读写挂载。此外,环境被指定为生成的conda .yml文件,并且还指定了一个 Ubuntu 镜像。

这个初始的prep_jobtrain_jobeval_job一起构成了 AML 管道。

现在我们已经审查了 AML 管道,我们将查看devqa环境中模型部署所需的文件。

注意

托管在线端点名称必须在每个 Azure 区域中是唯一的。

除了 AML 管道定义之外,笔记本还会生成用于处理托管在线端点部署的文件。在运行笔记本时,请务必更新create-endpoint.ymlcreate-endpoint-dev.yml中的name值;在model_deployment.yml中,提供与create-endpoint.yml中指定的endpoint_name值相同的值;在model_deployment-dev.yml中,提供在create-endpoint-dev.yml文件中指定的endpoint_name值。

这里是create-endpoint-dev.yml文件的截图:

图 9.49 – dev AML 工作区托管在线端点.yml 文件

图 9.49 – dev AML 工作区托管在线端点.yml 文件

这里显示的文件提供了在dev环境中部署时托管在线端点将使用的名称和授权模式。请务必更新第 3 行,因为名称必须在部署 AML 工作区的 Azure 区域中是唯一的。

下面的截图显示了用于部署到托管在线端点的model_deployment-dev.yml文件。这里的endpoint_name值应与托管在线端点指定的名称匹配:

图 9.50 – dev AML 工作区部署到托管在线端点的 yml 文件

图 9.50 – 将 dev AML 工作区部署到托管在线端点的 yml 文件

正如dev环境中的托管在线部署名称应该匹配一样,它们在qa环境中也需要匹配。

这里是create-endpoint.yml文件的截图。这是用于在qa AML 工作区中创建托管在线端点部署的文件:

图 9.51 – qa AML 工作空间托管在线端点.yml 文件

图 9.51 – qa AML 工作空间托管在线端点.yml 文件

如图中所示,qa环境和dev环境。

这里是model_deployment.yml文件的截图:

图 9.52 – qa AML 工作空间部署到托管在线端点 yml 文件

图 9.52 – qa AML 工作空间部署到托管在线端点 yml 文件

如图中所示,此文件将在qa环境的在线部署中使用,并将转到endpoint_name以创建部署,因此务必更新create-endpoint.yml文件。

这些文件在 Azure DevOps 管道定义中被利用,我们将在下一节讨论。

以下是从AzureDevOpsPipeline.yml文件中摘录的片段,该文件协调 MLOps 管道:

图 9.53 – Azure DevOpsPipeline.yml 文件定义

图 9.53 – Azure DevOpsPipeline.yml 文件定义

AzureDevOpsPipeline.yml文件首先指定 Azure DevOps 构建代理将利用的镜像。当main分支有代码更改时,管道将被触发。该管道利用了之前设置的devops-variable-group-devdevops-variable-group-qa

在这个.yml文件中,务必更新ENDPT_NAME的值,使其与你在create-endpoint.ymlmodel_deployment.yml文件中指定的endpoint_name值一致。

还务必更新DEV_ENDPT_NAME,使其与你在create-endpoint-dev.yml文件中指定的name变量值以及model_deployment-dev.yml文件中的endpoint_name值一致。

这里的代码显示了在AzureDevOpsPipeline.yml文件中,需要替换的用于 MLOps 部署的值:

图 9.54 – Azure DevOps 管道变量替换

图 9.54 – Azure DevOps 管道变量替换

DevOps 管道分为两个阶段 – 一个阶段用于在dev环境中运行管道和部署模型,另一个阶段用于将模型提升和部署到qa环境。

在 Azure DevOps 阶段内部,我们利用一组作业,这些作业是利用 AML CLI v2 检索dev环境中的初始模型版本、运行 AML 管道,然后检索最终模型版本的 CLI 任务。这个最终模型版本指示模型是否应该在qa环境中注册:

az ml model list -w $(wsName) -g $(resourceGroup) -n $(model_name) --query "[0].version" -o tsv

上述代码是从您的 Azure DevOps 管道的第一个阶段和第一个步骤中检索的。使用 Azure DevOps 运行此代码,我们将检索由您在 Azure DevOps 管道中定义的变量指定的模型名称的最新版本,如图所示。正如您在代码中所见,我们不仅利用了变量组,还可以直接在 Azure DevOps 管道中定义变量,例如model_name变量。鉴于此值不基于环境而改变,我们将其添加到管道定义本身,但也可以将其包含在密钥保管库中,并通过我们的 Azure DevOps 变量组检索它。

在 Azure DevOps 管道yml文件中放置时,在 Azure DevOps 中运行的命令略有修改,如下所示:

图 9.55 – 检查模型是否存在

图 9.55 – 检查模型是否存在

在 Azure DevOps 管道中的 Azure CLI 任务内部,我们正在检查查询工作区中的模型的结果是否返回空字符串,然后我们将modelversion变量设置为0;否则,我们检索它并在 Azure DevOps 管道中设置modeldeversion变量。

这将把模型版本放入一个 Azure DevOps 变量中,可以在管道的后续步骤中评估,通过运行以下命令:

echo 'initial model version'$(setversion.modelversion)

在设置初始模型版本后,我们通过以下代码从 Azure DevOps 管道运行 AML 工作区管道:

az ml job create --file 'Chapter09/src/pipeline/aml_train_and_eval_pipeline.yml' --stream --set settings.force_rerun=True

注意,我们在此将force_rerun设置为True。AML 知道数据没有变化,如果代码没有变化,则它将重用步骤而不是重新运行它们,这在生产负载中非常好。然而,在更新模型的演示中,我们希望看到模型版本持续更新,因此我们将该值设置为True

在第一个阶段,我们检查最终模型版本和初始模型版本是否相等。此处的代码描述了检查模型版本并将输出变量runme设置为truefalse

图 9.56 – 检查模型版本

图 9.56 – 检查模型版本

如果它们不同,那么我们希望在dev环境中部署新模型,我们使用 AML CLI 命令部署模型:

az ml online-endpoint create --file 'Chapter09/src/deploy/create-endpoint-dev.yml' -g $(resourceGroup) -w $(wsName) -n $(DEV_ENDPT_NAME)

在此代码中,我们引用了.yml端点文件、资源组、工作区名称和端点名称。端点创建后,我们可以创建在线部署,如下所示:

az ml online-deployment create --name $NEW_DEPLOYMENT_NAME -f 'Chapter09/src/deploy/model_deployment-dev.yml' -g $(resourceGroup) -w $(wsName)

最后,我们可以通过以下命令将端点的流量更新为 100%:

az ml online-endpoint update -n $DEV_ENDPT_NAME --set tags.prod=$NEW_DEPLOYMENT_NAME  --traffic "$NEW_DEPLOYMENT_NAME=100" -g $(resourceGroup) -w $(wsName)

注意,我们正在用部署标签端点。通过标记端点,我们可以快速看到端点正在使用哪个部署。这意味着下次注册新模型时,我们可以创建一个新的部署到现有的托管在线端点,增加其流量,然后删除旧部署。

在 Azure DevOps 管道中,在处理部署之前,我们通过使用此命令检查是否已存在具有我们指定名称的端点:

ENDPOINT_EXISTS=$(az ml online-endpoint list -g $(resourceGroup) -w $(wsName) -o tsv --query "[?name=='$DEV_ENDPT_NAME'][name]" |  wc -l)

因此,第二次,端点将存在,我们不会创建端点,但我们仍然会部署端点。

管道中的第二阶段是QAPromoteModel管道。它连接到dev AML 工作区并检索模型,下载它,然后在qa环境中使用。一旦模型下载到 Azure DevOps 构建代理上,我们就可以在qa AML 工作区中注册它:

az ml model create --name $(model_name) -v $(vardevModelVersion) --path ./$(model_name)/$(model_name) --type mlflow_model -g $(resourceGroup) -w $(wsName)

一旦模型在qa环境中注册,我们就可以检查qa环境中是否存在托管在线端点。如果尚未部署,将通过使用 AML CLI v2 的create-endpoint.yml文件创建在线端点,如下面的代码所示:

az ml online-endpoint create --file '$(Pipeline.Workspace)/drop/Chapter09/src/deploy/create-endpoint.yml' -g $(resourceGroup) -w $(wsName)

如果这个托管在线端点确实存在,那么我们将使用az ml online-deployment在托管在线端点中创建一个部署以利用该模型。部署完成后,我们可以将托管在线端点部署的流量设置为 100%以供我们的新部署使用。

如果模型已经在这个环境中部署,则不需要部署托管在线端点,但我们将想要从以前的部署切换到我们的新部署。这意味着我们应该创建一个新的在线部署,并在托管在线端点上更新一个标签,指定正在使用的部署。这允许我们持续创建新的部署,并从先前的在线部署切换到我们的下一个部署,更新流量,然后在qa环境中删除旧部署。

一旦运行您的管道,您将能够从其详细信息中看到托管在线端点的标签信息,如图所示。

图 9.57 – 托管在线端点标签

图 9.57 – 托管在线端点标签

每次运行此代码时,都会根据部署时间的纪元生成一个新的部署名称。这确保了对于给定的部署有一个唯一的名称。拥有这个唯一的名称可以确保在部署在线部署时不会发生冲突。在线部署成功后,我们将流量更新到最新的在线部署,然后删除旧的在线部署。此图显示了将部署到托管在线端点的情况:

图 9.58 – 将部署到托管在线端点

图 9.58 – 将部署到托管在线端点

注意,在图中,在部署名称之后,我们在v之前包含模型版本号,以便快速识别给定部署的模型版本。

现在您已审查了代码并执行了笔记本,生成了 Azure DevOps 管道所需的文件,将您的代码检入到远程 origin(现在指向您的 Azure DevOps 仓库)将确保适当的文件已就位以创建您的 Azure DevOps 管道,这是我们流程中的下一步。要检入此代码,您可以运行以下命令:

git status
git add –A
git commit –m "updated"
git push origin main

恭喜您 – 您的 Azure DevOps 环境现在已与您的 AML 工作区链接。您已成功完成准备 MLOps 环境所需的步骤。您创建了一个 Azure DevOps 组织和项目。您将代码移动到 Azure DevOps,设置了 Azure 密钥保管库,并将其链接到您的 Azure DevOps 变量组。您还创建了一个 Azure DevOps 环境来处理审批流程。您创建了 Azure DevOps 服务连接,最后,提交了创建和运行 Azure DevOps 管道所需的代码。在下一节中,您将设置 Azure DevOps 管道,这将触发运行 Azure DevOps 管道。

运行 Azure DevOps 管道

我们将从这个部分开始创建一个 Azure DevOps 管道。您的 Azure DevOps 管道将在您对代码进行更改并将其推送到main分支时启动:

  1. 在 Azure DevOps 的左侧面板中,选择管道,您将看到以下屏幕:

图 9.59 – 创建您的第一个 Azure DevOps 管道

图 9.59 – 创建您的第一个 Azure DevOps 管道

  1. 点击创建管道按钮开始过程,这将弹出一个窗口:

图 9.60 – 选择您的代码位置

图 9.60 – 选择您的代码位置

  1. 在上一节准备您的 MLOps 环境中,您将代码放入了 Azure DevOps 中的代码仓库。从前面的屏幕截图中选择Azure Repos Git选项,这将要求您选择您的仓库,如图下所示。在此处选择您的mlops仓库。

图 9.61 – 选择您的仓库

图 9.61 – 选择您的仓库

  1. 接下来,选择现有 Azure 管道 YAML 文件选项,以使用您通过运行笔记本并将其检入 Git 仓库创建的管道:

图 9.62 – 配置您的管道

图 9.62 – 配置您的管道

  1. 选择此选项将带您进入下一个屏幕,如图所示:

图 9.63 – 选择您的 YAML 文件

图 9.63 – 选择您的 YAML 文件

  1. 路径下拉菜单中,导航到/Chapter09/src/AzureDevOpsPipeline.yml文件,如图所示:

图 9.64 – 获取 AzureDevOpsPipeline.yml 文件的路径

图 9.64 – 获取 AzureDevOpsPipeline.yml 文件的路径

  1. 在选择AzureDevOpsPipeline.yml文件后,点击继续选项。这将显示 Azure DevOps 管道的源代码,如下所示:

图 9.65 – 获取你的 YAML

图 9.65 – 获取你的 YAML

在前面的截图中,点击运行按钮。当此管道运行时,它将利用你的服务连接。要使用你的服务连接,你需要提供运行权限。

  1. 点击aml-dev服务连接:

图 9.66 – 向 Azure DevOps 提供权限

图 9.66 – 向 Azure DevOps 提供权限

  1. 在点击查看选项后,你将为管道运行提供权限。点击以下截图所示的允许按钮:

图 9.67 – 允许管道使用服务连接

图 9.67 – 允许管道使用服务连接

  1. 通过在管道进展过程中为每个所需的权限选择允许,提供适当的权限,以便管道可以执行。

  2. 当管道执行时,你可以看到显示工作负载正在进行的图标,如下截图所示:

图 9.68 – 管道执行

图 9.68 – 管道执行

  1. 点击DevTrainingPipeline阶段将带你到运行详情,如下所示:

图 9.69 – 管道详情

图 9.69 – 管道详情

  1. 当初始管道启动时,名为mmchapter9titanic的模型可能尚不存在,这取决于你是否从 AML 工作区运行了管道。在这种情况下,在 Azure DevOps 中,如果你点击获取初始模型版本任务,你会看到以下错误消息:

图 9.70 – 初始模型查找

图 9.70 – 初始模型查找

由于模型尚不存在,这是正确的。在这种情况下,我们在管道中将模型版本设置为0以继续成功的管道运行。

  1. 注意,以下截图显示了将你的 AML 工作区的dev实例作为一个管道:

图 9.71 – AML 管道运行

图 9.71 – AML 管道运行

当你的 Azure DevOps 管道遇到deploydevmodel时,如果失败,可能是因为你所在区域的端点名称已被占用。如果你在deploydevmodel任务上有失败的作业,请查看 Azure DevOps 中的消息内容。它可能会说,已经存在具有此名称的端点,端点名称必须在区域内唯一。尝试一些 其他名称。**

如果是这样,更新你的.yml文件以利用不同的端点名称。

dev环境中模型部署完成后,管道将请求批准将模型提升到下一个环境。

一旦dev阶段完成,将请求批准,如下所示:

图 9.72 – Azure DevOps 管道请求权限

图 9.72 – Azure DevOps 管道请求权限

  1. 点击QAPromote模型阶段以检索待处理阶段并批准或拒绝将模型移动到qa环境。

图 9.73 – 待批准的 QA 推广批准

图 9.73 – 待批准的 QA 推广

  1. 点击审查按钮,您可以选择为模型推广选择拒绝批准,如下所示:

图 9.74 – QA 推广批准

图 9.74 – QA 推广批准

一旦 QA 推广获得批准,模型就可以部署到qa环境中。

图 9.75 – qa 环境部署

图 9.75 – qa 环境部署

  1. 随着您的管道运行,您可以在您的dev AML 工作区中审查注册的模型。随着管道的执行,前往您的qa AML 工作区,您将看到一个注册的模型,如下所示:

图 9.76 – qa 环境的注册模型

图 9.76 – qa 环境的注册模型

  1. 除了注册的模型外,您还可以按以下方式审查您的管理在线端点:

图 9.77 – qa 环境的已部署在线端点

图 9.77 – qa 环境的已部署在线端点

  1. 此图展示了在qa环境中审查管理的在线端点。点击屏幕上的名称可以为您提供有关管理在线端点的详细信息。

在管理在线端点内部,您将看到您的模型部署实例,如下所示:

图 9.78 – qa 环境中的管理在线端点部署

图 9.78 – 在 qa 环境中管理的在线端点部署

  1. 部署名称基于纪元。每次在qa AML 工作区中部署模型时,都会检查标签属性:

图 9.79 – 管理在线端点的标签属性

图 9.79 – 管理在线端点的标签属性

如果已部署了模型,它将创建一个新的部署,更新标签,并删除旧部署。这确保了用户在新的端点部署时将经历最小的中断。

在本章中,您通过利用 Azure DevOps 来自动化数据准备、模型开发和模型评估及注册的编排;通过利用蓝/绿部署来部署模型;并将其从一个环境推广到下一个环境。

鼓励您利用您的dev AML 工作区,进行代码修改并审查您的 Azure DevOps 管道流程,启动您的dev AML 工作区管道,在qa环境中注册模型,并更新托管在线端点。现在您已经通过 MLOps 管道部署了托管在线端点,请注意,端点正在使用计算资源。您在不使用它们时应该删除端点以降低成本。恭喜您 – 您已成功实施了一个 MLOps 管道!

摘要

在本章中,重点是自动以管理方式部署您的模型作为在线端点以支持实时推理用例。

本章汇集了您在前几章中学到的概念,并介绍了 Azure DevOps 及其所提供的编排。利用 Azure DevOps,代码和部署是可追踪的。Azure DevOps 管道自动化触发dev环境管道的编排,将注册的模型移动到更高环境。利用 Azure Key Vault,我们可以安全地保存信息以支持多个环境,并将这些环境链接到您的 Azure DevOps 环境组。通过 MLflow 集成,捕获了在dev环境中生成的模型的指标,并将该模型编号注册到更高环境,然后添加到托管在线端点。我们实施了一个 MLOps 管道来自动化数据转换、模型创建、评估和模型部署。

在下一章中,我们将探讨在您的 AML 工作区中利用深度学习。这将是一个利用 AutoML 进行目标检测以解决您的目标检测目标的指南。

进一步阅读

如前所述,在本章中,我们试图为您创建自己的 MLOps 管道提供一个基础。我们鼓励您查看两个额外的资源,以使用 AML 构建您的 MLOps 管道:

第三部分:使用 MLOps 生产化您的作业

在本节中,读者将学习如何将 AMLS 作业与 Azure DevOps 和 Github 集成以实现 MLOps 解决方案。

本节包含以下章节:

  • 第十章, 在 Azure 机器学习中使用深度学习

  • 第十一章, 在 AMLS 中使用分布式训练

第十章:在 Azure Machine Learning 中使用深度学习

深度学习是机器学习的一个子类。它基于人工神经网络,这是一种受人类生物神经系统启发的编程范式,它使计算机能够从大量观察数据中学习。

存在一些机器学习问题——例如图像识别、图像分类、目标检测、语音识别和自然语言处理——传统机器学习技术无法提供性能良好的解决方案,而深度学习技术则可以。本章将向你展示 AML 中可用的深度学习能力,你可以使用这些能力来解决一些之前提到的问题。

在本章中,我们将涵盖以下主题:

  • 使用 AML 数据标注功能为训练目标检测模型标注图像数据

  • 使用 Azure AutoML 训练目标检测模型

  • 使用 AML Python SDK 将目标检测模型部署到在线端点

技术要求

要访问你的工作区,回顾前一章中的步骤:

  1. 前往 ml.azure.com

  2. 选择你的工作区名称。

  3. 在左侧的工作区用户界面上,点击 计算

  4. 计算 屏幕上,选择你的计算实例并选择 启动

图 10.1 – 启动计算

图 10.1 – 启动计算

  1. 你的计算实例状态将从 停止 变为 启动

  2. 在前一章中,我们克隆了 Git 仓库;如果你还没有这样做,请继续按照以下步骤操作。如果你已经克隆了仓库,请跳转到 步骤 7

  3. 在你的计算实例上打开终端。注意路径将包括你的用户目录。在终端中输入以下内容以将示例笔记本克隆到你的工作目录:

    git clone https://github.com/PacktPublishing/Azure-Machine-Learning-Engineering.git
    
  4. 点击图 图 10.2 中显示的刷新图标将更新并刷新屏幕上显示的笔记本:

图 10.2 – 刷新图标

图 10.2 – 刷新图标

  1. 查看你的 Azure-Machine-Learning-Engineering 目录中的笔记本。这将显示克隆到你的工作目录中的文件,如图 图 10.3 所示:

图 10.3 – Azure-Machine-Learning-Engineering

图 10.3 – Azure-Machine-Learning-Engineering

使用 Azure Machine Learning 的数据标注功能标注图像数据

在计算机视觉领域,目标检测是预测图像中对象位置和对象类型的一个具有挑战性的任务。就像任何其他监督机器学习任务一样,为了训练目标检测模型,我们需要有训练数据,在这种情况下,大量的标注数据,因为深度学习在大型标注数据集上表现最佳。开发计算机视觉模型的数据科学家知道标注图像是多么繁琐和耗时,而对于标注目标检测模型图像来说,更是耗时。Azure 机器学习Azure ML)服务有一个名为数据标注的强大功能,该功能通过利用内置功能(如自动训练模型以预标注图像供您审查的机器学习辅助标注)显著提升了图像标注的用户体验,从而加速了标注过程。

在本节中,您将通过以下步骤了解如何利用 Azure ML 的数据标注功能来为训练目标检测模型标注您的图像:

  1. 前往您一直在使用的本书克隆仓库的chapter 10文件夹。您将看到images文件夹,其中包含两个子文件夹:traintest。在下一步中,您将使用train文件夹中的图像。请注意,这些图像是从托管在github.com/EdjeElectronics/TensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Objects-Windows-10的公共仓库中克隆到我们的仓库中的。

  2. 导航到 Azure ML 工作区,从左侧菜单栏中选择数据标注,然后点击添加项目,如图图 10.4所示:

图 10.4 – 创建新的数据标注项目

图 10.4 – 创建新的数据标注项目

  1. 继续为您的项目命名,然后选择媒体类型图像,选择标注任务类型对象识别(边界框),并点击下一步,如图图 10.5所示:

图 10.5 – 填写项目详情

图 10.5 – 填写项目详情

  1. 您可以跳过下一步,直接转到选择或创建数据并点击创建来创建您的数据集。选择一个名称,并为您的图像数据资产输入描述,然后点击下一步,如图图 10.6所示:

图 10.6 – 创建图像数据资产

图 10.6 – 创建图像数据资产

  1. 选择从本地文件,如图图 10.7所示:

图 10.7 – 选择图像数据源

图 10.7 – 选择图像数据源

  1. 选择用于上传图像的数据存储,如图图 10.8所示:

图 10.8 – 选择图像的存储类型和数据存储

图 10.8 – 选择你的图像的存储类型和数据存储

  1. 步骤 1train文件夹中点击,选择如图图 10.9所示的全部图像,然后点击下一步

图 10.9 – 从你的本地驱动器上传图像文件

图 10.9 – 从你的本地驱动器上传图像文件

  1. 审查你的图像数据资产详情,并点击创建

  2. 在此步骤中,你需要为图像中找到的每个对象添加标签,在这个例子中将是TwoThreeFour等,直到Ten,以及SoldierQueenKing,如图图 10.10所示。然后点击下一步

图 10.10 – 为所有图像中的对象添加标签

图 10.10 – 为所有图像中的对象添加标签

  1. 你可以跳过标注说明(可选),转到ML 辅助标注(可选)。确保ML 辅助标注(可选)被启用,如图图 10.11所示,然后点击创建项目图 10.11 – 审查和创建数据标注项目

图 10.11 – 审查和创建数据标注项目

  1. 点击项目列表中你刚刚创建的项目,如图图 10.12所示:

图 10.12 – 数据标注项目列表

图 10.12 – 数据标注项目列表

  1. 你可以看到仪表板,它提供了数据标注功能的不同选项,以协助标注过程。继续点击顶部附近的标注数据,如图图 10.13所示:

图 10.13 – 数据标注仪表板

图 10.13 – 数据标注仪表板

  1. 在此步骤中,你将通过在图像中找到的对象周围绘制边界框并分配相关标签来开始标注图像,如图图 10.14所示:

图 10.14 – 在对象周围绘制边界框并分配标签

图 10.14 – 在对象周围绘制边界框并分配标签

  1. 一旦足够多的图像被标注,ML 辅助标注将开始,你将看到下一批图像已经为你预标注,以便你快速审查围绕对象的边界框及其标签。在你完成所有图像的标注后,你将看到你标注数据的摘要,例如标签类别分布等,如图图 10.15所示:

图 10.15 – 标签类别分布

图 10.15 – 标签类别分布

  1. 接下来,点击导出,对于资产类型选择标注,对于导出格式选择Azure ML 数据集,如图图 10.16所示:

图 10.16 – 导出你的标签图像数据

图 10.16 – 导出你的标签图像数据

  1. 你应该会看到一个消息,表明你的数据已成功导出,如图图 10.17所示:

图 10.17 – 标注数据成功导出

图 10.17 – 标记数据成功导出

在本节中,您学习了如何利用 Azure ML 辅助标记来加速您图像的标记,以便为训练对象检测模型做准备,我们将在下一节中进行训练。

使用 Azure AutoML 训练对象检测模型

在本节中,我们将向您展示如何通过以下步骤使用 Azure Automated Machine Learning (AutoML) 训练一个对象检测模型:

  1. 在左侧导航栏中点击 Automated ML,然后点击 新建 Automated ML 作业

图 10.18 – 创建新的 Automated ML 作业

图 10.18 – 创建新的 Automated ML 作业

  1. 选择您在上一个部分中创建的图像数据资产,然后点击 下一步

  2. 在此步骤中,您将配置训练作业,如图 图 10.19* 所示。首先要注意的是,AutoML 已经自动将任务类型设置为 playing_cards_experiment。对于 目标列,选择 label (List),对于计算类型,选择 Compute cluster。由于您没有 GPU 集群(这是进行对象检测等深度学习任务所需的),您需要通过选择 + 新建 并遵循集群创建向导中的步骤来创建一个。一旦您的 GPU 计算集群创建完成,就可以选择它,然后您可以点击 下一步

图 10.19 – 配置对象检测作业

图 10.19 – 配置对象检测作业

  1. 您可以保留算法细节和超参数调整设置中默认选中的值,如图 图 10.20* 所示,然后点击 下一步

图 10.20 – 选择模型和配置超参数调整

图 10.20 – 选择模型和配置超参数调整

  1. 在此最后步骤中,您将设置您的验证类型。我们将再次保留默认选中的值,即 Auto,如图 图 10.21* 所示。然后,点击 完成 以开始模型训练:

图 10.21 – 选择验证类型

图 10.21 – 选择验证类型

  1. 根据您的数据集大小,模型训练完成可能需要 15 分钟到几个小时不等。一旦训练作业完成,您可以在 最近完成的 Automated ML 作业 下看到它,如图 图 10.22* 所示:

图 10.22 – Automated ML 作业

图 10.22 – Automated ML 作业

  1. 选择您最新的运行实例以查看一些统计信息,例如最佳模型摘要主要指标算法名称持续时间,如图 图 10.23* 所示:

图 10.23 – 完成的 Automated ML 作业

图 10.23 – 完成的 Automated ML 作业

在本节中,您学习了如何利用 Azure AutoML 通过使用另一个名为 Data Labeling 的工具标记的图像数据来训练对象检测模型。在下一节中,您将学习如何将训练好的模型部署到托管在线端点,以便客户端应用程序使用。

使用 Azure ML Python SDK 将对象检测模型部署到在线端点

就像任何其他机器学习模型一样,深度学习模型除非部署并且消费者可以发送数据进行推理,否则是没有用的。在我们的情况下,这将是通过发送图像数据并获取包含原始图像中对象类型和位置的返回结果来实现。

在本节中,我们将向您展示如何使用 Azure ML Python SDK 按照以下步骤注册您之前训练的模型并将其部署到在线端点,以便进行实时推理:

  1. 打开 第十章 笔记本,该笔记本位于您按照章节中 技术要求 部分的步骤克隆的存储库中。请注意,本章节的存储库使用了大部分来自 https://github.com/Azure/azureml-examples 原始存储库的代码。

  2. 前几个单元格导入所需的库并将您的笔记本连接到 Azure ML 工作区,如图 图 10.24* 所示:

图 10.24 – 导入所需库并连接到 Azure ML 工作区

图 10.24 – 导入所需库并连接到 Azure ML 工作区

  1. 您将使用 MLflow 库(特别是 MLflow 客户端)来访问 AutoML 生成的模型和其他工件。接下来的几个单元格展示了如何安装 MLflow 包的最新版本,如何获取 MLflow 跟踪服务器的 URI,以及如何初始化 MLflow 客户端,如图 图 10.25* 所示:

图 10.25 – 设置 MLflow 客户端以访问 AutoML 训练的模型

图 10.25 – 设置 MLflow 客户端以访问 AutoML 训练的模型

  1. 前往 Azure ML 工作区,并点击 AutoML_ada7f120-62e2-46fd-8ef7-59cae1106262,如图 图 10.26* 所示。在下一步中,我们将使用作业名称:

图 10.26 – 获取 AutoML 作业名称

图 10.26 – 获取 AutoML 作业名称

  1. 现在我们已经获得了 AutoML 作业名称,我们可以获取 AutoML 最佳模型 ID,如图 图 10.27* 所示。这将在后续步骤中用于检索实际训练的模型:

图 10.27 – 获取 AutoML 最佳模型 ID

图 10.27 – 获取 AutoML 最佳模型 ID

  1. 下一个单元格创建一个本地文件夹,并将最佳模型及其工件下载到该文件夹中,如图 图 10.28* 所示:

图 10.28 – 在本地文件夹中下载最佳模型

图 10.28 – 在本地文件夹中下载最佳模型

  1. 下一个单元格创建了一个用于调用的托管在线端点,如图图 10.29所示:

图 10.29 – 为从其调用模型创建在线端点

图 10.29 – 为从其调用模型创建在线端点

  1. 下一个单元格将模型注册到工作区,如图图 10.30所示:

图 10.30 – 将最佳模型注册到 Azure ML 工作区

图 10.30 – 将最佳模型注册到 Azure ML 工作区

  1. 下一个单元格创建了一个部署,其中包含要部署的模型的 ID、计算集群类型、集群节点数量以及之前创建的端点名称,如图图 10.31所示:

图 10.31 – 将最佳模型注册到 Azure ML 工作区

图 10.31 – 将最佳模型注册到 Azure ML 工作区

  1. 接下来的几个单元格将向您展示如何调用端点并将测试图像传递给模型进行推理,如图图 10.32所示:

图 10.32 – 向模型发送测试图像进行推理

图 10.32 – 向模型发送测试图像进行推理

  1. 最后,让我们看看模型对测试图像的评分如何(这是指它能够找到对象、识别其类型以及在图像中找到其位置的能力)。图 10.33显示了帮助您可视化端点返回的模型输出的 Python 代码:

图 10.33 – 可视化模型输出的 Python 代码

图 10.33 – 可视化模型输出的 Python 代码

  1. 图 10.34显示了带有识别对象周围边界框的模型输出:

图 10.34 – 显示识别对象周围边界框的模型输出

图 10.34 – 显示识别对象周围边界框的模型输出

接下来,让我们总结本章内容。

摘要

在本章中,我们简要介绍了深度学习以及拥有大量标记数据对模型表现的重要性。然后,我们向您展示了如何使用 Azure ML 数据标注功能来辅助标注图像数据以训练目标检测模型。接着,我们向您展示了如何使用 AutoML 训练目标检测模型,最后,您学习了如何使用 Azure ML 将模型部署到在线端点并评分测试图像。

在下一章中,我们将向您展示如何在 Azure ML 中执行分布式模型训练。

第十一章:在 AMLS 中使用分布式训练

一个有趣的话题是我们如何处理大规模数据集以训练机器学习和深度学习模型。例如,大规模基于文本的挖掘、实体提取、情感分析,以及基于图像或视频的,包括图像分类、图像多分类和目标检测,都是非常内存密集型的,需要大量的计算资源来处理,可能需要数小时、有时甚至数周才能完成。

此外,如果您有包含业务信息的大数据,并想构建机器学习模型,那么分布式学习可以帮助您。本章将介绍我们如何使用大型数据集运行大规模模型。您将看到计算大型、分布式模型的不同方法。

有不同的方法来分配计算和数据,以实现大规模训练的更快和更好性能。在这里,我们将了解一些技术。

当有大量可以划分的数据时,数据并行被广泛使用。我们可以运行并行计算以获得更好的性能。基于 CPU 的计算在水平扩展和垂直扩展时也表现良好。目标是对每个分区和组进行计算,例如一个分区,然后应用计算,并在所有分区上并行执行。

模型并行是您可以扩展深度学习建模中模型训练的另一个领域。模型并行高度依赖于计算,并且在大多数情况下,需要基于 GPU 的计算以获得更好的性能和时间。在本章中,我们将探讨可用于在Azure Machine Learning服务中使用的分布式训练库。

分布式训练主要有两种类型:数据并行和模型并行。

本章将涵盖以下主题:

  • 数据并行

  • 模型并行

  • 使用 PyTorch 进行分布式训练

  • 使用 TensorFlow 进行分布式训练

技术要求

您可以在此处查看本章所有代码的github.com/PacktPublishing/Azure-Machine-Learning-Engineering

要访问您的 workspace,请回想上一章中的步骤:

  1. 前往ml.azure.com

  2. 从已创建的内容中选择您的工作空间名称。

  3. 从工作空间用户界面,在左侧,点击Compute

  4. Compute屏幕上,选择您最后使用的计算实例,并选择Start

  5. 您的计算实例将从Stopped变为Starting

  6. 在上一章中,我们已克隆了本书的 GitHub 仓库。如果您尚未这样做,请继续按照提供的步骤操作。如果您已经克隆了仓库,请跳转到步骤 9

  7. 在您的计算实例上打开终端。请注意,路径将包括您的用户目录。在您的终端中输入以下内容以将示例笔记本克隆到工作目录中:

    git clone https://github.com/PacktPublishing/Azure-Machine-Learning-Engineering.git
    
  8. 点击刷新图标。

  9. 现在,创建一个名为gpu-cluster的计算集群,包含两个节点,并选择一个可用的 GPU 虚拟机,例如 NC6 或 NC24 系列。

  10. 查阅您Azure-Machine-Learning-Engineering目录中的笔记本。

数据并行

当有大量可以划分的数据时,数据并行被广泛使用。我们可以运行并行计算以获得更好的性能。当水平或垂直扩展时,基于 CPU 的计算也表现良好。目标是对每个分区和组进行计算,例如一个分区,然后应用计算,并在所有分区上并行执行。

模型并行

模型并行是另一种在深度学习建模中扩展模型训练的方法。模型并行主要基于计算,在大多数情况下,需要基于 GPU 的计算以获得更好的性能和时间。让我们看看在 Azure Machine Learning 服务中可用的分布式训练库。

在 Azure Machine Learning 中,我们可以以多种方式执行分布式学习:

  • 使用 PyTorch 进行分布式训练:PyTorch 是用于大规模视觉、文本和其他非结构化数据机器学习最知名和最广泛使用的机器学习库之一。它使用深度学习,如卷积神经网络或循环神经网络进行开发。PyTorch 是由 Meta(Facebook)开发的深度学习框架。

PyTorch 的实现非常简单且易于使用,并且倾向于消除市场上其他库的复杂性。

  • 使用 TensorFlow 进行分布式训练:TensorFlow 是由谷歌创建的深度学习库。鉴于科学研究的难度,它被设计成使深度学习开发变得简单且易于实现。在初期阶段,TensorFlow 的实现非常困难,需要大量的代码行。随后,为了简化这一过程,创建了一个名为 Keras 的项目;然后,它们被合并在一起。

与旧版本相比,最新版本要简单得多,使用起来也更方便。我们刚刚介绍了在深度学习领域用于分布式学习的最流行的框架。

注意

上述两种 SDK 都在持续开发和改进中,并且由于人工智能领域和算法数量的增长,总是会有新的功能被添加。

使用 PyTorch 进行分布式训练

在本章中,我们将学习如何在执行深度学习模型训练之前使用 PyTorch,然后再在多个核心中分布训练并在其上运行。

让我们看看如何编写一些简单的 PyTorch 代码,这些代码可以在 Azure Machine Learning 中运行。

分布式训练代码

在本节中,我们将学习如何编写代码以使用 PyTorch 框架进行基于视觉的深度学习算法的分布式训练。我们将使用 Python 代码来创建模型,然后使用计算集群对其进行训练。所有代码都可在本书的 GitHub 仓库中找到,用于学习和执行。

创建用于处理的训练作业 Python 文件

按照以下步骤创建数据集,同时利用用户界面:

  1. 前往 ml.azure.com 并选择你的工作区。

  2. 前往 Compute 并点击 Start 以启动计算实例。

  3. 等待计算实例启动;然后,点击 Jupyter 开始编码。

  4. 如果你没有计算集群,请遵循前几章中的说明来创建一个新的集群。具有 CPU 的计算实例适合开发;我们将使用基于 GPU 的内容进行模型训练。

  5. 如果你的 GPU 配额不足,请在 Azure 门户中创建一个服务票证来增加你的配额。

  6. 现在,为这一章创建一个新文件夹。我将其命名为 Chapter 11。同时,创建一个名为 PyTorchDistributed 的子文件夹。

  7. 在内部,我还在 src 文件夹中创建了一个新目录,其中将存储所有 Python 训练文件。PyTorchDistributed 文件夹(root 文件夹)将用于提交 Python 文件。

我们可以使用终端来运行我们的 Python 代码。

  1. 现在,我们需要编写我们的训练代码。因此,导航到 src 文件夹并创建一个名为 train.py 的新文本文件。

  2. 对于本章的示例代码,我们将使用一个开源数据集;它没有 个人身份信息PII)或隐私或法律问题。

  3. 让我们导入代码所需的全部库:

图 11.1 – 库导入

图 11.1 – 库导入

  1. 接下来,我们必须创建神经网络架构。神经网络架构是用于训练以创建大脑的。根据所需的准确性,你可以根据所需的层数来构建你的网络。神经网络架构不是本书的重点,但有很多资源可用于设计一个:

图 11.2 – 神经网络架构

图 11.2 – 神经网络架构

  1. 现在,让我们编写训练代码:

图 11.3 – 训练代码

图 11.3 – 训练代码

  1. 接下来,我们将评估模型指标。模型评估是训练过程中的一个重要步骤,因为它验证了模型在准确性方面的性能:

图 11.4 – 评估代码

图 11.4 – 评估代码

  1. 接下来,我们需要创建一个 main 函数,该函数将收集模型所需的数据,然后调用 main 函数并开始处理训练代码。然后,它将评估模型。请参阅以下示例代码以获取详细信息:

图 11.5 – 样本主代码

图 11.5 – 示例主代码

这是指定分布式数据集的代码:

图 11.6 – 分布式数据集代码

图 11.6 – 分布式数据集代码

这就是模型分布的地方:

图 11.7 – 模型分布代码

图 11.7 – 模型分布代码

  1. 接下来,我们将创建一个 job.py 文件,下载实验所需的数据。

  2. 现在,让我们创建一个数据集,用于进一步的训练过程。此数据集将调用分布式训练所需的计算集群。以下示例代码调用工作区并获取数据集:

图 11.8 – 作业文件数据集代码

图 11.8 – 作业文件数据集代码

以下代码并行化训练过程:

图 11.9 – 作业文件调用分布式训练

图 11.9 – 作业文件调用分布式训练

  1. 如前述截图所示,代码在模型训练期间进行分布,此过程非常简单。PyTorchConfiguration,连同 process_countnode_count,是我们必须提供的配置,以分布模型训练过程。

PyTorchConfiguration 拥有三个参数:

  1. communication_backend:这可以设置为 NcclGloo。默认选择 Nccl

  2. process_count:此参数配置节点内并行化目的的进程数量。

  3. node_count:这是指定作业使用多少节点的地方。node 是基于可用的核心数量。节点数量越多,处理速度越快。

  4. 运行作业并等待其完成。一旦提交作业,导航到你的工作区用户界面,点击 作业,然后转到 详情 以查看其工作原理。

图 11.10 – 作业输出

图 11.10 – 作业输出

在本节中,我们学习了如何使用 PyTorch 框架运行分布式训练,以对大型数据集进行基于视觉的自定义深度学习建模。

现在,我们将查看 TensorFlow 框架,并了解如何使用大数据集实现自定义视觉深度学习模型的分布式学习。

TensorFlow 的分布式训练

在本节中,我们将学习如何使用 TensorFlow 构建自定义深度学习模型,如目标检测或图像分类,并处理大图像文件。通过这样做,我们将学习如何跨多个虚拟机分布,以实现训练性能的更快提升。

创建用于处理的训练作业 Python 文件

按照以下步骤创建利用用户界面的数据集:

  1. 访问 ml.azure.com 并选择你的工作区。

  2. 前往 计算 并点击 启动 以启动计算实例。

  3. 等待计算实例启动;然后,点击 Jupyter 开始编码。

  4. 如果你没有计算集群,请遵循前几章中的说明来创建一个新的集群。具有 CPU 的计算实例适合开发;我们将使用基于 GPU 的内容进行模型训练。

  5. 如果你没有足够的 GPU 配额,请在 Azure 门户中创建一个服务票证来增加你的配额。

  6. 现在,为这一章创建一个新的文件夹。我正在创建一个名为 Chapter 11 的文件夹。然后,创建一个名为 TensorflowDistributed 的子文件夹。

  7. 在内部,我还在 src 文件夹中创建了一个新的目录,所有训练文件都将存储在这里。TensorflowDistributed(根文件夹)将用于提交 Python 文件。如果 TensorflowDistributed 文件夹不存在,请创建一个。从 步骤 6 开始,在 Chapter 11 文件夹下创建前面的文件夹。

我们可以使用终端来运行我们的 Python 代码。

  1. 现在,我们需要编写我们的训练代码。因此,导航到 src 文件夹并创建一个名为 train.py 的新文本文件。

  2. 对于本章的示例代码,我们使用了一个开源数据集;它不包含任何个人身份信息(PII),也没有任何隐私或法律问题。

  3. 让我们导入代码所需的全部库:

图 11.11 – 库导入

图 11.11 – 库导入

  1. 接下来,我们必须执行数据集处理:

图 11.12 – 数据集处理

图 11.12 – 数据集处理

  1. 现在,让我们创建一个模型。我们将使用 Keras 库来简化神经网络架构。层取决于你的用例和精度。我见过大型网络架构精度低且层数过少导致结果不佳。因此,我们必须通过实验找到层的正确平衡,并据此构建神经网络架构:

图 11.13 – 模型神经网络

图 11.13 – 模型神经网络

  1. 现在,让我们创建一个 main 函数,它将以分布式方式运行模型训练过程。main 函数是所有逻辑流程汇聚在一起以使训练过程工作的地方。正如你所见,tf.distribute 指定了分布策略:

图 11.14 – TensorFlow 分布式代码

图 11.14 – TensorFlow 分布式代码

Tf.distribute.experimental.MultiWorkerMirroredStrategy 同步地在工作节点之间复制所有变量和计算以进行处理。它主要使用 GPU(考虑到大规模处理)。前面的实现允许多个工作节点协同工作以实现更好的性能,从而更快地完成训练运行。

  1. 接下来,我们将在根文件夹中创建一些名为 job 的 Python 代码,我们将在终端窗口中执行这些代码以在命令行中执行 TensorFlow 代码。

  2. 现在,我们必须创建一个 environment.yaml 文件。这将创建运行模型训练的环境。以下是示例代码:

图 11.15 – environment.yaml 代码

图 11.15 – environment.yaml 代码

  1. 接下来,我们必须创建jobtensorflow.py文件,该文件使用 Azure Machine Learning SDK 来配置训练过程,并在作业提交后执行它。

  2. code部分,指定要使用的作业空间环境和用于实验的训练 Python 文件。您需要做出一些更改才能执行代码。作业空间、环境和训练 Python 文件的名字可能会根据您的实现方式而改变:

图 11.16 – 示例环境和实验

图 11.16 – 示例环境和实验

  1. 接下来,我们必须编写一些代码来设置分布策略,然后调用训练实验。我们可以使用TensorflowConfiguration类来配置如何并行化训练任务。

TensorflowConfiguration接受两个参数,如下所示:

  1. worker_count:用于并行化的工作节点数量。默认值为1

  2. parameter_server_count:此参数用于设置运行先前worker_count所需的任务数量:

图 11.17 – 分布策略和作业提交

图 11.17 – 分布策略和作业提交

  1. 等待实验运行。这需要几分钟到几小时,具体取决于数据集的大小。一旦实验完成运行,导航到您的工作空间用户界面,转到作业部分,选择作业以查看其输出:

图 11.18 – 作业输出

图 11.18 – 作业输出

在本节中,您学习了如何创建代码,该代码将运行大规模 TensorFlow 分布式训练,用于大型基于自定义视觉的深度学习模型。代码结构旨在长时间运行,并报告日志以便我们检查和验证。这些作业可以作为批量作业提交,这样我们就不必持续监视发生了什么。相反,我们可以提交作业,几小时后再回来查看模型运行的表现。

摘要

在本章中,我们涵盖了众多主题。我们学习了如何使用 Azure Machine Learning 服务的 Python SDK 创建代码来分发 PyTorch 和 TensorFlow 深度学习模型。我们还看到了通过大量数据分布模型训练来构建代码的简便性和无缝性。

本章的目标是向您展示如何构建无缝的代码,通过批量处理执行大规模模型,而无需您监视其运行。Azure Machine Learning SDK 允许我们提交作业,然后稍后回来检查输出。

这是本书的最后一章;希望您在阅读和学习 Azure 机器学习以及如何构建机器学习模型的过程中度过了一段美好的时光。我们很乐意了解您在组织中应用机器学习或深度学习时的经验。考虑到开源,Azure 机器学习将使您的旅程变得简单而轻松。

非常感谢您阅读这本书。这本书将帮助您为以下认证考试做准备,例如 AI 102(AI 工程师 – 训练 | 微软学习:learn.microsoft.com/en-us/certifications/roles/ai-engineer)和 DP 100(考试 DP-100:在 Azure 上设计和实现数据科学解决方案 – 认证 | 微软学习:learn.microsoft.com/en-us/certifications/exams/dp-100)。

posted @ 2025-09-03 09:53  绝不原创的飞龙  阅读(7)  评论(0)    收藏  举报