Lyft如何儲存支援其ML模型的大規模特徵資料?

banq發表於2022-04-19

機器學習是 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(以及他們進行的效能最佳化)的更多資訊。
 

相關文章