Press "Enter" to skip to content

Lyft如何存储支持其ML模型的大规模特征数据?

机器学习是 Lyft 应用程序的支柱,Lyft 的 Feature Serving 服务负责为这些 ML 模型提供特征数据。

Lyft 如何使用 Flyte 和 Apache Flink 存储特征定义并将特征数据提取到服务中。
Lyft 如何使用 Redis、DynamoDB、Hive 和 Elasticsearch 为其所有 ML 模型提供特征数据。

Lyft 在其应用程序中广泛使用机器学习。他们使用 ML 模型来确定将司机与乘客匹配的最佳方式、计算行程价格、向乘客分发优惠券等等。

 

为了让 ML 模型运行,Lyft 工程师必须确保模型的特征始终可用。

 

特征Feature是 ML 模型用来进行预测的输入。

 

如果你正在构建一个预测房屋售价的机器学习算法,一些特征可能是卧室数量、平方英尺、邮政编码等。

 

Lyft 机器学习平台的核心部分是他们的 Feature Serving特征服务,它确保 ML 模型可以低延迟地访问特征数据。

 

Feature Serving 特征服务的核心部分是

特征定义
特征摄取
特征处理与检索

Vinay Kakade 在 Lyft 的机器学习平台工作,他写了一篇关于 Lyft 功能服务
架构

的精彩博客文章

 

Lyft 的机器学习模型有两种计算方式。

有些是通过批处理作业计算的。可以通过可以每晚运行的批处理作业来确定哪些用户应该获得 10% 的折扣。
其他是实时计算的。当用户在应用程序中输入她的目的地时,ML 模型必须立即输出乘车的最优价格。

Lyft 还需要通过批处理作业来训练他们的 ML 模型(确定最佳模型参数以产生最佳预测)。

 

Lyft 的功能服务服务负责确保所有功能都可用于训练 ML 模型和在生产中进行预测。

 

该服务托管数千个功能,每分钟处理数百万个请求,延迟为个位数毫秒。它具有 99.99% 以上的可用性。

 

特征定义

 

这些功能在 SQL 中定义。定义的复杂性可以从单个查询到包含复杂连接和转换的数千行 SQL。

 

这些定义还具有 JSON 格式的元数据,用于描述功能版本、所有者、验证信息等。

 

特征数据摄取

 

对于在批处理数据上定义的特征,Lyft 使用Flyte
运行定期安排的特征提取作业。该作业针对 Lyft 的数据仓库执行 SQL,然后写入特征服务。

 

对于实时特征数据,Lyft 使用Apache Flink
。它们针对流窗口
执行 SQL ,然后写入特征服务。

 

特征处理和检索

 

Feature Serving 服务是用 Golang 编写的,具有用于写入和读取特征数据的 gRPC 和 REST 端点。

 

将特征数据添加到服务时,会同时写入 DynamoDB 和 Redis(Redis 用作直写缓存以减少 DynamoDB 上的读取负载)。

 

Lyft 使用 Dynamo 流将特征数据复制到 Apache Hive(他们的数据仓库工具)和 Elasticsearch。

 

然后,特征服务服务将利用 Redis 缓存、DynamoDB、Hive 和 Elasticsearch 来服务对特征数据的请求。

 

对于需要快速返回特征数据的实时 ML 模型,Feature Serving 服务将尝试从 Redis 缓存中检索特征数据。如果缓存未命中,则它将从 DynamoDB 检索数据。

 

对于批处理 ML 模型,他们可以从 Hive 中检索特征数据。如果他们有高级查询,那幺他们也可以使用 Elasticsearch。

 

您可以在此处
阅读有关 Lyft 如何使用 Elasticsearch(以及他们进行的性能优化)的更多信息。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注