Vertex AI — Feature Store簡介
本節將介紹feature store的:
- 效益
- 術語和概念
- Feature serving: 處理批次和線上(串流)請求
效益
我們將透過一個典型案例來描述 Feature Store 的效益,前提使我們正在使用GCP的AI相關服務。
如果團隊使用 Auto ML 和 BigQuery ML 部署第一個 ML 模型之後, 團隊也有特徵工程的能力。但是如果組織很大,AI的部門很大(尤其是大企業),通常會分成多個團隊來重新建立相同的特徵,這導致了重工。
每次AI相關團隊需要為模型新增特徵時,都需要依賴維運團隊。團隊還花了太多時間來嘗試管理功能從訓練到部署和服務的生命週期。 團隊中的軟體開發人員需要了解知道透過線上預測端點將 ML 新增至他們的應用程式中,而不用知道如何在預測時取得或產生模型所需的特徵。
XYZ 的 DevOps 資源對於團隊來說是新資源,需要了解如何監控和維護功能服務和管理基礎架構。從事 ML 特徵工程的技術人員經常會面臨三個關鍵挑戰。
- 特徵難以共享和重複使用
- 可靠地以低延遲提供生產服務
- 訓練和服務之間的特徵值無意偏差(inadvertent skew)也很常見
這三個關鍵挑戰都被視為特徵管理的痛點。不斷成長的ML團隊如何解決這些挑戰?
Vertex AI Feature Store 解決了這些特徵管理問題。在使用 Feature Store 之前,團隊計算特徵值並將其保存在各種位置,例如 BigQuery 中的table或 Cloud Storage 中的hedge file。
Vertex AI Feature Store 提供了一個用於組織、儲存和提供ML功能的集中儲存庫。透過使用集中特徵存儲, 團隊可以有效地大規模共享、發現和重複使用 ML 特徵,從而讓團隊提高開發和部署新的管理學習應用程式的速度。
Feature Store 是一個完全託管的解決方案。它管理和擴展底層基礎設施,這意味著資料科學家可以專注於特徵運算邏輯,而不必擔心將特徵部署到生產中的挑戰。
ML中的一個常見問題稱為訓練服務偏差(training-serving skew),這意味著訓練的資料可能會出現偏差或與生產中提供的資料不同。特徵儲存減緩了訓練服務偏差,因為它允許我們計算一次特徵值,並將它們重新用於訓練和服務。我們還可以追蹤和監控"漂移"和其他品質問題。 Feature Store 還允許在資料流入時大量或即時地進行特徵提取。
透過 Vertex AI Feature Store,團隊可以使用批次和串流匯入 API 儲存特徵,並將該特徵註冊到其特徵註冊表中。這使得其他團隊成員(例如資料分析師、機器學習工程師、軟體開發人員和資料科學家)能夠使用 Discovery API 找到該功能並檢索特徵值,以便透過持續功能監控提供快速線上服務。
術語與概念
特徵儲存是特徵及其值的頂級容器。當設定feature store時,有權限的使用者可以新增和分享他們的特徵,而無需額外的技術支援。使用者可以定義特徵,然後從各種資料來源中提取或匯入特徵值。
Entity
Entity type是語意相關特徵的集合。可以根據與案例相關的概念定義自己的Entity type。例如,電影服務可能具有Entity type影片和使用者,它們將與電影或客戶相對應的相關特徵進行分組。
Entity是entity type的instance。例如,movie_01 和 movie_02 是 movies entity type的entities。在特徵儲存中,每個entity必須具有唯一的 ID,且必須是 STRING 類型。當我們從特徵儲存中擷取值時,它們的服務將傳回包含我們要求的特徵值的entity view。我們可以將entity view(如上圖)視為特徵儲存從串流或批次服務請求傳回的特徵和值的投影。
對於串流服務要求,我們可以取得特定entity type的全部或部分特徵。對於批次服務要求,也可以取得一個或多個entity type的全部或部分特徵。例如,如果特徵分佈在多個entity type中,則可以一起檢索它們。在單一請求中,我們以將其提供給ML或批次預測請求。
簡單地說,特徵就是作為輸入傳遞給模型的值。Feature store可以儲存標量(scalars)和陣列(arrays)、張量(tensors)。本質上,特徵描述某些entity,例如使用者年齡、產品價格或網頁類別。
Feature stroe擷取特定時間點的特徵的特徵值。換句話說,特定entity和特徵可以具有多個值。 例如,movie_01 entity可以具有average_rating特徵的多個特徵值。該值可能某一時刻為 4.4,而稍後某一時刻為 4.8。Feature store將tuple identifier與每個特徵值、entity_ID、feature_ID 和timestamp相關聯,然後在瀏覽時使用這些tuple identifier來查找值。timestamp column指示特徵值的產生時間。
在Feature store中,timestamp是特徵值的屬性,而不是單獨的資源類型。如果所有特徵值都是同時產生的,則不需要timestamp column。我們可以將timestamp指定為ingestion request的一部分。Feature store將特徵值儲存至data retention limit。此限制是基於與特徵值關聯的timestamp,而不是導入值的時間。
讓我們檢視一下上圖的entity view,這個view顯示entity type budget和feature store Hello World 的五個特徵清單。建立特徵時,可以指定其值類型,例如Boolean array、double array或STRING。
這個值決定了可以為特定特徵提取哪些值類型。此entity view還顯示每個特徵的計數、缺失值、平均值、標準差、每個特徵的零的數量以及每個特徵的最小值、中間值和最大值。
上圖這兩個欄位與entity_ID欄位相關聯,它是一個STRING。此column顯示每個特徵的值的圖形分佈。entity和特徵之間存在一對多的關係。
在這個 Vertex AI 範例中,有一個名為budget的entity type,但這裡許多值與該entity type相關聯。
Feature ingestion是將特徵工程作業計算的特徵值匯入Feature store的過程。在提取資料之前,必須在特徵儲存中定義相應的entity type和特徵。Feature store提供批次擷取功能,以便可以將值批次儲存到Feature store中。
Feature serving
Feature serving是導出儲存的特徵值以進行訓練或推理的過程。 Feature Store 提供兩種運行特徵的方法:批次(batch)和線上(online)。
如上圖所示,Vertex Feature Store 使用了儲存系統和後端組件的組合。Key API 是batch ingestion API。當使用者透過batch ingestion API 提取特徵值時,資料會可靠地寫入離線儲存和線上儲存。
離線儲存將長期保留特徵值,以便以後可以檢索它們進行訓練。online feature store將包含線上預測的最新特徵值。客戶端應用程式將使用online serving API 來獲取特徵值以執行線上預測。
Batch serving API 用於從離線儲存中獲取資料以訓練模型或執行批量預測。為了取得適合訓練的特徵值,Batch serving API 會執行一個特定時間點查找。online serving用於低延遲檢索小批量資料以進行即時處理,例如線上預測。批量服務具有高吞吐量,可為離線處理提供大量數據,例如模型訓練或批量預測。