官术网_书友最值得收藏!

4.4 實現模式

與現有的任務圖相對應,特征存儲服務的自動化有三個級別(如圖4-4所示)。每個級別都對應將目前手工或效率低下的任務組合自動化。

064-01

圖4-4:特征存儲服務的不同自動化級別

混合特征計算模式

將批處理和流處理組合用于計算特征的模式。

特征注冊模式

用于訓練和推理的特征的模式。

特征存儲服務越來越流行,開源的特征存儲服務有Uber的Michelangelo(https://oreil.ly/56ukj)、Airbnb的Zipline(https://oreil.ly/cKwoi)、Gojek的Feast(https://oreil.ly/foWgT)、Comcast的Applied AI(https://oreil.ly/pw9it)、Logical Clock的Hopsworks(https://oreil.ly/EMeHg)、Netflix的Fact Store(https://oreil.ly/aiIZJ)和Pinterest的Galaxy(https://oreil.ly/sFSeL)。你可以在featurestore.org上找到特征存儲的完整開源項目列表。從體系結構的角度來看,每個項目都有兩個關鍵的功能模塊:特征計算和特征服務。

4.4.1 混合特征計算模式

特征計算模塊必須支持兩組機器學習場景:

  • 離線訓練和推斷,以小時為頻率計算批量歷史數據。
  • 在線訓練和推斷,以分鐘為頻率計算一次特征值。

在混合特征計算模式中,有三個功能模塊(如圖4-5所示):

065-01

圖4-5:混合特征計算模式中的并行管道

批處理計算管道

傳統的批處理作為ETL作業,每隔幾個小時運行一次或每天運行一次,以計算歷史特征值。該管道經過優化,可以在大時間窗口上運行。

流式計算管道

在實時消息總線上對數據事件進行流式分析,以低延遲計算特征值。特征值被回填到批處理管道的大量歷史數據中。

特征規范

為了確保一致性,數據用戶不需要為新特征創建管道,而是使用特定領域的語言(DSL)定義一個特征規范。該規范指定了數據源和依賴關系,以及生成特征所需的轉換。該規范會自動轉換為批處理管道和流式管道,這確保了用于訓練和推理的管道代碼的一致性,并且無須用戶參與。

混合特征計算模式的一個示例是Uber的Michelangelo(https://oreil.ly/56ukj),它集成了Apache Spark和Samza兩個框架。它使用Spark計算批處理特征,并將結果持久化到Hive中。批處理作業計算特征組,并以每列一個特征的形式寫到一個Hive表中。例如,Uber Eats(Uber的送餐服務)使用批處理管道來處理餐廳過去7天的平均備餐時間等特征。對于流式管道,Kafka主題與Samza流式計算作業一起使用,以生成近實時的特征值,這些特性值在Cassandra中以鍵-值格式持久化。歷史特征會定期從Hive中批量預計算并加載到Cassandra中。例如,Uber Eats使用流式管道來獲取特征,比如餐廳在過去一小時內的平均備餐時間。特征是使用DSL定義的,DSL可以選擇、轉換和組合在訓練和預測時發送給模型的特征。DSL是作為Scala的一個子集來實現的,Scala是一種純函數語言,擁有一套完整的常用函數。數據用戶還可以添加用戶實現的自定義函數。

混合特征計算模式的優點:

  • 在跨批處理和流時間窗口的特征計算中,能獲得最佳性能。
  • 用DSL來定義特征,避免了訓練和推理的管道實現中的差異帶來的不一致性。

混合特征計算模式的缺點:

  • 在生產中實現和管理該模式并不簡單,它的實現依賴成熟的數據平臺。

混合特征計算模式是實現特征計算的一種先進方法,它同時針對批處理和流式計算進行了優化。Apache Beam等編程模型正在逐漸將批處理和流式計算融合起來。

4.4.2 特征注冊模式

特征注冊模式可以讓特征易于發現和管理,并能高效地為在線/離線訓練和推理服務提供特征值。正如Li等人(https://oreil.ly/sFfDJ)觀察到的,這些用例的需求差異很大。批量訓練和推理需要高效的批量訪問,實時預測需要低延遲、每條記錄的訪問。單一存儲對于歷史和近實時特征來說并不是最佳選擇,原因主要有:

a. 數據存儲對于點查詢或批量訪問都是高效的,但不是同時都高效;

b. 頻繁的批量訪問會對點查詢的延遲產生負面影響,使得兩者難以共存。不管是哪種用例,特征都是通過規范名稱來標識的。

對于特征發現和管理,特征注冊模式是發布和發現特征以及訓練數據集的用戶界面。特征注冊模式還可以作為一種工具,通過比較特征版本來分析特征隨時間的變化。當開始一個新的數據科學項目時,數據科學家通常會先掃描特征注冊中的可用特征,只為模型添加特征存儲中尚不存在的新特征。

特征注冊模式有以下功能模塊:

特征值存儲

存儲特征值。針對批量存儲的常見解決方案有Hive(Uber和Airbnb使用)、S3(Comcast使用)和Google BigQuery(Gojek使用)。對于在線數據,通常使用Cassandra等NoSQL存儲。

特征注冊存儲

存儲計算特征的代碼、特征版本信息、特征分析數據和特征文檔。特征注冊提供自動特征分析、特征依賴跟蹤、特征作業跟蹤、特征數據預覽,以及對特征/特征組/訓練數據集元數據的關鍵字搜索。

特征注冊模式的一個示例是Hopsworks特征存儲(https://oreil.ly/7c_fx)。用戶用SQL或編程的方式查詢特征存儲,然后特征存儲以數據幀的形式返回特征(如圖4-6所示)。在Hopsworks特征存儲中,特征組和訓練數據集連接到Spark/NumPy/pandas作業,這樣可以在必要時復制和重新計算特征。除了特征組或訓練數據集之外,特征存儲還實現了數據分析功能,可以查看特征值、特征相關性、特征直方圖和描述性統計的聚類分析。例如,特征相關信息可用于識別冗余特征;特征直方圖可用于監控特征在不同版本之間的特征分布,以發現協方差;聚類分析可用于發現異常值。在特征注冊中訪問這些統計信息有助于用戶決定使用哪些特征。

067-01

圖4-6:用戶對特征存儲的查詢會產生數據幀(以通用的格式表示,即pandas、NumPy或Spark)(來自Hopsworks文檔(https://oreil.ly/2o1e0))

特征注冊模式的優點:

  • 它提供了高性能的訓練數據集和特征值服務。
  • 它能減少數據用戶的特征分析時間。

特征注冊模式的缺點:

  • 當為數百個模型提供服務時,可能存在性能瓶頸。
  • 特征數量不斷增加時,需要為連續特征分析進行擴展。
主站蜘蛛池模板: 留坝县| 屏东市| 乐安县| 江西省| 丰台区| 武乡县| 锡林郭勒盟| 涿鹿县| 双峰县| 大田县| 桐乡市| 榆社县| 长岭县| 登封市| 介休市| 比如县| 富民县| 临朐县| 永和县| 龙岩市| 游戏| 易门县| 高邮市| 米易县| 河南省| 兴国县| 云和县| 开平市| 临沭县| 桦甸市| 松潘县| 辰溪县| 太谷县| 秭归县| 兰州市| 历史| 保山市| 两当县| 昂仁县| 永胜县| 徐州市|