自从Uber在2017年引入Michelangelo的概念以来,机器学习(ML)特征存储一直吸引着人们的关注和使用,尤其是对于业务关键应用。在本博客文章中,我们将深入探讨ML特征存储的基础知识,以及为什么以及如何将ScyllaDB作为您的特征存储架构的关键部分。
为了理解什么是特征存储,首先了解什么是特征是很重要的。
什么是特征?
在机器学习中,特征是一组数据点,可以用来教导模型,并根据历史数据对未来进行预测。例如,我们的特征存储示例应用程序可以基于历史航班记录对航班延误进行预测。
特征是复杂数据处理和转换流水线的结果。大量的特征数据可以实现准确的预测和成功的机器学习项目。
什么是特征存储?
特征存储是机器学习架构中的中央数据库,包含实时和历史特征。特征存储允许数据工程师和数据科学家使用同一中央存储库来发现、监视和分析特征。特征存储架构是什么样的呢?
特征存储中的在线和离线数据库
当我们谈论特征存储时,用户通常在架构中区分两种类型的数据库。一方面,他们使用在线数据库,另一方面,他们可能还有一个离线数据库。这些数据库用途不同。
离线数据库:这种类型的数据库通常存储历史处理过的特征,通常是批量摄取的。离线数据库具有覆盖历史的特征数据,因此对于在特定历史时期内使用一组特征非常有用。
在线数据库:这个数据库可能包含来自实时数据流和离线数据库的数据。在线存储用于为生产模型和其他实时应用程序提供最新的特征数据。性能和低延迟在这里非常重要。如果您的数据库无法及时提供实时特征数据,那么您的模型可能使用过时或不准确的数据进行预测。
特征存储数据建模:宽表设计与窄表设计
在特征存储中设计数据模型时,无论是离线存储还是在线存储,您可以选择两种类型的表设计:宽表和窄表。每种设计都有其自身的优点和缺点。让我们看看宽表设计和窄表设计的实际示例,以及它们可能或可能不是最适合您的用例的原因:
宽表设计
宽表设计包括每个特征的单独列。您想在表中存储的特征类型越多,需要创建的列就越多。
宽表布局示例
view rawgistfile1.txt
这种布局可以很容易上手,但随着时间的推移,难以维护和进行更改。每当您想引入一个新特征(或删除现有特征),您都需要修改模式,这可能很复杂。
窄表设计
窄表设计简单且易于维护。这是因为列的数量不会随着时间的推移而增加或减少,即使您添加或删除特征。
窄表布局示例
view rawgistfile1.txt
使用此布局,您可以长期使用仅两个固定列来存储特征。一个用于特征的名称(例如,LATE_AIRCRAFT_DELAY),一个用于该特征的值。
通常情况下,窄表在检索数据时可能需要转换数据类型,因为数据不在正确的形式(例如,列类型为FLOAT,但实际上数据值是整数)。幸运的是,当我们谈论特征存储时,在线和离线存储已经具有正确的干净数字(FLOAT)格式的数据,并且所有值都具有相同的数据类型,这意味着这不是特征存储的缺点。
什么是ScyllaDB,以及它如何在您的特征存储架构中使用?
为了让机器学习团队构建实时推断应用程序,他们需要能够以低延迟的方式返回大规模特征的数据库。ScyllaDB是一个高性能、低延迟的NoSQL数据库,可以处理大量的读写操作。此外,ScyllaDB是GE Healthcare或ShareChat等公司关键任务的特征存储工作负载的可信数据库。由于其高可用性和容错性,它可以在性能和可靠性至关重要的基础设施中承担重要任务。
除了将ScyllaDB作为特征存储架构中的在线存储之外,ScyllaDB还被用作在线/离线混合存储解决方案。通过这种方法,您可以通过只使用单个数据库来为所有特征存储工作负载提供服务,减轻团队的维护负担。
用户经常将ScyllaDB放在架构的中心位置以持久化和检索特征和特征存储元数据。在这种情况下,ScyllaDB充当在线存储。其他用户也将ScyllaDB用作在线/离线混合存储。性能是加速模型开发的关键要求,ScyllaDB的读写性能始终满足或超出用户的期望。
事实上,一些用户发现ScyllaDB可以替代多个数据库,并作为他们所有机器学习数据需求的单一中央存储。例如,ScyllaDB可以替代Redis(在线存储)和PostgreSQL(离线存储)-从而降低基础设施维护成本和简化操作。
ScyllaDB在需要低延迟和高性能的用例中表现出色。此外,ScyllaDB与Cassandra和DynamoDB兼容,这意味着如果您已经使用其中一个数据库,您可以无缝迁移而无需更改查询。
教程:ScyllaDB在线存储
为了帮助您开始使用ScyllaDB作为在线存储,我们创建了一个示例应用程序(也可在GitHub上获取)。
- 克隆存储库
- 注册ScyllaDB Cloud或在本地安装ScyllaDB
- 创建模式:
cqlsh "node-0.aws_us_east_1.xxxxxxxxx.clusters.scylla.cloud" 9042 -u scylla -p "password" -f schema.cql - 使用cqlsh连接到实例并导入示例数据集
cqlsh "node-0.aws_us_east_1.xxxxxxxxx.clusters.scylla.cloud" 9042 -u scylla -p "password" scylla@cqlsh> COPY feature_store.flight_features FROM 'flight_features.csv';
此命令导入一个示例飞行数据集:
ScyllaDB + Feast
ScyllaDB还与Feast等特征存储工具集成。Feast是一个流行的用于生产ML的开源特征存储。在使用Feast时,您可以使用多个数据库作为在线特征存储,包括ScyllaDB。
要将ScyllaDB设置为Feast的在线存储,您需要编辑Feast的配置文件并添加您的ScyllaDB凭据。ScyllaDB与Cassandra兼容,因此您可以使用Feast的内置Cassandra连接器。
总结
特征存储对于特征工程和构建机器学习模型至关重要。如果您正在构建实时特征存储基础设施,您需要仔细考虑性能。低延迟、高性能和高吞吐量要求使NoSQL数据库成为在线存储解决方案的理想选择。