提供準確、一致且可用於生產的機器學習功能。
本文更詳細地探討了我們的機器學習 (ML) 特徵儲存。這是我們之前部落格文章的延續,提供了整個 ML 管道基礎設施的更廣泛的概述。
我們為什麼使用特徵儲存?
特徵儲存是我們管道中的眾多部分之一,可以說是系統中最重要的齒輪。其主要目的是充當中央資料庫,在特徵被發送用於模型訓練或推理之前對其進行管理。
如果您不熟悉這個術語,特徵本質上是原始數據,透過稱為特徵工程的過程,將其提煉成更有用的東西,讓我們的機器學習模型可以用來訓練自身或計算預測。
簡而言之,特徵存儲使我們能夠:
跨不同模型和團隊重複使用和共享功能
縮短 ML 實驗所需的時間
最大限度地減少由於嚴重的訓練服務偏差而導致的不準確預測
為了更好地理解特徵儲存的重要性,以下是一張不使用特徵儲存的 ML 管道圖。
在這個管道中,模型訓練和推理服務兩個部分無法識別哪些特徵已經存在並且可以重複使用。這會導致機器學習管道重複特徵工程過程。您會在圖中的紅色圓圈中註意到,機器學習管道沒有重複使用特徵,而是建立了一堆重複特徵和冗餘管道。我們將這種聚集稱為特徵管道蔓延。
隨著業務的成長和更多用戶進入平台,維護如此龐大的功能變得越來越昂貴且難以管理。這樣想吧;資料科學家必須開始特徵工程過程,這是漫長而乏味的,對於他們創建的每個新模型來說,完全從頭開始。
此外,過多的特徵邏輯重新實現引入了一個稱為訓練服務偏差的概念,它是訓練和推理階段資料之間的差異。它會導致不準確的預測和不可預測的模型行為,在生產過程中很難排除故障。在特徵儲存之前,我們的資料科學家將使用健全性檢查來檢查特徵一致性。這是一個手動且耗時的過程,會分散人們對建模和富有洞察力的特徵工程等更高優先級任務的注意力。現在,讓我們探索具有特徵儲存的 ML 管道。
與其他管道類似,我們在左側具有相同的資料來源和功能。然而,我們並沒有經歷多個特徵管道,而是將特徵儲存作為一個中央樞紐,為 ML 管道的兩個階段(模型訓練和推理服務)提供服務。沒有重複的特徵;建置功能所需的所有過程(包括轉換和聚合)只需執行一次。
資料科學家可以使用我們自訂的 Python SDK 直觀地與特徵儲存進行交互,以搜尋、重複使用和發現下游 ML 模型訓練和推理的特徵。
本質上,特徵儲存是統一這兩個階段的集中式資料庫。由於特徵儲存保證了訓練和推理的特徵一致,因此我們可以顯著減少訓練服務偏差。
請注意,特徵存儲的作用遠不止我們上面提到的幾點。當然,這是我們使用特徵儲存的原因的一個更基本的總結,我們可以進一步將其分解為幾個詞:以盡可能最快、最簡單的方式準備特徵並將其發送到 ML 模型中。
功能商店內部
上圖顯示了典型的特徵儲存佈局,無論是 AWS SageMaker Feature Store、Google vertex AI (Feast)、Azure (Feathr)、Iguazio 或 Tetcom。所有特徵儲存都提供兩種類型的儲存:線上或離線。
線上特徵儲存用於即時推理,而離線特徵儲存用於批量預測和模型訓練。由於用例不同,我們用來評估效能的指標完全不同。在線上功能中,我們尋求低延遲。對於離線特徵存儲,我們需要高吞吐量。
開發人員可以根據技術堆疊選擇任何企業功能商店甚至開源。下圖概述了 AWS SageMaker Feature Store 中線上商店和離線商店之間的主要差異。
線上商店:儲存最新的功能副本並以低毫秒延遲提供服務,其速度取決於您的有效負載大小。對於我們的帳戶接管 (ATO) 模型,該模型具有 8 個功能組和總共 55 個功能,速度約為 30 毫秒 p99 延遲。
離線存儲:僅追加存儲,可讓您追蹤所有歷史功能並啟用時間旅行以避免資料外洩。資料以 parquet 格式存儲,並進行時間分區以提高讀取效率。
關於功能一致性,只要將功能組配置為線上和離線使用,當功能被線上商店攝取時,資料就會自動內部複製到離線商店。
我們如何使用特徵庫?
上圖的程式碼隱藏了很多複雜性。特徵儲存允許我們簡單地導入 python 介面來進行模型訓練和推理。
使用特徵存儲,我們的資料科學家可以輕鬆定義特徵並建立新模型,而不必擔心後端繁瑣的資料工程流程。
使用特徵儲存的最佳實踐
在我們之前的部落格文章中,我們解釋瞭如何使用儲存層將功能匯集到集中式資料庫中。在這裡,我們想分享使用特徵儲存時的兩個最佳實踐:
我們不會攝取未改變的功能
我們將功能分為兩個邏輯群組:活動使用者操作和非活動使用者操作
考慮這個例子。假設您的線上功能商店上的 PutRecord 的限制為 10K TPS。根據這個假設,我們將為 1 億用戶取得功能。我們無法一次將它們全部攝取,以我們目前的速度,大約需要 2.7 小時才能完成。為了解決這個問題,我們選擇僅攝取最近更新的功能。例如,如果自上次提取以來該特徵的值沒有發生變化,我們就不會提取該特徵。
對於第二點,假設您將一組功能放入一個邏輯功能組中。有些是活躍的,而大部分是非活躍的,這意味著大多數功能都沒有改變。我們認為,合乎邏輯的步驟是將活動和非活動分為兩個功能組,以加快攝取過程。
對於不活躍的功能,我們減少了每小時功能管道中 1 億用戶需要提取到功能儲存中的 95% 的資料。此外,我們也減少了活動功能所需數據的 20%。因此,批量攝取管道只需 10 分鐘即可處理 1 億用戶的功能,而不是三小時。
結束語
總而言之,特徵儲存允許我們重複使用特徵、加快特徵工程並最大限度地減少不準確的預測,同時保持訓練和推理之間的一致性。
有興趣使用機器學習來保護世界上最大的加密生態系統及其用戶嗎?請在我們的職業頁面上查看幣安工程/人工智慧,以了解空缺職位資訊。
延伸閱讀:
(部落格)使用 MLOps 建立即時端到端機器學習管道
