Categories
程式開發

Lyft 開源 Flyte:雲原生機器學習和數據處理平台


Lyft 是一家交通網絡公司,總部位於美國加利福尼亞州舊金山,以開發移動應用程序連結乘客和司機,提供載客車輛租賃及實時共乘的分享型經濟服務。乘客可以通過發送短信或是使用移動應用程序來預約這些載客的車輛,利用移動應用程序時還可以追踪車輛的位置。 Lyft 的多個核心業務功能都引入了機器學習技術,包括路線算法、定價算法、司機匹配算法等,Lyft 計劃在未來數月向業界開源這些人工智能算法的模擬器測試技術。在 Uber 最近發布了一款開源的人工智能調試工具 Manifold 後,Lyft 隨即就發布了 Flyte。今天,我們帶來了 Lyft 產品經理 Allyson Gale 撰寫的 Flyte 文章,介紹了 Flyte 的方方面面。

Lyft 開源 Flyte:雲原生機器學習和數據處理平台 1

日前,Lyft 很高興地宣布開源 Flyte,這是一個面向高並發、可擴展、可維護工作流的結構化編程和分佈式處理平台。 Flyte 已經在Lyft 提供了三年多的生產模型訓練和數據處理服務,成為團隊事實上的平台,如定價、位置、預計到達時間(Estimated Time of Arrivals,ETA)、地圖、自動駕駛(L5)等等。實際上,Flyte 在 Lyft 管理著超過 7000 個獨特的工作流,每月執行總計超過 10 萬次、100 萬個任務和 1000 萬個容器。在本文中,我們將介紹 Flyte,概述它解決的問題類型,並提供示例來說明如何利用它來滿足你的機器學習和數據處理需求。

Lyft 開源 Flyte:雲原生機器學習和數據處理平台 2

Lyft 眾多定價工作流之一,在 Flyte UI 中以可視化方式顯示。此工作流由 Rider Pricing 團隊的 Tim Wang 創建

Flyte 解決的問題

由於現在數據已經成為公司的主要資產,執行大規模的計算作業對業務來說至關重要,但從運營角度來看是存在問題的。擴展、監視和管理計算集群成了每個產品團隊的負擔,由此拖慢了迭代,從而拖累了產品的創新。此外,這些工作流通常具有復雜的數據依賴關係。如果沒有平台抽象的話,依賴管理將會變得難以維繫,並使跨團隊的協作和重用變得不可能。

Flyte 的任務是通過抽像這些開銷來提高機器學習和數據處理的開發速度。我們通過可靠、可擴展、協調的計算解決了問題,使團隊可以專注於業務邏輯而不是機器。此外,我們支持在租戶之間共享和重用,因此,一個問題只需解決一次即可。隨著數據和機器學習之間的的融合,包括從事這些工作的人員角色,這一點變得越來越重要。

為了讓你更好地理解 Flyte 是如何讓這一切變得簡單的,在本文中,我們將概述一些關鍵特性。

託管、多宿主和無服務器

有了 Flyte,你才能得以從繁雜的基礎設施中解脫出來,從而可以專注於業務問題而不是機器。作為一項多租戶服務,你可以在自己的獨立 Repo 中工作,並在不影響平台其餘部分的情況下進行部署和擴展。你的代碼已經版本化,使用其依賴項進行容器化,並且每次執行都是可重現的。

參數、數據沿襲和緩存

所有 Flyte 任務和工作流都具有強類型的輸入和輸出。這使得你可以將工作流進行參數化,擁有豐富的數據沿襲,並使用預計算工件的緩存版本成為可能。例如,如果你正在進行超參數優化,那麼你可以在每次運行時輕鬆調用不同的參數。此外,如果運行調用的任務是之前執行時已經計算過的,那麼 Flyte 將會智能地使用緩存的輸出,從而達到既節省時間又節省金錢。

Lyft 開源 Flyte:雲原生機器學習和數據處理平台 3

示例:使用 FlyteKit 聲明任務

在上面的示例中,我們使用這裡提供的數據集來訓練 XGBoost 模型。機器學習管道使用 Python 構建,由以下四個任務組成,這四個任務與典型的機器學習過程相一致:

  1. 數據準備和測試驗證拆分。
  2. 模型訓練。
  3. 模型驗證與評分。
  4. 計算指標。

請注意,每個任務是如何參數化和強類型化的,這使得嘗試不同的變體和與其他任務結合使用變得更加容易。此外,這些任務中的每一個都可以是任意複雜的。例如,對於大型數據集,Spark 更適合用於數據準備和驗證。然而,模型訓練可以在一個用 Python 編碼的簡單模型上完成。最後,請注意,我們是如何將任務標記為可緩存的,這可以極大地加快運行速度並節省成本。

下面,我們將這些任務組合起來創建一個工作流(或謂之“管道”)。工作流將任務鏈接在一起,並使用基於 Python 的領域特定語言(domain specific language,DSL)在任務之間傳遞數據。

Lyft 開源 Flyte:雲原生機器學習和數據處理平台 4

示例:在 FlyteKit 中聲明工作流

譯註:數據沿襲(data lineage),根據維基百科的定義,它被定義為一個數據生命週期,包括數據的起源和隨時間移動的位置。它描述了數據在經歷不同過程時發生的情況。它有助於提供對分析管道的可見性,並簡化對錯誤源的跟踪。

版本化、可複制性和可共享性

Flyte 中的每個實體都是不可變的,每個更改都顯式地被捕獲為一個新版本。這使得迭代、實驗和回滾工作流變得簡單高效。此外,Flyte 使你能夠跨工作流共享這些版本化的任務,通過避免個人和團隊之間的重複工作來加快開發週期。

可擴展性、模塊化和靈活性

工作流通常由異構步驟組成。例如,一個步驟可能使用 Spark 來準備數據,而下一個步驟可能使用這些數據來訓練深度學習模型。每個步驟都可以用不同的語言編寫,並使用不同的框架。 Flyte 通過將容器映像綁定到任務來支持異構性。

通過擴展,Flyte 任務可以是任意複雜的。它們可以是任何內容,從單個容器執行,到配置單元集群中的遠程查詢,再到分佈式 Spark 執行。我們還認識到,該作業的最佳任務可能託管在其他地方,因此,可以利用任務可擴展性將單點解決方案與 Flyte 捆綁在一起,從而將其綁定到你的基礎設施中。具體來說,我們有兩種擴展任務的方法:

FlyteKit 擴展:允許貢獻者提供與新服務或系統的快速集成。

後端插件:當需要對任務的執行語義進行細粒度控制時,Flyte 提供後端插件。這些可用於創建和管理 Kubernetes 資源,包括 Spark-on-k8s 之類的 CRD,或者 Amazon Sagemaker、Qubole、BigQuery 等任何遠程系統。

Lyft 開源 Flyte:雲原生機器學習和數據處理平台 5

Flyte 架構的高級概述

結語

Flyte 的構建是為了在現代產品、公司和應用程序所需的規模上支持並加速機器學習和數據編排。 Lyft 和 Flyte 共同發展,一起目睹了現代處理平台所提供的巨大優勢,我們希望 Flyte 開源之後,你也能從中獲益。要了解更多信息,請參與進來,通過訪問 www.flyte.org 並查看我們的 GitHub 賬戶:https://github.com/lyft/flyte 來嘗試一下!

作者簡介:

Allyson Gale,Lyft 產品經理。曾在 Google Search 和 Android 部門工作。對道德和決策充滿好奇。

原文鏈接:

https://eng.lyft.com/introducing-flyte-cloud-native-machine-learning-and-data-processing-platform-fb2bb3046a59