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

译者:飞龙

协议:CC BY-NC-SA 4.0

第六章:为实时推理部署 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. 计算 屏幕上,选择您的计算实例并选择 启动

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_001.jpg

图 6.1 – 启动计算

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

  2. 在上一章中,我们已克隆了 Git 仓库;如果您尚未这样做,请继续按照以下步骤操作。如果您已经克隆了仓库,请跳转到 步骤 9

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

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

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_002.jpg

图 6.2 – 刷新图标

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

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_003.jpg

图 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,如图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_004.jpg

图 6.4 – 禁用模型的日志记录

我们将模型日志记录设置为 false,但在训练脚本中,我们明确打包模型并记录它,如图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_005.jpg

图 6.5 – MLflow 模型日志记录

这为我们提供了对部署所使用的包的控制。当 MLflow 发布新版本时,最新版本的 MLflow 和 Azure Machine Learning 托管在线端点之间可能存在问题。理想情况下,这种情况不会发生;然而,随着开源的持续发展,在打包模型时包含版本是一个好习惯,以确保你对模型部署有完全的控制。

在运行你的 第六章 模型创建准备与注册.ipynb 笔记本之后,模型将在工作区中注册。一旦我们在工作区中注册了 MLflow 模型,我们就可以利用 AMLS Studio 来部署模型。为此过程,请按照以下步骤操作:

  1. 模型列表中选择模型:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_006.jpg

图 6.6 – 从模型列表中选择模型

  1. 在点击 MLflow 模型后,选择部署选项,然后选择第一个选项,部署到实时端点,如图所示。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_007.jpg

图 6.7 – 部署 MLflow 模型

  1. 由于模型已被选择且是用 MLflow 创建的,AMLS Studio 理解这是 MLflow 模型。在点击部署到实时端点选项后,您将指导创建模型的部署。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_008.jpg

图 6.8 – 配置端点

要为您的模型创建部署,请按照图 6.8中的选项操作:

  • 对于azure-ui-endpoint,在名称前或后添加前缀或后缀,使其在您的区域中唯一。

  • 对于UI 创建的端点

  • 计算类型选择为托管

  • 选择基于密钥的认证

  1. 点击下一步并查看所选模型,如图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_009.jpg

图 6.9 – 模型选择

由于您是通过选择模型开始部署的,因此不需要进行其他选择。如图 6.9所示,您已配置了端点以及模型选择,所以下一步是进行部署配置。

  1. 通过点击模型屏幕上的下一步图标,您将进入配置部署的屏幕:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_010.jpg

图 6.10 – 配置部署

作为部署配置的一部分,提供了一个部署名称。对于特定的端点,如理解实时推理和批量评分部分所述,可以创建多个部署。这允许您配置流量模式以测试已部署的模型。

除了部署名称外,您还可以配置评分超时。这是强制评分调用的超时时间。您还可以为部署启用应用程序洞察诊断和数据收集。这将使您能够使用监控选项卡查看托管在线端点的活动。

  1. 一旦配置了部署,您将再次点击下一步按钮,进入环境选择选项卡。鉴于此模型是用 MLflow 创建的,因此不需要进行环境选择。

模型的环境已经创建,如图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_011.jpg

图 6.11 – 环境选择

  1. 现在环境已经建立,应选择模型的计算资源。如图所示,在1

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_012.jpg

图 6.12 – 计算选择

  1. 现在已经选择了计算资源,应配置此部署的流量分配。如果您已更新了模型,最初应将流量设置为0进行部署,确认其正确无误后,然后,如图所示,将新模型的流量更新为100%,因为这是我们第一次模型部署。这应该为旧模型到新模型的 REST API 消费者提供无缝体验。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_013.jpg

图 6.13 – 配置部署流量

  1. 配置流量后,我们可以查看即将发生的部署。通过点击下一步,AMLS Studio 将带您进入引导式模型部署的审查阶段。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_014.jpg

图 6.14 – 检查模型部署

  1. 屏幕上显示的信息将反映您在引导式在线托管部署过程中提供的输入。在确认了前一个屏幕中显示的设置后,点击创建按钮以创建端点以及部署。

下图显示了部署进度。托管在线端点正在配置中,因为配置状态状态创建中,蓝色部署也在配置中。目前,蓝色部署的流量设置为0

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_015.jpg

图 6.15 – 正在进行的托管在线端点部署

  1. 一旦部署完成,端点将显示配置状态状态成功流量分配将是部署的100%,如图所示。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_016.jpg

图 6.16 – AMLS Studio 部署完成

恭喜!您已成功部署了托管在线端点以供消费。回想一下,模型有列 – EmbarkedLocSexPclassAgeFareGroupSize – 作为输入参数。我们可以向 REST 端点发送 JSON,指定输入数据列和我们希望接收预测的数据,以利用 AMLS 使用的 JSON 模式。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_017.jpg

图 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

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_018.jpg

图 6.18 – 配置 ManagedOnlineEndpoint

  1. 端点配置完成后,我们可以调用createupdate方法,传入端点以使用create_or_update命令在工作区中创建端点,如下所示。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_019.jpg

图 6.19 – 利用 ml_client 创建托管在线端点

  1. 端点创建完成后,您就可以创建部署了。对于部署,我们将传递一个名称、上一图创建的端点名称、要部署的模型、用于计算资源的 VM 实例类型以及实例数量。

模型可以直接通过其名称和版本从工作区检索,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_020.jpg

图 6.20 – 根据名称和版本从注册表中获取模型

  1. 托管在线部署需要模型。现在模型已经从工作区检索出来,可以传递给ManagedOnlineDeployment,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_021.jpg

图 6.21 – 配置部署

注意instance_type,这是我们托管在线端点所使用的计算资源。我们在这里指定了使用Standard_F4s_v2,因为我们有很高的灵活性来选择用于服务实时预测请求的计算资源类型。

  1. 部署配置完成后,通过ml_client,可以将托管在线端点部署到初始流量设置为0,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_022.jpg

图 6.22 – 创建部署

  1. 部署成功后,可以使用部署名称将端点的流量设置为 100%。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_023.jpg

图 6.23 – 更新部署流量

  1. 现在端点已经部署,可以检索端点的 URI 和主键来调用 REST API 以获取预测。对于在线端点,我们可以轻松地检索评分 URI 和主键,如下面的代码所示。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_024.jpg

图 6.24 – 检索 URI 和主键

  1. 最后,可以调用 REST 端点以检索预测。下面的代码将 dataframe 传递给make_predictions函数,准备请求,并从受管理的在线端点返回结果。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_025.jpg

图 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文件。这是用于加载模型并向端点发送请求的文件。

下面的代码片段提供了入口脚本所需的信息:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_026.jpg

图 6.26 – score.py 脚本

在前一个图中所示的评分脚本中,有两个必需的函数,initruninit函数告诉 AML 如何加载模型。模型将作为部署配置的一部分提供,模型路径被设置,并利用joblib来加载模型。model全局变量被用来保存模型。当 REST 端点被调用时,run函数将被调用。API 调用的数据将被传递到run函数。在这里,设置了一个字典来检索信息,该信息被转换成一个 dataframe,然后传递给model.predict函数。model.predict的结果被传递到一个列表中,并从函数中返回。

除了评分脚本,我们还需要拥有模型。在上一节中,我们根据名称和版本使用 SDK v2 检索了已注册的模型,但我们也可以在实验中搜索并从中检索模型。这里提供的示例代码展示了如何从实验中搜索模型并下载它。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_027.jpg

图 6.27 – 查找并下载模型

  1. 除了评分脚本,我们还需要提供一个用于部署的环境。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_028.jpg

图 6.28 – 部署环境

在之前的 Jupyter 笔记本中,当我们创建模型时,我们已经创建了一个环境,但我们需要添加azureml-defaults包以确保成功部署到管理的在线端点。因此,我们不是使用已注册的环境,而是创建一个新的环境以传递给部署。

  1. 为了部署一个未使用 MLflow 创建的管理在线端点,关键区别在于部署配置。请注意,图 6*.21* 提供了部署使用 MLflow 创建的模型的代码片段。将此代码与以下片段中的代码进行比较:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_029.jpg

图 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 已安装在您的计算实例上,如图所示。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_030.jpg

图 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,如图所示。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_031.jpg

图 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. 在笔记本中,我们将通过运行以下代码来创建目录:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_032.jpg

图 6.32 – 目录创建

  1. 对于托管在线端点,我们还将创建一个score.py文件。score脚本将利用我们的模型,并提供之前score.py文件提供的initrun函数。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_033.jpg

图 6.33 – score.py 文件

  1. 接下来,我们将创建端点.yml文件。我们可以创建一个包含名称和授权模式所需属性的基文件。授权模式可以指定为密钥或aml_token。基于密钥的认证不会过期,但 Azure ML 基于令牌的认证会。我们将继续使用基于密钥的认证。

注意

当使用aml_token时,您可以通过运行az ml online-endpoint get-credentials命令来获取一个新的令牌。

  1. 运行命令以生成与auth_mode相同的键值的endpoint.yml文件,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_034.jpg

图 6.34 – 托管在线端点配置

请记住将您的名称更新为唯一的名称;如果titanic-managed-online-endpoint已在您的区域部署,您的部署将失败。

  1. 对于托管在线端点部署,我们还将生成一个deployment.yml文件。在此文件中,我们需要指定模型、评分脚本、环境和用于模型部署的实例类型。

创建deployment.yml文件:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_035.jpg

图 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 工作区的端点部分访问,如下所示。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_036.jpg

图 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}]}
    

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_06_037.jpg

图 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. 在计算屏幕上,选择您的计算实例并选择启动

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_001.jpg

图 7.1 – 开始计算

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

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

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

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

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_002.jpg

图 7.2 – 刷新图标

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

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_003.jpg

图 7.3 – Azure-Machine-Learning-Engineering

让我们接下来使用 Studio 部署用于批量推理的模型。

使用 Studio 部署用于批量推理的模型

第三章“在 AMLS 中训练机器学习模型”中,我们训练了一个模型并将其注册到 Azure 机器学习工作区。我们将部署该模型到管理的批量端点进行批量评分:

  1. 导航到你的 Azure 机器学习工作区,从左侧菜单栏选择模型以查看你工作区中注册的模型,并选择titanic_survival_model_,如图图 7**.4所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_004.jpg

图 7.4 – 工作区中注册的模型列表

  1. 点击部署,然后选择部署到批处理端点,如图图 7**.5所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_005.jpg

图 7.5 – 将所选模型部署到批处理端点

这将打开部署向导。为所需的字段使用以下值:

  • titanic-survival-batch-endpoint

  • 模型:保留默认的titanic_survival_model_

  • titanic-deployment

  • 环境:对于所选模型,评分脚本和环境为你自动生成

  • cluster cpu-cluster

审查你的批处理部署规范,并点击创建部署,如图图 7**.6所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_006.jpg

图 7.6 – 创建批处理部署

  1. 一分钟左右,你应该会看到一个页面显示你的批处理端点已成功部署。它还包含有关你的批处理端点的一些信息,如图图 7**.7所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_007.jpg

图 7.7 – 成功的批处理部署

现在你已经有一个批处理端点正在运行,让我们创建一个调用你的端点的评分/推理作业。为此,请按照以下步骤操作:

  1. 在左侧菜单栏中点击端点,然后点击你最近创建的批处理端点,如图图 7**.8所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_008.jpg

图 7.8 – 已部署批处理端点列表

  1. titanic-survival-batch-endpoint页面,选择作业标签,如图图 7**.9所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_009.jpg

图 7.9 – titanic-survival-batch-endpoint 作业标签

  1. 点击创建作业,并在向导中为字段选择相应的值,如图图 7**.10所示。完成后点击创建。请注意,部署已为你预选,但请确保预选了正确的部署。你还应该有一个名为titanic-test-data的测试数据集,该数据集在第三章**,在 AMLS 中训练机器学习模型时创建。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_010.jpg

图 7.10 – 创建批评分作业

  1. 根据你在上一步中选择的测试数据集的大小,作业完成可能需要一些时间。一旦完成,你将看到一个表示titanic-survival-batch-endpoint批评分作业的管道,如图图 7**.11所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_011.jpg

图 7.11 – titanic-survival-batch-endpoint 的批量评分作业

  1. 现在,为了查看评分结果,点击管道中的 batchscoring 步骤,在右侧点击 作业概述,选择 输出 + 日志 选项卡,最后点击 显示数据输出,如图 7.12 所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_012.jpg

图 7.12 – 批量评分结果

  1. 点击后,predictions.csv 文件已被保存。点击此文件并选择 编辑 选项卡以查看评分结果,如图 7.13 所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_013.jpg

图 7.13 – 查看批量评分结果

在本节中,你学习了如何使用工作室将现有模型部署到管理端点进行批量推理。在下节中,我们将向你展示如何使用 Python SDK 将模型部署到管理端点进行批量评分。

通过 Python SDK 部署用于批量推理的模型

在本节中,我们将通过以下步骤使用 Python SDK 将现有模型部署到管理端点进行批量推理:

  1. 前往 ml.azure.com

  2. 选择你的工作区。

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

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_014.jpg

图 7.14 – 计算实例图标

  1. 计算 屏幕上,选择你的计算实例并选择 启动

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_015.jpg

图 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 工作区:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_016.jpg

图 7.16 – 导入所需的库并连接到 Azure 机器学习工作区

  1. 图 7.17 中显示的代码片段展示了如何创建批量端点:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_017.jpg

图 7.17 – 创建用于推理的批量端点

  1. 图 7.18 中所示的代码片段展示了如何从工作区检索现有模型以及如何创建批量部署。批量部署必须指定批量端点、训练模型以及用于评分的计算集群,以及其他部署参数:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_018.jpg

图 7.18 – 创建批量部署

  1. 现在,您的批量端点已准备好调用,您将传递一些测试数据到端点,如图图 7.19所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_019.jpg

图 7.19 – 创建批量部署

  1. 图 7.20 中所示的代码片段展示了在上一步骤中提交的批量评分作业所需的 Python 代码:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_020.jpg

图 7.20 – 创建批量部署

  1. 点击上一步骤的输出链接将打开显示批量评分作业的工作区,如图图 7.21所示。您可以遵循上一节的步骤 9步骤 10来查看结果。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_07_021.jpg

图 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。如果有旧版本,请使用以下升级命令升级到最新版本:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_001.jpg

图 8.1 – 安装或升级责任 AI 工具箱

  1. 现在,让我们升级依赖项:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_002.jpg

图 8.2 – 升级 pandas 库到最新版本

  1. 重新启动内核并清除所有输出。一旦安装了库,重新启动内核以反映已安装的库总是一个好习惯。一些包强制我们重新启动内核才能生效。

  2. 我们现在将加载用于在笔记本中使用的库。责任 AI 仪表板用于生成一个漂亮的用户界面,以便与之交互并进行假设分析,以及其他类型的分析,包括错误分析特征排列反事实分析,针对创建的模型。

对于RAIInsights,这是我们进行所有计算以生成仪表板的地方。执行和分析模型并了解模型正在做什么通常需要时间。在责任 AI 仪表板上显示的所有内容都将由RAIInsights库计算得出。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_003.jpg

图 8.3 – 导入责任 AI 库

  1. 接下来,我们创建一个用于应用责任 AI 的样本回归模型。让我们导入shapsklearn库来构建我们的模型。在这里,我们将加载机器学习库以及用于分割训练和测试数据的库。稍后,我们将数据集分成两部分:一部分用于训练,另一部分用于测试。通常,80%用于训练,20%用于测试。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_004.jpg

图 8.4 – 导入模型的库

  1. 现在,让我们加载样本数据集并分割用于训练和测试的数据。同时,让我们指定用于目标特征的列,或者标记要预测的列。在这里,我们正在加载一个用于糖尿病的样本数据集。然后,我们将预测列指定为'y'。有时,它被称为target_feature。然后,我们使用剩余的列作为特征来训练模型。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_005.jpg

图 8.5 – 加载样本数据集

  1. 分割数据并将其分配给不同的数据框进行建模。通常,在建模时,训练数据被分割成两个数据集,一个用于训练,一个用于测试。接下来,预测列,也称为标签或目标,也被分割成训练和测试。以下截图显示了用于建模的特征。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_006.jpg

图 8.6 – 分割数据以进行训练和测试

现在我们已经构建了模型,我们需要运行它。在使用负责的人工智能工具箱分析模型的公平性、隐私、可靠性和偏差之前,这是必要的。偏差意味着我们希望我们使用的类别有相等的记录。例如,如果我们使用包含种族或性别特征的数据库,我们必须确保每个代表组的数据量相等,以避免偏差。

让我们现在按照以下步骤创建负责的人工智能代码:

  1. 首先,在我们将模型传递给RAIInsights以计算公平性、偏差和其他错误分析之前,我们需要训练模型。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_007.jpg

图 8.7 – 模型配置和训练

  1. 模型已准备就绪。下一步是应用负责的人工智能。让我们配置RAIInsights的详细信息。

我们需要传递以下参数:modeltrain_datatest_datatarget_feature、模型类型(例如,regressionclassification)以及categorical_features

因此,RAIInsights将生成以下内容:

  • 错误分析仪表板

  • 可解释性仪表板

  • 公平性仪表板

  • 负责的人工智能仪表板

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_008.jpg

图 8.8 – 调用 RAIInsights

  1. 下一步是调用可解释性、错误分析和公平性,并构建仪表板:

    • IntepretML用于理解列如何影响模型做出的预测。IntepretML是一个开源软件包。在这里,我们结合所有开源软件包的输出,使其无缝,并在ResponsibleAIDashboard中展示。

    • 为此使用Error Analysis软件包。

    • DiCE是我们用来进行此分析的开源软件包。

    • EconML开源软件包。此软件包允许我们更改条件并查看影响。例如,如果我们向客户细分市场引入新产品或向公司引入新策略,会有什么影响?

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_009.jpg

图 8.9 – 添加解释器、错误分析和反事实包

现在,让我们进行可解释性、错误和反事实分析:

  1. 通常,进行所有计算需要一些时间。根据模型类型和数据集的大小,请做好在这里花费一些时间的准备。根据机器学习类型,使用EconML进行的因果分析也将用于假设分析。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_010.jpg

图 8.10 – 计算负责的 AI 计算洞察

  1. 接下来,我们需要构建负责的 AI 仪表板。工具箱将所有输出汇总到仪表板中,并提供一个地方进行分析。请记住,并非所有原则都已实施,SDK 的研发仍在进行中。图 8.11 展示了负责的 AI 仪表板的创建。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_011.jpg

图 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。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_012.jpg

图 8.12 – 错误分析仪表板

此仪表板提供选项保存错误分析以供进一步分析或与他人共享。如果我们需要与其他数据科学家或领域专家共享信息以了解模型性能,此功能非常有用。

以下截图显示了选择热图的错误分析屏幕:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_013.jpg

图 8.13 – 热图错误分析

在这个热图中,我们需要选择我们想要进行错误分析的特征。一旦我们选择了特征,系统将分析错误百分比。

提供了分位数分箱分箱阈值的选项。

以下截图显示了特征列表。本节显示了哪些特征已被选择,以及每个特征对预测的重要性。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_014.jpg

图 8.14 – 特征列表

此功能说明了列或特征对预测的重要性。有选项可以更改由负责 AI 仪表板创建的决策树的最大深度和叶子数,以及分析一个叶子中样本的最小数量。

可解释性仪表板

现在,让我们看看仪表板的可解释性部分。这是分析每个特征并显示特征的重要性和影响的地方。顶级特征要么是聚合的,要么可以单独进行分析。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_015.jpg

图 8.15 – 聚合特征重要性

在前面的截图中,您可以查看聚合的特征重要性。

选择单个特征重要性以逐行分析数据。然后,选择要分析的数据行,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_016.jpg

图 8.16 – 选择数据点进行特征重要性分析

一旦选择了特征数据点,向下滚动以查看图表。以下图表显示了特征重要性和其对所选行的影响。对于数据集中的每一行,您可以通过选择一行来分析数据集。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_017.jpg

图 8.17 – 单个特征重要性图

现在点击个体条件期望(ICE)图来更改图表。ICE 图将显示所选特征的所有行,并显示每一行对模型的影响程度。

在选择个体条件期望(ICE)图后,您应该看到图 8.17中所示的内容。x 轴应该是所选特征,而 y 轴是预测值。点击特征下拉菜单并选择特征以查看其影响。此外,还有设置最小和最大步数的选项。要获取更多信息,请点击如何阅读****此图表

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_018.jpg

图 8.18 – 个体条件期望(ICE)图

现在让我们看看模型统计信息。

模型统计信息使我们能够分析预测值分布、模型性能和模型指标。还有在队列和数据集之间切换的选项。选择 y 值以查看数据集中的错误、预测的 Y 值(模型预测的列的标签)以及真实的 Y 值(训练数据集中提供的列的标签)。这些选项使我们能够了解模型性能。

您还可以交换轴以在 x 轴上显示错误并在 Y 轴上显示预测值。此外,如果您点击队列,您可以选择数据集和要绘制的特征,并查看模型的性能。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_019.jpg

图 8.19 – 模型统计

接下来,我们将查看负责任 AI 仪表板上的数据探索器功能。

数据探索器

数据探索器是分析预测值、误差和特征的另一个可视化工具。您可以使用聚合或单个特征。它还允许您为假设分析选择预测特征和训练特征。

图 8.20 展示了年龄如何分组或分箱成块的情况。x 轴是索引,y 轴是年龄组,可以是年龄数据点或年龄的箱。您可以选择选择聚合图单个数据点来可视化聚合图和单个图之间的差异。箱形图清晰地显示了异常值的位置,并显示了绘图点的范围。

我们可以将x轴从索引更改为预测的y值或真实的y值以查看模式。还有更改箱数的选项。在以下示例中,我们选择了五个箱。此外,如果您点击年龄,您还可以更改特征以查看预测值的变化。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_020.jpg

图 8.20 – 聚合图

数据探索器允许我们选择预测值和原始值,并绘制聚合图或单个散点图以查看值如何对齐或相交。在下面的图表中,y 轴是年龄,x 轴是索引,预测结果是一个散点图。您可以选择不同的队列来查看不同的值。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_021.jpg

图 8.21 – 单个值的散点图

上述图表提供了一种可视化模型预测值和误差值的方法。这使我们能够构建一个更准确、更现实的更好模型。

假设反事实

现在,我们可以更改数据点并点击创建假设反事实。假设分析允许我们选择预测因子并与特征进行比较,以查看对结果的影响。我们还可以更改索引和年龄,切换到查看预测的y值或真实的y值以及特征以查看反事实。然后,我们可以选择索引值并选择一个来查看图表如何变化。

在以下屏幕截图中,我们可以看到一个反事实图表,并通过更改特征来分析图表。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_022.jpg

图 8.22 – 反事实

选择索引然后点击创建假设反事实以查看分布图中的特征百分比。您还可以保存图表。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_023.jpg

图 8.23 – 假设反事实

在下一节中,我们将看到如何使用 SDK 分析公平性。

公平性

公平性是我们需要在涉及人的用例中调查的一个主题。应采取适当的预防措施来确定数据集是否公平。在 Azure ML 中,使用负责任的 AI 工具箱,我们可以创建一个公平性仪表板。为此,首先,我们需要知道哪些特征需要公平,例如性别和种族。一旦我们知道这一点,我们就可以创建一个仪表板,如图图 8**.24所示。

在本节中,我们将使用样本数据集创建一个公平性仪表板:

  1. 前往 Azure ML Studio UI。

  2. 启动计算实例。

  3. 作者部分点击笔记本

  4. 使用 Python 3.8 创建一个新的笔记本,以 Azure ML 作为内核。

  5. 创建一个名为FairnessDashboard的新笔记本。

  6. 导入所有必需的库:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_024.jpg

图 8.24 – 公平性导入

  1. 接下来,我们将加载样本数据集:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_025.jpg

图 8.25 – 获取样本数据

  1. 然后,我们将指定敏感特征,然后使用分类列和标签编码器将字符串转换为数字:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_026.jpg

图 8.26 – 特征工程

  1. 现在我们已经处理好了特征工程,下一步是将数据集分割为训练和测试。我们将数据集分割为 80%用于训练和 20%用于测试:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_027.jpg

图 8.27 – 分割数据以进行训练和测试

  1. 接下来,配置训练:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_028.jpg

图 8.28 – 训练

使用数据集训练模型。在这里,我们使用逻辑回归进行建模。

  1. 接下来,让我们创建一个公平性仪表板。一个公平性仪表板至少需要这三个参数:

    • 敏感特征 – 包含敏感数据的列,例如性别或种族

    • 原始 标签值

    • 预测值 进行分析

点击由负责的 AI SDK 创建的 URL。将打开一个新的网页。按照仪表板中的导航选择敏感列,查看数据如何分布在这些特征上。这里的主要目的是提供关于特征如何与敏感信息平衡的见解。例如,如果我们有包含男性和女性数据点的数据,我们想确保男性和女性在数据集中有相同数量的代表性。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_029.jpg

图 8.29 – 创建公平性仪表板

这里是仪表板的主页:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_030.jpg

图 8.30 – 公平性仪表板 – 简介页面

  1. 点击开始以查看分析公平性的选项。

  2. 该过程的第一个步骤是选择敏感特征。在下面的屏幕截图中,我们有两个列,性别种族。在性别列中,我们有两个类别,男性女性。对于种族,我们有白人黑人亚洲-太平洋岛民其他美洲印第安人-爱斯基摩人。让我们首先选择性别来检查敏感特征,然后点击下一步

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_031.jpg

图 8.31 – 公平性仪表板 – 01 敏感特征

  1. 现在,让我们选择用于我们分析的性能指标。性能指标选项如下:

    • 准确率

    • 平衡准确率

    • F1 分数

    • 精确率

    • 回忆

这些指标的定义在图 8**.32中提供。对于我们来说,我们将选择准确率作为指标,以性别作为我们分析的敏感列。点击下一步进入公平性指标

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_032.jpg

图 8.32 – 公平性仪表板 – 02 性能指标

  1. 接下来是最重要的筛选之一。选择适合我们分析的正确公平性指标。在下面的屏幕截图中,你可以看到选择。在我们的例子中,我们选择人口统计学差异。然后点击下一步来查看分析图表。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_033.jpg

图 8.33 – 公平性仪表板 – 03 公平性指标

  1. 在下一个屏幕上,我们可以更改这些选择,查看公平性指标是如何计算的,并检查哪些敏感特征被选中以及它们的公平性如何。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_034.jpg

图 8.34 – 公平性结果

前面的图表显示,模型中女性的代表性不足,这也表明模型可能对男性有偏见。因此,现在我们可以回过头来看看我们是否可以得到一个更平衡的数据集,以使我们的模型更加公平。尝试切换图表到假阳性和假阴性率,以深入查看假阳性和假阴性的比率。你还可以更改性能指标敏感特征公平性指标并分析公平性。随着这些选项的变化,图表将反映这些变化。这个工具提供了一个单一的地方来分析数据以查找偏差和公平性。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_08_035.jpg

图 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 实施流程:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_001.jpg

图 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. 在左侧菜单中,选择如图所示新建组织

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_002.jpg

图 9.2 – 新组织

  1. 这将打开一个新窗口,用于开始创建 Azure DevOps 组织的流程。然后,点击继续按钮。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_003.jpg

图 9.3 – 开始使用 Azure DevOps

  1. 这将带您进入创建 Azure DevOps 组织的下一屏幕:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_004.jpg

图 9.4 – 创建您的 Azure DevOps 组织

Azure DevOps 组织必须是唯一的,因此您需要使用尚未被占用的名称创建自己的组织。如图图 9.4所示,填写以下信息:

  1. 命名您的组织。需要一个唯一的组织。在先前的示例中,我们选择了mmxdevops

  2. 存储项目的位置 – 我们已选择美国中部

  3. 输入屏幕上显示的字符 – 我们已输入Dp5Ls进行验证。

  4. 点击继续按钮。

  5. 下一屏将要求您填写项目名称字段,您的代码和 MLOps 管道将在此处存放。如图 9.5*所示,我们已选择私有项目。如果您在组织中工作,您可能会看到一个企业项目的选项。如果此选项对您不可用,请创建一个私有项目。创建公共项目将允许公众访问您的项目。私有项目将允许您添加您选择的用户到项目中,如果您想分享它。最后,点击**+ 创建项目**按钮。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_005.jpg

图 9.5 – 创建 Azure DevOps 组织

  1. 现在您的项目已经创建,您将有一个地方来存放 MLOps 所需的关键资源。

Azure DevOps 项目包括以下两个关键组件:

  • Repos:存储您的代码的地方

  • Pipelines:创建您的 MLOps 管道自动化的地方

我们将利用这些,如图 9.6*所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_006.jpg

图 9.6 – 创建 Azure DevOps 组织

我们将在本章后面探索利用ReposPipelines

恭喜您 – 您已设置好 Azure DevOps 组织和项目。现在,是时候深入创建用于存放代码的仓库了。

图 9.6中,你可以看到Repos是菜单选项之一。选择此选项即可进入 Azure DevOps 项目的仓库部分,如图 9.7*所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_007.jpg

图 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 所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_008.jpg

图 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 项目中的仓库,如图中所示以下截图:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_009.jpg

图 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 工作空间。点击资源,如图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_010.jpg

图 9.10 – Azure 门户中的 AML 工作空间图标

  1. 点击资源,我们可以看到 AML 工作空间的概览包括密钥 保管库信息:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_011.jpg

图 9.11 – AML 工作空间概览

点击密钥保管库名称将直接带我们到 Azure 密钥保管库,如图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_012.jpg

图 9.12 – Azure 密钥保管库概览

  1. 目前,您没有权限查看机密,因此请点击左侧的访问策略菜单,如图所示。这将显示访问策略选项,如图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_013.jpg

图 9.13 – Azure 密钥保管库访问策略

  1. 点击如图图 9.14所示的**+ 创建将提供分配权限的选项。在机密权限下,勾选获取**、列出设置删除,然后点击下一步

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_014.jpg

图 9.14 – 设置机密权限选项

  1. 然后,您可以通过名称或电子邮件地址自行搜索以分配权限,如图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_015.jpg

图 9.15 – 通过电子邮件搜索以分配 Azure 密钥保管库所选权限

  1. 在如图图 9.16所示的文本框中,输入您的电子邮件地址并找到自己以分配访问权限:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_016.jpg

图 9.16 – 定位您的电子邮件地址

  1. 找到您自己后,选择您的名称,然后点击下一步按钮。

  2. 然后,您将获得选择应用程序的选项 - 在应用程序(可选)部分不要选择任何内容,然后点击下一步

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_017.jpg

图 9.17 – 跳过应用程序(可选)

  1. 最后,在审查+创建部分下点击创建按钮。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_018.jpg

图 9.18 – 创建 Azure 密钥保管库权限

  1. 现在您有权限查看和创建密钥,请转到左侧菜单中的密钥选项:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_019.jpg

图 9.19 – 左侧菜单中的“密钥”选项

  1. 点击此处所示的**+ 生成/导入**按钮:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_020.jpg

图 9.20 – 生成新的密钥

  1. 这将显示创建密钥的屏幕,如图下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_021.jpg

图 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. 从左侧菜单中选择管道蓝色火箭图标,并选择选项,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_024.jpg

图 9.24 – 库选项

  1. 选择选项,您将提示创建一个新的变量组,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_025.jpg

图 9.25 – 新变量组

  1. 点击devops-variable-group-dev,并启用从 Azure 密钥保管库链接机密作为变量选项,如下截图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_026.jpg

图 9.26 – 变量组创建

  1. 您需要点击您的 Azure 订阅的授权按钮。

  2. 当选择要链接到变量组的 Azure 密钥保管库时,请确保将dev密钥保管库与devops-variable-group-dev变量组链接,以及将qa密钥保管库与devops-variable-group-qa变量组链接。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_027.jpg

图 9.27 – 变量组链接到 Azure 密钥保管库

  1. 完成密钥保管库的授权后,点击**+ 添加**图标,将您的密钥保管库中的机密添加到您的 Azure DevOps 变量组中,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_028.jpg

图 9.28 – 向 Azure DevOps 变量组添加变量

  1. 点击**+ 添加**图标,您将提示从已链接到变量组的 Azure 密钥保管库中选择机密,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_029.jpg

图 9.29 – 选择 Azure 密钥保管库变量

图 9.22图 9.23中选择您填充的三个变量,并点击devops-variable-group-dev应链接到您的dev Azure 密钥保管库,而devops-variable-group-qa应链接到您的qa Azure 密钥保管库。

  1. 请务必点击每个变量组的保存图标:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_030.jpg

图 9.30 – 保存 Azure DevOps 变量组

到目前为止,您应该确保已链接两个变量组,并且每个变量组应链接到特定环境的密钥保管库。

  1. 点击 Azure DevOps 左侧菜单中的 图标将弹出您已填充的 变量组,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_031.jpg

图 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 项目的左侧面板中的 管道 部分选择 环境 图标,然后选择 新建环境

这将弹出一个新的弹出窗口,如下截图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_032.jpg

图 9.32 – Azure DevOps 环境

  1. 对于名称,键入 qa,将资源设置为 ,然后选择 创建 按钮。

  2. 在环境的右上角,您将看到一个带有三个点的 添加资源 按钮,如下图所示。点击三个点:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_033.jpg

图 9.33 – 添加资源

  1. 点击三个点,转到 审批和检查,如下截图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_034.jpg

图 9.34 – 审批和检查

  1. 点击 审批和检查 选项后,将显示一个新屏幕,允许您输入您的审批者。

将显示一个屏幕,添加第一个检查,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_035.jpg

图 9.35 – 审批和检查

  1. 选择 审批,这将弹出如下的 审批 配置:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_036.jpg

图 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,如图下截图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_037.jpg

图 9.37 – Visual Studio 商店

  1. 这将显示以下 AML Azure DevOps 扩展:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_038.jpg

图 9.38 – Azure DevOps ML 扩展

  1. 点击如图 9.38 所示的图标将显示有关扩展的详细信息。

  2. 点击“免费获取”按钮开始安装过程。这将带您进入下一个屏幕,其中正在验证您是否有权限在您的 Azure DevOps 组织中安装扩展,如图下截图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_039.jpg

图 9.39 – 验证安装权限

  1. 权限确认后,您将被提示为您的 Azure DevOps 组织安装,如图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_040.jpg

图 9.40 – 安装选项

  1. 点击“安装”按钮,您将被提示现在前往您的 Azure DevOps 组织,如图下截图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_041.jpg

图 9.41 – 安装确认

  1. 点击前面的截图所示的“进入组织”按钮。这将带您进入您的 Azure DevOps 组织。

  2. 然后,点击您在 Azure DevOps 组织中的项目,如图下截图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_042.jpg

图 9.42 – Azure DevOps 项目

  1. 在您的项目中,在左侧菜单中,您可以在菜单中看到“项目设置”。点击“项目 设置”图标。

  2. 点击“项目设置”,您将在菜单中看到“服务连接”。点击“服务连接”图标。

  3. 点击屏幕左上角的创建服务连接图标;这将打开如图所示的新服务连接窗口:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_043.jpg

图 9.43 – 新服务连接

  1. 在这里点击Azure 资源管理器选项,滚动到页面底部,然后点击下一步

这将打开另一个屏幕,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_044.jpg

图 9.44 – 自动创建服务主体

为了利用服务主体(自动)选项,你需要在你的 Azure 订阅中拥有创建服务主体实例的授权。如果你在一个此选项未被授权的环境中工作,你将能够从你的 Azure 订阅管理员那里请求一个服务主体,他们可以提供你创建服务连接所需的信息。请参考以下截图:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_045.jpg

图 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实例中,你会看到如下笔记本:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_046.jpg

图 9.46 – 第九章 MLOps 笔记本

打开笔记本,并逐步通过代码,执行每个单元格,并为你的 MLOps 流水线创建所需的文件。

我们首先通过连接到我们的 AML 工作区并确保我们的数据准备好被我们的 MLOps 流水线利用来开始笔记本。通常,演示包括你将作为流水线一部分利用的数据,但在现实世界的流水线中,你的数据将驻留在不在你的 MLOps 文件夹中的某个地方,因此我们将从文件夹中获取数据,并在尚未注册的情况下进行注册。

我们将创建一个 AML 流水线,为了实现这一点,我们为流水线中的每个步骤创建单独的文件夹。我们将创建一个数据准备、模型训练和模型评估的步骤。我们将利用我们的 Azure DevOps 流水线来处理部署,但我们将创建 AML 流水线的.yml文件定义,并且我们还创建一个文件夹来存放该流水线定义,以及一个文件夹来存放我们的conda环境.yml文件。

我们将为 AML 流水线创建一个计算集群以利用它。我们可以争论说这应该包含在 MLOps 流水线中,但这个资源将根据我们的流水线需求自动扩展和缩减,因此我们将这个资源留在了 Azure DevOps 流水线之外——然而,你当然可以将这个流水线扩展以包括这个功能。

在创建用于处理环境的conda .yml文件以及 AML 流水线中每个步骤的脚本之后,我们在 AML 流水线作业中将代码拼接在一起,这在第七章中有所介绍,部署 ML 模型进行 批量评分

这是创建流水线利用环境的脚本:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_047.jpg

图 9.47 – 环境信息 conda .yml 文件

复习本章中流水线中的每个步骤以及笔记本中的代码,因为它创建了一个 AML 作业流水线来创建模型并注册模型。

注意,第一步将期望一个原始数据参数,这将告诉代码在哪里找到titanic.csv文件。除了源位置外,流水线定义还指示数据将存储的位置。这个脚本对于为你的流水线提供通用的数据利用解决方案非常有帮助。AML 流水线中的每个步骤都有一组定义好的输入和输出参数,这些参数在流水线定义.yml文件中捕获,该文件由笔记本在章节文件夹目录下的src目录中的流水线目录生成。通过审查此代码,你可以看到脚本中的输入和输出是如何在管道定义中指定的:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_048.jpg

图 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文件的截图:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_049.jpg

图 9.49 – dev AML 工作区托管在线端点.yml 文件

这里显示的文件提供了在dev环境中部署时托管在线端点将使用的名称和授权模式。请务必更新第 3 行,因为名称必须在部署 AML 工作区的 Azure 区域中是唯一的。

下面的截图显示了用于部署到托管在线端点的model_deployment-dev.yml文件。这里的endpoint_name值应与托管在线端点指定的名称匹配:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_050.jpg

图 9.50 – 将 dev AML 工作区部署到托管在线端点的 yml 文件

正如dev环境中的托管在线部署名称应该匹配一样,它们在qa环境中也需要匹配。

这里是create-endpoint.yml文件的截图。这是用于在qa AML 工作区中创建托管在线端点部署的文件:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_051.jpg

图 9.51 – qa AML 工作空间托管在线端点.yml 文件

如图中所示,qa环境和dev环境。

这里是model_deployment.yml文件的截图:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_052.jpg

图 9.52 – qa AML 工作空间部署到托管在线端点 yml 文件

如图中所示,此文件将在qa环境的在线部署中使用,并将转到endpoint_name以创建部署,因此务必更新create-endpoint.yml文件。

这些文件在 Azure DevOps 管道定义中被利用,我们将在下一节讨论。

以下是从AzureDevOpsPipeline.yml文件中摘录的片段,该文件协调 MLOps 管道:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_053.jpg

图 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 部署的值:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_054.jpg

图 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 中运行的命令略有修改,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_055.jpg

图 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

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_056.jpg

图 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环境中删除旧部署。

一旦运行您的管道,您将能够从其详细信息中看到托管在线端点的标签信息,如图所示。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_057.jpg

图 9.57 – 托管在线端点标签

每次运行此代码时,都会根据部署时间的纪元生成一个新的部署名称。这确保了对于给定的部署有一个唯一的名称。拥有这个唯一的名称可以确保在部署在线部署时不会发生冲突。在线部署成功后,我们将流量更新到最新的在线部署,然后删除旧的在线部署。此图显示了将部署到托管在线端点的情况:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_058.jpg

图 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 的左侧面板中,选择管道,您将看到以下屏幕:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_059.jpg

图 9.59 – 创建您的第一个 Azure DevOps 管道

  1. 点击创建管道按钮开始过程,这将弹出一个窗口:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_060.jpg

图 9.60 – 选择您的代码位置

  1. 在上一节准备您的 MLOps 环境中,您将代码放入了 Azure DevOps 中的代码仓库。从前面的屏幕截图中选择Azure Repos Git选项,这将要求您选择您的仓库,如图下所示。在此处选择您的mlops仓库。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_061.jpg

图 9.61 – 选择您的仓库

  1. 接下来,选择现有 Azure 管道 YAML 文件选项,以使用您通过运行笔记本并将其检入 Git 仓库创建的管道:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_062.jpg

图 9.62 – 配置您的管道

  1. 选择此选项将带您进入下一个屏幕,如图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_063.jpg

图 9.63 – 选择您的 YAML 文件

  1. 路径下拉菜单中,导航到**/Chapter09/src/AzureDevOpsPipeline.yml**文件,如图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_064.jpg

图 9.64 – 获取 AzureDevOpsPipeline.yml 文件的路径

  1. 在选择AzureDevOpsPipeline.yml文件后,点击继续选项。这将显示 Azure DevOps 管道的源代码,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_065.jpg

图 9.65 – 获取你的 YAML

在前面的截图中,点击运行按钮。当此管道运行时,它将利用你的服务连接。要使用你的服务连接,你需要提供运行权限。

  1. 点击aml-dev服务连接:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_066.jpg

图 9.66 – 向 Azure DevOps 提供权限

  1. 在点击查看选项后,你将为管道运行提供权限。点击以下截图所示的允许按钮:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_067.jpg

图 9.67 – 允许管道使用服务连接

  1. 通过在管道进展过程中为每个所需的权限选择允许,提供适当的权限,以便管道可以执行。

  2. 当管道执行时,你可以看到显示工作负载正在进行的图标,如下截图所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_068.jpg

图 9.68 – 管道执行

  1. 点击DevTrainingPipeline阶段将带你到运行详情,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_069.jpg

图 9.69 – 管道详情

  1. 当初始管道启动时,名为mmchapter9titanic的模型可能尚不存在,这取决于你是否从 AML 工作区运行了管道。在这种情况下,在 Azure DevOps 中,如果你点击获取初始模型版本任务,你会看到以下错误消息:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_070.jpg

图 9.70 – 初始模型查找

由于模型尚不存在,这是正确的。在这种情况下,我们在管道中将模型版本设置为0以继续成功的管道运行。

  1. 注意,以下截图显示了将你的 AML 工作区的dev实例作为一个管道:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_071.jpg

图 9.71 – AML 管道运行

当你的 Azure DevOps 管道遇到deploydevmodel时,如果失败,可能是因为你所在区域的端点名称已被占用。如果你在deploydevmodel任务上有失败的作业,请查看 Azure DevOps 中的消息内容。它可能会说,已经存在具有此名称的端点,端点名称必须在区域内唯一。尝试一些 其他名称。**

如果是这样,更新你的.yml文件以利用不同的端点名称。

dev环境中模型部署完成后,管道将请求批准将模型提升到下一个环境。

一旦dev阶段完成,将请求批准,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_072.jpg

图 9.72 – Azure DevOps 管道请求权限

  1. 点击QAPromote模型阶段以检索待处理阶段并批准或拒绝将模型移动到qa环境。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_073.jpg

图 9.73 – 待批准的 QA 推广

  1. 点击审查按钮,您可以选择为模型推广选择拒绝批准,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_074.jpg

图 9.74 – QA 推广批准

一旦 QA 推广获得批准,模型就可以部署到qa环境中。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_075.jpg

图 9.75 – qa 环境部署

  1. 随着您的管道运行,您可以在您的dev AML 工作区中审查注册的模型。随着管道的执行,前往您的qa AML 工作区,您将看到一个注册的模型,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_076.jpg

图 9.76 – qa 环境的注册模型

  1. 除了注册的模型外,您还可以按以下方式审查您的管理在线端点:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_077.jpg

图 9.77 – qa 环境的已部署在线端点

  1. 此图展示了在qa环境中审查管理的在线端点。点击屏幕上的名称可以为您提供有关管理在线端点的详细信息。

在管理在线端点内部,您将看到您的模型部署实例,如下所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_078.jpg

图 9.78 – 在 qa 环境中管理的在线端点部署

  1. 部署名称基于纪元。每次在qa AML 工作区中部署模型时,都会检查标签属性:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_09_079.jpg

图 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. 计算 屏幕上,选择你的计算实例并选择 启动

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_001.jpg

图 10.1 – 启动计算

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

  2. 在前一章中,我们克隆了 Git 仓库;如果你还没有这样做,请继续按照以下步骤操作。如果你已经克隆了仓库,请跳转到 步骤 7

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

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

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_002.jpg

图 10.2 – 刷新图标

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

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_003.jpg

图 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所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_004.jpg

图 10.4 – 创建新的数据标注项目

  1. 继续为您的项目命名,然后选择媒体类型图像,选择标注任务类型对象识别(边界框),并点击下一步,如图图 10.5所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_005.jpg

图 10.5 – 填写项目详情

  1. 您可以跳过下一步,直接转到选择或创建数据并点击创建来创建您的数据集。选择一个名称,并为您的图像数据资产输入描述,然后点击下一步,如图图 10.6所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_006.jpg

图 10.6 – 创建图像数据资产

  1. 选择从本地文件,如图图 10.7所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_007.jpg

图 10.7 – 选择图像数据源

  1. 选择用于上传图像的数据存储,如图图 10.8所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_008.jpg

图 10.8 – 选择你的图像的存储类型和数据存储

  1. 步骤 1train文件夹中点击,选择如图图 10.9所示的全部图像,然后点击下一步

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_009.jpg

图 10.9 – 从你的本地驱动器上传图像文件

  1. 审查你的图像数据资产详情,并点击创建

  2. 在此步骤中,你需要为图像中找到的每个对象添加标签,在这个例子中将是TwoThreeFour等,直到Ten,以及SoldierQueenKing,如图图 10.10所示。然后点击下一步

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_010.jpg

图 10.10 – 为所有图像中的对象添加标签

  1. 你可以跳过标注说明(可选),转到ML 辅助标注(可选)。确保ML 辅助标注(可选)被启用,如图图 10.11所示,然后点击创建项目https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_011.jpg

图 10.11 – 审查和创建数据标注项目

  1. 点击项目列表中你刚刚创建的项目,如图图 10.12所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_012.jpg

图 10.12 – 数据标注项目列表

  1. 你可以看到仪表板,它提供了数据标注功能的不同选项,以协助标注过程。继续点击顶部附近的标注数据,如图图 10.13所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_013.jpg

图 10.13 – 数据标注仪表板

  1. 在此步骤中,你将通过在图像中找到的对象周围绘制边界框并分配相关标签来开始标注图像,如图图 10.14所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_014.jpg

图 10.14 – 在对象周围绘制边界框并分配标签

  1. 一旦足够多的图像被标注,ML 辅助标注将开始,你将看到下一批图像已经为你预标注,以便你快速审查围绕对象的边界框及其标签。在你完成所有图像的标注后,你将看到你标注数据的摘要,例如标签类别分布等,如图图 10.15所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_015.jpg

图 10.15 – 标签类别分布

  1. 接下来,点击导出,对于资产类型选择标注,对于导出格式选择Azure ML 数据集,如图图 10.16所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_016.jpg

图 10.16 – 导出你的标签图像数据

  1. 你应该会看到一个消息,表明你的数据已成功导出,如图图 10.17所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_017.jpg

图 10.17 – 标记数据成功导出

在本节中,您学习了如何利用 Azure ML 辅助标记来加速您图像的标记,以便为训练对象检测模型做准备,我们将在下一节中进行训练。

使用 Azure AutoML 训练对象检测模型

在本节中,我们将向您展示如何通过以下步骤使用 Azure Automated Machine Learning (AutoML) 训练一个对象检测模型:

  1. 在左侧导航栏中点击 Automated ML,然后点击 新建 Automated ML 作业

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_018.jpg

图 10.18 – 创建新的 Automated ML 作业

  1. 选择您在上一个部分中创建的图像数据资产,然后点击 下一步

  2. 在此步骤中,您将配置训练作业,如图 图 10.19* 所示。首先要注意的是,AutoML 已经自动将任务类型设置为 playing_cards_experiment。对于 目标列,选择 label (List),对于计算类型,选择 Compute cluster。由于您没有 GPU 集群(这是进行对象检测等深度学习任务所需的),您需要通过选择 + 新建 并遵循集群创建向导中的步骤来创建一个。一旦您的 GPU 计算集群创建完成,就可以选择它,然后您可以点击 下一步

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_019.jpg

图 10.19 – 配置对象检测作业

  1. 您可以保留算法细节和超参数调整设置中默认选中的值,如图 图 10.20* 所示,然后点击 下一步

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_020.jpg

图 10.20 – 选择模型和配置超参数调整

  1. 在此最后步骤中,您将设置您的验证类型。我们将再次保留默认选中的值,即 Auto,如图 图 10.21* 所示。然后,点击 完成 以开始模型训练:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_021.jpg

图 10.21 – 选择验证类型

  1. 根据您的数据集大小,模型训练完成可能需要 15 分钟到几个小时不等。一旦训练作业完成,您可以在 最近完成的 Automated ML 作业 下看到它,如图 图 10.22* 所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_022.jpg

图 10.22 – Automated ML 作业

  1. 选择您最新的运行实例以查看一些统计信息,例如最佳模型摘要主要指标算法名称持续时间,如图 图 10.23* 所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_023.jpg

图 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* 所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_024.jpg

图 10.24 – 导入所需库并连接到 Azure ML 工作区

  1. 您将使用 MLflow 库(特别是 MLflow 客户端)来访问 AutoML 生成的模型和其他工件。接下来的几个单元格展示了如何安装 MLflow 包的最新版本,如何获取 MLflow 跟踪服务器的 URI,以及如何初始化 MLflow 客户端,如图 图 10.25* 所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_025.jpg

图 10.25 – 设置 MLflow 客户端以访问 AutoML 训练的模型

  1. 前往 Azure ML 工作区,并点击 AutoML_ada7f120-62e2-46fd-8ef7-59cae1106262,如图 图 10.26* 所示。在下一步中,我们将使用作业名称:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_026.jpg

图 10.26 – 获取 AutoML 作业名称

  1. 现在我们已经获得了 AutoML 作业名称,我们可以获取 AutoML 最佳模型 ID,如图 图 10.27* 所示。这将在后续步骤中用于检索实际训练的模型:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_027.jpg

图 10.27 – 获取 AutoML 最佳模型 ID

  1. 下一个单元格创建一个本地文件夹,并将最佳模型及其工件下载到该文件夹中,如图 图 10.28* 所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_028.jpg

图 10.28 – 在本地文件夹中下载最佳模型

  1. 下一个单元格创建了一个用于调用的托管在线端点,如图图 10.29所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_029.jpg

图 10.29 – 为从其调用模型创建在线端点

  1. 下一个单元格将模型注册到工作区,如图图 10.30所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_030.jpg

图 10.30 – 将最佳模型注册到 Azure ML 工作区

  1. 下一个单元格创建了一个部署,其中包含要部署的模型的 ID、计算集群类型、集群节点数量以及之前创建的端点名称,如图图 10.31所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_031.jpg

图 10.31 – 将最佳模型注册到 Azure ML 工作区

  1. 接下来的几个单元格将向您展示如何调用端点并将测试图像传递给模型进行推理,如图图 10.32所示:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_032.jpg

图 10.32 – 向模型发送测试图像进行推理

  1. 最后,让我们看看模型对测试图像的评分如何(这是指它能够找到对象、识别其类型以及在图像中找到其位置的能力)。图 10.33显示了帮助您可视化端点返回的模型输出的 Python 代码:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_033.jpg

图 10.33 – 可视化模型输出的 Python 代码

  1. 图 10.34显示了带有识别对象周围边界框的模型输出:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_10_034.jpg

图 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. 让我们导入代码所需的全部库:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_11_001.jpg

图 11.1 – 库导入

  1. 接下来,我们必须创建神经网络架构。神经网络架构是用于训练以创建大脑的。根据所需的准确性,你可以根据所需的层数来构建你的网络。神经网络架构不是本书的重点,但有很多资源可用于设计一个:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_11_002.jpg

图 11.2 – 神经网络架构

  1. 现在,让我们编写训练代码:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_11_003.jpg

图 11.3 – 训练代码

  1. 接下来,我们将评估模型指标。模型评估是训练过程中的一个重要步骤,因为它验证了模型在准确性方面的性能:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_11_004.jpg

图 11.4 – 评估代码

  1. 接下来,我们需要创建一个 main 函数,该函数将收集模型所需的数据,然后调用 main 函数并开始处理训练代码。然后,它将评估模型。请参阅以下示例代码以获取详细信息:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_11_005.jpg

图 11.5 – 示例主代码

这是指定分布式数据集的代码:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_11_006.jpg

图 11.6 – 分布式数据集代码

这就是模型分布的地方:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_11_007.jpg

图 11.7 – 模型分布代码

  1. 接下来,我们将创建一个 job.py 文件,下载实验所需的数据。

  2. 现在,让我们创建一个数据集,用于进一步的训练过程。此数据集将调用分布式训练所需的计算集群。以下示例代码调用工作区并获取数据集:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_11_008.jpg

图 11.8 – 作业文件数据集代码

以下代码并行化训练过程:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_11_009.jpg

图 11.9 – 作业文件调用分布式训练

  1. 如前述截图所示,代码在模型训练期间进行分布,此过程非常简单。PyTorchConfiguration,连同 process_countnode_count,是我们必须提供的配置,以分布模型训练过程。

PyTorchConfiguration 拥有三个参数:

  1. communication_backend:这可以设置为 NcclGloo。默认选择 Nccl

  2. process_count:此参数配置节点内并行化目的的进程数量。

  3. node_count:这是指定作业使用多少节点的地方。node 是基于可用的核心数量。节点数量越多,处理速度越快。

  4. 运行作业并等待其完成。一旦提交作业,导航到你的工作区用户界面,点击 作业,然后转到 详情 以查看其工作原理。

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_11_010.jpg

图 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. 让我们导入代码所需的全部库:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_11_011.jpg

图 11.11 – 库导入

  1. 接下来,我们必须执行数据集处理:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_11_012.jpg

图 11.12 – 数据集处理

  1. 现在,让我们创建一个模型。我们将使用 Keras 库来简化神经网络架构。层取决于你的用例和精度。我见过大型网络架构精度低且层数过少导致结果不佳。因此,我们必须通过实验找到层的正确平衡,并据此构建神经网络架构:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_11_013.jpg

图 11.13 – 模型神经网络

  1. 现在,让我们创建一个 main 函数,它将以分布式方式运行模型训练过程。main 函数是所有逻辑流程汇聚在一起以使训练过程工作的地方。正如你所见,tf.distribute 指定了分布策略:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_11_014.jpg

图 11.14 – TensorFlow 分布式代码

Tf.distribute.experimental.MultiWorkerMirroredStrategy 同步地在工作节点之间复制所有变量和计算以进行处理。它主要使用 GPU(考虑到大规模处理)。前面的实现允许多个工作节点协同工作以实现更好的性能,从而更快地完成训练运行。

  1. 接下来,我们将在根文件夹中创建一些名为 job 的 Python 代码,我们将在终端窗口中执行这些代码以在命令行中执行 TensorFlow 代码。

  2. 现在,我们必须创建一个 environment.yaml 文件。这将创建运行模型训练的环境。以下是示例代码:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_11_015.jpg

图 11.15 – environment.yaml 代码

  1. 接下来,我们必须创建jobtensorflow.py文件,该文件使用 Azure Machine Learning SDK 来配置训练过程,并在作业提交后执行它。

  2. code部分,指定要使用的作业空间环境和用于实验的训练 Python 文件。您需要做出一些更改才能执行代码。作业空间、环境和训练 Python 文件的名字可能会根据您的实现方式而改变:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_11_016.jpg

图 11.16 – 示例环境和实验

  1. 接下来,我们必须编写一些代码来设置分布策略,然后调用训练实验。我们可以使用TensorflowConfiguration类来配置如何并行化训练任务。

TensorflowConfiguration接受两个参数,如下所示:

  1. worker_count:用于并行化的工作节点数量。默认值为1

  2. parameter_server_count:此参数用于设置运行先前worker_count所需的任务数量:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_11_017.jpg

图 11.17 – 分布策略和作业提交

  1. 等待实验运行。这需要几分钟到几小时,具体取决于数据集的大小。一旦实验完成运行,导航到您的工作空间用户界面,转到作业部分,选择作业以查看其输出:

https://github.com/OpenDocCN/freelearn-ml-zh/raw/master/docs/az-ml-engi/img/B18003_11_018.jpg

图 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)。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐