在《机器学习》机器学习(ML)开发平台概述中,我提供了ML开发平台的概述,其工作是帮助创建和打包ML模型.模型构建只是ML系统所需的众多功能之一。在这篇文章的最后,我提到了其他类型的ML平台和构建真实世界ML系统时的局限性。在我们讨论这些之前,我们需要回顾这些系统的所有组件,以及它们是如何相互连接的。上图侧重于“监督学习”系统(例如分类和回归)的客户端-服务器架构,其中预测由客户端请求并在服务器上进行。(旁注:在某些系统中,最好有客户端预测;其他系统甚至可能鼓励客户端模型训练,但在工业ML应用程序中使其高效的工具尚不存在。)ML系统组件概述在继续之前,我建议下载上面的图表并拆分屏幕,这样您就可以在阅读本文的其余部分时看到图表。让我们假设“数据库”在创建ML系统之前就已经存在。深灰色和紫色的组件将是要构建的新组件。那些应用ML模型进行预测的人以紫色显示。矩形用于表示预期提供微服务的组件,通常通过代表性状态传输(REST)API访问并在无服务器平台上运行。ML系统有两个“入口点”:请求预测的客户端和创建/更新模型的协调器。客户端代表将从ML系统中受益的最终用户使用的应用程序。这可能是您用来订购晚餐的智能手机应用程序,例如用于请求预定送货时间的UberEats——这是COVID-19封锁期间的一个重要用例!封锁前的照片,由维基百科提供。有一个复杂的ML系统可以预测这个人什么时候会到达他的目的地,每天数千次,遍及全球数百个城市!希望该系统使用的模型在过去几周内得到了更新......协调器通常是由调度程序调用的程序(以便模型可以定期更新,例如每周更新),或通过API(这样它就可以成为持续集成/持续交付管道的一部分)。它负责评估ModelBuilder在机密测试数据集上创建的模型。为此,它将测试预测发送给评估器。如果一个模型被认为足够好,它会被传递到模型服务器以通过API提供它。这个API可以直接暴露给客户端软件,但是特定领域的逻辑通常需要在前端实现。假设一个或多个(基线)模型可用作API,但尚未集成到最终应用程序中,您将通过跟踪生产数据的性能并将其可视化来决定集成哪个模型(以及它是否安全)通过显示器)。在我们的晚餐配送示例中,您可以将模型的ETD与刚刚配送的订单的实际配送时间进行比较。随着新模型版本的可用,客户端的预测请求将逐步通过前端定向到新模型的API。这将为越来越多的最终用户完成,同时监控性能并检查新模型是否“破坏”了任何东西。ML系统的所有者和客户端应用程序的所有者将定期访问监视器的仪表板。让我们以列表的形式回顾一下上图中的所有组件:Ground-truthCollectorDataLabelerEvaluatorPerformanceMonitorFeaturizerCoordinatorModelBuilderModelServerFrontendWe'vemakeitsimpleArticles3,4,6,7,8and9arereferredto.现在让我们提供更多信息并回顾#1、#2和#5!#1:FactGatherer在现实世界中,关键是能够持续获取新数据用于机器学习。一类数据特别重要:地面实况数据。这对应于您希望ML模型预测的内容,例如房地产的销售价格、与客户相关的事件(例如流失)或分配给输入对象的标签(例如传入消息中的“垃圾邮件”)。有时,你观察一个输入对象,你只需要等待一段时间才能观察到你想要预测的对象;例如,您等待出售房产、等待客户续订或取消订阅、等待用户与收件箱中的电子邮件进行交互。您可能希望用户在ML系统预测错误时通知您(见下图)。如果你希望你的用户能够提供这种反馈,你将需要一个微服务来发送它。#2:DataLabeler有时,您可以访问大量输入数据,但您需要手动创建相关的地面实况数据。在构建垃圾邮件检测器或从图像构建对象检测器时就是这种情况。有现成的和开源的Web应用程序来简化数据标记(例如LabelStudio),也有专门用于外包数据手动标记的服务(如图8和Google的数据标记服务)。AircraftClassification:LabelStudioinAction#3:Evaluator当您拥有用于机器学习的初始数据集时,在开始构建任何ML模型之前定义所提议的ML系统的评估方式非常重要。除了测量预测准确性之外,还需要通过特定于应用程序的性能指标和系统指标(例如延迟和吞吐量)来评估短期和长期影响。模型评估有两个重要目标:比较模型,以及确定将模型集成到应用程序中是否安全。可以对一组预先确定的测试用例进行评估,因为已知预测应该是什么(即基本事实)。可以检查错误分布并将错误聚合到性能指标中。为此,评估器需要访问测试集的基本事实,以便在对输入进行预测时,它可以计算预测误差并返回性能指标。我建议在构建ML模型之前先实施这个评估器。评估基准模型所做的预测以供参考。基线通常是基于输入特征(又名特征)的启发式方法。它们可以是超级简单的手工规则……对于流失预测,您的基线可以说如果客户在过去30天内登录次数少于3次,他们很可能会流失;对于食品配送时间预测,您的基线可以是上周订购的餐馆和乘客的平均配送时间。在明天开发复杂的ML模型之前,先看看您的基线今天是否提供了价值!#4:性能监视器来决定(基线)模型是否可以集成到应用程序中下一步是在生产中遇到的输入(称为“生产数据”),在类似生产的设置中,并随着时间的推移监视其性能。计算和监控生产数据的性能指标需要在数据库中捕获和存储生产输入、基本事实和预测。性能监视器将包含一个从数据库读取数据、调用评估器的程序,以及一个显示性能指标如何随时间演变的仪表板。一般来说,我们要检查模型是否随着时间的推移表现良好,以及它们是否始终对集成它们的应用程序产生积极影响。监视器还可以通过显示生产数据分布的数据可视化小部件得到增强,这样我们就可以确保它们符合预期,或者我们可以监视漂移和异常。MonitoringDashboardforStirringModels(来源)#5:FEATURIZER(Featurizer)在设计预测API时,您需要决定API应将什么作为输入。例如,在对客户进行预测时,输入应该是客户的完整特征表示,还是只是客户ID?在任何情况下,完整的数字表示都是常见的(文本或图像输入也是如此),但在传递给模型之前必须对其进行评估。对于客户输入,一些特征已经存储在数据库中(例如,出生日期),而其他特征则需要计算。这可能是描述客户在一段时间内如何与产品交互的行为属性的情况:它们将通过查询和汇总记录客户与产品交互的数据来计算。如果特征在本质上不经常变化,则可以分批计算。但在ML用例中,例如UberEats的预期送货时间,我们可能拥有需要实时计算的快速变化的“热点”特征;例如,某家餐厅在过去X分钟内的平均送货时间。这需要创建至少一个特征化微服务,该微服务将根据输入的ID为一批输入提取特征。您可能还需要实时功能微服务,但这会增加ML系统的复杂性。功能分析器可以查询各种数据库,并对查询到的数据进行各种聚合和处理。它们可能具有可能对模型性能产生影响的参数(如上例中的分钟数X)。#6CoordinatorWorkflowCoordinator位于ML系统的核心,并与许多其他组件交互。以下是其工作流/管道中的步骤:提取-转换-加载和拆分(原始)数据以训练、验证、测试集发送功能饱和训练/验证/测试集(如果有)准备专用训练/验证/测试集发送将准备好的训练/验证集的uri和需要优化的指标传给模型构建器得到最优模型,应用到测试集,将预测发送给评估器得到性能值,判断是否OK将模型推送到服务器(例如,用于对生产数据进行Kanata测试)。有关步骤3(“准备专用训练/验证/测试集”)的更多详细信息:增强训练数据(例如,过采样/过采样,或旋转/翻转/裁剪图像)预处理训练/验证/测试集,包括数据清理(以便它可以安全地用于建模或预测)和特定问题的准备(例如图像去饱和和调整大小)。运行工作流的方法整个工作流可以手动执行,但是要经常更新模型,或者联合调优建模器和建模器的超参数,就必须自动化。此工作流可以作为一个简单的脚本实现并在单个线程上运行,但通过并行运行在计算上更高效。端到端ML平台允许这样做,并且可以提供一个环境来定义和运行完整的ML管道。以GoogleAIPlatform为例,可以使用Dataprep(提供数据的Trifactawrangling工具)、Dataflow(精简的流批数据处理工具)、BigQuery(无服务器云数据仓库)等GoogleCloud数据产品,可以定义基于TensorFlow或内置算法(例如XGBoost)的训练应用程序。在处理大量数据时,Spark是一种流行的选择。Spark背后的公司Databricks也提供端到端平台。或者,工作流的每个步骤都可以在不同的平台或不同的计算环境中运行。一种选择是在不同的Docker容器中执行这些步骤。Kubernetes是ML从业者中最受欢迎的开源容器编排系统之一。Kubeflow和SeldonCore是开源工具,允许用户描述ML管道并将其转换为Kubernetes集群应用程序。这可以在本地环境中完成,应用程序可以运行在Kubernetes集群上,Kubernetes集群可以安装在本地,也可以在云平台中提供——例如GoogleKubernetesEngine,由GoogleAIPlatform或AzureKubernetesService或Amazon使用.使用EKS。Amazon还提供了Kubernetes、Fargate和ECS的对应物。ApacheAirflow是另一个最初由Airbnb开发的开源工作流管理工具。Airflow已成为协调一般IT任务(包括ML任务)执行的流行方式,它还与Kubernetes集成。如前所述,主动学习更高级的工作流程可能需要领域专家访问数据标签器,他们将在其中显示输入并要求对其进行标记。这些标签将存储在数据库中,然后编排器可以在训练/验证/测试数据中使用这些标签。提供标志的输入可以手动选择或在协调器中编程。这可以通过查看模型正确但不确定或非常确定但不确定的生产输入来完成——这是“主动学习”的基础。#7ModelBuilderModelBuilder负责提供最优模型。为此,它在训练集上训练各种模型,并使用给定的指标在验证集上对其进行评估,以评估最优性。请注意,这与上一篇文章中讨论的OptiML示例相同:$curlhttps://bigml.io/optiml?$BIGML_AUTH-d'{"dataset":"
