原文:
annas-archive.org/md5/41ac68e0c7679ad41531572416d7e2b8
译者:飞龙
前言
本书帮助你获取关于在 Azure 上进行机器学习实验的实际知识。它涵盖了成为认证的 Azure 数据科学家助理所需的所有内容,帮助你理解并掌握相关技能。
本书从数据科学介绍开始,确保你熟悉书中使用的术语。然后,你将进入Azure 机器学习(AzureML)工作区,这是你在本书中其余部分的工作环境。你将了解工作室界面,并管理各种组件,如数据存储和计算集群。
接下来,你将专注于无代码和低代码实验。你将探索自动化机器学习向导,它帮助你为数据集定位并部署最佳模型。你还将学习如何使用 AzureML 工作室提供的设计器运行端到端的数据科学实验。
接下来,你将深入探讨以代码为主的数据科学实验。你将探索AzureML 软件开发工具包(SDK)用于 Python,并学习如何通过代码创建实验和发布模型。你将学习如何使用强大的计算集群来扩展你的机器学习任务。你将学习如何使用 Hyperdrive 优化模型的超参数。然后,你将学习如何使用负责任的 AI 工具来解释和调试你的模型。一旦你有了训练好的模型,你将学会如何将其用于批量或实时推理,并且了解如何在生产环境中监控它。
通过这些知识,你将对 Azure 机器学习平台有一个清晰的理解,并且能够顺利通过 DP100 考试。
本书适合的读者
本书面向两类读者:希望将 AI 功能融入应用程序的开发人员,以及希望在 Azure 云中扩展其机器学习实验的数据科学家。为了跟上书中的代码示例,你需要具备 Python 的基础知识。对于在 Python 中使用 scikit-learn 等常用框架训练机器学习模型有一定经验的读者,将更容易理解本书内容。
本书的内容
第一章,现代数据科学概述,为你提供了全书使用的术语。
第二章,部署 Azure 机器学习工作区资源,帮助你理解Azure 机器学习(AzureML)工作区的部署选项。
第三章,Azure 机器学习工作室组件,提供了你将用于进行数据科学实验的工作室 Web 界面的概述。
第四章,配置工作区,帮助你理解如何配置计算资源并连接到托管数据集的数据源。
第五章,让机器来做模型训练,引导你进行第一次自动化机器学习(AutoML)实验,并通过设计器的向导将最佳训练模型部署为 Web 端点。
第六章,可视化模型训练与发布,帮助你通过设计器体验创建训练流水线。你将学会如何通过批处理或实时流水线将训练好的模型投入生产,方法是通过设计器将训练好的流水线提升到生产环境。
第七章,AzureML Python SDK,帮助你开始使用代码驱动的数据科学实验。你将了解 AzureML Python SDK 的结构,并学习如何通过代码管理 AzureML 资源,如计算集群。
第八章,使用 Python 代码实验,帮助你用代码训练你的第一个机器学习模型。它引导你如何跟踪模型指标,并将你的训练工作扩展到更大的计算集群上。
第九章,优化机器学习模型,展示了如何通过超参数调整优化你的机器学习模型,并通过启动自动化机器学习(AutoML)实验与代码,帮助你发现适合你数据集的最佳模型。
第十章,理解模型结果,向你介绍了负责任的人工智能的概念,并深入探讨了那些能帮助你解读模型预测结果、分析模型常见误差并检测潜在公平性问题的工具。
第十一章,与流水线协作,指导你通过定义多步骤流水线,使用 AzureML Python SDK 编写可重复的流程。
第十二章,用代码实现模型的生产化,帮助你注册已训练的模型,并通过实时 Web 端点或批处理并行处理流水线实现其生产化。
为了充分利用本书
本书旨在为你提供学习所需的一切。每一章的进一步阅读部分包含一些链接,帮助你深入探讨与本书内容相关的外围话题。如果你对 Azure 门户有一些基本的了解,并且曾阅读过一些 Python 代码,会更有帮助。
本书将引导你使用 AzureML Studio 中的 Notebooks 体验。如果你想在工作站上执行相同的代码,而不是在基于云的环境中执行,你需要一个 Python 环境来运行 Jupyter notebooks。运行 Jupyter notebooks 最简单的方法是通过 VSCode,这是一个免费的跨平台编辑器,具有出色的 Python 支持。你还需要在工作站上安装 Git 来克隆本书的 GitHub 仓库。
如果你正在使用本书的数字版,我们建议你亲自输入代码,或者从本书的 GitHub 仓库访问代码(下一个章节会提供链接)。这样做有助于你避免与复制粘贴代码相关的潜在错误。
如果你在执行代码时遇到问题,请确保你已经从 GitHub 仓库克隆了最新版本。如果问题仍然存在,请随时打开 GitHub 问题页面,描述你遇到的问题,我们将帮助你解决。
下载示例代码文件
你可以从 GitHub 下载本书的示例代码文件,网址为github.com/PacktPublishing/Azure-Data-Scientist-Associate-Certification-Guide
。如果代码有更新,它将会在 GitHub 仓库中更新。
我们还提供了其他代码包,来自我们丰富的书籍和视频目录,您可以在github.com/PacktPublishing/
查看。
下载彩色图片
我们还提供了一份 PDF 文件,包含本书中使用的截图和图表的彩色版本。你可以在此处下载: static.packt-cdn.com/downloads/9781800565005_ColorImages.pdf
。
使用的约定
本书中使用了多个文本约定。
文本中的代码
:表示文本中的代码词汇、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟网址、用户输入和 Twitter 账号。这里有一个例子:“你也可以更改你正在设计的流水线的自动生成名称。将当前流水线重命名为test-pipeline
。”
代码块如下所示:
from azureml.train.hyperdrive import GridParameterSampling
from azureml.train.hyperdrive import choice
param_sampling = GridParameterSampling( {
"a": choice(0.01, 0.5),
"b": choice(10, 100)
}
)
当我们希望特别引起你注意某个代码块时,相关行或项目会以粗体显示:
from azureml.core import Workspace
ws = Workspace.from_config()
loans_ds = ws.datasets['loans']
compute_target = ws.compute_targets['cpu-sm-cluster']
任何命令行输入或输出都以如下方式书写:
az group create --name my-name-rg --location westeurope
粗体:表示一个新术语、一个重要的词汇,或者是你在屏幕上看到的词汇。例如,菜单或对话框中的词汇通常是粗体。这里有一个例子:“导航到 AzureML Studio 网页界面中的 Author | Notebooks 部分。”
提示或重要说明
运行编号在不同的执行中可能会有所不同。每次执行单元时,都会创建一个新的运行编号,从上次的编号继续。因此,如果你执行的代码进行了一次超驱动运行,并且包含 20 个子运行,那么最后一个子运行将是运行 21。下次执行相同代码时,超驱动运行将从运行 22 开始,最后一个子运行将是运行 42。在本节中提到的运行编号是显示在各个图示中的编号,出现差异是正常的,特别是当你需要重新执行几个单元时。
联系我们
我们欢迎读者的反馈。
一般反馈:如果你对本书的任何内容有疑问,请通过电子邮件联系我们,邮箱地址是 customercare@packtpub.com,并在邮件主题中注明书名。
勘误:尽管我们已尽一切努力确保内容的准确性,但难免会有错误。如果你发现本书中的错误,感谢你向我们报告。请访问www.packtpub.com/support/errata并填写表格。
盗版:如果你在互联网上发现任何我们作品的非法复制品,感谢你提供该位置地址或网站名称。请通过电子邮件联系 copyright@packt.com,并附上该材料的链接。
如果你有兴趣成为作者:如果你在某个领域有专长,并且有兴趣撰写或参与编写一本书,请访问authors.packtpub.com。
分享你的想法
一旦你阅读了*《Azure 数据科学家助理认证指南》*,我们很想听听你的想法!请点击这里直接进入亚马逊书籍评论页面并分享你的反馈。
你的评论对我们以及技术社区非常重要,它将帮助我们确保提供优质的内容。
第一部分:开始你的云端数据科学之旅
Azure 数据科学家助理是具有应用数据科学和机器学习知识的领域专家,能够在 Azure 上运行机器学习工作负载。此角色的责任包括为 Azure 上的数据科学工作负载规划和创建合适的工作环境。在本节中,你将获得本书中使用的所有数据科学和机器学习术语的概览。你还将学习如何配置和设置 Azure 机器学习服务,这一环境是运行 Azure 云中的机器学习实验的事实标准。
本节包括以下章节:
-
第一章, 现代数据科学概览
-
第二章, 部署 Azure 机器学习工作区资源
-
第三章, Azure 机器学习工作室组件
-
第四章, 配置工作区
第一章:第一章:现代数据科学概述
数据科学起源于 18 世纪初,并在过去几十年里获得了巨大的流行。
在本书中,你将学习如何在 Azure 上运行数据科学项目,Azure 是微软的公共云基础设施。你将掌握成为认证 Azure 数据科学家助理所需的所有技能。你将从本章开始,了解书中贯穿的基础术语。然后,你将深入学习Azure 机器学习(AzureML)服务。你将首先配置工作区,然后在 AzureML Studio 网页界面中体验无代码、低代码的构建。接着,你将深入学习以代码为主的数据科学实验,使用 AzureML 软件开发工具包(SDK)进行工作。
在本章中,你将学习一些与数据科学相关的基本术语,这些术语是 DP 100 考试所需的。你将从了解数据科学项目的典型生命周期开始。接着,你将阅读有关大数据的内容,并了解 Apache Spark 技术如何帮助你训练机器学习模型。然后,你将探索什么是DevOps思维方式,以及它如何帮助你成为一个高效、多学科、敏捷团队的成员,这个团队构建了增强机器学习的产品。
在本章中,我们将涵盖以下主要内容:
-
数据科学的演变
-
进行数据科学项目
-
在数据科学中使用 Spark
-
采纳 DevOps 思维方式
数据科学的演变
如果你试图追溯数据科学实践的根源,你可能会发现它的证据可以追溯到文明的初期。18 世纪,政府开始收集人口和财务数据用于征税,这一做法被称为统计学。随着时间的推移,这个术语的使用范围扩展到包括对收集的数据进行总结和分析。1805 年,法国数学家阿德里安-玛丽·勒让德发布了一篇论文,描述了用最小二乘法拟合线性方程,尽管大多数人将对该方法的完整描述归功于卡尔·弗里德里希·高斯,他在几年后发表了相关内容。1900 年,卡尔·皮尔逊在《哲学杂志》上发布了关于卡方统计量的观察,这是数据科学中假设检验的基石。1962 年,因快速傅里叶变换和箱型图而闻名的科学家约翰·图基,发表了一篇论文,表达了他对数据分析的热情,以及统计学如何需要演变成一门新的科学。
另一方面,随着二十世纪中叶信息学的兴起,人工智能(AI)领域由约翰·麦卡锡(John McCarthy)于 1955 年首次提出,作为思考机器的官方术语。人工智能是计算机科学的一个领域,旨在开发可以模仿人类智能行为的系统。使用诸如信息处理语言(IPL)和列表处理器(LISP)等编程语言,开发人员编写了能够操纵列表和其他各种数据结构以解决复杂问题的程序。在 1955 年,阿瑟·塞缪尔(Arthur Samuel)的跳棋程序是第一款能够通过存储棋盘状态并缓存在该状态下获胜的几率来从已经进行过的游戏中学习的程序。这个跳棋程序可能是机器学习(人工智能的一个子领域)的第一个例子,机器学习利用历史数据和数据中编码的模式来训练模型,使系统能够模仿人类任务,而无需显式编写整个逻辑。事实上,你可以将机器学习模型看作是通过对数据集训练算法以识别特定类型模式所生成的软件代码。
2001 年,威廉·S·克利夫兰(William S. Cleveland)发表了第一篇文章,其中使用了“数据科学”这一术语,这一术语至今仍被我们沿用,指的是处于统计学、数据分析和信息学交叉点的科学,旨在通过数据解释现象。
尽管大多数人将数据科学与机器学习相关联,但数据科学的范围要广泛得多,它包括在实际机器学习模型训练过程之前的数据分析和准备工作,正如你将在下一节中看到的那样。
从事数据科学项目
数据科学项目的目标是将从数据中提取的智能融入应用程序中。在本节中,你将发现该类项目中所需的常见任务和关键考虑事项。有许多成熟的生命周期过程,例如团队数据科学过程(TDSP)和跨行业标准数据挖掘过程(CRISP-DM),它们描述了在典型项目中执行的迭代阶段。最常见的阶段如图 1.1所示:
图 1.1 – 数据科学项目的迭代阶段
尽管图表展示了各阶段之间的某些指示性流动,但如果需要,你可以自由地从一个阶段跳转到任何其他阶段。此外,这种方法是迭代的,数据科学团队应当经过多次迭代,不断改进其业务理解和最终模型,直到满足成功标准。在本章的采用 DevOps 思维模式部分,你将进一步了解迭代过程的好处。数据科学过程从业务理解阶段开始,这是你将在下一节中详细阅读的内容。
了解业务问题
数据科学项目的第一阶段是业务理解阶段。在这个阶段,数据科学团队与业务利益相关者合作,定义一个简短而直接的问题,机器学习将尝试回答。
图 1.2 显示了机器学习可以回答的五个最常见问题:
图 1.2 – 机器学习可以回答的五个问题
在这些问题背后,有一组建模技术你将使用:
-
回归模型允许你基于一个或多个特征预测一个数值。例如,在第八章《用 Python 代码进行实验》中,你将尝试基于一年之前采集的 10 个测量值,预测你希望获得的数值。训练一个回归模型是一个监督式的机器学习任务,这意味着你需要提供足够的样本数据来训练模型,以预测期望的数值。
-
分类模型允许你根据一组输入预测一个类标签。这个标签可以是简单的“是/否”标签,也可以是蓝色、绿色或红色等颜色标签。例如,在第五章《让机器进行模型训练》中,你将训练一个分类模型,检测客户是否会取消他们的手机订阅。预测一个人是否会停止做某件事,通常被称为流失或退订检测。训练一个分类模型是一个监督式机器学习任务,需要一个带标签的数据集来训练模型。带标签的数据集包含了输入和你希望模型预测的标签。
-
聚类是一个无监督的机器学习任务,用于对数据进行分组。与前两种模型类型不同,聚类不需要任何训练数据。它直接作用于给定的数据集,并创建所需数量的集群,将每个数据点分配到相应的集群中。聚类模型的常见应用是当你试图识别你客户基础中的不同消费群体,以便你可以通过特定的营销活动来针对这些群体。
-
推荐系统旨在基于用户的个人资料推荐最佳选项。搜索引擎、电子商店和流行的视频流媒体平台利用这种类型的模型来提供个性化的推荐,帮助用户决定接下来该做什么。
-
异常检测模型可以从数据集或数据流中检测异常值。异常值是指那些与其他元素不相符的项目,表示存在异常。例如,如果一台机器的振动传感器开始发送异常测量值,这可能是设备即将故障的良好指示。
在业务理解阶段,你将尝试理解问题陈述并定义成功标准。设定机器学习能够和不能做到的适当预期是确保团队之间一致性的关键。
在数据科学项目中,通常会有多轮的业务理解。数据科学团队在探索数据集或训练模型后会获得很多洞察。将这些洞察带给业务利益相关者,验证你团队的假设,或深入了解你正在解决的问题是非常有帮助的。例如,业务利益相关者可能会解释你在数据中检测到的模式,但你却无法解释其背后的原因。
一旦你掌握了要解决的问题,接下来你需要获取一些数据,进行探索,甚至为其打上标签,更多内容将在下一节中讲解。
获取和探索数据
在理解了你要解决的问题后,接下来是收集支持机器学习过程的数据。数据可以有多种形式和格式。它既可以是存储在数据库系统中的结构化表格数据,也可以是存储在文件共享中的文件,如图像等。起初,你可能不知道要收集哪些数据,但你必须从某个地方开始。寻找数据时,一个典型的轶事是,总觉得总有一个 Excel 文件包含了关键信息,你必须不断地去请求,直到找到它。
一旦你找到了数据,你就需要分析它,了解数据集是否完整。数据通常存储在本地系统中,或者存储在在线事务处理(OLTP)数据库中,你无法轻易访问。即使数据可以访问,也不建议直接在源系统中探索它,因为你可能会意外影响承载数据的底层引擎的性能。例如,针对销售表的复杂查询可能会影响电子商店解决方案的性能。在这种情况下,通常会将所需的数据集导出为某种文件格式,比如最具互操作性的逗号分隔值(CSV)格式,或者更加优化用于分析处理的Parquet格式。然后将这些文件上传到便宜的云存储中,供进一步分析使用。
在 Microsoft Azure 中,最常见的目标要么是存储帐户中的 Blob 容器,要么是 Azure Data Lake Gen 2 文件系统中的文件夹,它提供了更加细粒度的访问控制机制。数据复制可以通过使用如 AzCopy 或 Storage Explorer 等工具以一次性方式进行。如果你想要配置一个可以定期拉取增量新数据的重复过程,你可以使用更高级的工具,如 Azure Data Factory 或 Azure Synapse Analytics 的管道。在 第四章中,配置工作区,你将回顾从本地提取数据所需的组件以及你可以从 AzureML 工作区中连接的可用数据存储,以便访问各种数据集。在 第四章的 与数据集一起工作 部分,你将了解 AzureML 支持的数据集类型,以及如何探索它们以深入了解其中存储的信息。
收集数据时,一个常见的任务是数据清理步骤。在这个过程中,你需要删除重复记录、填补缺失值或修复常见的数据输入问题。例如,你可以通过将 UK 记录替换为 United Kingdom 来统一国家文本字段。在 AzureML 中,你可以在 第六章 中看到的设计器中,或通过你将从 第七章 起使用的笔记本体验来执行这些清理操作。尽管你可能会在 AzureML 中开始进行这些清理操作,但随着项目的推进,这些清理活动通常会移到 Azure Data Factory 或 Azure Synapse Analytics 的管道中,这些管道将数据从源系统中提取出来。
重要提示
在进行数据清理时,要注意 yak shaving。术语 yak shaving 在 90 年代被创造出来,用来描述一种情形:在处理某项任务时,你意识到必须做另一个任务,这又引发了另一个任务,以此类推。这一系列任务可能会让你偏离原定目标。例如,你可能会发现一些记录在国家文本字段中存在无效编码,但你可以理解参考的国家。于是你决定更改 CSV 文件的导出编码,但你意识到你使用的导出工具已经过时,不支持 UTF-8。这时你开始寻找系统管理员来更新你的软件。与其沿着这个方向走,不如记下需要做的事情,并将其添加到待办事项中。你可以在下次迭代时修复这个问题,那时你会更清楚自己是否真的需要这个字段。
另一个常见的任务是对数据集进行标注,特别是当您需要处理监督学习模型时。例如,如果您正在整理一个数据集来预测客户是否会流失,您需要标记取消订阅的客户记录。一个更复杂的标注案例是当您为社交媒体消息创建情感分析模型时。在这种情况下,您需要获取一批消息,逐一浏览,并为每条消息标记其情感是正面还是负面。
在 AzureML Studio 中,您可以创建标注项目,允许您对数据集的标注工作进行扩展。AzureML 允许您定义文本标注或图像标注任务。然后,您可以邀请团队成员根据给定的指示来标注数据。一旦团队开始标注数据,AzureML 会自动训练一个相应的模型。当模型足够好时,它开始向标注者提供建议,从而提高生产力。图 1.3 显示了标注项目创建向导以及当前图像标注任务中的各种选项:
图 1.3 – 创建 AzureML 标注项目
通过此项目阶段,您应已发现相关的源系统,并生成了一个准备好用于机器学习训练的清理数据集。在下一部分,您将学习如何创建其他数据特征,帮助模型训练过程,这一过程称为 特征工程。
特征工程
在特征工程阶段,您将生成新的数据特征,以更好地表示您要解决的问题,并帮助机器从数据集中学习。例如,以下代码块通过转换销售数据集中的 product
列创建一个名为 product_id
的新特征:
product_map = { "orange juice": 1, "lemonade juice": 2 }
dataset["product_id"] = dataset["product"].map(product_map)
该代码块使用 map
方法将文本转换为数值。product
列被称为 橙汁
或 柠檬水
。如果您在同一数据集中有一个 1 到 5 的评级特征,那将是一个离散的数值变量,能够取的值是有限的,在本例中只有 1、2、3、4 或 5。如果您有一个记录客户购买了多少升或多少加仑的列,那么它将是一个 连续 数值变量,可以取任何大于或等于零的数值,例如半升。除了数值,日期字段也被视为连续变量。
重要提示
尽管在前面的示例中,product_id
特征是一个 离散 数值变量,但这类特征通常被当作分类变量来处理,正如您将在 第五章《让机器来进行模型训练》中看到的那样。
有许多可用的特征化技术。以下是一个示例列表:
-
数值特征的标准化:此技术将所有数值特征转换为可以轻松比较的范围。例如,在第八章,使用 Python 代码进行实验中,你将基于医学测量数据训练机器学习模型。血糖测量值范围从 80 到 200 mg/dL,而血压测量值范围从 60 到 128 mm Hg。这些数值通过它们的均值进行标准化,这种转换称为标准化或Z-score归一化。它们的数值最终会在 -1 到 1 的范围内,这样机器就能提取出更好的洞察。
-
拆分:将一列拆分为两个新特征是非常常见的做法。例如,全名会被拆分为姓名和姓氏以便进一步分析。
-
分箱:此技术将连续特征分组为不同的组或箱,这可能揭示出有关你正在解决的问题的重要信息。例如,如果你有出生年份数据,可以创建分箱来将不同的代际群体分组。在这种情况下,出生年份在 1965 到 1980 年之间的人将属于X 代群体,而出生在 1981 到 1996 年间的人则属于千禧一代分组。通常会使用你在理解商业问题部分中看到的聚类模型来生成群体并定义这些分箱。
-
对于
product
,你执行了标签编码。你将类别变量转换为数值变量。标签编码的一个典型例子是 T 恤尺码,其中小号对应1,中号对应2,大号对应3。然而,在product
例子中,你不小心定义了橙汁
(1
)和柠檬汁
(2
)之间的顺序,这可能会让机器学习算法感到困惑。在这种情况下,除了使用示例中产生product_id
特征的顺序编码,你还可以使用独热编码。在这种情况下,你将引入两个二进制特征,分别为orange_juice和lemonade_juice。这些特征将根据顾客购买的是哪种果汁,接受0或1的值。 -
生成滞后特征:如果你处理的是时间序列数据,可能需要从前一个时间点的值生成特征。例如,如果你尝试预测 10 分钟后的温度,你可能需要当前的温度以及 30 分钟前和 1 小时前的温度。这两个额外的过去温度就是滞后特征,你需要对它们进行特征工程。
重要提示
对大数据集进行所有这些转换可能需要大量的内存和处理时间。这时,像 Spark 这样的技术就发挥了作用,通过并行化处理过程。你将在本章的使用 Spark 进行数据科学部分了解更多关于 Spark 的内容。
在第十章中,理解模型结果部分,你将使用来自sklearn
库的MinMaxScaler
方法对数值特征进行缩放。
作为特征工程阶段的最后一步,你通常会移除不必要或高度相关的特征,这个过程称为特征选择。你将删除那些不会用于训练机器学习模型的列。通过删除这些列,你减少了训练时机器的内存需求,减少了训练模型所需的计算时间,同时生成的模型体积也会更小。
在创建这些特征时,你可能需要返回到数据获取和探索阶段,甚至回到理解业务问题阶段,以获取更多的数据和见解。然而,某一时刻,你的训练数据集将准备好训练模型,这将在下一节中介绍。
训练模型
一旦你准备好数据集,机器学习的训练过程就可以开始。如果模型需要监督学习且你有足够的数据,你可以将数据集按 70%对 30%或 80%对 20%的比例分为训练集和验证集。你选择要训练的模型类型,指定模型的训练参数(称为超参数),并训练模型。使用剩余的验证数据集,你根据指标评估训练模型的性能,并决定该模型是否足够好,可以进入下一个阶段,或者是否需要返回到理解业务问题阶段。监督模型的训练过程如图 1.4所示:
](https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_01_004.jpg)
图 1.4 – 训练一个监督学习模型
上述步骤有几种变体:
-
如果模型属于无监督学习类别,例如聚类算法,你只需将所有数据传入训练模型。然后评估检测到的聚类是否满足业务需求,调整超参数,再次尝试。
-
如果你有一个需要监督学习的模型,但没有足够的数据,通常使用k 折交叉验证技术。通过 k 折交叉验证,你可以指定要将数据集拆分成的折数。AzureML 使用AutoML,如果数据少于 1,000 行,则执行 10 折验证;如果数据集在 1,000 到 20,000 行之间,则执行 3 折验证。一旦你有了这些折,你就开始一个迭代过程,具体步骤如下:
-
保留一个折用于验证,并使用其余的折来训练一个新的模型。
-
使用保留的折对训练的模型进行评估。
-
记录模型得分并丢弃模型。
-
重复步骤 I,将另一个折保留用于验证,直到所有折都用于验证。
-
生成聚合模型的性能。
重要提示
在机器学习研究文献中,有一种方法叫做半监督学习。这种方法将少量标记数据与大量未标记数据结合起来训练模型。
-
与其训练一个单一的模型,评估结果后再尝试使用不同的超参数集,你可以自动化这个过程,并行评估多个模型。这个过程叫做超参数调优,你将在第九章,优化机器学习模型中深入了解。在同一章中,你还将学习如何自动化模型选择,这是一种 AzureML 的功能,称为 AutoML。
度量标准帮助你选择使预测值与实际值之间差异最小的模型。它们因训练的模型类型而有所不同。在回归模型中,度量标准试图最小化预测值与实际值之间的误差。最常见的度量标准有平均绝对误差(MAE)、均方根误差(RMSE)、相对平方误差(RSE)、相对绝对误差(RAE)、决定系数(R²)和归一化均方根误差(NRMSE),这些你将在第八章,使用 Python 代码进行实验中看到。
在分类模型中,度量标准略有不同,因为它们不仅要评估模型正确预测的结果数量,还要评估错误分类的数量。例如,在客户流失的二分类问题中,可能有四种结果:
-
模型预测客户会流失,且客户确实流失了。这被认为是真阳性(TP)。
-
模型预测客户会流失,但客户保持忠诚。这被认为是假阳性(FP),因为模型错误地预测了客户会流失。
-
模型预测客户不会流失,但客户流失了。这被认为是假阴性(FN),因为模型错误地判断了客户会忠诚。
-
模型预测客户不会流失,且客户保持忠诚。这被认为是真阴性(TN)。
这四种情况构成了混淆矩阵,如图 1.5所示:
图 1.5 – 分类模型的评估
通过混淆矩阵,你可以计算其他指标,例如准确率,它计算评估测试中所有正确结果的总数(在此案例中,1132 TP + 2708 TN = 3840 条记录与 2708 + 651 + 2229 + 1132 = 6720 条总记录)。另一方面,精确度或阳性预测值 (PPV) 评估实际正确的预测有多少(在此案例中,1132 TP 与 1132 + 2229 总的正确预测)。召回率,也称为敏感性,衡量有多少实际的真实值被正确分类(在此案例中,1132 TP 与 1132 + 651 总的实际真实值)。根据你要解决的业务问题,你需要在各种指标之间找到平衡,因为某些指标可能比其他指标更有帮助。例如,在 COVID-19 大流行期间,一个模型如果通过召回率为 1 来确定某人是否感染了病毒,会识别出所有感染的患者。然而,它也可能错误地分类了一些未感染的患者,而其他指标,如精确度,则能够捕捉到这一点。
重要提示
当你的模型过于拟合数据时,请留意。这是我们所说的过拟合,它可能表示模型在训练数据集中找到了某种在现实生活中不存在的模式。此类模型在投入生产并对未知数据进行推理时,往往表现不佳。过拟合的常见原因是偏倚的训练数据集,它仅暴露了真实世界样本的一部分。另一个原因是目标泄露,即某种方式下,试图预测的值被作为输入传递给模型,可能是通过一个使用目标列工程化的特征。有关如何处理过拟合和不平衡数据的指导,请参阅进一步阅读部分。
正如你迄今所见,训练机器学习模型时需要考虑许多因素,在本书中,你将获得一些训练模型的实战经验。在大多数情况下,你首先需要选择将要执行训练过程的计算机类型。目前,你有两个选择,中央处理单元(CPU)或图形处理单元(GPU)计算目标。这两种目标至少都包含一个 CPU,因为这是任何现代计算机的核心元素。不同之处在于,GPU 计算目标还提供一些非常强大的显卡,可以执行大规模的并行数据处理,从而加速训练过程。为了利用 GPU,你训练的模型需要支持基于 GPU 的训练。GPU 通常用于神经网络训练,使用的框架包括TensorFlow、PyTorch 和Keras。
一旦你训练了一个满足在数据科学项目的理解业务问题阶段定义的成功标准的机器学习模型,就该将其操作化,并开始使用它进行推理了。你将在下一节阅读到这一部分内容。
部署模型
在模型操作化方面,你有两种主要方法:
-
实时推理:模型始终处于加载状态,等待对传入数据进行推理。典型的使用场景是网页和移动应用程序,这些应用会调用模型来根据用户输入进行预测。
-
批处理推理:每次调用批处理过程时,都会加载模型,并基于传入的批记录生成预测。例如,假设你训练了一个模型来识别照片中的你的面部,并且你想要为硬盘上的所有图片打上标签。你将配置一个过程,使用模型对每张图片进行处理,并将结果存储在文本或 CSV 文件中。
这两者之间的主要区别在于你是否已经拥有用于预测的数据。如果你已经拥有数据且这些数据不发生变化,你可以进行批处理推理。例如,如果你想预测下周比赛的足球比分,你可以运行批处理推理并将结果存储在数据库中。当客户请求特定的预测时,你可以从数据库中提取结果。然而,在足球比赛进行时,预测最终比分的模型需要实时获取诸如当前球员数量和受伤情况等特征信息。对于这些情况,你可能想要部署一个暴露 REST API 的 Web 服务,在该服务中,你发送所需的信息,模型则进行实时推理。你将在第十二章,通过代码操作化模型中深入了解实时和批处理方法。
在这一部分,你回顾了数据科学项目的生命周期,并逐步了解了所有阶段,从理解需要做什么到通过部署批处理或实时服务来实现模型操作化。特别是在实时流处理中,你可能听说过结构化流处理这一术语,它是基于 Spark 构建的一个可扩展的处理引擎,允许开发者像在静态数据上执行批处理推理一样执行实时推理。你将在下一节学习更多关于 Spark 的内容。
在数据科学中使用 Spark
在 21 世纪初,大数据问题成为现实。数据中心存储的数据在数量和速度上迅速增长。到 2021 年,我们将数据集称为大数据,当它们的大小达到至少几个 TB 时,甚至在大型组织中,PB 级的数据也并不罕见。这些数据集以非常快的速度增长,可能是每天几 GB,甚至是每分钟增长的速度,例如,当你在在线商店中存储用户与网站的交互数据以进行点击流分析时。
2009 年,加利福尼亚大学伯克利分校启动了一个研究项目,旨在提供处理大数据所需的并行计算工具。2014 年,Apache Spark 的第一个版本从该研究项目中发布。该研究团队的成员创办了Databricks公司,这是 Apache Spark 开源项目的重要贡献者之一。
Apache Spark 提供了一个易于使用的可扩展解决方案,允许人们以分布式的方式对数据进行并行处理。Spark 架构的核心思想是,驱动节点负责执行你的代码。你的代码被拆分成多个可以在更小数据部分上执行的并行任务。这些小任务会被调度到工作节点执行,如图 1.6所示:
图 1.6 – 在 Spark 集群中并行处理大数据
例如,假设你想计算公司在去年销售了多少产品。在这种情况下,Spark 可以启动 12 个任务,分别生成每月的汇总数据,然后这些结果将由另一个任务处理,汇总所有月份的总数。如果你倾向于将整个数据集加载到内存中并直接进行汇总,我们来看看你需要多少内存。假设单月的销售数据存储在一个 1GB 的 CSV 文件中。加载这个文件大约需要 10GB 的内存。压缩后的pandas.``DataFrame
对象。正如你能理解的那样,同时加载所有 12 个文件到内存中是一个不可能完成的任务。你需要并行处理,而 Spark 可以自动为你完成这个工作。
重要提示
Parquet 文件以列式格式存储,这使得你可以仅加载需要的部分列。例如,在 1GB 的 Parquet 文件中,如果你只加载数据集的一半列,那么你可能只需要 20GB 的内存。这也是 Parquet 格式在分析负载中广泛使用的原因之一。
Spark 是用 Scala 编程语言编写的。它为 Scala、Python、Java、R,甚至 C# 提供了 API。不过,数据科学社区通常在使用 Scala 时,致力于达到最大计算性能并利用 Java 库生态系统,或者使用 Python,这也是现代数据科学社区广泛采用的语言。当你编写 Python 代码来利用 Spark 引擎时,你是在使用 PySpark 工具对后来在 Spark 框架中引入的Spark.DataFrame
对象进行操作。为了从 Spark 的分布式特性中获益,你需要处理大量数据集。这意味着,如果你处理的记录仅为几十万条甚至几百万条,Spark 可能会显得过于复杂。
Spark 提供了两个机器学习库,旧的Spark.DataFrame
结构,这是一个分布式数据集合,并提供与 Python pandas 或 R 中使用的DataFrame
对象类似的功能。此外,pandas.DataFrame
的操作允许你利用现有的编码技能在 Spark 上进行操作。
AzureML 允许你在 PySpark 上执行 Spark 任务,既可以使用其原生计算集群,也可以通过连接到Azure Databricks或Synapse Spark 池来实现。尽管本书中你不会编写任何 PySpark 代码,但在 第十二章,《使用代码实现模型操作》中,你将学习如何在不需要 Spark 或驱动节点的情况下实现类似的并行化效果。
无论你是在普通的 Python、PySpark、R 还是 Scala 中编程,你都在生成一些代码工件,这些代码很可能是更大系统的一部分。在下一部分,你将探索 DevOps 思维模式,该模式强调软件工程师、数据科学家和系统管理员之间的沟通与协作,以实现更快的有价值产品特性的发布。
采纳 DevOps 思维模式
DevOps 是一种团队思维模式,旨在尽量减少开发人员和系统操作员之间的隔阂,从而缩短产品的开发生命周期。开发人员不断修改产品以引入新特性和修改现有行为。另一方面,系统操作员需要保持生产系统的稳定并确保其正常运行。在过去,这两个团队是孤立的,开发人员常常是将新的软件部分“抛”给运营团队,后者会尝试将其部署到生产环境中。正如你所想,事情并不总是那么顺利,导致这两个团队之间出现摩擦。说到 DevOps,一个基本的实践是,团队需要具备自主性,并应包含所有所需的学科,包括开发人员和操作员。
在数据科学领域,一些人将这项实践称为MLOps,但其基本理念保持不变。一个团队应该是自给自足的,能够开发出整体解决方案所需的所有组件,从带入数据的数据工程部分、模型的训练,一直到在生产环境中运营化模型。这些团队通常以敏捷的方式工作,采用迭代方法,根据反馈寻求持续改进,正如图 1.7所示:
图 1.7 – 敏捷 MLOps 团队中的反馈流程
MLOps 团队根据其待办事项执行迭代步骤,正如你在数据科学项目工作部分看到的那样。一旦模型准备好,作为团队一部分的系统管理员会知道需要做些什么来将模型投入生产。模型被密切监控,如果发现缺陷或性能下降,则为 MLOps 团队创建一个待办事项,安排在下一个冲刺中处理。
为了最小化生产中新增特性的开发和部署生命周期,需要拥抱自动化。DevOps 团队的目标是尽量减少部署过程中人工干预的次数,并自动化尽可能多的可重复任务。
图 1.8显示了使用 MLOps 思维方式开发实时模型时最常用的组件:
图 1.8 – MLOps 驱动的数据科学项目中常见的组件
让我们分析这些组件:
-
ARM 模板允许你自动化 Azure 资源的部署。这使得团队可以快速启动和关闭开发、测试,甚至生产环境。这些构件存储在 Azure DevOps 的 Git 版本控制仓库中。通过 Azure DevOps 管道,多个环境的部署得以自动化。你将会在第二章中阅读关于 ARM 模板的内容,部署 Azure 机器学习工作区资源。
-
使用Azure Data Factory,数据科学团队协调从源系统提取和清洗数据。数据被复制到数据湖中,可以从 AzureML 工作区访问。Azure Data Factory 使用 ARM 模板定义其协调管道,这些模板存储在 Git 仓库中,以便跟踪变更并能够在多个环境中部署。
-
在 AzureML 工作区内,数据科学家正在编写他们的代码。最初,他们开始使用 Jupyter 笔记本。笔记本是一个很好的原型设计工具,正如你在第七章,《AzureML Python SDK》中所看到的那样。随着项目的进展,脚本会从笔记本中导出,并整理成编码脚本。所有这些代码制品都会通过 Git 进行版本控制,使用终端和如图 1.9所示的命令:
图 1.9 – 在 AzureML 中使用 Git 对笔记本和脚本文件进行版本控制
- 当一个模型经过训练后,如果其性能优于当前生产环境中的模型,它会在 AzureML 中注册,并触发一个事件。这个事件会被 AzureML DevOps 插件捕获,从而触发模型在测试环境中的自动部署。模型会在该环境中进行测试,如果所有测试通过且在Application Insights中未记录任何错误(该工具用于监控部署),则可以将制品自动部署到下一个环境,直到生产环境。
确保代码和模型质量的能力在这个自动化过程中起着至关重要的作用。在 Python 中,你可以使用各种工具,如 Flake8、Bandit 和 Black,来确保代码质量、检查常见的安全问题,并保持代码库的一致格式。你还可以使用pytest
框架编写功能测试,在这些测试中,你将把模型的结果与黄金数据集进行对比。通过pytest
,你甚至可以执行集成测试,验证端到端系统是否按预期工作。
采用 DevOps 是一项永无止境的旅程。每次重复这个过程,团队都会变得更好。诀窍在于建立对端到端开发和部署过程的信任,让每个人都能自信地做出更改并将其部署到生产环境。当过程失败时,要理解失败的原因,并从错误中吸取教训。创建防止未来失败的机制,并继续前行。
总结
在本章中,您了解了数据科学的起源以及它与机器学习的关系。然后,您学习了数据科学项目的迭代性质,并发现了您将要进行的各个阶段。从问题理解阶段开始,您将获取和探索数据,创建新特征,训练模型,然后进行部署以验证您的假设。接着,您看到如何使用 Spark 生态系统扩展大数据文件的处理。在最后一节中,您了解了 DevOps 思维方式,它帮助敏捷团队提高效率,即在短时间内开发和部署新产品功能。您看到 MLOps 驱动的团队中常用的组件,并看到在该图的中心位置,您会找到 AzureML。
在下一章中,您将学习如何部署 AzureML 工作区,并了解在本书中整个数据科学之旅中将使用的 Azure 资源。
深入阅读
本节提供了一些有用的网络资源,帮助您扩展对本章中涉及的主题的理解:
-
AzCopy 命令行工具用于将 blob 和文件复制到存储帐户:
aka.ms/azcopy
。 -
Azure Storage Explorer 是一款免费的工具,用于管理所有 Azure 云存储资源:
azure.microsoft.com/features/storage-explorer/
。 -
《数据湖的搭乘指南》 是一本详细的指南,涵盖了在构建数据湖时需要考虑的关键事项和最佳实践:
aka.ms/adls/hitchhikersguide
。 -
使用 AzureML 优化数据处理:
docs.microsoft.com/azure/machine-learning/concept-optimize-data-processing
。 -
Koalas 项目:
koalas.readthedocs.io
。 -
防止模型过拟合并处理不平衡数据的指南:
docs.microsoft.com/azure/machine-learning/concept-manage-ml-pitfalls
。 -
针对在 AzureML 和 Azure DevOps 中工作的数据科学家和应用程序开发人员的 MLOps 指南:
aka.ms/MLOps
。
第二章:第二章:部署 Azure 机器学习工作区资源
在本章中,你将学习如何通过 Azure 门户和 命令行界面(CLI)部署 Azure 机器学习(Azure ML)工作区。你还将了解在部署工作区时需要选择的部署参数。最后,你将拥有一个完全功能的 Azure ML 工作区,并能够访问所有已部署的 Azure 资源。
在本章中,我们将涵盖以下主要内容:
-
通过门户部署 Azure ML
-
通过 CLI 部署 Azure ML
-
部署 Azure ML 工作区的替代方式
-
探索已部署的 Azure 资源
技术要求
要创建 Azure ML 工作区,你需要一个 Azure 订阅。你可以通过访问 azure.microsoft.com/free/
获得免费试用。如果你想使用现有的订阅,你需要请求订阅所有者提供以下 资源组 项目:
-
packt-azureml-rg
-
packt-azureml-cli-rg
本书假设你在这些资源组中拥有 Contributor
角色或 Owner
角色。你将通过 Azure 门户和 Azure CLI 在这两个资源组中各部署一个 Azure ML 工作区。
Azure ML 需要在托管资源组的 Azure 订阅中注册以下提供程序:
-
Microsoft.MachineLearningServices
-
Microsoft.KeyVault
-
Microsoft.Storage
-
Microsoft.insights
-
Microsoft.ContainerRegistry
-
Microsoft.Notebooks
如果你是订阅的 Owner
,Azure 会在你部署资源时自动为你注册提供程序。否则,你需要按照 docs.microsoft.com/azure/azure-resource-manager/templates/error-register-resource-provider#solution-3---azure-portal
上的说明请求订阅所有者为你注册这些提供程序。
你需要一个启用了 JavaScript 的现代浏览器。访问 Azure 门户时需要此功能。
可选地,你可以从微软官方文档页面 docs.microsoft.com/cli/azure/install-azure-cli
下载并安装 Azure CLI。本书将教你如何使用嵌入在 Azure 门户中的在线版本。
你可以在 GitHub 上找到本章的所有命令和代码片段:bit.ly/dp100-ch02
。
通过门户部署 Azure ML
在本节中,你将通过 Azure 门户向导部署一个 Azure ML 工作区。首先,导航到 Azure 门户 portal.azure.com
。
有几种方法可以启动 Azure ML 工作区向导的创建。以下是三种最常见的方法:
- 从 Azure 门户的主页,您可以从页面顶部的 Azure 服务 标签下或左上角的 Azure 门户菜单 中选择 创建资源:
图 2.1 – 在 Azure 门户中创建资源
这种方法是最通用的,会要求您搜索要创建的服务。搜索 machine learning
并选择 Microsoft 提供的 Marketplace 搜索结果中的第一个选项:
图 2.2 – Azure Marketplace 中的 ML 搜索结果
您可以查看服务信息。完成后,点击 创建 按钮启动向导。
- 或者,您可以在 Azure 门户的顶部搜索栏中搜索
machine learning
,并选择 Machine Learning 选项,该选项出现在 服务 下:
图 2.3 – 在 Azure 门户中显示的 ML 服务搜索结果
这将引导您进入您可以访问的已经部署的 ML 工作区列表。如果这是一个新的订阅,则该列表为空;您可以点击工具栏中的 添加 按钮:
图 2.4 – 空服务列表中可用的创建按钮
- 最常见的方法是导航到您希望部署 Azure ML 工作区的资源组,并从工具栏中选择 添加:
图 2.5 – 资源组中的添加选项
搜索 machine learning
,并选择 Microsoft 提供的 Marketplace 搜索结果中的第一个选项。点击 创建 按钮以启动向导。此方法将自动填充向导中的资源组选项。
这三种方法都将引导您进入部署向导:
图 2.6 – ML 工作区创建向导
在下一部分,您将学习如何使用向导来部署 Azure ML 工作区。
使用部署向导
向导包括五个步骤或选项卡:
-
基础信息:这是关于您即将部署的工作区的基本信息。
-
网络设置:这是指您可能希望配置的高级网络选项。
-
高级设置:这包括高级身份验证和数据安全工作区选项
-
标签:这包括工作区中的相关标签
-
审核 + 创建:这是向导的最后一步;经过简短的验证过程后,您可以部署工作区。
在接下来的章节中,我们将回顾向导中所有可用的选项,并讨论在选择它们之前需要考虑的事项。
重要提示
如果你在向导的基本步骤中看到警告选定的订阅没有权限注册资源提供者,请确保向 Azure 订阅的所有者请求注册本章技术要求部分提到的资源提供者(如果缺少提供者)。如果这些提供者没有注册,将导致在向导的审查 + 创建步骤中出现验证错误。
基本信息
向导从基本步骤开始:
-
你需要首先指定的是
Contributor
访问角色,位于订阅级别。如果你是从packt-azureml-rg
启动向导的。 -
输入
packt-learning-mlw
,这是一个受Azure Cloud Adoption Framework(Azure CAF)命名规范启发的名称。 -
你需要选择一个区域来部署 Azure ML 工作区。该区域是你将要部署 Azure ML 工作区所需资源的 Azure 数据中心。列表已经筛选,仅包含具有该产品可用的所有数据中心。
在选择 Azure 区域部署资源时,有三件事需要考虑。它们包括合规性和数据驻留要求、服务可用性以及定价。一个例子可能是你需要使用某些具有特定图形处理单元(GPU)的专用虚拟机大小,例如 NV 系列,它配备了 Tesla M60——这种虚拟机大小在任何加拿大 Azure 区域都不可用。对于本书,你应该选择离你最近的区域。
-
可选地,你可以修改存储帐户或容器注册表名称中的
hyphen (-)
名称。此外,存储帐户、密钥库和容器注册表的名称必须是唯一的。你将在本章的探索已部署的 Azure 资源部分中了解更多关于这些资源的内容。如果已存在同名资源,系统会提示你更改名称。图 2.7展示了填写后的基本向导页面。
图 2.7 – 向导基本步骤中选择的信息
填写完所有基本信息后,你可以点击审查 + 创建按钮,并跳过所有中间步骤。这意味着你自动接受其余向导步骤的默认选项。然而,为了学习目的,你应该点击下一步:网络按钮,导航到下一个向导页面。
重要提示
直到 2020 年 9 月,这些向导的第一页要求选择Basic
版本和Enterprise
版本。Enterprise
版本提供了设计器和你将在本书中看到的自动化 ML 功能。从 2020 年 10 月起,所有功能都可以在Basic
版本中使用。原始认证中有关于哪个功能属于哪个版本的问题——这种情况在你的考试中应该不会遇到。
网络
在此向导页面,你需要决定如何计划连接到 Azure ML 工作区的数据平面。数据平面包含你工作区内所有以数据为中心的操作,例如使用 Azure ML Studio Web 界面、触发 ML 管道以及通过软件开发工具包(SDK)进行 API 调用。共有两种选择,如下所示:
-
公共端点(所有网络):这是默认选项,允许你从一个公开可访问的端点访问工作区。
-
私有端点:私有端点通过减少 Azure ML 工作区的攻击面来降低数据外泄的风险。一旦你决定为工作区提供私有端点连接,你将需要有一个虚拟机或虚拟专用网络(VPN)连接,以便访问你将暴露的私有端点:
图 2.8 – 私有端点保障对 Azure ML 工作区的访问
对于本书的目的,你将选择公共端点(所有网络):
图 2.9 – 创建向导中的网络选项
在下一页,你将选择高级选项。
高级
在此向导页面,你可以配置一些关于工作区安全性、元数据和指标数据隐私的选项。
-
你可以配置 AzureML 工作区使用的托管身份来进行身份验证并访问其他云资源。你可以选择系统分配的身份或用户分配的身份。系统分配的身份将在你部署 AzureML 资源时自动创建。相反,你可以在 Azure 门户中创建一个用户分配的托管身份资源,并在部署 AzureML 工作区时使用它。使用用户分配的选项允许你事先创建身份,配置对各种系统和数据源的访问权限,然后将其分配给工作区。你甚至可以在其他服务中使用相同的身份,例如 Azure 自动化帐户。你可以在本章的进一步阅读部分了解更多关于托管身份的信息。在本书中,你将使用默认选项,即系统分配的身份。
-
您可以定义 AzureML 工作区如何访问存储在默认存储帐户中的数据。基于凭据的访问使用存储帐户访问密钥来读取数据。您可以将此方法视为使用一个由所有有权访问 AzureML 工作区的人共享的密码来访问该存储帐户中的数据。在某些组织中,出于安全原因,禁止使用存储帐户访问密钥。在这种情况下,应该使用基于身份的访问。当您选择该选项时,AzureML 使用其托管身份来访问存储帐户中的数据并写入工件,如训练后的模型。此外,当数据科学家访问存储在默认存储帐户中的数据集时,他们的身份将传递到存储帐户中,以进行身份验证并提供数据。为了本书的目的,您将使用基于凭据的访问。
-
默认情况下,Azure 机器学习服务使用 Microsoft 管理的存储,并通过 Microsoft 管理的加密密钥存储度量和元数据。您可以指定自己的密钥来加密度量和元数据。为此,您需要选择存储在现有密钥保管库中的密钥。此操作将为您在一个新的资源组中提供一些额外的 Azure 资源,其中包括一个 Cosmos DB,资源组的名称将基于模式_,例如 packt-learning-mlw_ab07ab07-ab07-ab07-ab07-ab07ab07ab07。您对这些资源没有任何控制权。它们的生命周期管理由 Azure 机器学习工作区处理,这意味着当您删除工作区时,这些资源将自动删除。
-
向导步骤中的最后一个选项允许您限制在工作区收集的遥测和度量数据的数量。您可以通过选择
Environment
来实现:通常,您会为代码库设置多个环境,例如开发环境、质量保证测试环境和生产环境。为了本书的目的,您应该指定Development
值。
如果需要,您可以添加额外的元数据标签。标签的数量最多为 50,这是每个资源当前支持的标签数量上限:
图 2.11 – 创建向导中的标签步骤
完成后,点击下一步:审查 + 创建以进入向导的最后一步。
审查 + 创建
这是向导的最后一步。如果您忘记完成某些操作或在先前的步骤中做出了无效选择,您将收到错误消息,红点将指示出错的步骤:
图 2.12 – 基本步骤中出现错误验证,指示存在问题
-
如果一切正常,将会看到
keyVaultName
、storageAccountName
和applicationInsightsName
的 JSON 值。这个模板可以从该视图立即部署,或者你可以下载它,并将其用于在不同的订阅中配置这些资源。例如,假设你希望使用相同的资源结构来配置生产环境。你可以使用这个自动生成的 ARM 模板,修改目标 资源组、相应的资源名称和标签值,并将其部署到生产环境中。请注意,你指定的资源名称需要是唯一的,可能需要进行一些尝试,直到找到一个可用的名称。 -
点击 创建 按钮以配置你的 Azure ML 工作区资源。资源将开始部署。这个过程可能需要几分钟才能完成。
最后,你应该会看到一个名为 转到资源 的按钮,可以通过它导航到新配置的 Azure ML 工作区:
图 2.14 – “转到资源”按钮,表示 Azure ML 工作区部署成功
在接下来的章节中,你将学习如何使用 Azure CLI 部署相同的 Azure ML 工作区,Azure CLI 是在 Azure 中部署资源的最流行方式之一。
通过 CLI 部署 Azure ML
在这一节中,你将通过 Azure CLI 部署一个 Azure ML 工作区。你将使用 packt-azureml-cli-rg
资源组来部署资源;你将使用 Azure 门户中内置的 Bash 版本的 Azure Cloud Shell,这不需要在你的机器上进行任何安装。如果你愿意,你可以按照 docs.microsoft.com/cli/azure/install-azure-cli
中的安装说明在本地安装 Azure CLI,跳过 Azure Cloud Shell 的配置。
重要提示
在接下来的章节中,你将使用 Azure CLI 管理 Azure ML 工作区的各个方面。尽管本书假设你选择了 Azure Cloud Shell,但你将看到的语法适用于 Azure Cloud Shell 和在本地机器上运行的 Azure CLI。
部署 Azure Cloud Shell
Azure Cloud Shell 是一个基于浏览器的 Shell,允许你管理 Azure。你可以通过访问 shell.azure.com
专用页面或通过点击 Azure 门户顶部栏中的 Cloud Shell 图标来访问它:
图 2.15 – Azure 门户顶部栏中的 Cloud Shell 图标
让我们开始吧!
-
当你第一次调用 Cloud Shell 时,你将看到欢迎向导。选择
Bash
继续:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_02_016.jpg图 2.16 – Azure Cloud Shell 欢迎向导
-
Azure Cloud Shell 需要一个文件共享来保存文件。在向导的下一步中,您可以选择一个订阅;门户将自动为您部署一个存储账户。根据您在订阅级别的权限,向导将会创建一个新的资源组,或者使用一个您拥有
Contributor
角色的资源组。如果您想微调此过程,您可以选择 显示高级设置 选项,并手动创建新的资源组,或定义将被 Cloud Shell 使用的存储账户名称和文件共享名称:
图 2.17 – 配置 Cloud Shell 时的高级设置
-
对于本书的目的,您应允许向导自动为您创建一个存储账户,通过选择您拥有的 订阅,然后点击 创建存储 按钮而无需配置高级设置:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_02_018.jpg
图 2.18 – 创建存储账户向导页面,正在配置 Cloud Shell
稍等片刻,一个存储账户将会被创建,您的 Cloud Shell Bash 提示符应当出现:
图 2.19 – Azure Cloud Shell 中的 Bash 提示符
现在您已经拥有了一个 Cloud Shell,您可以使用 Azure CLI 来管理您的 Azure 资源;这将在下一部分中教您如何操作。
使用 Azure CLI
Azure CLI 是一个管理命令行工具,您可以通过输入 az
命令来调用它。通过这个工具,您可以配置和管理您的 Azure 资源。学习 Azure CLI 最简单的方式是使用任何命令末尾的 --help
参数。例如,您可以从 az --help
开始。这将列出所有可用的命令,如 login
命令、find
命令以及子组,包括 storage
子组:
图 2.20 – az 命令的子组和命令
您可以通过将不同的子组和命令附加到 az
命令来继续探索。例如,我们可以通过输入 az group --help
来探索 group
子组。接着,我们将研究 list
命令,通过输入 az group list --help
来发现所有可用的选项:
图 2.21 – az group list 命令帮助页面
Azure CLI 的另一个有用功能是 az find
命令,它可以在 Azure 文档中搜索相关信息:
图 2.22 – 使用 az find 查找 Azure CLI 命令
您可以通过运行az group list -o table
命令列出所有您有权限访问的资源组,其中我们已指定输出格式为表格:
图 2.23 – 通过 Azure CLI 列出您有访问权限的所有资源组
提示
如果您发现自己无法理解为什么输入的 Azure CLI 命令没有按预期工作,可以使用--verbose
标志。如果您需要更多的信息,可以将其与--debug
标志结合使用。
在接下来的部分中,您将探索可以通过 Azure CLI 执行的最常见操作。
在 Azure CLI 中进行身份验证
如果您收到错误信息,提示您使用az login
命令,这将提示您打开一个页面并输入代码。此过程称为交互式设备身份验证。您将在第七章中了解更多关于此过程的信息,The AzureML Python SDK部分。
访问网页并输入代码后,您需要使用具有访问权限的帐户登录 Azure 订阅,才能通过 Azure CLI 控制该订阅。这样做将授权 Azure CLI 代表您执行操作。您随时可以通过输入az logout
退出 Azure CLI。
选择活动的 Azure 订阅
如果您可以访问多个 Azure 订阅,则需要指定哪个订阅是活动订阅。要列出您的订阅,请输入az account list -o table
;您可以通过输入az account set --subscription "订阅名称或 ID"
来激活某个订阅,并传入要通过 Azure CLI 控制的订阅名称或 ID。
从 Azure CLI 创建资源组
互联网上最常见的 Azure CLI 命令之一就是创建资源组命令,它是一个虚拟文件夹,您可以在其中部署 Azure 资源。以下命令将创建一个名为packt-azureml-cli-rg
的资源组,并将该新资源组的记录保存在西欧的 Azure 数据中心中:
az group create --name packt-azureml-cli-rg --location westeurope
--name
参数的快捷方式是-n
。类似地,-l
是--location
的快捷方式。前面的命令现在可以写成如下:
az group create -n packt-azureml-cli-rg -l westeurope
-n
和-l
快捷方式在许多 Azure CLI 命令中都很常见。
重要提示
您需要在订阅级别拥有Contributor
角色,才能创建资源组。更准确地说,您需要一个允许执行Microsoft.Resources/subscriptions/resourceGroups/write
操作的角色,您将在本章后面出现的*理解基于角色的访问控制(RBAC)*部分中了解更多相关信息。
在接下来的部分中,您将学习如何在 Azure CLI 中安装扩展:一个用于管理 Azure ML 工作区的扩展。
安装 Azure ML CLI 扩展
要通过 Azure CLI 管理 Azure ML 工作区,你需要安装az extension add -n azure-cli-ml
。
要查看当前已安装的扩展及其版本,输入az extension list -o table
:
图 2.24 – 包括 azure-cli-ml 在内的所有已安装扩展的列表
要将已安装的扩展更新到最新版本,请输入az extension update -n azure-cli-ml
。
你刚刚安装的扩展已将ml
命令子组添加到 Azure CLI 中。你可以通过使用az ml --help
命令来检查该子组及其包含的命令。在下一节中,你将使用这些新命令来部署 Azure ML 工作区。
使用 az ml 命令部署 Azure ML
本节的目标是在名为packt-azureml-cli-rg
的资源组中部署名为packt-learning-cli-mlw
的 Azure ML 工作区,并附加Environment
标签,值为Development
。
要配置一个新的 Azure ML 工作区,你需要使用az ml workspace create
命令。
唯一需要的选项是--workspace-name
或-w
,即工作区名称。这样会在你的 Azure 订阅中创建一个新的资源组并在其中部署新的工作区。这要求你至少在订阅级别具有Contributor
角色,否则会收到授权错误。
为了指定你希望部署新工作区的目标资源组,你需要传递--resource-group
选项或-g
选项。
重要提示
一些常见的az ml
参数:-g
和-w
参数在所有 Azure ML CLI 命令中都是常见的,你将在本书的后续部分再次使用它们。
要将标签附加到新创建的资源,可以使用--tags
参数或-t
参数,后者使用key=value语法。
输入以下命令以部署请求的 Azure ML 工作区:
az ml workspace create -g packt-azureml-cli-rg -w packt-learning-cli-mlw -t Environment=Development
结果如下图所示:
图 2.25 – 通过 CLI 扩展部署 Azure ML 工作区
在本节中,你学习了如何使用 Azure CLI 部署 Azure ML 工作区。对于本书,你只需要通过用户界面配置的那个,下一节中你将删除刚刚配置的那个。
清理 CLI 资源组
本书的目的,你需要一个 Azure ML 工作区。你将使用通过 Azure 门户在packt-azureml-rg
资源组中部署的工作区。如果你愿意,可以通过执行以下命令删除新配置的 Azure ML 工作区:
az ml workspace delete -g packt-azureml-cli-rg -w packt-learning-cli-mlw --all-resources
这将删除 Azure ML 工作区以及前面步骤中配置的所有相关资源。
到目前为止,您已经探索了通过门户和 Azure CLI 部署 Azure ML 工作区的最常见方式。在下一节中,您将学习几种额外的方法,包括 DevOps 工程师首选的 ARM 方法。
部署 Azure ML 工作区的替代方法
还有其他方式可以部署 Azure ML 工作区:
-
创建 ARM 模板。这是 Azure 原生的资源描述方式,您可以通过 JSON 文件描述要部署的资源。有关 Azure ML 工作区的 ARM 模板示例,您可以访问
bit.ly/dp100-azureml-arm
。从 Azure CLI 部署此模板的命令如下所示:
az deployment group create --name packt-deployment --resource-group packt-azureml-rg --template-uri https://bit.ly/dp100-azureml-arm --parameters workspaceName=packt-learning-arm-mlw location=westeurope
您还可以通过选择在 Azure 门户资源创建向导最后一步的 创建 按钮左侧显示的 下载自动化模板 链接来找到 ARM 模板。
-
通过 Azure ML Python SDK,您将在 第七章 中了解 Azure ML Python。
-
通过 Azure 管理 REST API,如在
docs.microsoft.com/azure/machine-learning/how-to-manage-rest#create-a-workspace-using-rest
中所述。
在下一节中,您将探索已部署到目标资源组的 Azure 资源,并学习如何为同事提供工作区访问权限。
探索已部署的 Azure 资源
打开 Azure 门户并搜索资源组。选择图标以导航到您有权限访问的资源组列表,如下图所示:
图 2.26 – 导航到资源组列表
选择 packt-azureml-rg 选项并观察在该资源组内部署的资源:
-
ML 工作区资源命名为 packt-learning-mlw。这是您部署的主要资源。通过该资源,您可以管理工作区的各个方面。
-
一个名为 packtlearningm<random_number> 的 Azure 密钥保管库服务。此密钥保管库用于安全存储您将在 Azure ML 工作区中使用的凭据和访问密钥。
-
一个名为 packtlearningm<random_number> 的存储帐户。此存储帐户在配置过程中自动生成,用于存储来自工作区的文件,包括实验数据集和模型。
-
一个名为 packtlearningm<random_number> 的应用洞察帐户。这是您将在 Azure ML 工作区中发布的所有预测端点的监视服务。
这些是自动部署到 Azure ML 工作区的开箱即用组件:
图 2.27 – packt-azureml-rg 资源组中的资源列表
其实还有一个资源会在你运行第一个实验时自动配置:一个Azure 容器注册表(ACR)。这个注册表将托管各种Docker容器镜像,包括将要暴露一个网页服务器,该服务器会基于你训练的人工智能(AI)模型进行推理。
当你想为模型部署实时端点时,你可以在Azure 容器实例(ACI)或Azure Kubernetes 服务(AKS)中进行部署,这一操作可以在 Azure ML Studio 中完成。你将在本书的第五章《让机器进行模型训练》中首次部署 ACI,你会注意到一个 ACI 资源会出现在该资源组中,旁边是现有的资源。
理解基于角色的访问控制(RBAC)
Azure 提供了 RBAC,允许你定义每个角色在特定资源上可以执行的操作。每个角色会根据特定的范围分配,例如,如果你在某个资源组中被分配了贡献者角色,你只能在该资源组内配置资源,而无法在订阅级别进行操作。Azure 默认提供了三种常见的角色:
-
读取者:这个角色允许你浏览 Azure 资源,但无法修改或激活任何内容。
-
贡献者:这个角色基于读取者角色,并允许你编辑资源或在角色的范围内创建新资源。这个角色不允许修改附加到资源的权限。这意味着你不能授予其他用户对你可能配置的资源的权限。
-
所有者:这个角色可以执行贡献者角色所做的所有操作,还可以在此角色适用的范围内分配和修改角色。
让我们来查看在你部署 Azure ML 工作区的资源组中分配的角色。点击资源组的访问控制(IAM)标签,然后选择角色分配。在这个页面上,你将看到在资源组级别的角色分配列表。注意,你的账户至少已经在该资源组中被分配了贡献者角色,以便配置资源。如果你在列表中没有看到自己的账户,可能是因为你是管理员,试着查看经典管理员标签下的内容:
图 2.28 – packt-azureml-rg 资源组的访问控制(IAM)页面上的角色分配
当您配置工作区时,会创建一个新的系统分配的托管身份,名称与您配置的 Azure ML 工作区相同。这个身份自动被分配为资源组的贡献者角色。这允许 ML 工作区在该资源组内部署 ACI 资源并访问计算目标和数据存储。请注意,此身份由平台本身使用,不应被用于分配对外部资源的访问权限等。
接下来,您将了解该角色分配如何流向资源。
RBAC 继承
打开packt-learning-mlw资源,点击访问控制(IAM)选项卡,然后选择角色分配。
请注意,资源组中存在的角色会继承到 Azure ML 工作区资源:
图 2.29 – 来自资源组的 packt-learning-mlw 中的 RBAC 继承
角色分配从订阅继承到资源组,然后从资源组继承到资源。在订阅之上,还有一个分组层,称为管理组,它允许您构建包含其他管理组或订阅的层次结构。以下是整体 RBAC 继承模型的示意图:
图 2.30 – RBAC 继承模型
现在您已经知道如何分配现成的角色并理解继承是如何工作的,在下一节中,您将学习如何为您的 Azure ML 工作区创建自定义角色。
创建自定义角色
Azure 允许您创建自定义 RBAC 角色,您可以精细调整哪些操作被允许,哪些操作不被允许;这类似于允许列表和阻止列表。门户提供了一种图形化体验,允许您在资源组级别或更高的级别创建自定义角色。此体验的结果是一个 JSON 文件,如下所示的示例:
{
"Name": "ACI model deployer role",
"IsCustom": true,
"Description": "Can deploy registered model on ACI resources",
"Actions": [
"Microsoft.MachineLearningServices/workspaces/services/aci/write"
],
"NotActions": [ ],
"AssignableScopes":["/subscriptions/<subscription_id>"]
}
这是一个非常简单的自定义角色,名为ACI 模型部署者角色
,它为工作区的 ACI 服务提供写入访问权限——这是通过字面值Microsoft.MachineLearningServices/workspaces/services/aci/write
来编码的操作。
一个更复杂的自定义角色示例如下:
{
"Name": "Limited Data Scientist",
"IsCustom": true,
"Description": "Limited data scientist role",
"Actions": ["*"],
"NotActions": [
"Microsoft.MachineLearningServices/workspaces/computes/delete",
"Microsoft.Authorization/*/write"
],
"AssignableScopes": [
"/subscriptions/<subscription_id>/resourceGroups/<resource_group_name>/providers/Microsoft.MachineLearningServices/workspaces/<workspace_name>"
]
}
请注意,与之前的角色显式允许单个操作不同,此角色在允许的操作中使用了通配符(*
),这意味着它可以执行所有可用操作。为了限制这种效果,我们使用了 NotActions
部分,它指示哪些操作被明确拒绝。在此示例中,我们明确禁止删除计算资源的操作(Microsoft.MachineLearningServices/workspaces/computes/delete
),并且不能更新该工作区的任何授权方面(Microsoft.Authorization/*/write
)。注意,通配符可以用于匹配部分操作,例如在 Microsoft.Authorization
操作中,通配符匹配操作组,如 lock
、roleAssignments
和 roleDefinitions
。在我们的案例中,我们希望拥有此角色的用户不能向工作区添加新用户,因此我们希望拒绝 Microsoft.Authorization/roleAssignments/write
操作,而该操作已被我们使用的通配符表达式所覆盖。
最后,AssignableScopes
允许你指定此角色的作用范围。这是一个必填字段。在第一个示例中,你将此角色的作用范围限制在 ID 为 <subscription_id>
的 Azure 订阅中。在这种情况下,你可以将此自定义角色分配给属于该订阅 ID <subscription_id>
的任何资源组或资源。在第二个示例中,你将此自定义角色的作用范围限制在名为 <workspace_name>
的 Azure ML 工作区中,该工作区部署在名为 <resource_group_name>
的资源组中,并且属于 <subscription_id>
订阅。这意味着你不能将此自定义角色分配到其他地方,因为它具有非常特定的可分配作用范围。
如果你希望通过 Azure CLI 在 Azure 中部署自定义角色,可以使用以下命令:
az role definition create --role-definition custom_role.json
这里,custom_role.json
是包含你要在 Azure 中部署的自定义角色的 JSON 角色定义文件。
一旦角色部署到 Azure,你可以将该特定角色分配给某个用户。
在 Azure ML 工作区中分配角色
将角色分配给用户是一项特权操作,意味着你正在修改资源的权限。为此,你需要拥有你想要修改的资源的 Owner
权限。更准确地说,你需要一个允许你使用 Microsoft.Authorization/roleAssignments/write
操作的角色——这是内置的 Owner
角色所具备的权限。
如果你拥有 Owner
权限,你可以将你在前一部分中创建的 ACI 模型部署角色 分配给某个用户。你可以通过以下三种方式进行操作:
-
在 Azure 门户中,你可以访问你想要的 Azure ML 工作区,并通过 理解基于角色的访问控制(RBAC) 部分中看到的 访问控制(IAM) 选项卡将角色分配给用户。
-
通过 Azure CLI 执行以下命令:
user id. Then, you apply this assignment at the level of the Azure ML workspace. To get the user ID of the user with the email username@organization.org, you can use the following Azure CLI command:
az ad user list --query “[?mail==‘username@organization.org’].objectId” --output tsv
-
通过使用以下命令的 Azure ML CLI 扩展:
az ml workspace share -w packt-learning-mlw -g packt-azureml-rg --role "ACI model deployer role" --user username@organization.org
通过这些步骤,你可以通过创建自定义角色来与同事共享工作区,从而细化允许的权限。
总结
在这一章中,你了解了部署 Azure ML 的前提条件。你可以使用试用订阅,也可以在你公司订阅中请求一个资源组,在那里你至少具有该资源组的贡献者权限。你还深入了解了在开发环境中部署 Azure ML 工作区的两种最常见方式,并且你掌握了需要指定的参数。你还了解了部署工作区的其他方式,包括 ARM 模板,这是一种更适合 DevOps 的生产环境部署方式。在最后一部分,你了解了部署 Azure ML 工作区所涉及的资源,并学习了 RBAC 在 Azure 中的工作原理。此外,你还学习了如何使用内置角色或自定义角色来授予对已部署 Azure ML 工作区的访问权限。
在下一章,你将学习 Azure ML Studio 的使用体验,它是一个支持管理端到端 ML 生命周期的 Web 环境。
问题
在每一章中,你应该会找到几个问题,帮助你对本章讨论的主题进行知识检查:
-
以下哪些是适用于部署 Azure ML 工作区的方式?
a. 通过 azure-cli-ml 扩展的 Azure CLI
b. Azure 门户
c. 部署 ARM 模板
d. Azure ML Python SDK
-
你正在创建一个自定义角色,并希望拒绝删除工作区的权限。你需要在 JSON 定义的哪个部分添加
Actions
部分?b. 添加到 JSON 定义的
NotActions
部分c. 添加到 JSON 定义的
AssignableScopes
部分 -
在 Azure CLI 中,你需要安装什么才能部署 Azure ML 工作区?
进一步阅读
本节提供了一些有用的网络资源,可以帮助你拓展对 Azure 的知识和理解:
-
如果这是你第一次访问 Azure 门户,你可能希望先阅读有关它的概述,地址为
docs.microsoft.com/azure/azure-portal/azure-portal-overview
。如果你想了解更多关于 Cloud Shell 的功能,可以访问docs.microsoft.com/azure/cloud-shell/overview
。 -
你可以在
azure.microsoft.com/global-infrastructure/geographies/#choose-your-region
了解更多关于选择资源区域的信息。 -
如果你有兴趣学习如何使用 Azure 门户创建和部署 ARM 模板,你可以阅读文档:
docs.microsoft.com/azure/azure-resource-manager/templates/quickstart-create-templates-use-the-portal
。 -
要查看支持 Azure ML 服务的数据中心完整列表,请访问
azure.microsoft.com/global-infrastructure/services/?regions=all&products=machine-learning-service
。 -
你可以在
docs.microsoft.com/azure/azure-resource-manager/management/resource-name-rules#microsoftmachinelearningservices
了解更多关于 Azure 资源名称规则的内容。 -
你可以在
docs.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/naming-and-tagging
阅读更多关于命名最佳实践的信息。 -
你还可以阅读更多关于如何使用资源标签的信息,链接:
docs.microsoft.com/azure/azure-resource-manager/management/tag-resources
。微软云采用框架中有一份与元数据标签相关的最佳实践列表,你可以在docs.microsoft.com/azure/cloud-adoption-framework/ready/azure-best-practices/naming-and-tagging#metadata-tags
阅读。 -
如需了解更多关于 Azure ML 私有链接功能的信息,请参考
docs.microsoft.com/azure/machine-learning/how-to-configure-private-link
。 -
你可以在
docs.microsoft.com/azure/machine-learning/concept-enterprise-security#securing-compute-targets-and-data
了解更多关于该系统托管身份概念的信息,该概念被融入到 Azure ML 工作区中。 -
你可以在
docs.microsoft.com/azure/machine-learning/how-to-assign-roles
了解更多关于默认 Azure 角色(如Owner
、Contributor
和Reader
)以及如何为 Azure ML 工作区创建自定义角色的内容。 -
了解更多关于托管身份的信息:
docs.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview
-
AzureML 基于身份的数据访问:
docs.microsoft.com/azure/machine-learning/how-to-identity-based-data-access
第三章:第三章:Azure 机器学习工作室组件
在本章中,你将探索 Azure 机器学习工作室(Azure ML Studio)的 Web 界面,这是一种用于管理端到端机器学习生命周期的沉浸式体验。你将获得有关可用组件的概述,这些组件允许你管理工作区资源、编写机器学习模型并跟踪你的资产,包括数据集、训练过的模型及其发布的端点。
在本章中,我们将覆盖以下主要主题:
-
与 Azure ML 资源交互
-
探索 Azure ML Studio 体验
-
在 Azure ML Studio 中编写实验
-
在 Azure ML Studio 中跟踪数据科学资产
-
在 Azure ML Studio 中管理基础设施资源
技术要求
你需要有一个 Azure 订阅。在该订阅下,你需要一个 packt-azureml-rg
。你还需要拥有 Contributor
或 Owner
权限的 packt-learning-mlw
。如果你按照 第二章 中的说明操作,这些资源应该已经对你可用,部署 Azure 机器学习工作区资源。
与 Azure ML 资源交互
在上一章中,你在 packt-azureml-rg
资源组内部署了 packt-learning-mlw
机器学习资源。通过在顶部搜索栏中输入资源名称并从结果列表中选择该资源来导航到已部署的资源:
图 3.1 – 导航到 Azure 机器学习资源
这将把你带到该资源的概述窗格,如 图 3.2 所示:
-
在左侧,你将看到大多数 Azure 服务都有的典型资源菜单。这个菜单也被称为左侧窗格。
-
在顶部,你将看到命令栏,它允许你下载
config.json
文件,该文件包含连接到工作区所需的所有信息,使用 Python SDK 连接到工作区,并删除机器学习工作区。 -
在命令栏下方,你可以看到工作窗格,这是你可以查看与工作区相关的信息的地方,包括链接到存储帐户、密钥保管库、容器注册表和与此工作区一起部署的应用程序洞察资源:
图 3.2 – 机器学习资源页面
在左侧窗格中,你将找到所有 Azure 资源中常见的选项。包括以下指示性列表:
-
访问控制 (IAM)
,你可以使用它来配置特定工作区的角色访问,包括分配你在前一章中创建的自定义角色。 -
诊断设置
,允许你为 Azure 机器学习工作区生成的日志和指标配置流式导出到你选择的目的地。通常,这个目的地是日志分析,它是Azure 监视的一部分。 -
新支持请求
,如果你在使用工作区时遇到问题,可以轻松请求支持。
在设置
部分,你还会注意到私人端点连接
选项,它允许你配置一个 Azure 私人端点。这是一个虚拟网络接口,你可以将其附加到虚拟网络上。它允许该虚拟网络内的所有资源私密且安全地连接到你的 Azure 机器学习工作区。一旦启用此选项,所有数据平面操作,如使用 Azure ML Studio、API(包括发布的管道)或 SDK,都需要通过此私人端点进行。
从左侧面板选择概览选项,并点击工作面板中间的启动工作室
按钮。这将在你的浏览器中打开一个新标签页,带你进入 Studio 体验。
探索 Azure ML Studio 体验
Azure 机器学习提供了一个专门的 Web 界面,允许你实施无代码和代码优先的数据科学计划。你可以通过 Azure 门户资源中的启动工作室
按钮访问该 Web 界面,正如你在前一部分所看到的,或者直接访问ml.azure.com
页面。采用后者的方法,如果这是你第一次访问 Studio 站点,你需要手动选择Azure Active Directory租户、订阅以及你想要连接的机器学习工作区的名称,如图 3.3所示。
图 3.3 – 在 ml.azure.com 中选择机器学习工作区
一旦你选择了工作区,你将进入 Azure 机器学习 Studio 的主页,如图 3.4所示。
图 3.4 – Azure 机器学习 Studio 主页
在左侧,你有一个菜单,提供以下类别,所有这些都会在接下来的部分中探索:
-
作者:使用创作工具构建、训练、评估和部署机器学习模型。
-
资源:准备数据,运行和监控作业,查看和部署模型,以及管理实时和管道端点。
-
管理:查看和管理工作区的资源。
你可以通过点击左上角的图标来收起菜单,如下图所示:
图 3.5 – 收起的侧边菜单
在右上角,如图 3.6所示,你有以下选项:
-
**登录信息:**显示登录用户的信息,并允许你登出。
-
**工作区选择器:**允许你更改正在使用的 Azure 机器学习工作区。
-
**提供反馈:**允许你发送笑脸或皱眉表情给 Azure 机器学习团队,帮助他们改进你不喜欢的地方或突出你喜欢的部分。
-
**帮助:**提供帮助资源和文档的链接。该菜单还允许你运行工作区诊断,识别工作区的潜在配置问题。
-
**设置:**在此,你可以选择深色主题选项,并更改 Studio 的语言和地区格式。
-
**通知:**该菜单选项允许你管理将收到的工作区通知。例如,实验运行完成后,你会收到通知。
图 3.6 – 右上角菜单
在下一节中,我们将查看左侧菜单的各个部分,从创作部分开始。
在 Azure ML Studio 中创作实验
Azure ML Studio 提供以下创作体验:
-
笔记本:允许你直接在工作区内使用文件、文件夹和Jupyter 笔记本。你将在第七章,AzureML Python SDK 中使用笔记本,在那里你将看到以代码为主的数据科学过程。
-
**自动化机器学习(Automated ML)**允许你快速测试多种算法组合,以找到基于你定义的成功指标的最佳模型。你将在第五章,让机器完成模型训练中了解更多内容。
-
设计器允许你通过连接数据集和模块(如数据转换和模型训练)在流程中可视化设计实验。通过在画布上设计这个流程,你可以在不编写任何代码的情况下训练和部署机器学习模型,你将在第六章,视觉模型训练与发布中详细了解这一内容。
-
数据标注允许你创建标注项目来整理数据集。这使你能够将标注工作扩展到多个标注员,协调标注工作的效率,并通过机器学习辅助(ML Assist)增强标注员的生产力,ML Assist 会在你标注数据时自动进行训练。
自动化机器学习(Automated ML)和设计器是无代码/低代码数据科学方法的一部分,你将在本书的后续章节中深入探讨这一点。
重要提示
数据标注目前位于左侧菜单的管理部分。然而,它在逻辑上是 Azure ML Studio 提供的创作体验的一部分。由于 Studio 体验不断发展,这项功能可能会在不久的将来移至创作部分。
在 Azure ML Studio 中跟踪数据科学资产
在资产部分,您可以跟踪所有与机器学习操作相关的组件。每个数据科学项目都有以下资产:
-
数据集是您可以找到注册数据集的地方。这是一个集中注册表,您可以在其中注册数据集,避免同事们不得不在相同数据的本地副本上工作,或者更糟的是,数据的子集。您将在第四章,配置工作区中使用数据集。
-
实验是一个集中式的位置,用于跟踪脚本执行或运行的组。当您训练模型时,您会记录该过程的各个方面,包括您可能需要用来比较性能的指标。为了将所有尝试归为同一上下文,您应将所有运行提交到同一个实验名称下;然后,结果将在此区域中显示。您将在第五章,让机器进行模型训练中使用实验。
-
管道允许您创建和管理协调机器学习步骤的工作流。例如,一个非常常见的机器学习训练工作流包含三个步骤:数据处理、模型训练和模型注册。管道可以是机器学习训练管道,就像前面的示例所示,或者是批量数据推理管道——换句话说,管道使用机器学习模型对数据集进行推理。在本节中,您可以查看所有已注册的管道,监控它们的执行情况,并查看发布的端点,这些端点允许您临时触发其中的一个管道。您将在第十一章,使用管道中使用管道。
-
模型是您的机器学习模型的注册表。在这里,您可以跟踪它们的版本。它允许您通过网页界面立即部署。要发布模型,您需要先在该注册表中注册它。您将在本书的整个过程中使用该注册表,从第五章,让机器进行模型训练开始。
-
端点由两部分组成:实时端点和管道端点。实时端点是托管在Azure 容器实例(ACI)或Azure Kubernetes 服务(AKS)中的 Web 应用程序,它们暴露一个 REST API,允许第三方应用程序使用您已部署的机器学习模型。而管道端点是允许您触发之前在相应部分注册的管道的端点。
所有前述的经验是相互关联的,您会发现自己在探索实验时会从一个部分导航到另一个部分:
图 3.7 – Azure ML 中的互联资产
运行机器学习实验的前提是拥有能够执行训练脚本的计算资源。你还需要能够存储并提供访问你注册为数据集的数据的引擎。这些资源将在下一部分进行管理。
在 Azure ML Studio 中管理基础设施资源
要进行实验,你需要一些基础设施资源来进行消耗。你可以通过以下几个部分进行配置和管理:
-
计算提供了你可以在实验中使用的托管计算基础设施。这让你可以注册并利用可能拥有多个 CPU 和 GPU 以及能够加载海量数据集的内存的虚拟机。作为托管服务的计算资源意味着你不必担心安装操作系统或保持它的更新和修补。你将在第四章中了解更多关于各种计算选项的内容,配置工作区。
-
数据存储包含了访问各个引擎中数据所需的连接信息,如Azure Blob 存储和Azure SQL 数据库。这些信息用于访问你在计算部分注册的数据集。你将在第四章中了解更多关于数据存储的概念,配置工作区。
-
链接服务允许你查看外部服务与工作区之间的连接。例如,你可以连接你的 Synapse Spark 池,并使用 Spark 运行数据准备任务。
-
环境允许你指定代码执行所需的软件要求。例如,如果你正在训练一个 PyTorch 模型,你将需要在执行训练脚本的环境中安装 PyTorch 库。你将在第八章中了解更多关于环境的内容,使用 Python 代码进行实验。
总结
Azure Machine Learning Studio 提供了一个网络环境,在这里你可以管理 Azure Machine Learning 工作区中的所有工件。你可以查看和管理你的 Jupyter 笔记本、数据集、实验、管道、模型和端点。你还可以管理将在实验中使用的计算资源和数据存储。Studio 还提供了交互式工具,你可以使用这些工具进行无代码数据科学实验,这些内容将在本书的后续章节中深入讲解。AutoML 向导是第一个内置于 Azure ML Studio 的无代码体验,它允许你运行自动化机器学习实验。Azure Machine Learning 设计器是下一个无代码体验,帮助你通过图形化方式设计管道和创建工作流,无需编写代码。这个体验还支持低代码场景,在需要时你可以插入代码片段。最后,数据标注项目让你能够创建、管理并监控需要标注数据的繁琐项目。
要开始使用这些交互式工具,你至少需要配置一个计算资源。此外,你还需要注册你的数据存储。这些数据存储将托管你在模型训练阶段使用的数据。
在下一章中,你将学习如何通过 Azure ML Studio 执行这些操作。
第四章:第四章:配置工作区
在本章中,您将进入 Azure 机器学习(ML)Studio 网页界面,并学习如何配置运行实验所需的基础设施。接着,您将学习如何配置或附加到现有的计算资源,并建立 Azure ML 工作区与托管您数据的各种数据存储之间的连接。配置好这些资源后,您将能够注册数据集并探索 Azure ML 提供的监控数据集的功能。
在本章中,我们将涵盖以下主要主题:
-
配置计算资源
-
连接到数据存储
-
使用数据集
技术要求
您需要拥有一个 Azure 订阅。在该订阅中,您需要一个 packt-azureml-rg
。您需要拥有 Contributor
或 Owner
权限的 packt-learning-mlw
,如第二章所述,部署 Azure 机器学习工作区资源。
配置计算资源
计算资源使您能够在数据探索分析、训练阶段以及在操作化机器学习模型时执行代码脚本。Azure ML 工作区提供以下类型的计算资源:
-
计算实例:这些是专门为每位在 Azure ML 工作区 中工作的数据科学家配置的虚拟机。
-
计算集群:这些是可扩展的计算集群,可以并行运行多个训练或推理步骤。
-
推理集群:这些是 Azure Kubernetes 服务(AKS)集群,可以将 Docker 镜像转化为可操作的服务,通过 REST API 暴露您的模型。
-
附加计算:这些是现有的计算资源,如 Ubuntu 虚拟机(VMs)或 Synapse Spark 池,可以附加到工作区中,用于执行训练或推理管道的某些步骤。
当您访问 管理 | 计算 部分时,您将能够查看并管理这些类型,通过选择相应的标签,如下图所示:
图 4.1 – Azure ML Studio 中的计算类型
在接下来的章节中,您将发现每种计算类型,并了解您必须注意的重要配置参数。
重要说明
配置和附加计算资源也可以通过 Azure ML CLI 和 Azure ML Python SDK 完成。您将在第七章中看到通过 Python SDK 配置相同资源的示例,Azure ML Python SDK。
计算实例
计算实例是一个虚拟机,将为您作为数据科学家的日常工作提供支持。这是一个基于 Ubuntu 的托管工作站,预先配置了数据科学工具,如 Jupyter Labs、RStudio 以及各种深度学习框架,如 PyTorch 和 TensorFlow。托管意味着您无需手动更新操作系统或确保其修补最新的安全漏洞。
重要说明
计算实例非常适合那些可能无法在公司电脑上安装 Python 的企业用户。计算实例仅要求您具备现代网页浏览器和互联网连接。连接到计算实例后,您将能够访问所有工作 Azure ML 工作区所需的软件包。
您的所有文件和偏好设置都安全地存储在虚拟机的/home/<username>/cloudfiles/code/
文件夹中。此文件夹不属于虚拟机的磁盘,但它是从您 Azure ML 存储帐户中位于远程文件共享的位置挂载的,如下图所示。此文件共享允许您跨多个计算实例共享代码文件和笔记本,您甚至可以在自己的计算机上本地挂载该文件夹:
图 4.2 – 挂载到多个计算实例上的远程文件共享
计算实例主要用于支持 Studio 网页界面的 笔记本 功能,但它们也可以用于小规模的训练和推理。实际上,计算实例提供了作业排队功能,允许您每个核心运行多达两个作业,这对于测试和调试场景非常有用。稍后在本章的 数据漂移检测 部分,您将使用计算实例执行数据漂移分析。在下一节中,您将学习如何配置您的第一个计算实例。
配置计算实例
让我们学习如何配置一个实例:
-
在 Studio 网页界面中,导航至 管理 | 计算 部分并选择 计算实例 标签。如果尚未配置计算实例,您将看到计算实例的简短介绍:您可以点击 新建 按钮启动计算配置向导,如 图 4.3 左侧所示。如果工作区中已经配置了其他计算实例,您可以通过点击顶部菜单中的 新建 按钮启动相同的向导,如下图右侧所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_003.jpg
图 4.3 – 启动计算实例配置向导
-
首先,您需要选择虚拟机的大小。您可以指定是否需要启用 GPU 的机器或普通的 CPU 机器。如果您计划运行计算机视觉实验或深度神经网络训练,GPU 机器可以加速训练和推理过程,前提是框架支持 GPU。此外,您可以添加过滤器来限制列表,以满足您工作空间的最低要求。在我们的例子中,我们将选择一台仅包含 CPU 的计算实例,且至少配备 14 GB 的内存和 4 核心,如下图所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_004.jpg
图 4.4 – 计算实例配置向导的第一页
在结果表中,您可以查看每个虚拟机的特性,并估算其每小时的费用。
重要提示
虚拟机的费用取决于其大小,同时也取决于其配置所在的区域。例如,在编写本书时,东部美国 2 区的每小时平均价格最低,而西欧是最昂贵的区域之一。
下表包含了关于结果列表中前几个虚拟机大小的更多信息。Standard_D3_v2 和 Standard_DS3_v2 虚拟机的主要区别在于其使用的高级存储磁盘。这种磁盘提供了磁盘缓存功能,使得虚拟机能够实现超越底层磁盘性能的表现。因此,向导默认建议选择 Standard_DS3_v2 虚拟机大小:
图 4.5 – 基于 docs.microsoft.com 网站的计算实例大小比较
-
保持选择 Standard_DS3_v2 大小,然后点击 下一步 来配置计算实例的高级设置:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_006.jpg
图 4.6 – 计算实例配置向导的第二页
重要提示
如果您使用的是免费试用版,则您将有一个固定的核心配额,除非切换到按需付费订阅,否则无法更改。您可能需要选择 Standard_DS2_v2 以减少计算实例使用的核心数量。您将需要至少两个核心来为第 第七章 中要配置的计算集群提供支持,《Azure ML Python SDK》。
-
现在,您需要提供计算机名称。这是您将用来引用特定计算机的名称。计算机名称在 Azure 区域内应该是唯一的。这意味着您可能需要将名称更改为一个唯一的名称,可能是通过在名称中添加一些数字,例如
ds-021-workstation
。 -
可选地,启用 SSH 访问标志。此选项允许你指定 SSH 密钥的公钥部分,从而使你能够远程访问计算实例。向导允许你在向导内直接生成该密钥。或者,你可以按照 生成 SSH 密钥对 部分中的说明生成密钥。如果你仅计划使用工作室体验进行数据科学实验,则不需要此选项:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_007.jpg
](https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_009.jpg)
图 4.7 – 启用计算实例的 SSH 访问
-
点击 创建 按钮以配置计算实例。这将完成向导。在此时,计算实例将被创建并启动:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_008.jpg
](https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_007.jpg)
图 4.8 – 等待计算实例创建并过渡到运行状态
在接下来的章节中,如果你不熟悉生成 SSH 密钥的过程,将简要介绍基于 SSH 密钥的认证以及如何生成 SSH 密钥。此外,你还将探索向导的高级选项,这些选项本书不需要使用。
生成 SSH 密钥对
SSH 密钥对由两个文件组成——一个私钥和一个公钥。该密钥对允许终端用户使用公钥部分加密文本。加密后的文本只能由 SSH 密钥的私钥部分解密,如下图所示。SSH 密钥的私钥部分需要存储在安全的位置,而公钥部分则可以自由分发给任何人:
图 4.9 – 私钥可以解密使用公钥加密的信息
利用 SSH 密钥对的这个特性,你可以将公钥配置到服务器上,从而使服务器能够使用它进行认证。简而言之,当你尝试连接到服务器时,服务器将创建一个随机的挑战,并使用你在配置计算实例时设置的公钥部分进行加密。你需要使用私钥部分解密该挑战,并以正确的答案回应,验证你成功解密了服务器的消息。这个流程将允许你通过 SSH 访问远程服务器。
有多个开源工具可以帮助你在本地计算机上生成 SSH 密钥对。Azure 提供了一种非常简单的方法,可以通过浏览器生成 SSH 密钥对,并将密钥的公钥部分作为资源存储在 Azure 门户中。让我们来看看:
-
访问
portal.azure.com
,点击SSH 密钥
资源并点击 创建:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_010.jpg图 4.10 – 市场中的 SSH 密钥资源
-
选择
packt-azureml-rg
资源组并提供一个密钥对名称,例如azureml-compute
。点击 查看 + 创建 进入向导的最后一步:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_011.jpg图 4.11 – 生成 SSH 密钥对
-
选择
azureml-compute.pem
。确保将文件存储在安全的位置:
图 4.12 – 存储 SSH 密钥的私钥部分
完成此过程后,SSH 密钥资源将在你在向导中选择的资源组中显示:
图 4.13 – 你部署的 SSH 密钥资源
在该资源中,你可以找到 SSH 密钥的公钥部分,你可以将其复制并粘贴到你在配置计算实例部分看到的计算实例配置向导步骤中:
图 4.14 – 生成的密钥对的公钥部分。在顶部,你可以看到已下载的私钥部分
重要提示
SSH 密钥资源要求 Microsoft.Compute
提供程序在你计划使用的 Azure 订阅中注册。如果你是订阅的所有者,Azure 会在你部署资源时自动为你注册提供程序;否则,你需要请求订阅所有者为你注册该提供程序,并按照第二章中提供的说明进行操作,部署 Azure 机器学习工作区资源。
到目前为止,你已经学习了如何配置计算实例并配置 SSH 密钥,这将允许你远程连接到该计算实例。你还可以使用这个 SSH 密钥连接到远程集群,接下来你将在计算集群部分进行配置。在接下来的子章节中,你将了解计算实例配置向导的高级配置选项。
高级计算实例设置
在计算资源配置向导中,你可以选择性地配置一些高级设置。其中之一是启用虚拟网络选项,它允许你将配置好的计算资源附加到一个虚拟网络中,并连接到该网络的特定子网,如下图所示:
图 4.15 – 将计算实例附加到特定子网
此功能解锁了多种高级网络拓扑。最常见的情况是当你计划访问无法通过互联网访问的数据源时。例如,如果你有一个存储帐户,并且该帐户的防火墙设置为禁止互联网访问,通常会在特定子网中部署一个私有端点,以允许访问该存储帐户。当你配置计算实例并通过上述选项将其设置为与该子网相同时,计算实例将能够访问受保护的存储帐户,如下图所示:
图 4.16 – 通过私有端点访问仅可通过私有端点访问的存储帐户
向导中显示的另一个高级选项是分配给其他用户。此选项与第二章中创建自定义角色部分相关,该部分介绍了如何为你的 Azure ML 工作区创建自定义角色。在企业环境中,通常不允许最终用户自行部署任何计算实例。这是通过创建自定义角色并仅允许以下虚拟机操作来实现的:
-
Microsoft.Compute/virtualMachines/start/action
-
Microsoft.Compute/virtualMachines/restart/action
-
Microsoft.Compute/virtualMachines/deallocate/action
在这些环境中,管理员(或具有Microsoft.Compute/virtualMachines/write权限的人)可以配置计算实例并将其分配给某个可能无法自行配置计算实例的特定人员,如下图所示:
图 4.17 – 将已配置的计算实例分配给另一位数据科学家
尽管这是网页界面向导提供的一个很好的功能,但当你需要为多个数据科学家配置多个计算实例时,它的扩展性较差。因此,大多数情况下,管理员更喜欢通过ARM 模板部署计算实例。管理员可以通过该向导生成并下载模板,然后使用Azure CLI将其部署给多个用户,并将用户 ID 作为参数传递,正如你在第二章中所见,部署 Azure 机器学习工作区资源。
到目前为止,你已经了解了如何配置计算实例。在下一节中,你将学习如何管理计算实例。
管理计算实例
一旦你至少配置了一个计算实例,管理 | 计算 | 计算实例界面将变成一个列表,显示工作区中可用的实例。默认情况下,列表会过滤,仅显示你可以使用的实例,也就是说那些你自己配置的或其他人代表你配置的实例:
图 4.18 – 计算实例列表
从这里,你可以启动、停止、重启和删除计算实例。当你启动一个计算实例时,资源的状态会变为运行中,并且应用程序列会提供链接,打开该计算实例的终端,或者打开 Jupyter、JupyterLab、RStudio 和 VS Code 等第三方创作体验。
在你打开这些三种编辑体验之前,你必须接受一个重要的通知,关于你可以在这些环境中执行的代码,如下图所示:
图 4.19 – 关于你在 Azure ML Studio 执行代码的警告消息
你需要理解,如果你从互联网下载一个随机脚本,它可能包含恶意代码,可能会让其他人窃取数据或甚至访问你账户的令牌,这可能使他们能够代表你访问 Azure 资源。
JupyterLab 和 Jupyter 是非常流行的 Jupyter 笔记本创作体验、Python 脚本编辑以及访问终端执行各种命令的工具,如下图所示。当你点击打开这些编辑体验时,会打开一个新的浏览器标签页。如果你查看新标签页上的 URL,你会注意到它由计算实例的名称、该计算实例所在的区域以及后缀instances.azureml.ms组成。这就是为什么在前面一节中,配置计算实例时,当你配置计算实例时,必须选择一个在你所在 Azure 区域内唯一的名称的原因。
所有这些第三方创作体验都有着强大的社区支持,你可以在已经熟悉的情况下使用它们。然而,请注意,Azure ML 提供了作者 | 笔记本体验,这是基于 JupyterLab 的增强编辑体验,增加了像 IntelliSense 这样的功能,从第七章《Azure ML Python SDK》开始,你将使用到这些功能:
图 4.20 – JupyterLab 编辑体验
点击应用程序栏中的终端链接将打开一个新的浏览器标签页。你将被转到作者 | 笔记本部分。在这里,会打开一个基于 Web 的终端,允许你向计算实例发出命令:
图 4.21 – 通过浏览器获取终端访问
当你不需要计算实例时,比如在周末,你可以停止它以避免产生费用。计算实例将转为已停止状态,且应用程序链接将被禁用。启动已停止的计算实例需要一些时间。
如果你已经完成了与计算实例的工作,例如项目的研究阶段已经结束,你可以删除它,以释放占用的 CPU 核心,这些核心会计入你订阅的配额。你可以通过点击菜单中相应的查看配额选项来查看当前的配额,如图 4.18所示。
现在,你可以停止你的计算实例。你将在数据漂移检测部分重新启动它:
图 4.22 – 已停止的计算实例
在本节中,你学会了如何配置和管理计算实例,这些实例将为你提供必要的计算能力,用于编写笔记本和脚本,并可能执行小规模的训练和推理管道。在下一节中,你将学习如何配置计算集群,这是一种计算资源,能够根据需要进行扩展或缩减,以同时支持多个训练和推理管道。
计算集群
计算集群是一组相互连接的虚拟机,这些虚拟机可以根据任务队列的需要进行扩展或缩减。这意味着,集群在不需要时可以只有几个节点,甚至没有节点,从而避免产生不必要的费用;而在需要运行大量任务并行处理或执行分布式机器学习训练过程时,它也可以扩展到多个节点。
创建过程与配置计算实例非常相似。让我们来看看:
-
首先,点击计算集群标签页中的新建按钮,如图 4.23所示。https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_023.jpg
图 4.23 – 创建新的计算集群
-
您会注意到,与计算实例相比,计算集群配置向导提供了一个额外的选项,称为虚拟机优先级,如下图所示。低优先级虚拟机利用您希望配置计算集群的 Azure 区域中的剩余容量。这些虚拟机的价格相比专用虚拟机大幅降低,但计算节点在您需要时可能无法提供,甚至可能在计划任务完成之前就被回收。这意味着,您可能需要等待较长时间才能分配到这样的虚拟机,而且在训练过程中某个步骤可能会中断执行。由于低优先级虚拟机具有这些特点,通常在您有一些对时间不敏感的任务,且这些任务由小的运行步骤组成,或者这些步骤能够自动保存其状态并在被驱逐后恢复执行时,您会使用这种类型的集群。为了本书的目的,您可以选择专用选项,以避免在分配计算节点时出现意外的长时间等待。
-
在虚拟机类型选项中,选择GPU,并从从推荐选项中选择列表中选择最便宜的虚拟机大小,如图 4.24所示。
重要提示
默认情况下,免费试用订阅不允许您配置 GPU 计算。即使您更改为按需订阅,您仍然需要通过 Azure 门户提交请求以增加配额。如果遇到配额不足的问题,您可以选择基于 CPU 的计算,而不是基于 GPU 的计算。为了本书的目的,您无需使用基于 GPU 的集群。
图 4.24 – 计算集群配置向导的第一页
-
单击下一步以继续进入向导的第二页:
-
在向导的第二页中,您需要指定一个集群名称。这个名称将在网页界面和代码中用于引用该集群,因此请确保选择一个能代表该集群用途的名称,例如
gpu-cluster
:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_025.jpg图 4.25 – 计算集群配置向导的第二页
您还可以调整节点的最小和最大数量,以及在集群缩减之前的空闲秒数。每次请求集群执行任务时,任务将添加到集群的调度器中。如果集群没有足够的节点来执行调度的任务,它将通过向集群添加计算节点来进行扩展。向集群添加节点需要一些时间,因为您需要分配虚拟机。因此,在调度任务完成后,集群不会立即释放虚拟机,而是可以等待定义的空闲时间,以防新的任务被调度。
与计算实例类似,如果您希望远程连接到计算集群节点以排查作业执行问题,您可以 启用 SSH 访问。由于集群节点是临时的,向导允许您指定 管理员密码,如果您希望的话,而不是使用 SSH 公钥,如下图所示:
图 4.26 – 计算集群允许您使用管理员密码而不是 SSH 公钥
在 高级设置 下,您可以找到 启用虚拟网络 选项,您在上一节查看计算实例时也看到了这个选项。除了这个选项,您还有一个选项是 为计算集群分配托管身份:
图 4.27 – 为计算集群分配托管身份
Azure 允许您为计算集群节点附加 Azure Active Directory(AAD)身份,这样在这些虚拟机中执行的代码可以使用该身份访问 Azure 资源。托管身份消除了在脚本中存储凭据的需求。身份与特定的虚拟机关联,您的代码可以通过 Azure 实例元数据服务或 Python SDK 请求 AAD 访问令牌,无需密码,只要代码在该特定虚拟机中执行。
-
本书的目的下,您不需要在此修改任何选项。将集群命名为
gpu-cluster
,然后点击 创建 来创建您的第一个零节点 GPU 基础计算集群:
图 4.28 – 您的第一个基于 GPU 的计算集群已准备好使用
请注意,在前面的截图中,计算集群已成功配置,但其中没有节点,这意味着它不会产生任何费用。您还可以在此列表中看到以下指标:
-
空闲节点:这些是等待任务调度或在空闲时间过去后等待被释放的节点。
-
忙碌节点:这些是当前正在执行任务的节点。
-
未配置的节点:这些是尚未分配的节点,但如果计划任务的数量增加,它们可能会被分配。
从此列表中,你可以删除集群,如果你不再需要它的话。
如果你点击计算集群的名称,你将能够看到集群的详细信息,如下图所示。从此视图,你可以编辑最小和最大节点数、集群缩减前的空闲秒数,并更改之前配置的托管身份分配方式。事实上,数据科学团队通常会在早晨修改他们预定义的计算集群配置,以便确保集群中至少有一个节点,这样他们就不必等待第一个节点分配。当一天结束时,他们会将设置改为零,以节省成本:
图 4.29 – 计算集群的详细信息,展示你可以编辑其配置的位置
在这一部分,你学习了如何配置计算集群。这些集群用于执行训练任务和批量推理。在下一部分,你将学习如何配置Azure Kubernetes 服务(AKS),它允许你在大规模上执行实时推理。
推理集群
Kubernetes 是一个便携、可扩展的开源平台,用于管理容器化的工作负载和服务。由于其能够自动扩展并能从故障中自动恢复,它已被广泛用于将各种应用投入生产环境,从 Web 应用到模型推理 REST API。Azure Kubernetes 服务(AKS)是 Azure 中的 Kubernetes 集群的托管版本,一项让你专注于工作负载并让 Azure 管理集群操作部分(例如其主节点)的服务。
如果你不熟悉 AKS,不用担心——下面的图表提供了涉及组件的高级概览。简而言之,你可以配置节点池,即一组配置相同的虚拟机;例如,配置有 GPU 卡的虚拟机。这些池可以包含一个节点(或更多节点),节点即为虚拟机。在每个节点内,你可以托管一个或多个Pod。每个 Pod 包含一对Docker 镜像,这些镜像组成一个应用单元,其中一个镜像可能是你想要投入运营的模型。每个 Pod 可以在多个节点中进行复制,既可以是为了应对更高的负载,也可以是在某个节点出现故障时增加容错性:
图 4.30 – AKS 概念的高级概览,展示 Pod X 在两个节点中复制
在 Azure ML Studio 中,你可以创建或将现有的 AKS 集群附加到你的工作区。你不需要为本书的目的创建 AKS 集群。让我们开始吧:
-
创建向导可以通过点击新建按钮,在推理集群标签页中启动,如图 4.31所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_031.jpg
图 4.31 – 创建或将 AKS 集群附加到 Azure ML 工作区
重要说明
当您配置 AKS 集群时,一个新的资源组将在您的 Azure 订阅中创建,托管 AKS 工作所需的所有组件。这需要在订阅级别的额外权限。如果您无法创建资源组,AKS 集群配置将失败。
-
在向导的第一步中,您可以选择附加一个现有的 AKS 集群或创建一个新的集群。如果选择创建一个新的集群,您将需要指定希望 AKS 集群部署的 Azure 区域。您还需要指定节点池的虚拟机大小,类似于您部署计算实例时所做的操作:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_032.jpg
图 4.32 – 配置推理 AKS 集群的步骤 1
-
点击下一步将带您进入设置页面,在此页面中,您需要指定 AKS 集群的名称。同时,您还需要指定集群的用途。如果这是一个生产集群,则集群中的虚拟 CPU 数量必须大于 12;这意味着如果您选择了 4 核虚拟机大小,您将需要至少三个节点才能配置一个生产就绪的 AKS 集群。如果此集群用于开发和测试,您只需配置一个节点即可。
-
除了节点池的名称和节点数外,您还可以配置集群的网络选项和用于保护与应用程序连接的 SSL 证书,如果您希望通过 HTTPS 端点公开它们。为了本书的目的,您无需修改这些选项:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_033.jpg
图 4.33 – 配置推理 AKS 集群的步骤 2
-
一旦集群创建完成,您将能够通过以下截图所示的列表删除或将其从工作区中分离:
图 4.34 – AKS 推理集群列表
重要说明
AKS 是部署实时端点的生产就绪方式。在考试中,当被问到将生产负载部署在哪里时,AKS 应该是正确答案。尽管如此,由于 AKS 集群是一种昂贵的资源,本书的示例不会使用它。如果您使用的是免费订阅,您可能没有足够的核心配额来配置一个。如果您配置了一个,请确保关注成本,以免用完信用额度。
在本节中,你了解了如何使用 Azure ML 帮助你连接或配置 AKS 集群,以便托管生产实时推理端点。在下一节中,你将学习如何将现有的计算资源附加到你的工作区。
附加的计算资源
如果你已经配置了计算资源,且不一定是在你部署 Azure ML 工作区的订阅中,你可以将它们附加到你的工作区。附加这些资源可以让你重新利用它们,特别是在它们未被充分利用的情况下。一种常见的情况是,一个部门拥有一个基于 Ubuntu 的 数据科学虚拟机 (DSVM),可能每天 24 小时、每周 7 天都在运行,以服务于一个遗留的 Web 应用程序。你可以通过将其附加到工作区并在实验中引用它来重用这个资源,执行各种任务,就像你引用计算集群来执行任务一样。
工作室体验允许你附加多种类型的计算资源,包括以下流行目标:
-
虚拟机:你可以附加现有的基于 Ubuntu 的虚拟机,这些虚拟机通过互联网公开可访问。这个选项包括你可能已经拥有的 DSVM。
-
Azure Databricks 和 HDInsights:这些选项允许你将现有的基于 Apache Spark 的计算资源连接到你的工作区。
-
Azure Data Factory:Azure Data Factory 资源允许你从一个数据源执行复制操作到另一个数据源。例如,你可以使用该资源将数据从存储帐户复制到 SQL 数据库。Azure Data Factory 目前仅通过 Azure ML SDK 支持,而不支持通过工作室体验。
对于 DP100 考试而言,你无需附加任何资源。以下截图展示了你如何从工作室体验中启动附加向导:
图 4.35 – 将现有计算资源附加到你的工作区
在本节中,你了解了如何配置和附加计算资源到你的 Azure ML 工作区。这使得你可以在数据探索、模型训练和模型推理阶段执行代码。在下一节中,你将学习如何配置与各种数据源的连接,这将使你能够访问数据。
连接到数据存储
数据存储是存放你数据的引擎,并为任何有权限的人提供访问权限。在大多数你在互联网上看到的 Python 示例中,都会有一个连接字符串,其中包含连接到数据库或 Blob 存储的凭证。这个技术有几个缺点:
-
存储在这些脚本中的凭证被视为安全违规行为,通过将脚本发布到公共存储库(如 GitHub)可能会意外暴露你受保护的数据集。
-
当凭据发生变化时,你需要手动更新所有脚本。
Azure ML 允许你拥有一个集中式的位置,在那里你可以定义与各种存储的连接属性。你的凭据作为机密安全存储在工作区关联的密钥库中。在你的脚本中,你通过其名称引用数据存储,并可以访问其数据,而无需指定凭据。如果某个时刻,数据存储的凭据发生变化,你可以在中央位置更新它们,所有的脚本和管道将继续正常工作。
你可以通过导航到工作室的管理 | 数据存储部分来查看所有注册的数据存储:
图 4.36 – 工作区中已注册数据存储的列表
请注意,默认情况下,你已经注册了两个数据存储。默认的那个,名为workspaceblobstore
,是默认的 Blob 存储,用于存储所有的管道指标和工件。你的工作区需要有一个默认的数据存储。正如你将在第七章《Azure ML Python SDK》中看到的,你甚至可以通过 Python SDK 非常方便地引用该存储。另一个存储,名为workspacefilestore
,是一个文件共享数据存储,你可以将其挂载到本地计算机并上传文件。
从此列表中,你可以执行以下操作:
-
更新数据存储的凭据:你需要点击数据存储的名称,查看其注册详情。从那里,你可以点击更新凭据来指定更新的值,或者更改身份验证类型,这些内容将在下一节中看到。
-
注销数据存储:你可以注销任何未标记为默认数据存储的数据存储。
-
设置为默认数据存储:将默认数据存储更改为你从列表中选择的存储。
最后,从这个列表中,你可以创建一个新的数据存储注册,这是启动新的数据存储向导的操作,如下图所示:
图 4.37 – 新的数据存储向导
在这里,你需要在 Azure ML 工作区中指定一个唯一的数据存储名称。你必须这样做,以便在脚本和工作室体验的各个组件中引用该存储。接下来,你需要选择数据存储类型。Azure ML 工作区支持几种 Azure 本地数据存储,这些内容将在下一节中探讨。
数据存储类型
Azure ML 支持两类数据存储:基于文件的存储,例如 Blob 存储、文件共享和数据湖存储,以及关系型数据库,例如 Azure SQL 和 Azure PostgreSQL。
当前支持的数据存储如下面的图示所示:
图 4.38 – Azure ML 支持的数据存储
推荐使用基于Azure Blob Storage的数据存储。这些存储是最具成本效益的存储。它们提供多个层级,例如更昂贵的高级存储,它提供更高的吞吐速度,这可以减少处理大量数据时的训练时间。
另一方面,Azure Data Lake Storage Gen 2 在Azure Blob Storage的基础上,增加了层次命名空间。这一功能使得数据湖可以在文件夹级别分配访问权限。大型企业通常会按照不同的区域结构来组织数据湖,存储不同的数据。每个区域都有自己的访问控制列表(ACL),为特定的用户组提供权限。这意味着你可能能够看到某个文件夹的内容,而看不到另一个文件夹的内容,而在Azure Blob Storage中,一旦你获得了容器的访问权限,就可以看到该容器中的所有数据。
如果你的数据存储不被 Azure ML 开箱即用地支持,你可以通过Azure Data Factory的复制工具轻松将数据复制到Azure Blob Storage或Azure Data Lake Storage Gen 2。Azure Data Factory 允许你从几乎任何地方复制数据,即使数据存储在本地数据库中,如下图所示:
图 4.39 – 使用 Azure Data Factory 和自托管集成运行时将本地数据复制到 Azure ML 支持的数据存储
重要说明
在附加计算部分,你看到了你可以附加一个DataTransferStep
。从本地网络复制数据也可以在同一个 ADF 中完成,但你需要在 ADF 中编写、执行和监控数据拉取管道。
本节介绍了 Azure ML 支持的各种数据存储类型。在下一节中,你将了解这些数据存储支持的各种身份验证方法。
数据存储安全性考虑
根据数据存储类型,你需要为其注册到 Azure ML 工作区时指定不同的凭据。对于 Azure Blob 和 Azure 文件共享数据存储,你可以使用以下凭据:
-
账户密钥:这授予对整个 Azure 存储账户的访问权限。
-
共享访问签名(SAS)令牌:这是一种更加细粒度的权限分配方式,允许你为存储账户的各种服务分配权限。使用账户密钥,你可以生成一个 SAS 令牌,使其只能访问特定的 blob 容器,并且只能在有限的时间内使用。
对于 Azure Data Lake Storage 数据存储,鉴于其高级安全功能,您需要提供一个tenant_id
,该实体已注册并具有唯一 ID(称为client_id
)。此身份拥有一个密码(称为client_secret
),它使得您的代码能够模拟该身份访问数据存储。
对于关系数据库数据存储,您需要指定数据库的名称、服务器的名称和服务器端口进行连接。对于凭证,您可以提供服务主体,如果数据存储支持此功能,或者提供必要的SQL 身份验证凭证,后者包括数据库用户 ID 和密码。
一些数据存储允许您使用工作区的托管身份进行数据预览和分析。此选项会将分配给工作区的系统分配托管身份作为读取者,添加到特定资源中,从而允许工作区在工作室环境中加载数据预览。此选项可在数据存储注册页面上找到,如下图所示:
图 4.40 – 授予工作区的托管身份访问权限
到目前为止,您已学习了如何在 Azure ML 工作区中注册各种数据存储。在下一节中,您将学习如何利用这些注册信息来定义数据集。
使用数据集
在前面的章节中,您在工作室的管理部分配置了计算和数据存储资源。配置好这些基础设施后,您可以开始将数据导入到注册的数据存储中,并在工作室的资产部分注册数据集:
图 4.41 – 在 Azure ML Studio 中的资产部分的数据集
数据集是您用于训练和推理的基础数据之上的抽象层。它包含指向物理数据位置的引用,并提供一系列元数据,帮助您理解其形状和统计特性。当您想要访问数据集时,可以通过名称引用它,且无需担心凭证或确切的文件路径。此外,所有在同一工作区的 data scientists 都可以访问相同的数据集,从而允许他们在相同数据上并行进行实验。
数据集有两种类型——基于文件的和基于表格的。文件数据集引用数据存储中的文件列表。例如,如果你正在构建一个计算机视觉模型,你需要图像,这些图像可以作为FileDataset
下载或挂载到计算资源上。表格数据集表示存储在文件型数据存储或关系型数据库数据存储中的表格数据。例如,你可以引用包含TabularDataset
结构的几个文件夹,而不需要解析物理文件。
数据集的另一个特点是你可以通过版本快照它们的属性和元数据。假设你有一个遵循weather/<year>/<month>/
模式的文件夹结构。例如,你会发现 2021 年 1 月的天气测量数据存储在weather/2021/01/measurements.parquet
下。随着时间的推移,你会获得越来越多的文件夹,每个文件夹下面都有一个文件。为了重现你的训练结果,你可能希望引用一个只包含到 2021 年 1 月为止文件的数据集。这正是数据集版本控制的用武之地。在训练模型时,你注册一个数据集版本,该版本包含你用于训练的所有文件。稍后,你可以引用该数据集并请求它的特定版本,从而获得对当时可用的所有文件的引用。
重要说明
数据集版本不复制底层数据。它们只存储对实际文件的引用以及你将在接下来的章节中阅读到的数据集元数据。这意味着,如果你更改了文件的内容而不是添加新文件,数据集版本将不会加载相同的数据。
注册数据集
你可以从多个来源注册数据集,如下图所示,包括你在连接数据存储部分学到的如何注册的存储库:
图 4.42 – 注册数据集的可能选项
为了更好地理解数据集注册过程,我们将注册两个托管在 Web 上的表格数据集。这些数据集每个都包含一个parquet文件。我们将在本章后续部分使用这两个数据集来了解数据漂移检测功能。让我们开始吧:
-
从前面的截图中选择从 Web 文件菜单项,开始从 Web 文件创建数据集向导。
-
在向导的第一页,提供以下信息:
-
survey-drift-base
-
Tabular
-
-
图 4.43 – 数据集注册向导的第一步
-
向导将解析文件并确定文件类型和数据集的模式。你需要通过点击下一步来验证选择。请注意,向导支持多种文件格式,如下图所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_044.jpg
图 4.44 – 数据集注册向导的第二步
-
在下一步骤中,你可以定义有关模式的高级选项。对于基准数据集,保持默认选项不变。点击下一步,你将进入确认步骤。
-
在此步骤中,你可以查看前面步骤中的选择,还可以安排你的首个数据科学分析任务——数据集概况分析。此过程将生成你将在下一部分中探索的概况。启用此选项,并选择你在前一部分中配置的
gpu-cluster
,如下图所示:重要提示
在选择用于概况分析的计算资源选项中,你可以从你在计算实例和计算集群部分配置的计算实例和计算集群中进行选择。选择计算集群将强制集群从零个节点扩展到一个节点,分析数据集,然后再缩减回零个节点。如果你愿意,可以导航到管理 | 计算部分,通过点击计算集群的名称来观察这一扩展过程。如果你选择计算实例而不是计算集群,则任务将被安排,并将在计算实例启动时执行。
图 4.45 – 数据集注册过程的最后一步
你需要再注册一个数据集。此过程几乎相同,只不过这次你将数据集标记为时间序列数据集:
-
点击创建数据集并选择从网页文件,如下图所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_046.jpg
图 4.46 – 数据集列表中的创建数据集菜单
-
按照之前的步骤操作,输入以下信息:
survey-drift-target
-
在模式步骤中,请确保从inference_date列的Properties部分选择时间戳(Timestamp),如下图所示。此选项将此表格数据集标记为时间序列数据集,允许你执行额外的分析,正如你将在数据漂移检测部分看到的那样:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_047.jpg
图 4.47 – 配置一个表格数据集,使其成为时间序列数据集
-
安排数据概况分析并完成数据集注册过程。
重要提示
如果你跟随教程,你可能会注意到,对于
year=2021/month=05/day=01/data.parquet
,你可以通过该路径模式创建一个虚拟列,并将其定义为分区时间戳。这样可以提升时间序列功能的重要性,并允许你通过有选择性地读取所需文件来加载特定日期的数据。
你应该能够看到两个已注册的数据集,如下图所示:
图 4.48 – 在 Azure ML 工作区注册的数据集列表
在此视图中,你可以选择一个数据集,然后点击取消注册按钮来移除注册。点击数据集后,你可以查看有关该数据集的更多详细信息,包括你在数据集上执行的分析,这些内容将在下一节中显示。
探索数据集
在数据集列表中,点击survey-drift-target数据集以查看其详细信息。在第一个标签页详情中,你可以修改数据集的描述,并指定与数据集相关联的标签。标签是名称-值对。在下面的截图中,你可以看到我们将survey指定为experiment标签的值:
图 4.49 – 显示与特定数据集相关的所有元数据的数据显示
在消费标签页中,你可以复制你将在第七章中使用的 Python SDK 代码,以便访问数据集:
图 4.50 – 消耗一个代码片段以访问数据集
在探索标签页中,你将能够预览数据集中包含的样本数据,正如你在注册过程中所看到的:
图 4.51 – 预览数据集的样本
如果你点击分析标签页,你将能够查看数据集的统计分析,正如下图所示:
图 4.52 – 数据集的统计分析
重要提示
如果你的数据集包含少于 10,000 行,系统会自动为你执行数据分析,而无需你手动调度数据集的处理过程。如果数据集包含超过 10,000 行,Azure ML 会对前 10,000 行进行分析,并显示一条警告消息,提示你调度完整的分析过程,你可以通过点击菜单中的生成分析按钮来执行此操作。
最后,在模型标签下,你可以看到与此数据集相关的模型,这是你在第五章,让机器进行模型训练时,将注册并部署为 Web 服务的最佳模型。
注册了数据集后,你可以为该数据集配置周期性的漂移监控,这是你将在下一节中学习到的内容。
数据漂移检测
数据漂移检测是一种技术,允许你将时间序列数据集与参考数据集进行比较,然后检查你比较的特征的统计属性是否发生了显著变化。例如,假设你训练了一个 ML 模型,预测某人是否会参与调查,基于他们的年龄。你使用了survey-drift-base
数据集来训练该模型。下图展示了一个密度曲线,显示了训练数据集中年龄的分布:
图 4.53 – 训练数据集中年龄特征的负偏斜单峰分布
当你将模型投入生产时,你每周跟踪它做出的推断,并将此信息记录在之前注册的survey-drift-target
数据集中。该数据集包含了你在 2020 年初的前两周进行的推断。数据漂移检测能够帮助你发现输入特征的分布是否随着时间变化。我们来看看:
-
导航到资产 | 数据集 | 数据集监控,点击创建按钮以启动数据集监控向导:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_054.jpg
图 4.54 – 创建新的数据集监控
-
在目标数据集上,你将看到所有已注册的时间序列数据集,这些数据集是你希望监控数据漂移的对象。这是你的模型在生产环境中所做的推断。选择
survey-drift-target (Version:1)
并点击下一步:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_055.jpg图 4.55 – 数据漂移监控配置的第一步
-
在下一页中,你需要选择参考点。这可以是时间序列表格数据集中的某个特定时间点,或者是一个特定的数据集。在你的情况下,选择
survey-drift-base (Version:1)
数据集,这是用于训练 ML 模型的数据集:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_056.jpg图 4.56 – 在数据漂移监控配置中选择基线数据集
-
在向导的最后一步,你需要定义以下信息:
-
survey-drift-monitor
。 -
特征:选择两个数据集之间一个或多个共同特征,以监控它们的分布情况以及是否存在数据漂移。在此案例中,两个数据集之间唯一的共同特征是年龄特征。
-
计算目标:将启动和停止以执行分析的集群。
-
频率:频率指定检查目标数据是否有漂移的时间间隔。一旦监控器创建,无法更改此属性。您可以选择按天、按周或按月进行。请记住,每个时间间隔至少需要 50 个样本才能进行数据漂移分析。这意味着如果每天少于 50 行数据,您不能将其作为频率,应该选择按周或按月进行。
-
延迟:通常会在实际对行进行评分和刷新目标数据集之间有一个延迟。在此字段中,您需要指定在假设目标数据集已经获得最新记录之前的等待时间;然后,监控器就可以执行数据漂移分析。
-
电子邮件地址:如果数据集的漂移超过了阈值参数所指定的范围,邮件将发送至此地址。
-
-
本书中,您可以禁用计划,如下截图所示。您将手动运行数据漂移分析。
-
点击创建按钮以创建监控器:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_057.jpg
图 4.57 – 数据漂移监控器设置
-
从监控器列表中点击您创建的新监控器名称:
图 4.58 – 数据漂移监控器列表
数据漂移监控器旨在根据计划对新数据进行分析。在您的情况下,您想分析目标数据集中的现有数据。让我们来看看:
-
点击分析现有数据按钮,这将显示以下截图中的回填向导:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_04_059.jpg
图 4.59 – 手动启动对过去日期的分析
-
选择从 2019 年 12 月 31 日到 2020 年 1 月 15 日。这是包含目标数据集所有记录的时间范围。
-
选择将进行分析的计算集群。
-
点击提交。
一旦分析完成(这个过程需要一些时间),您将能够看到数据漂移的结果,结果表明我们的数据集观察到了大规模的数据漂移。请注意,摘要指的是最新的推理结果,这些推理是在 2020 年 1 月 5 日完成的。您可以通过点击对应日期的图表手动选择之前的时间段:
图 4.60 – 基础数据集与目标数据集之间检测到的数据漂移
如果你向下滚动到特征分布部分,你将能够清楚地看到年龄特征的分布漂移。这表明模型正在对一个与其训练数据集特征不同的群体进行推理。这是一个很好的指示,表明你可能需要重新训练模型,以便使其与新的特征分布保持同步。
图 4.61 – 基准线是一个负偏态分布,而最新的推断遵循一个正偏态分布
在这一部分,你学习了如何配置数据漂移检测,这一过程是通过将你在生产环境中观察到的数据与用于训练模型的数据集进行比较来完成的。这是一个强大的功能,它可以帮助你判断是否需要使用更新的数据重新训练模型,尤其是当特征分布随时间发生变化或漂移时。
总结
在这一章中,你学习了如何为你的 Azure ML 工作区提供和附加计算资源。你还学会了如何注册各种数据存储,以便安全地访问数据。最后,你探索了 Azure ML Studio 的数据集注册功能,它使你能够轻松访问用于实验的数据。注册数据集后,你可以配置数据漂移监控器,当特征分布随时间变化时,它会提醒你,这可能表明在该数据集上训练的机器学习模型需要重新训练。现在你应该已经能够舒适地配置你的 Azure ML 工作区,这是 DP-100 认证中考察的关键技能之一。
在下一章中,你将学习如何利用你在工作区中注册的数据集进行**自动化机器学习(Auto ML)**分析,这一过程将在你提供的计算集群上运行多个机器学习实验,以检测适合你数据集的最佳算法。
问题
在每一章中,你会找到一些问题,以便测试你对本章内容的理解:
-
一个拥有 8 核心和 56 GB 内存的计算实例上最多可以有多少个数据科学家同时工作?
a. 只有一个。
b. 最多两个。
c. 最多五个。
d. 只要不耗尽计算资源,人数不限。
-
你需要提供哪种类型的凭证才能访问 Gen 1 或 Gen 2 的数据湖存储?
a. 个人访问令牌(PAT)
b. 服务主体的客户端 ID 和密钥
c. 你的个人 AAD 用户凭证
d. 不需要凭证
-
以下哪种 Azure 工具可以帮助你协调将数据从本地环境迁移的工作?
a. Blob 存储
b. Azure Active Directory
c. Azure 数据工厂
d. Azure ML 工作区
进一步阅读
本节提供了一个有用的网络资源列表,帮助你增强对本章讨论主题的理解和知识:
-
你可以通过以下链接了解更多关于如何在计算集群中使用托管身份的信息:
docs.microsoft.com/azure/machine-learning/how-to-create-attach-compute-cluster?tabs=python#managed-identity-usage
。 -
实例元数据服务允许你使用附加的托管身份请求 Azure 资源的令牌。你可以通过
docs.microsoft.com/azure/virtual-machines/linux/instance-metadata-service
了解更多信息。 -
你可以通过
docs.microsoft.com/azure/storage/blobs/data-lake-storage-access-control-model
了解更多关于 Azure Data Lake Storage Gen2 的访问控制模型。 -
你可以通过
docs.microsoft.com/azure/data-factory/quickstart-create-data-factory-copy-data-tool
学习如何使用 Azure Data Factory 的复制数据工具轻松复制数据并配置定期数据摄取。 -
你可以通过
docs.microsoft.com/azure/storage/common/storage-sas-overview
学习如何使用 SAS 令牌为 Azure 存储账户授予有限访问权限。 -
你可以通过
docs.microsoft.com/azure/active-directory/develop/app-objects-and-service-principals
了解更多关于服务主体的信息,服务主体可用于访问 Azure Data Lake 数据存储。
第二部分:无需编码的数据科学实验
Azure 机器学习工作室提供各种无需编码/低代码向导和设计器,帮助高级用户进行端到端的数据科学实验。经验丰富的数据科学家和机器学习工程师也可以利用这些工具启动项目、验证假设、了解在特定数据集上哪个模型表现最佳,并设计数据清洗流程,而无需编写任何代码。在本节中,您将学习如何通过 Azure ML Studio 提供的网页设计器和向导运行数据科学实验。
本节包括以下章节:
-
第五章*,让机器来进行模型训练*
-
第六章*,视觉模型训练与发布*
第五章:第五章:让机器来训练模型
在本章中,你将创建你的第一个 自动化机器学习(自动化 ML 或 AutoML)实验。AutoML 是指尝试多种建模技术并选择在你指定的训练数据集上产生最佳预测结果的模型的过程。首先,你将浏览 Azure 机器学习工作室 Web 体验中的 AutoML 向导,并了解需要配置的不同选项。然后,你将学习如何监控 AutoML 实验的进度,以及如何将最佳模型作为 Web 服务部署到 Azure 容器实例(ACI)中,从而能够进行实时推断。
通过坐在电脑前并带着这本书,你可以顺利完成本章内容。通过结合使用你的 Azure 订阅和本书,你可以开始你的 AutoML 之旅。
在本章中,我们将覆盖以下主要内容:
-
配置 AutoML 实验
-
监控实验的执行
-
将最佳模型部署为 Web 服务
技术要求
你需要访问 Azure 订阅。在该订阅中,你需要一个 packt-azureml-rg
。你需要拥有 Contributor
或 Owner
权限的 packt-learning-mlw
,如 第二章 中所述,部署 Azure 机器学习工作区资源。
配置 AutoML 实验
如果你被要求训练一个模型来对数据集进行预测,你需要做几件事,包括数据集的归一化、将数据集拆分为训练数据和验证数据、运行多个实验以了解哪种算法在数据集上的表现最佳,然后对最佳模型进行微调。自动化机器学习通过完全自动化耗时的迭代任务,缩短了这个过程。它允许所有用户,从普通 PC 用户到经验丰富的数据科学家,都可以针对目标数据集构建多个机器学习模型,并根据你选择的度量标准选择表现最好的模型。
该过程包括以下步骤:
-
准备实验:选择你将用于训练的数据集,选择你要预测的列,并配置实验的参数。这是你将在本节中阅读到的配置阶段。
-
数据保护措施:这是执行实验的第一步。它对提供的训练数据集进行基本的数据保护措施。AutoML 尝试识别数据中的潜在问题;例如,你要预测的列中所有的训练数据必须具有相同的值。
-
训练多个模型:训练多种数据规范化和算法的组合,以找到最佳模型,从而优化(最大化或最小化)所需的度量标准。这个过程将一直持续,直到满足退出标准:时间限制或指定的模型性能目标。
-
创建集成模型:在这里,你训练一个模型,它结合了到目前为止训练的最佳模型的结果,并生成一个可能改进的推断。
-
选择最佳模型:根据你指定的度量标准,选择最佳模型。
Azure 机器学习提供了一个基于网页的向导,允许你配置这样的实验。在第三章中,Azure 机器学习工作室组件,你探讨了Azure 机器学习工作室网页体验。
在这一章中,你将创建一个自动化机器学习分类模型,该模型将预测一个客户是否会流失。这个模型能够预测客户是否会继续成为忠实客户,或者他们是否会终止他们的活动手机合同。你将使用来自一个虚构电信公司的虚构数据集。数据集显示了每个客户与公司合作的时长以及他们的活动订阅使用情况。让我们开始吧:
-
要开始 AutoML 实验,你需要打开浏览器并导航到 Azure 机器学习工作室。你将进入首页,如下图所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_05_001.jpg
图 5.1 – Azure 机器学习工作室首页
-
在 Azure 机器学习工作室的首页上,通过点击自动化机器学习下方的立即开始按钮,进入作者 | 自动化机器学习部分,如前面截图所示。这将打开自动化机器学习首页,如下图所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_05_002.jpg
图 5.2 – 自动化机器学习首页
在这个首页上,你可以找到最近执行的自动化机器学习实验。由于这是你第一次使用这个工作区,你应该不会看到任何运行记录。
-
通过点击新建自动化机器学习运行按钮,你将启动创建新自动化机器学习向导,如下所示:
图 5.3 – 启动自动化机器学习向导
在向导的第一步,名为选择数据集,你可以选择一个现有数据集或创建一个新的数据集。从这个列表中,你将能够看到在第四章中注册的两个数据集,配置工作区。你不需要这些数据集。在下一节中,你将学习如何创建一个新的数据集,以便用于即将执行的自动化机器学习实验。
注册数据集
在自动化机器学习向导的选择数据集步骤中,你可以注册一个新的数据集,用于 AutoML 实验。按照以下步骤注册虚构的客户流失数据集:
-
点击屏幕顶部的创建数据集。
-
从出现的下拉菜单中选择来自网页文件。这将启动从网页文件创建数据集向导,见下图。
-
向导的第一页(
churn-dataset
)。c)
表格型
。这是一个无法更改的选项,因为 AutoML 目前只支持表格型数据集。d)
用于训练预测客户流失模型的数据集
:图 5.4 – 从网页文件创建数据集时的基本信息
-
填写完所有内容后,点击下一步。下载和解析文件需要一段时间。向导将转到设置和预览屏幕:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_05_005.jpg
图 5.5 – 从网页文件创建数据集向导的设置和预览屏幕
-
前面截图中显示的步骤提供了演示数据集的重要信息。样本文件的文件格式被自动检测为Parquet格式。如果需要,你可以修改选择。
演示数据集包含七列:
-
ld是一个顺序记录号,不属于原始 Parquet 文件。AutoML 生成此序列号,以便你验证预览窗口中看到的数据。此列将不包含在注册数据集中。
-
id是一个字符串,唯一标识数据集中的每个客户。
-
customer_tenure是一个整数值,告诉我们每个客户在虚构的电信公司服务了多长时间。该值表示月份。
-
product_tenure是一个整数值,告诉我们客户当前活跃订阅的时长,单位为月。
-
activity_last_6_month告诉我们客户在过去 6 个月里通话的小时数。
-
activity_last_12_month告诉我们客户在过去 12 个月里通话的小时数。
-
churned是一个标志,告诉我们客户是否续订了订阅或终止了活跃的合同。这是你将要预测的列。
从这个虚构的数据集中,构建你所尝试的分类模型的最相关特征是customer_tenure、product_tenure、activity_last_6_month和activity_last_12_month。churned列是你试图构建的模型的目标。id列允许你将模型的预测结果与可能流失的实际客户关联。
-
-
点击
Date
作为列的类型,你可以选择此列是否为时间戳,这将使数据集标记为时间序列数据集。将Date
作为列的类型后,你可以定义用于解析特定列的日期模式。例如,你可以使用%Y-%m-%d
来指定日期的存储格式为年-月-日。 -
完成探索向导的模式屏幕后,按下下一步。向导的确认详情页面提供了你想要在工作区中注册的新数据集的概览,如下所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_05_007.jpg
图 5.7 – 确认详情页面
此页面总结了你在第四章 配置工作区节中阅读的数据集信息。如果你选择了创建后配置此数据集复选框,你可以选择一个计算目标来生成新创建的数据集的配置文件。由于该数据集仅有 6,720 行,Azure ML 会自动为你提供完整的配置文件,因此无需手动生成。
-
点击创建按钮以完成向导。
现在你已经注册了churn-dataset
,可以继续进行 AutoML 向导,在此步骤中,你将选择新注册的数据集、配置实验参数并启动 AutoML 过程,这将在下一节进行。
返回到 AutoML 向导
现在你已经创建了churn-dataset
,可以继续进行 AutoML 向导。向导包含三个步骤,如下图所示:
图 5.8 – AutoML 向导步骤
让我们开始步骤吧!
-
首先,选择在上一节注册数据集中创建的
churn-dataset
,然后点击下一步,如图所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_05_009.jpg图 5.9 – 创建新自动化 ML 运行向导的选择数据集步骤
-
在
churn-automl-experiment
中,选择churned
列。根据目标列的类型,向导将自动选择该列的最佳任务,如你将在下一个向导步骤中看到的。 -
这里是
gpu-cluster
,你在第四章 配置工作区节中创建的集群。如果你在工作区中没有注册集群,可以使用计算实例,或者通过点击gpu-cluster
启动专用向导。默认情况下,免费试用订阅不允许配置 GPU 计算资源。对于此实验,你可以选择基于 CPU 的集群,而非基于 GPU 的集群。 -
配置运行详情后,点击下一步按钮。
-
向导的下一页是选择任务和设置页面,如下图所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_05_011.jpg
图 5.11 – 创建新的自动化机器学习运行向导 – 选择任务类型
在此步骤中,你可以配置以下内容:
a) 选择任务类型:AutoML 当前支持三种类型的任务:
-
分类:生成的模型可以预测记录所属的类别。类别可以是任何东西,例如是或否的布尔值,或者蓝色、绿色或黄色的颜色值。在我们的例子中,你正在尝试预测客户是否会流失,这个问题可以通过“是”或“否”来回答。
-
回归:当你想预测一个数值时,比如公寓的价格或糖尿病的疾病水平,可以使用回归模型。我们将在第八章,使用 Python 代码进行实验中详细讨论。
-
时间序列预测:通常使用这种类型的模型来预测时间序列值,比如股票的价格,同时考虑值随时间的变化。这种类型的模型是回归模型的一个专项扩展。这意味着所有回归模型都可以使用,但也有一些更专业的算法,比如 Facebook 的Prophet算法或自回归积分滑动平均(ARIMA)技术。
根据你选择的目标列,向导将自动猜测你要执行的任务。在我们的例子中,它选择了分类。
b) 查看额外的配置设置:根据你选择的任务类型,你可以配置各种设置,包括用于评估模型的目标指标以及终止模型搜索的退出标准。根据任务类型的不同,向导页面上的选项会有所变化。你可以在下图中看到一些选项。你将在步骤 5中访问这一部分:
图 5.12 – 根据选择的任务类型配置设置
c) 查看特征化设置:这允许你配置与模型预测相关的特征操作。在此部分,你可以排除一些特征,比如行唯一 ID 或无关信息,以加快训练过程并减小最终模型的大小。你还可以指定每个特征的类型和插补函数,后者负责处理数据集中的缺失值。你将在步骤 6中访问此部分。
-
-
除非有理由修改,否则通常可以点击
auto
。默认情况下,如果行数少于 1,000,则使用 10 折交叉验证;如果行数在 1,000 和 20,000 之间,则使用 3 折交叉验证;如果行数超过 20,000,则数据集会被划分为 90%的训练数据和 10%的验证数据。 -
0.5
,即半小时或 30 分钟。你可以保留其余选项不变,如前面的截图所示。点击保存,返回到你在步骤 4中看到的选择任务类型页面。 -
点击查看特征化设置,将打开特征化屏幕,如下所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_05_014.jpg
图 5.14 – 创建 AutoML 向导中的特征化视图
在此屏幕上,你可以定义影响训练过程数据准备阶段的操作。可以配置以下选项:
-
包含:你可以排除不应被算法考虑的列。目标列无法排除。
-
特征类型:默认情况下,选择了自动值,它会自动检测数据集中每一列的类型。类型可以是以下之一:数值型、日期时间型、类别型、类别哈希型或文本型。如果你愿意,也可以手动配置某一列为可用的类型之一。
-
使用填充:如果数据集中有缺失值,该选项将根据所选方法进行就地填充。你可以选择的选项有自动(默认选项)、最常见值和填充常数。特别是对于数值型特征,你还可以使用均值或中位数填充策略。
重要提示
假设你有一个产品 ID 特征,明确说明每个客户注册的订阅产品。该特征将具有诸如 1,055 和 1,060 之类的数值。即使该特征实际上是类别型的,它可能会被错误地标记为数值型特征。如果训练数据集中缺少某些值,自动方法可能会用平均产品 ID 填充缺失值,这显然没有意义。AutoML 足够智能,能够理解如果一个数值型特征只有几个唯一值重复出现,则该特征可能是类别型的,但你可以通过将其标记为类别型来明确协助机器学习模型进行特征类型配置。
-
-
在这个向导页面上,你应该排除id特征。id特征提供了有关实际客户的信息,但它与分类问题无关,因此应该排除,以节省计算资源。点击保存,返回到你在步骤 4中看到的选择任务类型页面。
通过点击完成,如图 5.11所示,你可以完成 AutoML 实验的配置,运行将自动开始。浏览器将重定向到 AutoML 运行执行页面,你可以在该页面监控 AutoML 训练过程并查看训练结果。在下一节中,你将探讨该页面。
监控实验执行
在前一节中,配置自动化 ML 实验,你提交了一个 AutoML 实验以在远程计算集群上执行。一旦你提交了作业,浏览器应该会将你重定向到一个类似于以下的页面:
图 5.15 – 自运行完成以来第一次运行新的自动化 ML 实验
在页面顶部,实验运行的名称是自动生成的。在前面的截图中,名称是AutoML_05558d1d-c8ab-48a5-b652-4d47dc102d29
。点击铅笔图标,你可以编辑此名称并将其更改为更易记的名称。将名称更改为my-first-experiment-run
。在运行名称下方,你可以点击以下命令之一:
-
刷新:这将刷新页面上提供的信息。在运行实验时,你可以获得最新的、最准确的信息。
-
生成笔记本:这将创建一个包含所有所需 Python 代码的笔记本,用于使用 Azure ML SDK 运行相同的实验。你将在第八章《使用 Python 代码实验》中了解更多关于运行 AutoML 实验所需代码的内容。
-
取消:这将取消当前的运行。仅当实验仍在运行时,此选项才可用。
重要提示
当你取消运行时,可能需要一段时间才能完成取消操作。你可以点击刷新按钮,查看取消过程的进度。
-
删除:这将删除所选的运行记录。仅在运行已取消或已完成执行时才可启用。
运行实验页面提供了关于整个过程的大量信息,并通过标签进行结构化。默认情况下,你将从名为详细信息的标签开始。在此标签中,你将找到以下重要信息:
-
在前面截图左侧的属性框中,最重要的信息位于以下字段:
a) 状态,描述当前运行的状态。可以是正在运行、已取消、出错或已完成。
b) 计算目标是运行所在的计算位置。
c) 原始 JSON 是一个链接,允许你以机器可读格式查看当前运行的所有配置信息。
-
在右侧的运行摘要框中,您将找到任务类型,即您正在训练的模型类型。点击查看配置设置,您可以查看当前实验的配置参数摘要。
-
描述框允许您记录当前实验中正在评估的假设。点击铅笔图标,您可以添加实验运行的描述信息,这些信息将帮助您回忆在此实验中要寻找的内容以及结果。
运行页面的第二个选项卡名为数据防护。此选项卡提供关于您在实验中使用的数据集的详细定性和定量信息。根据任务类型,您将执行不同类型的验证。如果一切正常,则每个验证的状态为已通过;如果数据集存在需要解决的问题,则为已失败;如果 AutoML 发现数据集问题并已为您修复,则为已完成。在已完成的情况下,您可以通过点击**+查看详细信息**按钮查看 AutoML 修复数据集时的附加信息。
第三个选项卡称为模型,其中包含 AutoML 迄今为止训练的所有模型列表,如图 5.16所示。具有最佳指标分数的模型将列在顶部。表格显示算法名称、特定模型的解释结果(如果有)(已解释)、模型的分数(此处为准确率)、用于训练模型的数据百分比(采样)、以及模型训练的时间和持续时间信息(创建和持续时间列)。如果您从列表中选择一个模型,将启用以下三个命令:
-
部署启动选定模型的部署,您将在下一节了解有关部署的内容。
-
model.pkl
,其中包含实际训练的模型和执行推理所需的所有支持文件。 -
解释模型启动解释向导,在该向导中,您需要选择一个计算集群来计算特定模型的解释。默认情况下,AutoML 将解释最佳模型,但您可能希望解释额外的模型以进行比较。一旦计算出解释,您可以通过点击查看解释在已解释列中查看它们。这将打开所选模型的解释选项卡,其中会显示报告。您将通过第十章《理解模型结果》进一步了解模型可解释性。
主页面上的第四个标签页,称为输出 + 日志,以简单的文件浏览器显示特定运行的输出和日志。这些日志是整个 AutoML 过程的日志。如果你想查看特定模型训练过程的日志,你需要从模型标签页中选择该模型,然后访问该子运行的输出 + 日志部分。该标签页中的文件浏览器允许你浏览左侧的文件夹结构。如果选择了一个文件,其内容将在右侧显示。
到目前为止,你已经成功训练了一些模型,并查看了最佳模型来预测客户是否会流失。在下一节中,你将学习如何仅通过几个点击操作将此模型投入使用。
将最佳模型作为 Web 服务进行部署
在上一节中,你浏览了运行实验页面,回顾了与运行执行相关的信息以及探索结果,即经过训练的模型。在本节中,我们将重新访问模型标签页,并开始将最佳模型作为 Web 服务进行部署,以便进行实时推理。导航到运行的详情页面,如图 5.15所示。让我们开始吧:
-
点击模型标签页。你应该会看到类似于这里显示的页面:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_05_016.jpg
图 5.16 – 模型标签页作为部署模型的起点
-
在此列表中,你可以选择任何你想要部署的模型。选择包含最佳模型的行,如前面的截图所示。点击列表顶部的部署命令。将出现部署模型对话框,如此处所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_05_017.jpg
图 5.17 – 部署模型对话框
-
在
myfirstmlwebservice
中。 -
计算类型:你可以选择两种类型:
-
Azure Kubernetes 集群(AKS):当你想为生产工作负载部署模型并且处理多个并行请求时,应该选择此选项。该选项支持基于密钥和基于令牌的身份验证,如果你想保护端点,可以使用它。如果你希望更快地进行模型推理,它还支持使用现场可编程门阵列(FPGAs)。在这种情况下,你还需要指定要部署模型的 AKS 集群的计算名称属性。该列表应包含你在第四章 配置工作区中可能注册的所有推理集群。
-
Azure 容器实例:如果你计划进行功能测试,或者想在开发环境中部署模型,你可以将 Web 服务作为单一的 Azure 容器实例进行部署。这种计算类型较为便宜,但不支持扩展,并且只支持基于密钥的认证。对于本书内容,你可以选择这种类型来部署模型。
-
-
通过点击部署,你可以开始部署模型。
在浏览器的右上角,将会出现一个弹出窗口,如下图所示,告知你模型已开始部署:
图 5.18 – 端点部署窗口 – 部署进行中
-
弹出窗口会迅速消失,但你可以通过点击右上角的通知铃铛图标重新查看,如下图所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_05_019.jpg
图 5.19 – Azure 机器学习工作室右上角的任务栏
-
模型部署需要几分钟时间。你可以查看通知来检查部署进度。如果通知变为绿色,如下图所示,则表示部署已完成:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_05_020.jpg
图 5.20 – 端点部署窗口 – 部署完成
-
通过点击通知中的部署详情链接,浏览器将会把你重定向到已部署模型的端点页面,如下图所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_05_021.jpg
图 5.21 – 已部署模型的端点页面
重要提示
有多种方法可以访问模型的端点页面。例如,你可以通过进入 Azure ML Studio 中的 资产 | 端点 菜单来查看所有已发布的端点列表。要到达相同的页面,请选择你要检查的端点。
已部署模型的端点页面与实验运行页面类似,采用基于标签的结构。第一个标签叫做 详情,提供有关模型部署的信息。其中,最重要的信息位于前面截图中的 属性 区域,具体如下:
-
服务 ID 是你在部署向导的 步骤 3 中指定的服务名称。
-
部署状态 显示已部署或待部署模型的状态。端点可以处于五种状态。你可以在本章的 进一步阅读 部分找到更多关于状态及潜在问题的信息。
-
REST 端点是你可以复制到应用程序代码中的链接,用来通过 REST API 调用已部署的模型。
-
-
第二个标签页叫做测试,允许你测试已部署的模型。默认情况下,你会看到字段模式,这是一个表单,包含模型期望的所有输入,如下所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_05_022.jpg
图 5.22 – 已部署模型的端点页面
-
如果你想执行小批量推理,即一次发送多个记录,你可以从右上角切换到CSV模式。在此模式下,你可以将 CSV 文件的内容复制到将出现的文本框中,然后点击测试按钮。
在任意模式下,一旦你点击测试按钮,输入数据将被提交到 REST API,并且会返回结果。
-
端点页面的第三个标签页叫做
swagger.json
,它是自动生成的,位于端点中。这个文件描述了 REST API 的预期输入和输出,通常由 web 开发人员使用来提供有关他们生产的 REST 端点的文档。 -
最后,部署日志标签页展示了模型部署的详细日志。你可以使用这个标签页来排查潜在的部署问题。
恭喜你 – 你已经成功部署了自己的实时端点,用于推断客户是否会流失!在下一节中,你将了解模型部署时创建的工件。
理解模型的部署
在上一节中,你将模型作为 REST 端点进行部署。在这一节中,你将了解幕后发生了什么,并发现部署过程中生成的工件。
你从 AutoML 训练出的模型列表开始。在这个列表中,你选择了一个模型并点击了部署命令。通过这样做,你将选定的模型注册到了 Azure ML 工作区,并且一旦完成,过程就继续进行,部署端点,正如下图所示:
图 5.23 – 从 AutoML 模型列表到端点部署
模型注册在 Azure ML 工作区内创建了一个版本化记录,允许你跟踪用于训练特定模型的数据集以及该模型部署的位置。你将在第十二章,“用代码实现模型运作”中了解更多有关模型注册的信息。让我们来看看:
-
要查看这个模型注册,在 Azure ML Studio 中,导航至资产 | 模型。你将进入模型列表页面,如下所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_05_024.jpg
图 5.24 – 模型列表页面
模型列表页面列出了 Azure ML 工作区中所有注册的模型。这些是由工作区跟踪的模型。每个模型都有一个唯一名称。您可以拥有同一模型的多个版本,当您尝试注册具有相同名称的模型时,这将自动发生。模型列表允许您选择一个模型并对其执行各种操作,如删除和部署它。
重要提示
只有当注册的模型没有被任何端点使用时,您才能删除它。
-
点击模型的名称属性后,您将进入所选注册模型的详细信息页面,如下所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_05_025.jpg
图 5.25 – 注册模型详细信息页面
在这里,您可以获取有关模型的一般信息,比如是哪个运行训练了特定模型,使用了什么框架,以及该运行注册的实验名称。请注意,由于该模型是使用 AutoML 训练的,因此其框架是通用的 AutoML 框架。在第十二章,《通过代码实现模型运营》中,您将能够注册自己的模型,并指定您用来训练模型的框架。
在工件标签中,您将找到model.pkl文件,其中包含训练好的模型。在解释和公平性标签中,如果已经为特定模型生成了解释性结果,您可以查看这些结果。您将在第十章,《理解模型结果》中深入了解模型解释性。在数据集标签中,您可以看到用于配置 AutoML 实验时使用的特定版本数据集的引用。这使得您可以在训练数据集与已部署的模型之间建立传承关系。
-
一旦模型被注册,部署向导将创建一个端点。返回到 Azure ML Studio,点击资产 | 端点菜单项。这将带您进入如下所示的端点页面:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_05_026.jpg
图 5.26 – 端点页面
该列表显示了您从此 Azure ML 工作区部署的所有实时端点。您会注意到myfirstmlwebservice端点,这是您在上一节中部署的。点击其名称,您将进入端点页面,这个页面您在图 5.21中已经看过。
-
在幕后,这个端点是一个部署在
packt-azureml-rg
中的容器实例,紧邻您的 Azure ML 工作区资源。导航至 Azure 门户并打开packt-azureml-rg
。您应该能看到与这里展示的资源类似的内容:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_05_027.jpg图 5.27 – Azure 门户中 packt-azureml-rg 资源组的资源
-
在这里,你将看到一个名为myfirstmllwebservice-的容器实例已被部署,这是你在图 5.26中看到的端点的名称。这是托管你在上一节中部署的 REST API 的引擎。
重要说明
切勿直接从资源组删除 Azure ML 工作区的工件。这将导致工作区中出现孤立的注册项,如指向已删除容器实例的端点。
在本节中,你了解了从 AutoML 部署模型时发生的幕后过程。在下一节中,你将删除已部署的端点,以避免为不需要的实时端点支付费用。
清理模型部署
在本节中,你将清理已部署的模型。你应该删除那些不打算使用的模型部署。否则,你将为未使用的已配置资源付费。
导航到 Azure ML Studio。点击myfirstmlwebservice
端点并点击删除命令。在弹出的窗口中点击删除以确认你要删除该端点:
图 5.28 – 删除实时端点弹窗
在确认后,你在 Azure 门户中看到的端点和容器实例将被删除。如果你愿意,可以通过访问packt-azureml-rg
资源组来验证此操作。
总结
在本章中,你学习了如何配置 AutoML 过程,以发现能够预测客户是否会流失的最佳模型。首先,你使用 Azure 机器学习工作室的 AutoML 向导来配置实验。然后,你在工作室界面的实验部分监控运行的执行。一旦训练完成,你查看了训练好的模型,并查看了存储的关于最佳模型的信息。接着,你在 Azure 容器实例中部署了该机器学习模型,并测试了实时端点是否能够执行所请求的推断。最后,你删除了部署,以避免在 Azure 订阅中产生费用。
在下一章中,你将继续探索 Azure 机器学习工作室体验中的无代码/低代码部分,通过查看设计器,设计器允许你图形化地设计训练管道并实现生成的模型。
问题
你需要训练一个分类模型,但在 AutoML 过程中只考虑线性模型。以下哪项可以让你在 Azure 机器学习工作室体验中实现这一点?
a) 将所有非线性算法添加到阻止算法列表中。
b) 将退出标准选项设置为度量得分阈值。
c) 禁用自动特征化选项。
d) 在分类任务中禁用深度学习选项。
进一步阅读
本节提供了作为有用的网络资源的额外内容:
-
关于 AutoML 的基本概念:
-
docs.microsoft.com/azure/machine-learning/concept-automated-ml
。 -
深入了解如何使用 AutoML:
docs.microsoft.com/azure/machine-learning/how-to-use-automated-ml-for-ml-models
。 -
sklearn 中的交叉验证:
scikit-learn.org/stable/modules/cross_validation.html
。 -
从
swagger.json
文件生成客户端 SDK:swagger.io/tools/swagger-codegen/
。
第六章:第六章:可视化模型训练与发布
Azure 机器学习(AzureML)Studio 提供了一个设计器体验,帮助你在开发模型时通过拖放和配置训练与推理管道。在本章中,你将概览设计器。随后,你将创建一个训练过程。在了解设计器使用的整体流程后,本章将通过创建一个推理管道并将训练好的模型工件发布为服务端点来结束。
在本章中,我们将覆盖以下主题:
-
设计器概述
-
设计训练过程
-
创建批量和实时推理管道
-
部署实时推理管道
技术要求
你需要拥有 Azure 订阅。在该订阅中,你需要一个packt-azureml-rg
。此外,你需要有Contributor
或Owner
角色的packt-learning-mlw
,具体如在第二章中所述,部署 Azure 机器学习工作区资源。
你还需要在你的工作区中注册churn-dataset
,该工作区是在第五章中创建的,让机器来进行模型训练。
设计器概述
AzureML Studio 提供了一个图形化设计器,可以让你以可视化方式创建管道。根据定义,管道是一个可以独立执行的子任务流,描述了一个机器学习任务。在设计器中,你可以创建三种类型的管道:
-
训练管道:这些管道用于训练模型。
-
批量推理管道:这些管道用于将预训练模型用于批量预测。
-
实时推理管道:这些管道用于暴露一个 REST API,允许第三方应用程序使用预训练模型进行实时预测。
要创建批量和实时管道,你需要先编写一个训练管道。在接下来的部分中,你将学习如何创建训练管道,然后在此基础上生成批量和实时管道。在第十一章中,与管道协作,你将学习如何通过代码编写类似的管道。
要开始编写管道,你需要访问设计器主页。点击设计器菜单项,导航到主页,如下图所示:
图 6.1 – 设计器主页
在新建管道 + 按钮旁边,你将看到几个其他按钮,带有不同的现成示例管道。稍后请熟悉这些示例。为了展示设计器的最新功能,这些示例会定期更新,且它们是一个很好的入门资源。
在本章中,我们将从零开始创建一个新的管道。点击**+**按钮将带你进入创作视图/屏幕,我们将在下一节中探索这个视图。
创作视图
使用设计器构建管道的主页面如下所示:
图 6.2 – AzureML 设计器创作视图
我们将在这里描述主页面的用户界面,前面的截图作为参考:
-
通过点击左上角的汉堡菜单图标 (https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/1.png),你可以隐藏或显示前面截图中标记为1的 AzureML 主菜单。从现在起,我们假设该区域已被隐藏。
-
在标记为2的区域,你可以找到所有可以拖放到画布上的资产,这些资产在前面的截图中被标记为3。通过将不同的资产拖放到画布上,你可以构建一个管道。你将在本章的了解资产库部分深入了解该区域。
-
在右侧标记为4的区域,你将找到设置。这个区域也被称为详情页。此视图会根据你在画布中选择的内容而变化。如果你在画布区域中没有选择任何资产,你将看到你正在构建的管道的设置,并且可以选择一个默认计算目标来执行每个管道步骤。如果你选择了一个资产,你将找到该资产的各种配置选项。
-
区域
test-pipeline
。 -
在区域5,你还会找到设置按钮 (https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/2.png)。通过该按钮,你可以隐藏/显示前面截图中标记为4的设置区域。在同一区域,你还可以找到其他图标,用于保存或删除管道,以及在画布上进行撤销、重做和搜索操作。选择工具 (https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/3.png) 是画布上的标准光标。稍后,在我们构建管道时,我们将切换到手型工具 (https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/4.png) 来移动画布上选中的部分。点击设置以隐藏区域4,并扩大画布区域。
-
最后一个区域,在前面截图中标记为6,提供了提交、发布和克隆管道的功能,我们将在创建批处理和实时推理管道部分中讨论。
在继续下一节之前,你需要配置管道用于执行所有步骤的默认计算目标属性。打开管道设置,并选择你在第五章中使用的计算集群,让机器进行模型训练。
在下一部分,你将探索标记为2的区域,也被称为资产库。
了解资产库
要构建管道,你需要将不同的资产拼接在一起。在本节中,你将查看设计器的资产库中可用的不同资产。在图 6.2中,我们有 96 个可用的资产。这个数字取决于你在 AzureML 工作区中注册了多少数据集,并且在 AzureML 的未来版本中,你甚至可能能够创建自己的编码资产。下图显示了资产库中可用的类别以及它们包含的资产类型(也称为模块)的简要说明:
图 6.3 – AzureML 设计器资产库中的类别
这个库中有三种类型的资产:
-
数据集和手动输入的模块
-
未训练的模型
-
执行某些数据操作的模块
在你构建第一个端到端机器学习训练管道时,你将从这个资产库中拖放组件。在接下来的章节中,你将看到每个资产的外观以及如何在它们之间连接不同的资产。
探索资产的输入和输出
我们从资产库中拖放的每个资产都是我们正在构建的管道中的一个模块。一个模块看起来类似于以下截图中显示的示例模块:
图 6.4 – 一个具有两个输入和一个输出的示例模块
让我们从上到下描述这个模块:
-
顶部有零个、一个或多个输入端口:在前面的截图中,示例模块接受两个输入。你可以将另一个模块的输出连接到下一个模块的输入。
-
在模块的中间,模块名称描述了该模块的功能。我们的示例是一个训练模型模块,它会使用右侧输入端口给定的数据训练一个从左侧输入端口传入的未训练模型。
-
如果你在画布中选择模块,模块的详情页面将出现在图 6.2中标记为4的区域。这一页面对于每个模块都是不同的。你可以配置各种选项,如短描述或将执行该特定模块的计算目标。
-
在模块名称下方,你可以看到该模块的描述文本。你可以通过选择模块并编辑模块详情页面上的文本来修改该描述。在我们的示例中,模块描述显示的是示例模块的文本。
-
在模块的底部,有一个或多个输出端口,你可以将它们拖动并连接到下一个模块。
在本节中,你已经探索了 AzureML Studio 设计器的各个方面。在下一节中,你将开始编写你的第一个训练管道。
使用设计器构建管道
在本节中,我们将创建一个训练管道,用于训练在上一章中使用的客户流失数据集的机器学习模型。
当你开始设计训练流程时,我们建议采用如下图所示的7 步机器学习方法,它包含了创建机器学习模型所需的所有步骤:
图 6.5 – 7 步机器学习
这 7 步的旅程是现实场景中的宝贵清单,可以确保你不会遗漏任何步骤。在这个过程中,你将需要各种组件、转换和模型,这些都可以在资产库中找到。为了简化流程,我们将跳过一些你设计的流程中的步骤。在这一节中,你将从准备数据集开始,准备好训练模型。然后,你将评估模型并存储它。在下一节中,你将使用该模型创建批处理和实时流水线,利用模型进行预测。
让我们从获取将用于训练模型的数据开始,这将在下一节中进行。
获取数据
第一步是选择你将用于训练模型的数据集:
-
在资产库中,点击数据集类别旁的箭头展开。你应该可以看到你在第五章中创建的流失数据集,让机器进行模型训练:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_06_006.jpg
图 6.6 – 数据集类别下的流失数据集
-
将流失数据集拖动到画布上:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_06_007.jpg
图 6.7 – 带有流失数据集的画布
到此,你已经完成了数据收集步骤,意味着你可以进入7 步机器学习的第二步。
-
下一步是数据准备。通过拖动选择数据集中的列模块,将其添加到流程中,该模块可以在资产库中的数据转换类别下找到。
-
现在,你需要在数据集和模块之间创建流程。你可以通过从数据集的输出端口(数据集底部的小圆圈)拖动到选择数据集中的列模块的输入端口(模块顶部的小圆圈)来完成,如下图所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_06_008.jpg
图 6.8 – 在数据集和处理模块之间创建流程
-
下一步是配置选择数据集中的列模块。选择画布上的模块后,点击画布右侧详细信息窗格中的编辑列链接,如上图所示。选择列对话框将会出现。参见以下截图,了解该弹出窗口的最终配置。
-
在该弹出窗口中,从下拉菜单中选择所有列。
-
点击**+**按钮添加第二行。
-
从下拉菜单中选择排除。
-
从第二个下拉框中选择列名称。
-
从最后一个下拉框中选择id列。
对话框页面应该如下所示:
![图 6.9 – 选择列对话框]
](https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_06_009.jpg)
图 6.9 – 选择列对话框
-
点击保存以关闭弹出窗口。
到目前为止,你已经选择了将用于训练模型的数据集,并通过移除id列(在训练过程中不需要此列)准备了数据。在下一节中,你将通过添加未训练的模型、训练模型的模块以及用于评分和评估训练模型的模块来完善你的训练流程。
准备数据并训练模型
现在,你将选择你将要训练的模型。在第五章中,让机器进行模型训练,你确定了投票集成是给定数据的最佳表现模型。这种类型的模型是不同模型的组合,包括随机森林。为了简化示例,你将使用一个类似于随机森林的两类决策森林模型。我们开始吧:
-
在资产库中导航到机器学习算法类别。你会注意到几个子类别,其中包括分类。从该子类别中,拖动并将两类决策森林模块拖放到画布上。
-
对于模型训练,你将需要两个额外的模块:拆分数据模块,可以在资产库的数据转换类别中找到,以及训练模型模块,可以在模型训练类别中找到。将这两个模块拖放到画布上。
-
你需要扩展你在上一节中创建的数据流,将数据传递通过新的模块。从数据集中的选择列模块拉取一个输出端口到拆分数据模块的输入端口。
-
你需要在模块的详细信息面板中配置拆分数据模块,如下图所示。将第一个输出数据集中的行比例设置为0.7。这样,70%的数据将通过左输出端口区域传送,用于训练模型,30%的数据将通过右输出端口区域传送,用于测试。
-
训练模型模块接受两个输入。在左输入端口区域,你需要传递一个未训练的模型,该模型将使用右输入端口区域提供的数据进行训练。从两类决策森林模块拉取一个输出端口到训练模型模块的左输入端口区域。
-
将拆分数据模块的左输出端口区域拖动到训练模型模块的右输入端口区域。你的画布应该如下所示:![图 6.10 – 训练模型模块缺少一些配置]
](https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_06_010.jpg)
图 6.10 – 训练模型模块缺少一些配置
-
在前面的截图中,训练模型模块中有一个橙色的感叹号。这个标记表示该模块的某些配置错误。到目前为止,你已经配置了训练模型和使用哪些数据进行训练,但你还没有定义模型要预测哪一列。这个列被称为标签列。要配置标签列,选择画布中的模块,然后点击编辑列链接。这将打开如下截图所示的标签列对话框。从下拉列表中选择churned列,然后点击保存:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_06_011.jpg
图 6.11 – 选择模型将要预测的列
到目前为止,训练管道已完成了机器学习的 7 个步骤中的前四个步骤。接下来的步骤是评估模型。
-
将评分模型模块拖放到画布上,该模块可以在资产库中的模型评分与评估类别下找到。该模块接受训练好的模型作为左输入端口区域的数据,以及作为右输入端口区域的数据集。该模块的输出是一个包含模型对输入数据集进行推理结果的数据集。
-
将分割数据模块的右输出端口区域连接到评分模型模块的右输入端口区域。这将创建一个数据流,将原始数据的 30%部分传递到评分模型模块。
-
将输出端口区域连接到训练模型模块的左输入端口区域。评分模型模块将使用训练好的模型对输入数据进行推理。
-
将评估模型模块拖放到画布上,该模块可以在资产库中的模型评分与评估类别下找到。该模块将比较模型所做的预测与churned列中存储的值。
-
将评分模型模块的输出端口区域连接到评估模型模块的左输入端口区域。
如果你已经按照步骤操作,画布应该如下所示:
图 6.12 – 完整的训练管道
到目前为止,你已经编写了一个训练管道,完成了以下操作:
-
从数据集中移除id列。
-
将数据分为训练数据集和验证数据集。训练数据集包含原始数据的 70%。验证数据集包含剩余的 30%。
-
使用训练数据集训练二类决策森林。
-
使用训练好的模型对验证数据集进行评分。
-
通过检查评分数据集中的结果来评估模型的性能。您将能够在评估模型模块中查看训练模型的度量。
在下一节中,您将执行此管道来训练模型。
执行训练管道
在上一节中,您创建了一个完整的训练管道,接下来您将通过创建一个新的管道运行来执行它。让我们开始吧:
-
点击右上角的提交按钮,设置管道运行对话框将打开,如下图所示。
-
您需要创建一个新的实验并命名为test-pipeline。选择创建新实验单选按钮,然后输入该名称。
-
请注意,管道将在您在作者界面/视图部分中选择的默认计算目标上执行。点击提交按钮开始执行训练管道:
图 6.13 – 准备执行训练管道
一旦管道执行完成,设计器将类似于以下界面:
图 6.14 – 成功运行管道
至此,您已成功完成了第一个管道的开发和训练。当管道执行完成后,创建推理管道按钮将出现。以下部分将描述在创建推理管道时可选的不同选项。
创建批量和实时推理管道
本节将讨论从设计器部署推理管道的两种选项:批量和实时:
-
使用批量预测,您可以异步地对大型数据集进行评分。
-
使用实时预测,您可以实时地对一个小数据集或一行数据进行评分。
当您创建一个推理管道时,无论是批量的还是实时的,AzureML 会处理以下事项:
-
AzureML 将训练好的模型和所有训练数据处理模块作为资产,存储在数据集类别下的资产库中。
-
它会自动删除不必要的模块,如训练模型和拆分数据。
-
它将训练好的模型添加到管道中。
特别是对于实时推理管道,AzureML 将在最终管道中添加Web 服务输入和Web 服务输出。
让我们从创建一个批量管道开始,这将是您在下一节中要做的事情。
创建批量管道
在本节中,您将创建一个批量推理管道。让我们开始吧:
-
点击创建推理管道下拉菜单,位于提交按钮旁边,并选择批量推理管道。此操作将创建批量推理管道标签页,如下图所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_06_015.jpg
图 6.15 – 显示默认生成管道的批量推理管道选项卡
-
通过添加管道参数,你将能够在运行时更改管道的行为。在我们的案例中,我们希望参数化用于预测的数据集。要参数化输入数据集,点击churn-dataset,然后在右侧详细信息窗格中勾选设置为管道参数复选框。
-
将参数名称文本框中的默认参数名称更改为batchfile。
-
点击发布按钮,弹出设置已发布管道对话框,如以下截图所示。
-
选择创建新单选按钮,以定义新的管道端点。此端点用于触发即将发布的管道。
-
保持新管道端点名称字段的默认值不变。它应该显示为test-pipeline-batch inference。
-
你可以通过填写管道端点描述(可选)字段,向已发布的端点添加描述。在该字段中写入批量管道参数名称 batchfile 的测试。
-
保持所有其他设置不变。完成后的对话框页面应该如下所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_06_016.jpg
图 6.16 – 已发布管道对话框页面
-
点击发布按钮。
一旦管道的端点成功发布,设计器中将显示如下截图中的消息。test-pipeline-batch inference链接将引导你到已发布的管道:
图 6.17 – 发布成功
现在你已经发布了一个批量推理管道,你可以通过 AzureML Studio 界面触发它。在第十一章,与管道一起工作的将管道发布为端点部分,你将学习更多关于这些管道以及如何将它们与第三方应用程序集成的内容。
在下一节中,我们将基于训练管道创建实时管道。
创建实时管道
在本节中,你将创建一个实时推理管道。让我们开始吧:
-
在设计器中选择训练管道选项卡,该选项卡位于图 6.15的左上角。
-
点击提交按钮旁边的创建推理管道下拉菜单,并选择实时推理管道。这将生成默认的实时推理管道,如以下截图所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_06_018.jpg
图 6.18 – 默认实时推理管道
在我们部署此管道之前,需要进行一些更改。
-
点击选择数据集中的列模块,并点击右侧详细信息窗格中的编辑列链接。
-
点击加号(+)图标,在选择列对话框中添加新行。
-
从相应的下拉菜单中选择排除和列名,并输入churned作为要排除的列名。对话框页面应如下所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_06_019.jpg
图 6.19 – 从传入数据集中排除 id 和 churned 列
-
从资产库中的数据转换类别中,将应用 SQL 转换模块拖到画布上。将其放置在Web 服务输出模块的上方。
-
将评分模型模块的输出端口区域连接到应用 SQL 转换模块的左输入端口区域。
-
删除评分模型模块与Web 服务输出模块之间的连接。为此,点击连接两者模块之间的连接线。选中后,点击垃圾桶图标或按键盘上的删除按钮。连接器应被移除。
-
删除画布中的评估模型模块。
-
将应用 SQL 转换模块的输出端口区域连接到Web 服务输出模块的输入端口区域。
-
选择应用 SQL 转换模块。
-
点击应用 SQL 转换详细面板中的编辑代码链接,并用以下查询替换默认查询:
select [Scored Labels] from t1
此 SQL 转换仅选择预测值,该值存储在评分标签列中。
-
按保存按钮。修改后的管道应如下图所示。
-
为了确保您设计的管道正确执行,您需要使用提交按钮运行一次。将弹出设置已发布的管道对话框。
-
您需要在实验中执行管道。选择创建新单选按钮。
-
使用test-pipeline-real-time-inference作为新实验名称。
-
保持其他字段的默认值不变,点击提交。
您的管道应该可以执行,且画布应如下所示:
图 6.20 – 修改后的实时推断管道
在验证管道可以正常执行后,您可以将其部署为实时端点。关于将托管实时端点的基础设施,您有两种选择。您可以选择将其部署到Azure 容器实例(ACI)或Azure Kubernetes 服务(AKS)集群中。ACI基础设施适用于测试目的,而AKS基础设施则支持更好的生产环境。在我们的案例中,我们将部署到ACI,您将在下一部分了解有关内容。
部署实时推断管道
在本节中,您将部署在实时推断管道设计器标签中创建的示例实时推断管道。让我们开始吧:
-
点击部署按钮。这将弹出设置实时端点的弹窗,如下图所示。
-
在设置实时端点弹窗中,选择部署新实时端点单选按钮选项。
-
在名称文本框中,输入first-real-time-endpoint。
-
在描述文本框中,输入第一个实时管道的容器部署。
-
点击计算类型下拉列表,选择Azure 容器实例。
-
你无需修改高级设置。完成的弹窗应如下所示:https://github.com/OpenDocCN/freelearn-ds-pt4-zh/raw/master/docs/az-ds-ass-cert-gd/img/B16777_06_021.jpg
图 6.21 – 设置实时端点弹窗
-
点击部署按钮以配置你的实时端点。这将需要几分钟时间。
成功部署管道后,你将在 AzureML Studio 的资产 | 端点中找到新部署的管道。你刚部署的端点与在第五章中部署的端点相同,让机器进行模型训练。你可以通过网页界面进行测试。你将在第十二章中深入了解如何使用类似的端点,通过代码使模型操作化。在继续之前,你应当删除实时端点,以免产生费用。请参照第五章中的清理模型部署部分,删除你刚刚部署的端点。
总结
本章介绍了管道设计器,它允许我们通过拖放方式创建 AzureML 管道。你基于客户流失数据集和二分类决策森林模型构建了你的第一个训练管道。我们讨论了三种管道类型,编写了训练管道,创建了批量管道,并开发和部署了实时管道。
本章总结了 AzureML 提供的无代码、低代码功能。在下一章,你将开始使用 AzureML Python SDK。AzureML Python SDK 允许你通过代码训练模型并创建机器学习管道,这对于 DP-100 考试至关重要。
问题
部署实时管道有哪些选项?
-
Azure 容器实例仅适用
-
Azure 容器实例和Azure Kubernetes 服务
-
Azure 容器实例和Azure 虚拟机
-
Azure 虚拟机仅适用
进一步阅读
本节提供了一些有用的网络资源,帮助你扩展 AzureML 设计器的知识:
-
配置数据拆分和交叉验证的自动化机器学习:
docs.microsoft.com/azure/machine-learning/how-to-configure-cross-validation-data-splits
-
使用 AzureML 设计器运行批量预测:
github.com/MicrosoftDocs/azure-docs/blob/master/articles/machine-learning/how-to-run-batch-predictions-designer.md
-
教程:设计器 – 部署机器学习模型:
docs.microsoft.com/azure/machine-learning/tutorial-designer-automobile-price-deploy
-
什么是 AzureML 设计器?
docs.microsoft.com/azure/machine-learning/concept-designer
-
教程:设计器 – 训练一个无代码回归模型:
docs.microsoft.com/azure/machine-learning/tutorial-designer-automobile-price-train-score
-
教程:设计器 – 部署机器学习模型:ttps://docs.microsoft.com/azure/machine-learning/tutorial-designer-automobile-price-deploy