微软-Azure-自动机器学习-三-

64 阅读57分钟

微软 Azure 自动机器学习(三)

原文:annas-archive.org/md5/188dce12e012d6f75737380a61fa01c6

译者:飞龙

协议:CC BY-NC-SA 4.0

第十一章:实现实时评分解决方案

虽然大多数机器学习(ML)项目涉及批量评分,但最复杂的 ML 项目使用实时解决方案。想想看,有哪些模型可以确定信用卡交易是否欺诈,有哪些模型可以决定向在线购物者展示哪些广告,以及有哪些模型可以决定汽车经销商的顾客是否有信用。所有这些情况都需要实时评分解决方案,并且确保您的模型既快速又准确至关重要。

幸运的是,无论您选择用 Python 编写代码还是使用Azure 机器学习AML)工作室图形用户界面GUI),在 AutoML 中创建快速、可靠的实时评分解决方案都很容易。

您将开始本章,通过 AML 工作室 GUI 创建实时评分端点。实时评分端点是通过它们传递数据并快速接收结果的 Web 服务。继续,您将通过 Python 代码使用 AzureML SDK 在 Jupyter 笔记本中创建实时评分端点。最后,您将学习如何提高实时评分端点的性能,以更好地服务您的最终用户。

到本章结束时,您将拥有更完整的数据科学技能集。能够训练模型、批量评分模型、按计划重新训练模型以及实时评分模型都是您将拥有的基本 ML 工程技能。这种技能集需求很高。此外,您将能够创建可以嵌入复杂场景中的实时评分端点。

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

  • 通过 UI 创建实时端点

  • 通过 SDK 创建实时端点

  • 提高 AKS 集群的性能

技术要求

在本章中,您将创建在第四章构建 AutoML 回归解决方案中创建的Diabetes-AllData-Regression-AutoML

因此,您需要一个有效的互联网连接、一个Azure 机器学习服务AMLS)工作区和一个计算实例。您还需要有创建 AKS 集群的权限。如果您使用的是个人账户,这不会成为问题。

以下是为本章准备的前提条件:

  • 拥有互联网访问权限

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

  • 拥有微软 Azure 账户

  • 已创建一个 AMLS 工作区

  • 已在第二章Azure 机器学习服务入门中创建了compute-cluster计算集群

  • 了解如何从 Azure 计算实例导航到 Jupyter 环境,如第四章构建 AutoML 回归解决方案中所示

  • 第四章,“构建 AutoML 回归解决方案”中已训练并注册了Diabetes-AllData-Regression-AutoML机器学习模型。

本章的代码在此处可用:github.com/PacktPublishing/Automated-Machine-Learning-with-Microsoft-Azure/tree/master/Chapter11

通过 UI 创建实时端点

任何实时评分解决方案的核心都是一个实时评分端点,这是一个可以通过它传递数据并立即检索机器学习预测的 Web URL。端点托管在全天候运行、每周 7 天、等待接收请求的容器化服务上。

Requests可以将数据发送到端点进行评分,并且可以用任何计算机语言编写,包括 Python。一旦请求通过,你的端点将自动执行底层代码并返回结果。

你可以在任何地方使用这些端点;从 C#到 Python 到 Java 的任何编程语言都可以使用实时评分端点。因此,一旦你获得了托管端点的 URL,你就可以在任意其他代码中实现它。通常,实时评分端点被集成在流式作业、Web 应用程序和移动应用程序中。

当使用基于 AutoML 模型的实时评分端点时,有几个关键点需要注意,这些点使它们与你在第九章,“实现批量评分解决方案”中创建的批量评分管道有很大不同。具体如下:

  • 首先,当将数据传递给使用 AutoML 训练模型进行评分的端点时,你必须以 JSON 格式传递输入数据,这是通过端点发送数据的最常见格式。Pandas 数据框或除 JSON 以外的任何格式都会失败。

  • 其次,你不需要为评分 AutoML 训练模型编写 Python 脚本。Azure AutoML 会自动为你生成一个。因此,你传递给端点的数据必须具有评分所需的正确形状。除非你想更改 AutoML 生成的底层脚本,否则你无法在端点内部进行数据预处理。

AMLS 使用两个主要服务来托管端点,Azure 容器实例ACI)和 AKS。两者都是容器化的,并使用 Docker。它们都可以通过 AML studio 中的 GUI 或通过 Jupyter 笔记本中的 Python SDK 来创建。ACI 轻量级、成本低,主要用于测试。AKS 功能强大、成本高,用于生产。

重要提示

ACI 和 AKS 之间的一个关键区别是身份验证。ACI 仅支持基于密钥的认证,而 AKS 支持基于密钥和基于令牌的认证

在本节中,您将使用 AML 工作室 GUI 创建一个端点,使用您在 第四章 中构建的 Diabetes-AllData-Regression-AutoML ML 模型,该模型托管在 ACI 上。然后,您将通过 UI 创建一个AKS 集群;AKS 集群是一组虚拟机(VMs),它们全天候运行以托管您的端点。您将通过创建托管在您的 AKS 集群上的端点来结束本节。

总体而言,本节的目标是向您介绍端点,并展示您如何通过 AutoML 训练模型在几秒钟内轻松创建它们。

通过用户界面创建 ACI 托管的端点

首先,使用以下步骤创建一个使用 AI 的 Azure 容器实例:

  1. 通过导航到 ml.azure.com/ 打开您的 AML 工作室。

  2. 点击左侧面板下资产中的模型

  3. 您将看到在 AMLS 工作空间中训练的所有 ML 模型的列表。点击 Diabetes-AllData-Regression-AutoML 的蓝色链接。

  4. 点击 AutoML_ 下的蓝色链接,后面跟着一个唯一字符的字符串(GUID)。

  5. 点击屏幕顶部的部署

  6. 给您的端点命名为 diabetes-aci-gui。端点名称只能由小写字母、数字和破折号组成。

  7. 选择Azure 容器实例作为计算类型

  8. 确认您的设置与以下截图匹配后,点击部署图 11.1 – ACI 设置

    图 11.1 – ACI 设置

  9. 您的模型需要几分钟才能部署。等待足够的时间后,点击左侧面板下资产中的端点

    重要提示

    第一次在 ACI 或 AKS 中创建端点时,AMLS 将创建一个容器注册表来托管它们。在任何情况下都不要删除此注册表,因为从那时起您将无法部署端点。

  10. 点击 diabetes-aci-gui 的蓝色链接。

  11. 点击屏幕顶部的消费按钮。

  12. REST 端点 URL 复制到文本编辑器,如记事本。请注意,这里还有用于 C#、Python 和 R 中使用模型的代码。您现在已创建了一个在 ACI 上托管的运行得分端点。

在构建了 ACI 之后,您现在有一个可以用来评估新数据的运行端点。ACI 对于测试目的来说很棒,但为了创建一个生产就绪的解决方案,您需要 AKS。

通过用户界面创建 AKS 集群

在您可以在 AKS 上托管端点之前,您首先需要构建一个 AKS 集群。按照以下步骤使用 GUI 创建一个:

  1. 管理下的左侧面板中点击计算

  2. 点击屏幕顶部的推理集群

  3. 点击创建

  4. 选择中北部美国作为位置或您的 AMLS 工作空间所在的任何 Azure 位置。

  5. 使用右侧的搜索框搜索 Standard_DS3_v2

  6. 选择 Standard_DS3_v2 作为您的虚拟机并点击下一步

  7. 给你的 AKS 集群起一个名字。可以叫aks-amls-cluster。它的长度只能为 16 个字符。

  8. 选择开发/测试作为集群用途

  9. 设置3

    重要提示

    在创建 AKS 集群时,确保你的 VM 类型的核心数乘以节点数等于或大于 12。Standard_DS3_v2 VM 每个有 4 个核心,因此我们将节点数设置为4。这是一个最小要求。

  10. 一旦将你的设置与以下截图进行比较并确保它们匹配,点击创建图 11.2 – AKS 集群设置

图 11.2 – AKS 集群设置

现在你已成功创建了一个 AKS 集群。你可以使用这个集群来托管大量的 ML 模型。虽然 ACI 只适合运行大小不超过 1 GB 的模型,但你可以使用 AKS 集群来托管更大的模型。接下来,你将在该集群上创建一个端点。

通过 UI 创建 AKS 托管端点

为了创建一个托管在 AKS 上的实时评分端点,你需要遵循几乎与创建一个托管在 ACI 上的端点相同的步骤。首先,从以下步骤开始:

  1. 通过导航到ml.azure.com/打开你的 AML 工作室。

  2. 点击资产下左侧面板中的模型

  3. 你将看到在这个 AML 工作空间中你训练的所有 ML 模型的列表。点击蓝色的链接打开Diabetes-AllData-Regression-AutoML

  4. 点击AutoML_下的蓝色链接,后面跟着一个 GUID,一个独特的字符字符串。

  5. 点击屏幕顶部的部署

  6. 给你的端点命名为diabetes-aks-gui。端点名称只能由小写字母、数字和破折号组成。

  7. 选择Azure Kubernetes Service作为计算类型

  8. 打开启用身份验证开关。

  9. 选择基于密钥的身份验证作为类型

  10. 在确认你的设置与以下截图匹配后,点击部署图 11.3 – AKS 设置

    图 11.3 – AKS 设置

  11. 你的模型将需要几分钟的时间来部署,与你的 ACI 托管模型相同。一旦准备就绪,点击资产下左侧面板中的端点

  12. 点击蓝色的链接打开diabetes-aks-gui

  13. 点击屏幕顶部的消费

  14. REST端点 URL 复制到文本编辑器,如记事本。同时,复制一个密钥。你可以使用主密钥或辅助密钥。任一密钥都可以用于身份验证。

通过本节,你现在已创建了两个实时评分端点,一个托管在 ACI 中,另一个托管在 AKS 中。你还有一个 AKS 集群来托管你的端点,并已将基于密钥的身份验证分配给你的 AKS 托管端点。通过 AML 工作室,通过点击消费,你也可以轻松找到用于在 C#、Python 和 R 中部署你的端点的代码。

在下一节,你将使用代码做同样的事情。此外,你还将测试你的端点以查看它们的工作情况。

通过 SDK 创建实时端点

通过 AML Studio 的一键部署非常简单,但大多数组织将要求你通过代码开发你的解决方案。幸运的是,通过 AzureML Python SDK 创建 AutoML 模型的实时评分端点几乎和通过 UI 创建它们一样简单。此外,你将更深入地了解你的端点是如何工作的,以及如何格式化你的 JSON 测试,以便将数据作为请求传递到端点。

在本节中,你将首先进入你的 Jupyter 环境,创建一个新的笔记本。首先,你将通过 ACI 部署你的 Diabetes-AllData-Regression-AutoML 模型,对其进行测试,一旦你确认测试成功,就通过代码创建一个新的 AKS 集群并将其部署在那里。你将通过测试你的 AKS 部署来结束本节,并确认一切按预期工作。

本节的目标是进一步加深你对实时评分端点的理解,教你如何通过代码创建一切,并使你能够构建和测试复杂的实时解决方案。

使用 Python 通过 ACI 创建和测试实时端点

每次你打算实时部署一个 ML 模型时,你应该首先将你的模型部署到 ACI 并对其进行测试。这样,你可以了解你的数据需要如何格式化,你的端点需要多长时间才能响应评分,以及你的模型是否正常工作。首先创建一个端点。

在 ACI 上创建一个实时评分端点

和前面的章节一样,你首先需要在你的计算实例上打开一个 Jupyter 笔记本。然后,按照以下步骤构建一个实时评分端点:

  1. 通过导航到 ml.azure.com/ 打开你的 AML Studio。

  2. 点击 Compute,启动一个计算实例,并打开一个 Jupyter 环境。

  3. 创建一个新的 Jupyter 笔记本,并将其命名为 real-time-endpoints。如果你需要复习,请查阅 第四章构建 AutoML 回归解决方案

  4. 使用以下代码导入你的标准 Azure 库:

    from azureml.core import Workspace, Dataset, Datastore
    from azureml.core import Experiment, Environment, Model
    from azureml.core.compute import ComputeTarget, AksCompute
    

    所有这些包你现在都应该很熟悉,除了 AksCompute。如果你需要复习,请查阅 第四章构建 AutoML 回归解决方案,关于 WorkspaceDatasetDatastoreExperimentComputeTarget,以及 第九章实现批量评分解决方案,关于 EnvironmentModelAksCompute 允许你通过代码创建一个 AKS 集群。

  5. 使用以下代码导入你用于创建 ACI 端点的 Azure 库:

    from azureml.core.model import InferenceConfig
    from azureml.core.webservice import AciWebservice
    from azureml.core.webservice import AksWebservice
    from azureml.train.automl.run import AutoMLRun
    

    InferenceConfig 允许你指定你将用于创建端点部署的 Python 脚本和环境。这个包与基于 AKS 和 ACI 的部署一起使用。

    AciWebservice是您用于在 ACI 上创建端点的方式,而AksWebservice是您用于在 AKS 上创建端点的方式。AutoMLRun将允许您访问之前的 AutoML 训练运行。您将需要恢复在训练模型时创建的 Python 脚本。

    重要提示

    如果您在加载 Azure 库时遇到问题,请通过运行位于此处的Update AzureML SDK.ipynb笔记本来更新 AzureML SDK:github.com/PacktPublishing/Automated-Machine-Learning-with-Microsoft-Azure/blob/master/Update-AzureML-SDK.ipynb

  6. 使用以下代码导入非 Azure 库:

    import pandas as pd
    import numpy as np
    import random as r
    import requests
    import json
    import os
    

    您已经熟悉pandasnumpyosrandom。如果您需要复习,请参阅第四章构建 AutoML 回归解决方案,或第九章实现批量评分解决方案,以了解osrandom

    在新包中,requests允许您向您的部署端点发送网络请求。此包将允许您测试您的部署并使用端点评分数据,而json允许您将数据转换为网络请求使用的 JSON 格式。

  7. 使用以下代码将您的 Jupyter 笔记本连接到您的 AMLS 工作区:

    ws = Workspace.from_config()
    

    如果提示您登录,请按照指示操作。

  8. 使用以下代码的第一行将您的数据存储设置为默认值。如果您想使用不同的数据存储,请使用第二行和第三行代码代替,替换workspaceblobstore

    datastore = Datastore.get_default(ws)
    my_datastore_name = 'workspaceblobstore'
    my_datastore = Datastore.get(ws, my_datastore_name)
    
  9. 使用以下代码将您的计算集群设置为在第二章Azure 机器学习服务入门中创建的集群:

    compute_name = 'compute-cluster'
    compute_target = ComputeTarget(ws, compute_name)
    
  10. 使用以下代码将您的环境设置为AzureML-AutoML

    environment = Environment.get(ws, 'AzureML-AutoML')
    

    AzureML-AutoML是随 AzureML SDK 一起提供的标准环境。您可以使用此环境进行任何实时 AutoML 部署。

    提示

    AzureML SDK 附带了许多不同的标准环境。您可以通过使用Environment.list函数访问它们的列表。

  11. 使用以下代码设置您的Diabetes-AllData-Regression-AutoML模型:

    model = Model(ws, 'Diabetes-AllData-Regression-AutoML')
    

    这是您将部署到端点以实时评分糖尿病数据的模型。

  12. 导航到您的 AML 工作室,在左侧面板上单击模型。您需要检索与您的模型关联的实验和运行 ID。

  13. 点击蓝色链接打开Diabetes-AllData-Regression-AutoML

  14. 如果您在第四章构建 AutoML 回归解决方案中逐字逐句遵循了指示,请复制Diabetes-Sample-Regression

  15. 使用以下代码设置您的实验和运行 ID:

    experiment = Experiment(ws, 'Diabetes-Sample-Regression') 
    runID = 'AutoML_your_run_ID' 
    
  16. 使用以下代码检索您的 AutoML 运行:

    run = AutoMLRun(experiment, runID)
    

    你检索旧运行的原因是为了从中提取用于部署模型的 Python 脚本。这是用于通过 GUI 部署你的模型的相同脚本。

    重要提示

    你可以使用此代码始终检索旧模型运行。如果你忘记注册模型,这很重要。你可以类似地检索旧的 ML 管道运行。

  17. 使用以下代码提取由 AutoML 最佳拟合的模型:

    best_run, fitted_model = run.get_output()
    

    此代码检索两个对象,最佳运行以及模型。你将只使用最佳运行,但 get_output() 需要你传递两个对象,否则函数将返回错误。

  18. 使用以下代码创建一个文件夹来保存所有你的实时脚本:

    os.makedirs('Real_Time_Scripts', exist_ok=True)
    
  19. 使用以下代码检索你将用于实时评分数据的 Python 脚本:

    script_path =\
    'Real_Time_Scripts/Diabetes_Inference.py'
    best_run.download_file('outputs/scoring_file_v_1_0_0.py', script_path)
    

    当 AutoML 训练模型时,它会输出一个用于实时推理的评分文件。此文件始终称为 scoring_file_v_1_0_0.py,位于 outputs 文件夹中。此代码获取该文件并将其保存为 Diabetes_Inference.py

  20. 设置一个变量来命名你的 ACI 部署:

    aci_service_name = 'diabetes-scoring-aci'
    
  21. 使用以下代码配置端点以使用你的 Python 脚本和 Azure-AutoML 环境:

    inference_config =\
    InferenceConfig(entry_script=script_path,\
    environment = environment)
    
  22. 使用以下代码配置你的 ACI 部署:

    aci_config =\
    AciWebservice.deploy_configuration(\
    cpu_cores = 1, memory_gb = 1,\
    tags = {'Project': 'Diabetes'},\
    description = 'Diabetes Real-Time ACI Deployment')
    

    注意你需要设置用于部署的核心数以及要保留的内存量。你还可以设置标签并添加描述。

  23. 使用以下代码创建你的 ACI 端点:

    aci_service =\
    Model.deploy(ws, aci_service_name,\
    [model], inference_config, aci_config,overwrite=True)\
    aci_service.wait_for_deployment(True)
    

此代码要求你传递你的 AMLS 工作空间、你的 ACI 部署名称、你的 ML 模型、你的端点(推理)配置、你的 ACI 配置,并将 overwrite 标志设置为 TrueFalse。你的端点部署应花费 5 到 10 分钟。

测试你的实时评分端点

现在你已经在 ACI 上创建了一个实时评分端点,是时候测试它了。首先,你需要创建一些数据来测试它,然后你需要将其转换为 JSON 并按照以下步骤将其传递到端点:

  1. 要创建一些随机的 Diabetes 数据,首先,使用你在 第二章Azure Machine Learning Service 入门 中创建的 Diabetes 样本数据集的最小值和最大值来为每个变量创建一个可能的值范围,使用以下代码:

    AGE_range = np.arange(19,79,1)
    SEX_range = np.arange(1,2,1)
    BMI_range = np.arange(18.0,42.2,0.1)
    BP_range = np.arange(62, 133, 1)
    S1_range = np.arange(97, 301, 1)
    S2_range = np.arange(41.6, 242.4, 0.1)
    S3_range = np.arange(22, 99, 1)
    S4_range = np.arange(2, 9.09, 0.01)
    S5_range = np.arange(3.258, 6.107, 0.001)
    S6_range = np.arange(58, 124, 1)
    
  2. 创建一个空列表以帮助生成样本数据。这与你在 第九章实现批量评分解决方案 中创建样本 Iris 数据的方法类似。此外,创建一个空的 pandas dataframe 并使用以下代码将其列分配给它:

    DiabetesList = []
    columns =\
    ['AGE', 'SEX', 'BMI', 'BP', 'S1', 'S2', 'S3', 'S4', 'S5', 'S6']
    DiabetesDF = pd.DataFrame(columns=columns)
    
  3. 使用以下代码使用 for 循环创建示例糖尿病数据:

    for i in range(0,5):
        values = [r.choice(AGE_range),\
    r.choice(SEX_range),r.choice(BMI_range),\
    r.choice(BP_range), r.choice(S1_range),\
    r.choice(S2_range), r.choice(S3_range),\
    r.choice(S4_range), r.choice(S5_range),\
    r.choice(S6_range)]
        DiabetesDict = pd.DataFrame(dict(zip(columns, values)), index=[0])
        DiabetesList.append(DiabetesDict)
    DiabetesDF = DiabetesDF.append(DiabetesList,True)
    

    此代码与用于创建 Iris 数据的代码相同。请参阅 第九章实现批量评分解决方案,以获取详细说明。

  4. 使用以下代码将你的样本数据注册为名为 Diabetes Scoring

    Dataset.Tabular.register_pandas_dataframe(\
    DiabetesDF, datastore, 'Diabetes Scoring')
    

    这将把底层数据写入你的默认数据存储,并注册为名为 Diabetes Scoring 的数据集。

  5. DiabetesDF 转换为以 {"data": 开头和 } 结尾的 JSON 对象。每个 AutoML 真实时部署都需要以这种格式的数据:

    test = '{"data":' +\
    DiabetesDF.to_json(orient='records') + '}'
    

    重要提示

    在创建 JSON 文件时,始终将 orient 设置为 records。任何其他 JSON 格式都可能导致错误。

  6. 查看你的数据以了解你的传入数据应该是什么样子:

    Test
    

    你的数据应该类似于 图 11.4,尽管值将根据你的数据而有所不同。关键点是 JSON 值需要以键值对的形式存在,以确保正确的预测:

    图 11.4 – JSON 格式

    图 11.4 – JSON 格式

  7. 导航到你的 AML 工作室首页并点击 端点

  8. 点击蓝色链接到 diabetes-scoring-aci 并点击 消费。复制链接到你的端点的 URL 并将其粘贴到文本编辑器,如记事本。

  9. 返回到你的代码,将 URL 和头信息设置为变量:

    aci_url = 'your-aci-endpoint-url'
    headers = {'Content-Type': 'application/json'}
    

    虽然你需要输入你的 URL,但头信息对于每次部署都是相同的。

  10. 使用以下代码测试你的 ACI 部署:

    response =\
    requests.post(aci_url, test, headers=headers)
    print(resp.text)
    

你现在已经通过代码创建了一个在 ACI 上托管的真实时评分端点,并且已经成功测试了它。此外,你还了解你的数据需要以 JSON 格式进行塑形和格式化,以便进行评分。一旦你确认你的实时端点在 ACI 中工作正常,下一步就是创建一个 AKS 集群,并将生产版本部署在那里,就像你接下来要做的那样。

通过 Python 创建 AKS 集群

通过代码创建 AKS 集群与通过 GUI 创建一样简单直接。许多组织要求所有基础设施都通过代码创建,你可以使用以下步骤作为模板:

  1. 在你的 Jupyter 笔记本中继续操作,为你的虚拟机大小、所需节点数量、AKS 集群位置和 AKS 集群名称设置变量:

    aks_cluster_name = 'aks-code-cluster'
    vm_type = 'Standard_DS3_v2'
    node_count = 3
    AKS_location = 'northcentralus'
    
  2. 使用以下代码设置你的 AKS 集群配置:

    prov_config =\
    AksCompute.provisioning_configuration(vm_size =\
    vm_type, agent_count = node_count, location =\
    AKS_location)
    

    在设置配置时,请记住,你的节点数乘以每个虚拟机上的核心数必须大于或等于 12。同时,在设置 Azure 位置时,考虑数据将从哪里传入。

  3. 使用以下代码创建你的 AKS 集群:

    aks_target =\
    ComputeTarget.create(workspace = ws, name =\
    aks_cluster_name, provisioning_configuration =\
    prov_config)
    aks_target.wait_for_completion(show_output = True)
    

    你必须传入你的 AMLS 工作区、AKS 集群名称和 AKS 集群配置。启动你的集群大约需要 5-10 分钟。

你已经通过代码创建了一个 AKS 集群。一旦它启动并运行,你就可以将评分端点部署到你的 AKS 集群,并使用你已创建的许多相同变量进行测试。因此,建议你在同一个 Jupyter 笔记本中创建 ACI 和 AKS 端点。这将节省你大量复制代码的工作。

通过 Python 使用 AKS 创建和测试实时端点

您在本节中的最后一个任务是部署您的实时评分端点到 AKS 集群,获取 URL 和访问密钥,并测试您的部署。只有几个步骤,因为您在部署到 ACI 时已经创建了大部分代码。

在本章结束时,请记住删除您的 AKS 端点和集群,因为它们可能相当昂贵,并可能产生账单。在同一个 Jupyter 笔记本中,继续以下步骤:

  1. 使用以下代码设置您的目标 AKS 集群:

    aks_cluster = AksCompute(ws, 'aks-code-cluster')
    
  2. 为您的 AKS 部署设置一个变量名:

    aks_service_name = 'diabetes-scoring-aks' 
    
  3. 使用以下代码配置您的 AKS 部署:

    aks_config =\
    AksWebservice.deploy_configuration(cpu_cores = 1,\
                      memory_gb = 1, tags = {'Project':\
                      'Diabetes'}, description =\
                      'Diabetes Real-Time ACI Deployment')
    

    注意,这些配置与您用于 ACI 部署的配置相同。

  4. 使用以下代码创建您的 AKS 端点:

    aks_service =\
    Model.deploy(ws, aks_service_name, [model],\
    inference_config, aks_config, aks_cluster,\
    overwrite=True)
    aks_service.wait_for_deployment(show_output = True)
    

    注意,此代码几乎与您用于创建 ACI 部署的代码相同;唯一的区别是您还必须传入 AKS 集群。这是因为 AKS 是托管在您管理的 VM 集群上,而 ACI 是一个无服务器容器服务。

  5. 导航到您的 AML 工作室首页并点击 端点

  6. 点击蓝色链接打开 diabetes-scoring-aks 并点击 消费。复制链接到您的端点的 URL 并将其粘贴到文本编辑器(如记事本)中。同样,对于访问密钥,您可以使用主密钥或辅助密钥,任选其一。两者都适用。

  7. 回到您的代码,将您的 URL、密钥和头信息设置为变量:

    aks_url = 'your-aks-endpoint-url'
    key = 'your-aks-key'
    headers = {'Content-Type': 'application/json'}
    headers['Authorization'] = f'Bearer {key}'
    

    在这里,您需要添加一个额外的头信息用于授权。Bearer 函数通过授予提供正确密钥的任何人访问权限来工作。

    重要提示

    在生产环境中,请确保将所有密钥存储在 Azure Key Vault 中,不要在公开代码中暴露您的密码和密钥。这是一个最佳实践,可以保护您。

  8. 使用以下代码测试您的 AKS 部署:

    resp = requests.post(aks_url, test, headers=headers)
    print(resp.text)
    

    您应该看到与您的 ACI 测试相同的结果,因为它们使用相同的数据输入。确保输出匹配,您就可以称您的测试为成功。

您现在已经学到了成功在 Azure 中创建实时评分端点所需的所有知识。这些端点可以在任何其他代码片段中使用。确保推送到端点的任何数据都处于正确的 JSON 格式,您的项目将取得成功。

本章的最后部分处理优化 AKS 集群的性能。涉及一些微调,可以大大提高评分解决方案的响应时间。

提高 AKS 集群的性能

有时您会在 AKS 上部署一个端点,但它并不按您期望的方式运行。可能超时,可能太慢,可能是一个之前运行良好的端点突然面临无法处理的更多流量。这些情况会发生,您必须准备好应对它们。

幸运的是,AKS 部署有很多额外的配置,您可以利用这些配置来解决这些问题。本节将介绍一些更常见的情况,如下所示:

  • 根据您的模型复杂度、您尝试评分的数据点数量以及虚拟机的大小,AKS 模型有时可能需要一段时间才能评分或甚至超时。在这种情况下,您有很多事情可以做。

    首先,您可以尝试增加您虚拟机的尺寸,选择一个具有更多 RAM 的虚拟机。接下来,您可以在部署配置中添加一个额外的设置,scoring_timeout_ms。此设置默认为60000毫秒,即 1 分钟。您可以将其调整为最多300000毫秒,即 5 分钟。有时,调整memory_gb或增加cpu_cores的数量也可能有所帮助。

  • 使用 AML studio 检查您模型的大小。您可以通过点击部署配置中的memory_gb设置来完成此操作。

  • 在您的端点突然遇到无法处理的流量激增的情况下,尝试开启自动扩展并增加其扩展能力。在部署配置中将autoscale_enabled设置为True

    您还可以使用autoscale_min_replicasautoscale_max_replicas手动调整自动扩展将创建的最小和最大副本数。这些默认值分别为110。在流量高峰的情况下,尝试将这两个值都提高以增加性能。

带着这些信息,您可以轻松创建满足您业务和性能要求的强大 AKS 部署。当流量繁忙时,提高自动扩展。当您的应用程序超时时,调整超时设置。当您的 AKS 端点运行缓慢时,尝试使用更大的虚拟机或调整内存设置。最重要的是,在 AKS 上部署之前,始终在 ACI 上测试您的部署,并确保输入数据以正确的 JSON 格式以键值对的形式传入。

摘要

您现在已创建并测试了使用 AutoML 训练模型的真实时评分解决方案。首先在 ACI 上部署,然后在 AKS 上部署,您理解了创建实时评分端点的完整端到端过程。

此外,您还了解为了使用这些端点生成预测,数据必须如何塑形和格式化,这些可以集成到任何使用各种计算机语言的代码中,以创建强大、创新解决方案。

在下一章,第十二章利用 AutoML 实现商业价值,本书的最后一章,你将学习如何以一种能够赢得非技术业务伙伴信任的方式展示 AutoML 解决方案。毕竟,他们的信任和接受是解锁组织中机器学习和人工智能力量与价值的基础。

第十二章:利用 AutoML 实现商业价值

在这本书中,您已经获得了各种各样的技术技能。现在,您能够使用 AutoML 训练回归、分类和预测模型。您可以使用 Jupyter 笔记本在 Python 中编码 AutoML 解决方案,您知道如何导航 Azure Machine Learning Studio,甚至可以将机器学习管道集成到 Azure Data Factory (ADF) 中。然而,仅凭技术技能并不能保证您项目的成功。为了实现商业价值,您必须赢得最终用户的信任和接受。

在本章中,您将首先学习如何以使最终用户易于理解的方式展示端到端架构。然后,您将学习使用哪些可视化工具和指标来展示您模型的表现,之后您将学习如何可视化和解释 AutoML 内置的可解释性功能。

您还将探索在 Azure Machine Learning Service (AMLS) 之外运行 AutoML 的选项,并在本章结束时添加一个关于通过将您的信息与您提供的解决方案类型对齐来赢得最终用户信任的部分。

到本章结束时,您将准备好取得成功。您将获得一些必要的软技能,以便向最终用户传达您的解决方案,从而增加您的端到端解决方案被您的组织采用和使用的可能性。未能赢得最终用户信任是数据科学项目失败的主要原因之一,通过遵循本章中的指南,您将更有可能为您的解决方案创造兴奋点。

本章将涵盖以下主题:

  • 架构 AutoML 解决方案

  • 可视化 AutoML 模型结果

  • 向您的业务解释 AutoML 结果

  • 在其他 Microsoft 产品中使用 AutoML

  • 实现商业价值

技术要求

在本章中,您将使用您在前面章节中创建的模型来检索图表、图表和指标。因此,您需要一个有效的互联网连接、Azure 账户和 AMLS 工作空间。您还需要完成 第四章*,构建 AutoML 回归解决方案* 和 第五章*,构建 AutoML 分类解决方案* 中的练习。

本章的先决条件如下:

  • 上网权限。

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

  • 一个 Microsoft Azure 账户。

  • 一个 AMLS 工作空间。

  • 您需要在 第四章*,构建 AutoML 回归解决方案* 中训练并注册 Diabetes-AllData-Regression-AutoML 机器学习模型。

  • 您需要在 第五章*,构建 AutoML 分类解决方案* 中训练并注册了 Iris-Multi-Classification 机器学习模型。

本章没有新的代码。

架构 AutoML 解决方案

架构 AutoML解决方案是指绘制端到端图。这些图作为构建解决方案的蓝图,也可以用来向最终用户解释整个工作流程。虽然许多 IT 解决方案复杂且形式多样,但基于 AutoML 的解决方案遵循标准模式,需要你做出一些重要的决策。

在本节中,你将首先学习在架构决策之前需要做出哪些决策。然后,你将学习如何架构一个易于向最终用户解释的端到端批处理评分解决方案和端到端实时评分解决方案。尽管架构可能被简化,但越标准化,就越容易实施、解释和理解。

为 AutoML 解决方案做出关键架构决策

在绘制架构图时,你需要考虑几个关键因素,其中最重要的是你是否需要构建批处理或实时解决方案。批处理解决方案与实时解决方案的要求大不相同,通常遵循涉及 AMLS 和 ADF 的模板。另一方面,实时解决方案则更加定制化。

首先,我们将检查在构建批处理解决方案时需要提出的关键问题,因为它们更容易理解。你只需要考虑数据从哪里来,你的解决方案应该多久评分一次新数据,何时应该重新训练模型,以及最终用户将如何接收结果。就是这样。

同时,还有一个问题,那就是在你将各种机器学习ML)管道安排在 AMLS 或 ADF 中进行调度时,应该如何协调。ADF 通常是最佳选择,因为它可以让你轻松地将数据移动到 Azure 中。以下表格提供了构建批处理解决方案的关键问题和答案的摘要:

图 12.1 – 批处理解决方案的关键考虑因素

图 12.1 – 批处理解决方案的关键考虑因素

另一方面,实时解决方案要复杂得多。你仍然需要询问输入数据从哪里来,你应该多久重新训练一次 AutoML 模型。此外,你还应该弄清楚你的端点将在哪里评分数据。这可能非常复杂,因为你在几乎任何地方都会使用你的端点。最常见的情况是,这将是一种某种类型的 Web 应用程序或无服务器代码片段。

最后,你需要弄清楚你的端点一次需要服务多少请求,最终用户需要多快的响应速度,以及你的Azure Kubernetes 服务AKS)集群应该有多大,以便满足解决方案的需求。以下表格提供了构建实时解决方案的关键问题和答案的摘要:

图 12.2 – 实时解决方案的关键考虑因素

图 12.2 – 实时解决方案的关键考虑因素

一旦您提出并回答了这些问题,您就可以开始构建架构图。首先,您将学习批处理解决方案的常见模式。

架构批处理解决方案

一旦您回答了输入数据来源和结果存放位置的问题,AutoML 批处理解决方案就相对容易构建。它们总是遵循大致相同的模式。首先,您将通过 ADF 从本地和云源摄取数据,并将数据存放在**Azure Data Lake Storage Gen 2 (ADLS Gen 2)**存储账户中。这使得您的数据可被 AMLS 访问。

一旦数据进入数据湖,您就可以在 AMLS 中使用 AutoML 来训练和注册一个机器学习模型。您的下一步是使用该模型创建评分管道和训练管道。然后,您通过 ADF 编排这两个机器学习管道,为评分管道和训练管道分别决定一个调度计划。

训练管道会自动在 AMLS 中注册您模型的最新版本,但您需要决定将评分管道的最终输出放置在哪里。默认情况下,评分管道被设计为将数据存放在 ADLS Gen 2 中。一旦数据在那里,您应该设置一个 ADF 复制活动,将数据从数据湖移动到其最终目的地。完整的端到端架构在以下图中展示:

图 12.3– 常见的批处理架构

图 12.3– 常见的批处理架构

为您制作的每个批处理 AutoML 解决方案创建类似的图,并在需要时重复使用它们。遵循模板架构将随着时间的推移使您和您的团队更加高效。

接下来,您将学习实时解决方案的常见架构。仔细注意相似之处和不同之处。虽然开始部分与批处理架构相同,但结尾部分却截然不同。

架构实时解决方案

实时解决方案架构需要更加仔细的考虑。如果有的话,您的最终用户将如何与您的端点交互?您是否正在设计一个用户可以随时评分数据的 Web 应用程序?您是否有一个一次向端点发送数千个信号的流系统?一旦这些问题得到解答,您就可以完全完善架构。

对于批处理解决方案,第一步涉及使用 ADF 将数据摄取到 ADLS Gen 2 中,并使用 AMLS 进行 AutoML 模型的训练和注册。这部分是相同的。一旦模型训练完成,您需要创建一个实时评分端点和机器学习训练管道。您将像往常一样在 ADF 中安排重新训练,以定期更新模型。

您还需要决定端点将驻留在何处。在这个架构中,它位于面向用户的 Web 应用程序上。用户可以在任何时间将数据传递到 Web 应用程序中,此时结果将在屏幕上显示,并立即发送到 ADLS Gen 2。以下图显示了完整的端到端架构:

图 12.4 – 常见的实时架构

图 12.4 – 常见的实时架构

向最终用户展示架构是获得解决方案接受的关键部分。最终用户需要以一般的方式了解一切是如何连接和工作的。在展示你的架构之后,你应该接着展示你的 AutoML 模型的结果。教用户如何使所有部件配合在一起只是一个介绍。以最终用户能够理解的方式展示你的模型结果,将大大有助于他们支持你的解决方案。

可视化 AutoML 建模结果

向你的业务展示你的 AutoML 模型的结果对于解决方案的采用至关重要。毕竟,如果你的最终用户不能确信它符合某些性能标准,他们不太可能采用你的解决方案。有几种方式可以展示 ML 模型的结果;展示结果最有效的方式是通过可视化。

幸运的是,AutoML 运行提供了回归、分类和预测结果的自动可视化。回归和预测具有相同的可视化,而分类则相当不同。在每种情况下,你只想与最终用户分享一个可视化;同一结果的多个视图可能会引起混淆。

在本节中,你将首先了解在分类之前向最终用户展示什么,然后转向回归和预测。

可视化分类结果

混淆矩阵,如第五章**,构建 AutoML 分类解决方案中所示,是展示 AutoML 分类训练运行结果的关键。最终,用户通常关心的是你的模型有多准确,以及是否存在假阳性或假阴性的倾向。为了获取这些信息,请按照以下步骤操作:

  1. 导航到ml.azure.com的 AML 工作室。

  2. 在左侧面板的资产下点击实验

  3. 点击Iris-Multi-Classification的蓝色链接。这是你在第五章**,构建 AutoML 分类解决方案中用来训练分类模型的实验。

  4. 点击最新的运行蓝色的链接。这个链接位于AutoML_之后,跟着一个唯一的标识字符串。如果有多个运行,请使用最新的。

  5. 在屏幕顶部附近点击模型

  6. 算法名称下点击你性能最高的模型的名称的蓝色链接。它可能是StackEnsembleVotingEnsemble。你会知道它是你的最高性能模型,因为它将是唯一一个带有查看解释链接的模型。

  7. 在屏幕顶部附近点击度量

  8. 选择准确度混淆矩阵的复选框。

  9. 在混淆矩阵中,点击下拉框并选择标准化。您应该会看到一个类似于以下图所示的图表:

图 12.5 – 为您的业务用户提供的分类结果

图 12.5 – 为您的业务用户提供的分类结果

此图表包含您的最终用户所需的所有信息。首先,模型准确率为 98.7%。其次,它总是正确地识别Iris-setosaIris-virginica。最后,有 4%的可能性您的模型将错误地将Iris-versicolor识别为Iris-virginica

在向您的业务用户解释结果时,保持这一级别的细节。解释说这是基于训练数据,并且您预计当应用于模型以前从未见过的数据时,结果可能会稍微差一些。

重要提示

样本量越大,您的样本数据越能代表现实世界,您的训练结果对新数据点的评分就越适用。这也是为什么始终重要的是收集尽可能多的好数据,并确保您的数据没有采样偏差。

通常,此图表将满足大多数最终用户对您的模型性能的疑问。由于 AutoML 生成的图表可能难以阅读,您可以采取的一个改进方法是使用其他工具(如 PowerPoint)重新创建此图表。回归和预测也有一个用于展示结果的非常强大的图表。

可视化预测和回归的结果

预测值与真实值图,首次在第四章**,构建 AutoML 回归解决方案中介绍,是展示这两种问题类型结果的关键。此图显示了您的模型在一系列分数上的性能。然而,它比混淆矩阵稍微难解释一些,需要您仔细向最终用户解释。要访问它,请按照以下步骤操作:

  1. 导航到ml.azure.com的 AML 工作室。

  2. 在左侧面板的资产下点击实验

  3. 点击蓝色链接以打开Diabetes-Sample Regression。这是您在第四章**,构建 AutoML 回归解决方案中用于训练回归模型的实验。

  4. 点击蓝色链接以打开您的最新运行。此链接位于AutoML_之后,跟一个唯一的标识符字符串。如果有多个运行,请使用您的最新运行。

  5. 点击屏幕顶部的模型

  6. 点击算法名称下的蓝色链接以打开您最高性能模型的名称。它可能是StackEnsembleVotingEnsemble。您将知道它是您的最高性能模型,因为它将是唯一一个带有查看解释链接的模型。

  7. 点击屏幕顶部的指标

  8. 勾选平均绝对百分比误差预测真实值的复选框。您应该看到以下图中类似的图表:

图 12.6 – 为您的业务最终用户提供的回归/预测结果

图 12.6 – 为您的业务最终用户提供的回归/预测结果

平均绝对百分比误差MAPE)通常是与商业误差一起使用的最佳回归指标。在这种情况下,它表明您的 AutoML 模型通常偏离了 39.4%,与您几乎完美的 Iris 模型相比并不特别令人印象深刻。商人往往认为 MAPE 是最容易理解的指标,因为它不需要统计学背景或对标准差或方差的深入了解。

预测值与真实值图显示了您的模型在预测一系列值时的表现如何。理想情况下,您希望您的蓝色线(平均预测值)与绿色线(理想)相匹配。至少,您希望大部分绿色线(理想)落在蓝色线(平均预测值)周围的阴影边界内。

您想要解释的是,对于 74.4 分到大约 250 分的分数,您的模型在预测真实分数方面做得相当不错。在这个范围之外,您的模型表现较差,倾向于高估 74.4 分以下的真实分数,低估 250 分以上的分数。使用以下直方图指出训练数据的分布情况。也许在光谱的更高端和低端收集更多的样本数据点将改善您的模型。

有时,一些有统计学背景的用户可能会成为您的最终用户之一。如果是这种情况,您还希望向他们展示通过勾选残差框可以获得的残差图。他们想知道您的模型是否显示出偏差的证据,通过展示以下图中所示的钟形残差直方图,您可以让他们放心:

图 12.7 – 回归和预测的残差直方图

图 12.7 – 回归和预测的残差直方图

预测在呈现结果方面与回归相同;它们使用相同的图表。通过向最终用户展示正确的可视化,您可以消除他们对性能的任何担忧。然而,他们通常会问一个后续问题。您的模型实际上是如何工作的? 要回答这个问题,您需要使用 AutoML 的内置可解释性功能。

向您的业务解释 AutoML 结果

要实现商业价值,您的 AutoML 模型必须被业务实施并使用。实施的一个常见障碍是缺乏对机器学习工作原理的理解而产生的信任缺失。同时,解释个别机器学习算法的来龙去脉并不是赢得信任的好方法。将数学符号和复杂的统计数据抛向最终用户不会奏效,除非他们已经拥有深厚的数学背景。

相反,使用 AutoML 内置的可解释性。只要在训练模型时启用可解释性,您就可以确切地说出 AutoML 正在使用哪些特征来生成预测。通常,以下四个做法是好的:

  • 在训练任何 AutoML 模型时,始终启用可解释性。

  • 在向业务展示结果时,首先展示性能,然后展示可解释性。

  • 按照重要程度从高到低排列特征。

  • 从未来的训练运行中删除任何不重要的特征。

简单的模型更容易理解,并且更容易被最终用户接受。因此,您应该始终强调模型正在使用的特征。

为了访问可解释性,使用以下步骤:

  1. 导航到 AML 工作室在ml.azure.com

  2. 在左侧面板的资产下点击实验

  3. 点击蓝色链接打开Diabetes-Sample Regression。这是您在第四章**,构建 AutoML 回归解决方案中用于训练回归模型的实验。

  4. 点击蓝色链接打开您的最新运行。此链接位于AutoML_之后,跟随着一个唯一的标识字符串。如果有多个运行,请使用最新的。

  5. 在屏幕顶部附近点击模型

  6. 点击查看解释

  7. 解释 ID下点击第一个 ID 号。这些是 AutoML 用于训练您的模型的原始特征的解释。

  8. 点击聚合特征重要性以查看在训练您的 AutoML 模型时哪些原始特征最重要。

  9. 使用滚动条查看用于训练您的模型的顶级 10 个特征,如图所示:

图 12.8 – 可解释性可视化

图 12.8 – 可解释性可视化

此可视化显示,用于训练Diabetes-AllData-Regression-AutoML模型的最重要两个特征是S5BMI。血压(BP)、S3SEX也很重要,但远不如S5BMI重要。为了训练模型,S5BMI的重要性是SEX的近 5 倍。剩余的五个特征,S2S6S1AGES4,只是您机器学习模型的小贡献者;模型没有发现它们很重要。

重要提示

很可能您的商业伙伴会试图从这个图中推断因果关系。重要的是要记住,在没有受控的科学实验的情况下,任何机器学习模型中的可解释性只能显示相关性,而不能显示因果关系。

将此图表展示给您的最终用户以赢得他们的信任;它易于理解,并清楚地显示了 AutoML 正在使用哪些功能进行预测。您不仅可以看到正在使用哪些功能,还可以展示您数据集中每一列的相对重要性。使用此图表讲述一个引人入胜且有意义的故事;您甚至可以从向您的商业受众展示此图表并询问他们的解读开始。让他们讲述故事并自行制定解决方案。

在解释了架构和性能之后,最好展示可解释性幻灯片。架构以端到端格式解释了解决方案是如何工作的,而没有深入到技术细节。性能使您的用户对模型在任何给定时间可以预期的准确性有信心。从逻辑上讲,您的用户将询问您的 AutoML 模型是如何进行预测的。这就是您展示可解释性图表而不是深入到统计和算法错误的地方。

在涵盖了架构、性能可视化以及可解释性之后,您现在拥有了赢得最终用户信任和接受所需的所有工具。下一节将扩展您可以使用 AutoML 来扩展您可开发解决方案的范围的各种地方。即使在 AMLS 之外使用 AutoML,也要记住始终使用可解释性。

在其他 Microsoft 产品中使用 AutoML

在这本书中,您已经学习了如何在 Azure 上使用 AutoML,但您也可以在更广泛的 Microsoft 产品套件中使用 AutoML。虽然您可以根据本章“架构 AutoML 解决方案”部分中的架构模式轻松创建和产品化几乎任何 AutoML 解决方案,但在某些场景中,您可能希望在其他 Microsoft 平台上使用 AutoML。您可以在以下位置找到 AutoML:

  • PowerBI

  • Azure Synapse Analytics

  • ML.NET

  • HDInsight

  • SQL Server

  • Azure Databricks

尽管 AutoML 可用于这些服务,但您应该注意许多差异。一些服务是无代码的,而另一些则是仅限代码。一些服务阻止您训练预测算法,而另一些则基于完全不同的 ML 框架。在本节中,您将按服务逐一了解其一般功能。

在 PowerBI 中使用 AutoML

PowerBI是微软的商业分析解决方案,允许用户可视化数据以快速获得洞察。它是市场上最受欢迎且功能强大的仪表板工具之一,软件的Power BI PremiumPower BI Embedded许可证都允许您直接使用 AutoML。这是一个无代码版本的 AutoML,其工作方式类似于您在 AML studio 中找到的 AutoML GUI,如图 12.7所示:

图 12.9 – PowerBI 中的 AutoML

图 12.9 – PowerBI 中的 AutoML

在这种情况下,AutoML 与 PowerBI 数据流集成,这是一个自助式数据准备工具。与 Azure 上的 AutoML 一样,你可以用它来训练模型、保存(注册)模型,并使用模型进行预测,这些预测可以保存为数据中的新列。与 Azure 上的 AutoML 不同,它只支持回归和分类问题,不支持预测。这两个服务共有的另一个特性是模型可解释性。

如果你是一名经常构建数据可视化仪表板的数据分析师,PowerBI 上的 AutoML 是一个很好的工具,可以添加到你的工具箱中。你可以轻松地将预测直接添加到数据中,并花费很少的努力来可视化它们。PowerBI 上的 AutoML 对于一次性的 ML 作业也非常出色。Azure Synapse Analytics 是数据分析师使用 AutoML 的另一个常见服务。

在 Azure Synapse Analytics 中使用 AutoML

Azure Synapse AnalyticsASA)是 Azure 的顶级数据分析服务。它提供了一个用于大数据的 SQL 数据仓库、基于 Spark 的分析以及类似 ADF 风格的 ETL 管道,所有这些都在一个地方。如果你有一个 AMLS 工作空间,并且使用类似于 ADF 的链接服务将其链接到 ASA,你还可以在 Synapse 中直接使用 Azure AutoML。

为了使用 AutoML,你需要有一个 Spark 集群,并从你的数据中创建 Spark 表。Spark 是一个开源的分析引擎,用于通过在虚拟机集群中分配工作负载来快速处理大数据。使用 ASA,你可以使用 PySpark(Python 的一个版本)、C#、Spark SQL 或 Scala 编写 Spark 解决方案。Spark 表只是在这个框架内创建的数据表。

一旦你有了 Spark 表,你所需要做的就是右键点击它,点击机器学习,然后点击使用新模型丰富。随后你会看到一个非常熟悉的界面:你最初在第三章**,训练你的第一个 AutoML 模型中使用的 AutoML GUI。由于 ASA 直接使用你的 AMLS 工作空间通过 AutoML 训练模型,因此其功能和用户体验是相同的。你还可以在 ASA 中使用 PySpark(Python 的一个版本)、C#、Spark SQL 或 Scala 编写 AutoML 解决方案。

最好将 Synapse 的 AutoML 功能视为一种快捷方式,而不是与 AMLS 不同的体验。当你已经在 ASA 中工作,并希望快速使用 ASA 数据仓库中的数据训练一个 ML 模型时,请使用它。

使用 ML.NET 与 AutoML

.NET 框架是一个软件开发框架,允许你使用 C#、F# 和 Visual Basic 构建应用程序。ML.NET 允许你将 ML 功能添加到 .NET 框架中,而 AutoML 是其众多功能之一。你可以在应用程序中编码 ML.NET 解决方案,或者使用 ML.NET 模型构建器通过引导式用户界面创建 AutoML 解决方案。

ML.NET 模型构建器的一个有趣方面是,你可以为各种预定义场景使用 AutoML,包括回归、分类、图像分类、文本分类和目标检测。因此,你不仅限于仅使用表格数据,还可以使用带有图像的自动机器学习。

如果你正在构建 .NET 应用程序并希望轻松地将机器学习添加到其中,请尝试在 ML.NET 中使用 AutoML。这是最合适的用例,并且假设你在 .NET 框架中开发有丰富的经验。如果你不是 .NET 开发者,你最好在 AMLS 工作区中开发你的 AutoML 解决方案。

在 SQL Server、HDInsight 和 Azure Databricks 上使用 AutoML

AutoML 还可在多种其他服务上使用,包括 SQL ServerHDInsightAzure Databricks。SQL Server 是微软知名的 关系数据库管理系统RDBMS),而 HDInsight 是 Azure 的 Hadoop 版本,用于处理大数据。Azure Databricks 是 Azure 上用于大数据处理和分析的顶级云基础 Spark 工具。这三个服务都可以通过 Python 使用 Azure AutoML。

当使用这些工具时,你首先需要创建一个 AMLS 工作区,安装 AzureML-SDK,并将你的 AMLS 工作区连接到其他服务。然后,你需要编写一个解决方案。在 HDInsight 和 Databricks 中,你将使用 Spark,而在 SQL Server 中,你需要使用 sp_execute_external_script 存储过程来运行 Python 代码。存储过程是可以保存并重复使用的 SQL 代码片段。

这三个服务与 ASA、PowerBI 和 ML.NET 之间的重要区别是,AutoML 没有引导用户界面选项。你必须使用代码创建解决方案。如果你已经在 SQL Server、HDInsight 或 Azure Databricks 中构建应用程序或数据管道,并希望将 AutoML 作为该解决方案的一部分,那么在那些服务中进行模型训练是自由的。

Azure Databricks 的另一个特定用例是当你想要使用非常大的数据(100 GB 数据框)训练 AutoML 模型时;这时使用 Spark 分布式框架运行 AutoML 是合适的。

现在你已经熟悉了 AutoML 可用的许多不同工具,你将在构建 AutoML 解决方案时拥有更多的灵活性。然而,仅仅因为你已经构建了一个解决方案,并不意味着人们会使用它。为了总结本章和本书,最后一节将关注获得最终用户接受的战略和技术,这是实现商业价值的关键。

实现商业价值

实现商业价值最终取决于你的商业伙伴是否选择根据你的 ML 模型的预测采取行动。没有行动,数据科学家的工作就只是科学实验。你的商业伙伴必须被激励并愿意将你的预测纳入他们的决策过程中。赢得他们的信任至关重要。

为了赢得公司决策领导层的信任,你首先必须确定你使用 AutoML 构建的是哪种解决方案。一些解决方案很容易且迅速地被采用,而其他解决方案可能会遇到强烈的阻力。

有两个关键因素决定了你的 AutoML 解决方案被接受的程度:你的工具是否在替换现有的解决方案,以及你的工具是否直接参与自动化决策过程或是在协助人类决策者。图 12.8显示了基于这些因素获得接受度有多困难:

图 12.10–基于关键因素获得商业用户支持难度

图 12.10–基于关键因素获得商业用户支持难度

你的解决方案越自动化,就越容易获得接受。毕竟,在引擎盖下运行的流程不受人类监督。没有人类手动决定每笔信用卡交易是否欺诈;这项任务只能通过自动化流程来完成。

由于一开始就没有人在循环中,所以在尝试使用 ML 模型改进自动化流程时,你不太可能遇到阻力。相反,当你尝试用 AI 生成的预测来增强人类决策者的决策时,你很可能会遇到怀疑和阻力。

同样,全新的解决方案比替换旧解决方案的工具更容易被接受。虽然用 AI 解决方案替换现有的自动化系统也是如此,但当你在尝试替换高管和经理用来做决策的现有系统时,这一点更为明显。许多人对于他们不完全理解的变化反应迟缓。

在本节中,我们将介绍基于关键因素赢得信任并让商业用户采用基于 AutoML 的解决方案的策略。

让商业用户采用新的自动化解决方案

这很简单。想象一下,如果你的公司正在构建一个新的销售门户,他们希望创建一个系统,当在线购物者在你的网站上浏览商品时,自动为它们生成产品推荐。你提议构建一个推荐系统,使用 AutoML 训练 ML 模型,并使用托管在 AKS 上的实时评分端点对模型进行评分。

很可能,你对提案的回应将会得到压倒性的积极反馈。你的高管团队会对你采用尖端 AI 技术的举措印象深刻。负责该项目的商业管理团队仅仅拥有一个高性能的解决方案就会感到高兴。你的 IT 部门会对学习新技术感兴趣,并且非常乐意帮助你实施一个新的大型项目。

如果有任何阻力,那将来自那些想要更好地理解你的 AI 解决方案工作原理的人。因此,建议你提供模型解释,以及 ML 和 AutoML 是如何工作的概述。如果人们能够向其他人解释它是如何工作的,他们更有可能支持你的项目,所以努力发展这种理解。

让企业替换旧的自动化流程

用基于 ML 的新解决方案替换旧的自动化解决方案比创建一个全新的流程要困难一些。这通常是因为商业用户已经理解了旧流程的工作方式。如果你试图替换一个基于一系列 if-then 语句的规则系统,这会更加困难,因为旧流程对人类来说更容易理解。

在这种情况下,你的最佳策略是将你的基于 AutoML 的新解决方案的结果与旧解决方案的结果并排比较几周或几个月。不要立即关闭旧流程;你应该同时运行这两个流程,直到你的最终用户确信并对你的 ML 模型的输出有信心。只有在这种情况下,你才应该关闭并永久关闭旧解决方案。

你可能认为解释 ML 和 AutoML 的工作原理将是你的最佳策略,但习惯于一个系统的最终用户可能会错误地假设 AI 的工作方式与旧解决方案相似。消除这种观念可能很困难,而且极端的方法差异可能会让一些用户失去信任。因此,在提供深入详细的解释之前,最好首先引导你的最终用户关注结果。一旦他们信任你的结果,他们自然会开放地接受这个过程。

让企业采用新的决策辅助工具

在向一群决策者提供 AI 生成的建议或预测时,一个关键的认识是,对于当前的问题,他们已经做出了多年的决策。他们可能还没有工具,但他们确实有自己的直觉和多年的经验。因此,他们通常对新工具或技术持怀疑态度,这些工具或技术声称可以帮助他们在工作中。记住,没有人是通过做出糟糕的决策而上升到公司高层的。

在这种情况下,最好的办法是试图通过向他们保证这只是一个提供预测或建议的工具来平息他们的恐惧。这是建议。它可能是 AI 生成的,但最终,建议就是建议,最终的决定仍然掌握在他们手中。

一个有用的类比是,在棋类世界中,AI 可能打败大师,但由 AI 辅助的大师可以打败 AI。人类最终仍然掌握着控制权。

你还应该强调 ML 生成的预测的统计性质。它们并不完美,也不是不可犯错的。如果你预测下个月市场份额将下降到 11.3%,置信区间为±0.2%,但实际上下降到 11.1%,那么你的模型是正确的,并且处于预期范围内。

如果你的模型告诉你某个篮球运动员有 70%的机会在你的球队中表现良好,但那个球员失败了,那么你的模型仍然是正确的,但 30%的机会发生了。

重要提示

在制作决策辅助的 AI,如大多数预测模型时,确保你的模型尽可能准确,并且不会在准确性上出现大幅波动非常重要。没有任何事情比一个波动很大的模型更快地失去信任。

通过强调你只提供建议,并且这些建议具有统计性质,你的模型有更高的可能性在长时间内被商业界使用。如果它只是建议,他们不会感到受到威胁,而且当统计上不太可能的事情发生时,他们也不会停止使用你的模型,因为他们理解这偶尔会发生。

让商业界替换旧决策辅助工具

在获得商业受众接受方面,最困难的项目之一是当你用 ML 驱动的工具替换一个旧的工具时。在这种情况下,你正在替换的工具可能已经存在了很多年。

许多经验丰富的用户可能会反对新的流程或解决方案,无论它如何改善当前状态。这是由于熟悉度偏差,即人类对熟悉事物比对不熟悉事物的偏好。

克服熟悉度偏差,并让商业用户采用你的解决方案是一项相当大的挑战,需要系统性地进行。首先,就像替换一个较旧的自动化流程一样,你不应该关闭旧解决方案;你需要让它继续运行,这样你才能对比结果。如果你不这样做,经验丰富的用户可能会负面且不公平地将你的工具与旧解决方案进行比较;他们需要看到这比旧解决方案有所改进。

比较结果并排是必要的,但不足以获得最终用户的接受。此外,你需要让用户理解你生成的 AutoML 解决方案。

对 AI 解决方案的一种常见批评是难以理解它们是如何工作的。相比之下,你正在替换的系统已经拥有了数年的时间来向其用户传授其细节。因此,你应该将可解释性幻灯片放在你的解决方案的最前沿;你还应该解释架构,并确切地说明 AutoML 是如何工作的,你计划何时重新训练模型,以及你计划如何持续评估和监控解决方案。

逐个建立信任的方法对你的解决方案的成功也大有裨益。在你与所有最终用户分别进行一系列一对一会议之后,再向整个团队展示你的解决方案。

如果最终用户太多,识别并会见群体中最有影响力的人。通过解决他们的担忧,对他们进行解决方案培训,并鼓励他们与其他最终用户交谈,你将能够建立一个支持你的解决方案的群体,增加其长期成功的可能性。

按难度顺序,从最容易到最困难,以下是获得最终用户信任并保证长期采用解决方案类型的列表:为新自动化流程设计的 AutoML 解决方案,替代自动化流程的 AutoML 解决方案,帮助人类做出决策的 AutoML 解决方案,替代现有决策辅助工具的 AutoML 解决方案。以下表格提供了总结:

图 12.11 – 基于 AutoML 解决方案类型如何建立信任

图 12.11 – 基于 AutoML 解决方案类型如何建立信任

如您所见,仅仅因为你构建了一个高性能的 AutoML 解决方案,并不意味着它会被业务采用。你还需要同样努力地赢得最终用户的信任。通过确定你正在构建的 AutoML 解决方案类型并遵循适当的指南,你将能够一次赢得一个最终用户的信任。一旦足够多的人支持你的解决方案,它将朝着成为长期成功和采用的信任工具集迈进。

摘要

获得最终用户的接受可能很困难,但采用正确的方法可以使这变得容易得多。通过向最终用户展示架构图,仔细地使用正确的指标向他们解释模型的性能,并花时间解释模型用于做出预测的特征,这些都是向最终用户销售你的解决方案的关键。此外,你可以根据你正在构建的解决方案类型定制你的信息,以赢得最终用户的信任。

你现在已到达本书的结尾,我希望你能回顾这段旅程。你已经掌握了许多技术技能,包括训练 AutoML 模型、批量部署 AutoML 模型进行评分以及实时评分,以及设计、创建和实施全栈式 AutoML 解决方案的能力。你还有一套方法向你的商业伙伴推销这些解决方案,赢得他们的信任,并最终实现价值。通过在 Azure 上使用 AutoML 构建强大的解决方案,你将能够产生持久的影响并推进你的职业生涯。