

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Feature Store 建立、存放和共用功能
<a name="feature-store"></a>

機器學習 (ML) 開發程序包括擷取原始資料，並將其轉換為*功能* (ML 模型的有意義輸入）。然後，這些特徵會以可服務的方式存放，以進行資料探索、ML 訓練和 ML 推論。Amazon SageMaker Feature Store 簡化了您建立、存放、共用和管理功能的方式。此做法是提供特徵存放區選項，並減少重複的資料處理和策展工作。

除此之外，透過 Feature Store，您可以：
+ 簡化跨帳戶或在組織中用於 ML 開發的特徵處理、存放、擷取和共用特徵。
+ 追蹤您的特徵處理程式碼開發、將特徵處理器套用至原始資料，並以一致的方式將您的特徵擷取到 Feature Store。這可減少訓練服務扭曲，這是 ML 的常見問題，其中訓練和服務期間的效能差異可能會影響 ML 模型的準確性。
+ 將您的特徵和相關聯中繼資料存放在特徵群組中，以便可以輕鬆探索和重複使用這些功能。特徵群組是可變的，並且可以在建立後發展其結構描述。
+ 建立可以設定為包含線上或離線存放區或兩者的離線儲存，以管理您的特徵，並自動化為您 ML 任務存放特徵的方式。
  + 線上儲存僅為您的特徵保留最新記錄。這主要用於支援需要低毫秒延遲讀取和高輸送量寫入的即時預測。
  + 離線儲存會將特徵的所有記錄保留為歷史資料庫。這主要適用於資料探索、模型訓練和批次預測。

下圖顯示了如何將 Feature Store 用作 ML 管道的一部分。一旦您讀取了原始資料後，就可以使用 Feature Store 將原始資料轉換為特徵，並將其擷取到您的特徵群組。您可以透過串流或批次將特徵擷取至特徵群組的線上和離線存放區。然後提供這些特徵，進行資料探索、模型訓練和即時或批次推論。

![Feature Store 適合於機器學習管道的位置。](http://docs.aws.amazon.com/zh_tw/sagemaker/latest/dg/images/feature-store/feature-store-overview.png)


## 功能儲存的運作方式
<a name="how-feature-store-works"></a>

在 Feature Store 中，特徵儲存在稱為*特徵群組*的集合中。您可以將特徵群組視覺化為表格，其中每欄位都是一個特徵，每列都具有唯一識別碼。原則上，特徵群組由許多特徵以及每個特徵的專屬值組成。`Record` 是功能值的集合，並且對應於唯一的 `RecordIdentifier`。總而言之，`FeatureGroup` 是一組功能定義於您的 `FeatureStore` 用以描述 `Record`。  

 您可以在以下模式中使用 Feature Store：  
+  **線上** - 在線上模式下，會以低延遲 (毫秒) 讀取功能讀取，並用於高輸送量預測。此模式需要將功能群組儲存在線上儲存中。  
+  **離線** - 在離線模式下，大型資料串流會饋送至離線存放區，可用於訓練和批次推論。此模式需要將功能群組儲存在離線儲存中。離線存放區使用您的 S3 儲存貯體進行儲存，也可以使用 Athena 查詢擷取資料。  
+  **線上和離線** — 這包含線上和離線模式。

您可以透過兩種方式將資料導入功能群組中的功能群組：串流或批次。當您透過串流內嵌資料時，會呼叫同步 `PutRecord` API 呼叫，將記錄集合推送至特徵商店。此 API 可讓您維護功能儲存中的最新功能值，並在偵測到更新時推送新功能值。

或者，功能儲存可以批次處理和擷取資料。例如，您可以使用 Amazon SageMaker Data Wrangler 編寫特徵，並從 Data Wrangler 匯出筆記本。筆記本可以是 SageMaker Processing 任務，其可將特徵批次擷取至 Feature Store 特徵群組。此模式允許批次擷取至離線存放區。如果功能群組設定為線上和離線使用，它也支援擷取至線上儲存。  

## 建立特徵群組
<a name="create-feature-groups"></a>

若要將特徵內嵌到 Feature Store 中，必須先針對屬於該特徵群組的所有特徵，定義其特徵群組和特徵定義 (特徵名稱和資料類型)。功能群組建立後，他們是可變的並且可以進化他們的資料架構。特徵群組名稱在 AWS 區域 和 中是唯一的 AWS 帳戶。建立特徵群組時，您也可以為特徵群組建立中繼資料。中繼資料可以包含簡短描述、儲存組態、用於識別每筆記錄的特徵，以及事件時間。此外，中繼資料可以包含標籤，以存放作者、資料來源、版本等資訊。

**重要**  
`FeatureGroup` 名稱或相關的中繼資料：例如說明或標籤，不應包含任何個人身分識別資訊 (PII) 或機密性資訊。

## 尋找、探索和分享功能
<a name="Find-discover-share-features"></a>

在功能儲存中建立功能群組後，功能儲存的其他授權使用者可以共用和探索它。使用者可以瀏覽功能儲存中所有功能群組的清單，或透過依功能群組名稱、描述、記錄識別碼名稱、建立日期和標籤進行搜尋來探索既有功能群組。  

## 對線上儲存中儲存的功能進行即時推論 
<a name="real-time-inference"></a>

透過功能儲存，您可以使用串流來源的資料 (清除其他應用程式的串流資料)，即時豐富線上儲存中儲存的功能，並以低毫秒延遲提供這些功能，進行即時推論。  

您也可以透過在用戶端應用程式中查詢兩個不同的 `FeatureGroups` 方式，在不同的 `FeatureGroups` 中執行聯結，以進行即時推論。  

## 用於模型訓練和批次推論的離線存放區
<a name="offline-store-for-model-training"></a>

功能儲存在您的 S3 儲存貯體中提供離線儲存功能值。您的資料會根據事件時間使用前置配置方案存放於 S3 儲存貯體中。離線儲存是僅附加的儲存，可讓 Feature Store 維護所有功能值的歷史記錄。資料以 Parquet 格式儲存在離線儲存中，以最佳化儲存和查詢存取。

您可以從主控台使用 Data Wrangler 來查詢、探索和視覺化功能。  功能儲存支援結合資料以產生、訓練、驗證和測試資料集，並可讓您在不同時間點擷取資料。

## 功能資料擷取
<a name="feature-data-ingestion"></a>

可以建立功能產生管線以處理大批次 (1 百萬列或更多資料) 或小批次，以及將功能資料寫入離線或線上儲存。串流來源：例如 Amazon Managed Streaming，專用於 Apache Kafka 或 Amazon Kinesis) 也可以用作資料來源，從中擷取功能並直接饋送至線上儲存以進行訓練、推論或建立功能。  

您可以透過呼叫同步 `PutRecord` API 呼叫將記錄推送至特徵商店。由於這是一個同步 API 調用，它允許在單個 API 調用中推送小批量更新。這可讓您在偵測到更新後立即維持功能值的高新鮮度和發佈值。這些也稱為*串流功能*。 

擷取和更新功能資料後，功能儲存會儲存離線儲存中所有功能的歷史資料。對於批次擷取，您可以從 S3 儲存貯體提取功能值，或使用 Athena 進行查詢。您也可以使用 Data Wrangler 來處理和設計新功能，然後將這些功能匯出到選定的 S3 儲存貯體，以供功能存放區存取。對於批次擷取，您可以設定處理任務以批次將資料擷取至功能存放區，或使用 Athena 從 S3 儲存貯體提取功能值。  

若要從您的線上儲存中移除 `Record`，請使用 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_feature_store_DeleteRecord.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_feature_store_DeleteRecord.html)API 呼叫。這也會將刪除的記錄新增至離線存放區。

## 功能存放區中的恢復
<a name="feature-store-resilience"></a>

功能儲存分佈在多個可用區域 (AZ)。AZ 在 AWS 區域中是一個隔離的位置。如果某些 AZ 失敗，功能儲存可以使用其他 AZ。如需 AZ 的更多相關資訊，請參閱 [Amazon SageMaker AI 中的彈性](disaster-recovery-resiliency.md)。