Press "Enter" to skip to content

用特征/训练/推理流水线统一批次和ML系统

赞助内容

 Jim Dowling,Hopsworks的联合创始人兼首席执行官 

介绍

 本文介绍了一种统一的架构模式,用于构建批处理和实时机器学习(ML)系统。我们称其为FTI(特征、训练、推理)管道架构。FTI管道将单块的ML管道分解为3个独立的管道,每个管道都有明确定义的输入和输出,可以独立开发、测试和操作。要了解FTI管道架构演进的历史背景,可以阅读完整的深度MLOps思维导图文章。

在最近几年中,机器学习运营(MLOps)作为一种受DevOps原则启发的开发过程,引入了自动化测试、ML资源版本控制和运营监控,以支持逐步开发和部署ML系统。然而,现有的MLOps方法通常呈现出复杂而繁杂的情景,使许多团队难以从模型开发到生产的路径上导航。在本文中,我们通过FTI管道的概念介绍了一种构建ML系统的新视角。FTI架构使得许多开发者能够轻松创建强大的ML系统,减少认知负荷,并促进团队之间更好的协作。我们深入探讨了FTI管道的核心原则,并研究了其在批处理和实时ML系统中的应用。

 

ML系统的统一架构:作为特征/训练/推理管道

FTI方法已被用于构建数百个ML系统。该模式如下:一个ML系统由三个独立开发和操作的ML管道组成:

  • 特征管道将原始数据转换为特征(和标签)
  • 训练管道接收特征(和标签)作为输入,并输出训练好的模型
  • 推理管道接收新的特征数据和训练好的模型,并进行预测

在FTI中,没有单一的ML管道。关于ML管道具体完成的任务(是否进行特征工程和训练模型,还是进行推理,或者只完成其中之一)的困惑消失了。FTI架构适用于批处理ML系统和实时ML系统。

 用特征/训练/推理流水线统一批次和ML系统 四海 第1张 

特征管道可以是批处理程序或流处理程序。训练管道的输出可以是简单的XGBoost模型,也可以是在多个GPU上训练得出的高效参数微调(PEFT)大型语言模型(LLM)。最后,推理管道可以是批处理程序,将一批预测发送到接收来自客户端的请求并实时返回预测结果的在线服务。

FTI管道的一个重要优势是它是一个开放的架构。您可以使用Python、Java或SQL。如果您需要对大量数据进行特征工程,可以使用Spark、DBT或Beam。训练通常使用Python中的某个ML框架完成,批处理推理可以使用Python或Spark,具体取决于数据量。然而,由于模型通常是使用Python进行训练的,因此在线推理管道几乎总是使用Python编写。

 用特征/训练/推理流水线统一批次和ML系统 四海 第2张 

FTI管道也是模块化的,各个阶段之间有明确的接口。每个FTI管道都可以独立操作。与单块ML管道相比,不同的团队现在可以负责开发和操作每个管道。这带来的影响是,在编排方面,例如,一个团队可以使用一个编排器来进行特征管道的编排,另一个团队可以使用另一个编排器来进行批处理推理管道的编排。或者,对于批处理ML系统,您可以使用同一个编排器来编排这三个不同的FTI管道。在ML系统中可以使用的编排器示例包括通用且功能丰富的编排器,如Airflow,或轻量级的编排器,如Modal,或由特征平台提供的托管编排器。

然而,FTI管道中的一些管道不需要编排。当需要新模型时,可以按需运行训练管道。流式特征管道和在线推断管道作为服务连续运行,不需要编排。Flink、Spark Streaming和Beam作为服务在诸如Kubernetes、Databricks或Hopsworks之类的平台上运行。在线推断管道与其模型一起部署在模型服务平台上,例如KServe(Hopsworks)、Seldon、Sagemaker和Ray。这里的主要要点是ML管道是模块化的,具有清晰的接口,使您可以选择最佳技术来运行您的FTI管道。

 用特征/训练/推理流水线统一批次和ML系统 四海 第3张 

最后,我们展示了如何通过带有状态层的FTI管道连接我们的ML管道,以存储ML构件 – 特征、训练/测试数据和模型。特征管道将其输出特征存储为数据帧(DataFrame)放入特征存储中。增量表使用表格式(我们在Hopsworks中使用Apache Hudi)将每次新更新/附加/删除存储为单独的提交。训练管道从Hopsworks读取训练数据的一致性快照来进行模型训练,并将训练好的模型输出到模型注册表。您可以在此处包含您喜欢的模型注册表,但我们偏向于Hopsworks的模型注册表。批量推断管道也从特征存储中读取推断数据的一致性快照,并通过将模型应用于推断数据来生成预测结果。在线推断管道根据需求计算即时特征,并从特征存储中读取预计算的特征来构建用于响应在线应用程序/服务请求的特征向量。

 

特征管道

特征管道从数据源读取数据,计算特征,并将其输入到特征存储中。对于任何给定的特征管道,需要回答一些问题,包括:

  • 特征管道是批处理还是流式处理?
  • 特征摄取是增量操作还是全量加载操作?
  • 使用什么框架/语言来实现特征管道?
  • 在特征数据摄取之前是否进行数据验证?
  • 用于调度特征管道的编排器是什么?
  • 如果某些特征已经由上游系统(例如数据仓库)计算过了,如何防止重复数据,并仅在创建训练或批量推断数据时读取那些特征?

 

训练管道

在训练管道中,双击可以发现以下一些细节:

  • 使用什么框架/语言来实现训练管道?
  • 使用了哪个实验跟踪平台?
  • 训练管道是按计划运行的(如果是,使用了哪个编排器),还是按需运行的(例如,在模型性能降低时)?
  • 训练是否需要使用GPU?如果是,如何为训练管道分配GPU?
  • 对哪些特征进行特征编码/缩放?(通常我们在特征存储中存储未编码的特征数据,以便进行探索性数据分析。编码/缩放以一致的方式在训练和推断管道中执行)。特征编码技术的示例包括scikit-learn管道或特征视图中的声明性转换(Hopsworks)。
  • 使用了什么模型评估和验证过程?
  • 使用了哪个模型注册表来存储训练好的模型?

 

推断管道

推断管道与其支持的AI应用程序一样多样化。在推断管道中,双击可以发现以下一些细节:

  • 预测接收者是什么 – 仪表板、在线应用程序 – 并且它如何消耗预测结果?
  • 它是批处理还是在线推断管道?
  • 对哪些特征进行特征编码/缩放?
  • 对于批处理推断管道,使用了什么框架/语言?使用了什么编排器进行定时运行?使用了什么接收器来接收生成的预测结果?
  • 对于在线推断管道,使用了哪个模型服务服务器来托管部署的模型?在线推断管道是如何实现的 – 作为预测类还是使用单独的转换器步骤?推断是否需要使用GPU?是否有多长时间来回应预测请求的SLA(服务级别协议)?

 

MLOps原则

 现有的口号是MLOps是关于对ML系统的持续集成(CI),持续交付(CD)和持续训练(CT)进行自动化。但是对于许多开发人员来说,这太抽象了。 MLOps实际上是关于随着时间的推移不断开发演变的ML-enabled产品。可用的输入数据(特征)随时间而变化,您试图预测的目标也随时间而变化。您需要对源代码进行更改,并且希望确保您所做的任何更改不会破坏您的ML系统或降低其性能。并且您希望在自动部署到生产之前加快进行这些更改和测试所需的时间。

因此,从我们的角度来看,使ML系统能够安全地随着时间的推移发展的MLOps的更简练定义是,它至少需要对ML工件进行自动化测试,版本控制和监控。 MLOps是关于对ML工件的自动化测试,版本控制和监控。

 用特征/训练/推理流水线统一批次和ML系统 四海 第4张 

在图4中,我们可以看到与传统软件系统相比,ML系统需要更多级别的测试。数据或代码中的小错误很容易导致ML模型进行错误预测。从测试的角度来看,如果Web应用程序是螺旋桨驱动的飞机,那么ML系统就是喷气发动机。对于测试和验证ML系统以使其安全,需要进行大量的工程努力!从高层次上看,我们需要对ML系统的源代码和数据进行测试。特征管道创建的特征可以通过单元测试进行逻辑测试,并通过数据验证测试(例如,Great Expectations)检查其输入数据。必须测试模型的性能,但也必须测试其对已知的脆弱用户群体是否存在偏见。最后,在金字塔的顶部,ML系统需要通过A / B测试来测试其性能,然后才能切换到使用新模型。

最后,我们还需要对ML工件进行版本控制,以便ML系统的操作员可以安全地更新和回滚已部署模型的版本。按下按钮升级/降级模型的系统支持是MLOps的一个圣杯之一。但是模型需要特征进行预测,因此模型版本与特征版本相关联,并且模型和特征需要同步进行升级/降级。幸运的是,您无需成为Google SRE中的一员一整年,即可轻松升级/降级模型-平台支持的版本化ML工件应该使这成为一个简单的ML系统维护操作。 

 

示例ML系统

 以下是一些基于FTI架构构建的开源ML系统的样例。它们大多由实践者和学生构建。

批量ML系统

实时ML系统

 

总结

 本文介绍了用于MLOps的FTI流水线架构,该架构使许多开发人员能够高效地创建和维护ML系统。根据我们的经验,与传统的MLOps方法相比,该架构显著降低了设计和解释ML系统的认知负荷。在企业环境中,它通过建立清晰的接口促进了增强的团队间沟通,从而促进了协作并加快了高质量ML系统的开发。它简化了总体复杂性的同时,也允许对单个流水线进行深入探索。我们对FTI流水线架构的目标是促进改善的团队合作和更快的模型部署,最终加快由AI推动的社会转型。

在我们完整的深度MLOps心智地图中,详细了解构成FTI Pipelines架构的基本原则和要素。

Leave a Reply

Your email address will not be published. Required fields are marked *