在之前的一篇文章中,我介绍了机器学习系统的批量处理架构,并强调了4个管道(特征工程、训练、推理和监控),以及2个关键元素(特征仓库和机器学习平台)。(详情请参阅:链接)
批处理架构的ML系统示意图
在这篇文章中,我们将深入探讨其中一个关键组件:Feature Store。
特征存储是什么?看看上面的图,你会发现特征存储是架构的核心部分,并充当数据与机器学习模型之间的桥梁。
但是……这具体是什么意思呢?让我们来聊聊!
机器学习预测模型是用数据训练的。这些数据通常包含几个特征和一个目标值(在监督学习中)。通过这些特征,模型能够识别数据中的模式,并在之后进行预测(再次输入这些特征)。那么,我们如何定义特征这个术语呢?
特征是「任何可以用于预测模型的可测量输入数据」。
通常来说,数据越多,预测就越准。
但特征的数据需要从某个数据源获取,并在计算出特征后存储起来(通过特征工程,将原始数据转换为特征的过程),这样才能让机器学习的训练和推理流程使用这些特征。
机器学习通常需要特征数据集来正确训练模型。当我们提到数据集时,意味着这些特征通常以文件的形式存在于文件系统中,或者通过查询数据库等方式来访问。从一个特征仓库中获取特征也是常见的做法。
特征存储库的定义
这是一个集中管理的地方,特征仓库是存储和组织特征的地方,其目的是供数据科学家们训练模型或供应用使用已训练的模型进行预测。这是一个中央位置,您可以在此创建和更新由多个不同数据源生成的特征集合,或者从这些特征组创建和更新新的数据集以供使用。特征仓库既可用于模型训练,也可供应用使用,这些应用不需要计算特征,只需在需要时检索特征进行预测时。
特征存储的主要优点包括:
- 为训练数据和提供服务保持一致的特征工程(避免训练与服务之间的偏差)
- 特征的重用(不同团队可以访问相同的特征)
- 实时准确的训练数据(无数据泄露)
- 自动进行特征计算、数据回填和日志记录
- 追踪特征的版本、血统和元数据
- 监控生产环境中特征管道的健康状况
- 支持特征服务的系统功能
- 特征的探索性数据分析(EDA)
- 特征的安全和治理
- 训练数据集的可重现性
- 在无需大量工程支持的情况下实现新特征的生产化
一些特征存储的示例有Feast,Hopsworks,Tecton,等等,还有许多其他选项(这里有一个详尽的特征存储列表)。
特征存储的组成部分现代特征仓库主要包括五个部分:转换、存储、服务层、监控 和 注册。
特征存储的组成部分
请注意: 并非所有功能存储(正如我们稍后将看到的)都具有所有组件。
1. 转变实际运行的机器学习应用需要定期将新数据处理成特征值,以便模型能根据最新的数据做出预测。特征存储不仅管理这些数据转换,还协调生成这些特征值的过程,同时从外部系统接收生成的特征值。特征存储管理的转换定义存储在一个通用的特征注册表中(如下所述)。
许多刚开始接触特征存储的团队已经有了生成特征值的数据管道。这使得特征存储能够逐步适应并实现与现有数据平台的良好集成变得非常重要,这允许团队可以立即使用现有的数据抽取、转换和加载(ETL)管道为他们的机器学习用例服务。
特征存储库通常涉及三种主要类型的数据转换。
不同的数据变换。
转换代码跨环境重用,避免了训练和部署之间的偏差,并使团队无需将代码从一个环境到另一个环境重写。
模型需要新的特征值来进行推理。特征存储通过定期重新计算特征来实现这一点,这些计算是持续不断的。转换任务被安排以确保新数据被处理并转化为新的特征值。这些任务由连接到特征存储的数据处理引擎(例如Spark或Pandas)运行。
模型开发引入了不同的需求。在模型迭代过程中,经常创建新的特征用于反映历史事件的数据集,如过去六个月内所有的购买记录。为了支持这些用例,特征存储库使运行“回填任务”变得简单,这些任务可以生成并保存特征的历史值以用于训练。一些特征存储库会自动为已注册的数据集在预设时间范围内回填新特征。
2. 储存特征存储采用基于实体的数据模型,其中每个特征值都与一个实体(例如一个用户)和一个时间戳相关联。基于实体的数据模型提供最少的结构支持,以支持标准化的特征管理,自然适应常见的特征工程工作流程,并允许在生产中进行简单的检索查询。
通过转换计算出的特征会被持久化保存,以方便通过特征服务层进行检索。服务层通常包含 在线 和 离线 两个存储部分。
- 离线存储主要用于持久化历史特征数据,以便用于训练。离线特征存储的数据通常存储在数据仓库或数据湖中,如S3、BigQuery、Snowflake、Redshift。
- 在线存储用于持久化特征值,以便在推断过程中进行低延迟查找。它们通常仅存储每个实体的最新特征值,基本上反映了当前的世界状况。在线存储通常最终一致,并且对于大多数机器学习用例来说,它们通常不需要严格的一致性要求。在线存储通常使用键值存储实现,如DynamoDB、Redis或Cassandra。
特征仓库为模型提供特征数据,既可用于训练,也可用于预测。
在训练时检索数据(即使用离线存储时),特征值通常通过特征存储SDK进行访问。它们为用于训练模型的每个样本提供某一时刻正确的状态视图(也就是所谓的“时间旅行”)。
对于在线服务,特征仓库会一次提供一个包含特征的向量,该向量由特定用户的最新特征值组成。响应通过高性能API提供,该API由低延迟数据库支持。
由于训练和推理用例的特征都从同一个来源(特征存储,)提取,因此在训练和服务之间确保了一致的特征一致性视图,避免了这种情况,使得训练和服务之间不会产生偏差。这可能带来灾难性的且难以排查的模型性能问题。
四.. 监测ML系统监测在生产系统中是一个非常重要的方面。它通常是通过计算指标并检测数据漂移来实现的。由于特征存储包含了有关特征的信息,因此它们能很好地发现这些问题。它们可以计算存储和提供反映正确性和质量的指标。特征存储监控这些指标,以反映ML应用程序的整体健康状况。
特征数据可以根据用户定义的模式或其他结构化标准进行验证。数据质量通过监控漂移和训练与服务之间的偏差来进行追踪。例如,提供给模型的特征数据会与训练所用的数据进行比较,以检测可能导致模型性能下降的不一致。
了解哪些功能被哪些模型使用的情况,功能仓库可以自动聚合警报和健康指标到与特定用户、模型或消费者相关的视图界面中。
5. 注册并非所有特征库都需要内部实现这样的监控,但它们至少应提供接口供数据质量监控系统接入这些接口。不同机器学习应用场景可能需要特定的监控方法,因此,这些接口的可插拔性尤为重要。
所有功能存储中的一个关键组件是一个集中式的注册表,用于标准化功能定义和其元数据。该注册表充当组织中功能信息的唯一来源。
注册中心是用户与功能存储交互的中央接口。团队使用注册中心作为一个共同的目录,用于探索新定义、开发功能、团队协作并发布功能,无论是在团队内部还是跨团队之间。
注册表中的定义配置了特征存储系统的行为方式。自动化任务使用注册表来安排和配置数据的摄取、转换和存储过程。它决定了哪些数据会被存储以及如何组织。服务 API 通过注册表来确保对哪些特征值应该可用、谁有权访问以及如何提供这些特征有一致的理解。
注册表允许将相关信息附加到功能定义中。这提供了一种追踪所属权和项目相关特定信息的途径,并且可以轻松地与其他系统对接。这包括了用于追溯历史的依赖信息和版本详情。
最后的留言希望你喜欢这篇文章,你现在应该对“特征存储”的概念更容易理解了。
接下来的文章里,我将亲自上手,一步步教你如何使用Feast,一个开源特征库。
玩得开心的MLOpping!
共同学习,写下你的评论
评论加载中...
作者其他优质文章