本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
功能儲存範例筆記本簡介
重要
允許 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 建立 Amazon SageMaker 資源的自訂 IAM 政策也必須授予許可,才能將標籤新增至這些資源。需要將標籤新增至資源的許可,因為 Studio 和 Studio Classic 會自動標記他們建立的任何資源。如果 IAM 政策允許 Studio 和 Studio Classic 建立資源,但不允許標記,則嘗試建立資源時可能會發生「AccessDenied」錯誤。如需詳細資訊,請參閱提供標記 SageMaker AI 資源的許可。
AWS Amazon SageMaker AI 的 受管政策 提供建立 SageMaker 資源的許可,已包含建立這些資源時新增標籤的許可。
此頁面上的範例程式碼是指特徵商店簡介
使用下列項目複製 aws/amazon-sagemaker-examples
-
適用於 Studio Classic
啟動 Studio Classic。如果 Studio 或 Studio Classic 已啟用做為您的預設體驗,您可以開啟 Studio Classic。如需如何開啟 Studio Classic 的說明,請參閱 使用 Amazon SageMaker AI 主控台啟動 Studio Classic。
依照中的步驟,將 aws/amazon-sagemaker-examples
GitHub 儲存庫複製到 Studio Classic在 SageMaker Studio Classic 中複製 Git 儲存庫。 -
對於 Amazon SageMaker 筆記本執行個體
依照 中的指示啟動 SageMaker 筆記本執行個體存取筆記本執行個體。
請遵循 中的指示,檢查範例是否已在您的筆記本中存取範例筆記本。如果沒有,請遵循 中的指示將 Git 儲存庫新增至您的 Amazon SageMaker AI 帳戶。
現在您已擁有 SageMaker AI 範例筆記本,請導覽至 amazon-sagemaker-examples/sagemaker-featurestore
目錄並開啟功能商店範例筆記本簡介
步驟 1:設定 SageMaker AI 工作階段
若要開始使用 Feature Store,請建立 SageMaker AI 工作階段。然後,設定您要用於 功能的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。Amazon S3 儲存貯體是您的離線儲存。下列程式碼使用 SageMaker AI 預設儲存貯體,並新增自訂字首。
注意
您用來執行筆記本的角色必須附加下列受管的政策:AmazonS3FullAccess
和 AmazonSageMakerFeatureStoreAccess
。如需將政策新增至 IAM 角色的詳細資訊,請參閱 將政策新增至您的 IAM 角色。
# SageMaker Python SDK version 2.x is required import sagemaker import sys
import boto3 import pandas as pd import numpy as np import io from sagemaker.session import Session from sagemaker import get_execution_role prefix = 'sagemaker-featurestore-introduction' role = get_execution_role() sagemaker_session = sagemaker.Session() region = sagemaker_session.boto_region_name s3_bucket_name = sagemaker_session.default_bucket()
步驟 2:檢查資料
在此筆記本範例中,我們從託管完整筆記本的 GitHub 儲存庫
customer_data = pd.read_csv("data/feature_store_introduction_customer.csv") orders_data = pd.read_csv("data/feature_store_introduction_orders.csv") print(customer_data.head()) print(orders_data.head())
下圖說明資料在特徵存放區擷取之前經過的步驟。在本筆記本中,我們會說明使用案例,其中您擁有來自多個來源的資料,並希望將這些資料獨立存放在特徵存放區中。我們的範例會考量來自資料倉儲 (客戶資料) 的資料,以及來自即時串流服務 (訂單資料) 的資料。

步驟 3:建立特徵群組
我們首先通過為客戶資料和訂單資料建立功能組名稱開始。接下來,我們會建立兩個功能群組,一個用於 customer_data
,另一個用於 orders_data
:
import time from time import strftime, gmtime customers_feature_group_name = 'customers-feature-group-' + strftime('%d-%H-%M-%S', gmtime()) orders_feature_group_name = 'orders-feature-group-' + strftime('%d-%H-%M-%S', gmtime())
執行個體化 customers_data
和 的FeatureGroup
物件orders_data
:
from sagemaker.feature_store.feature_group import FeatureGroup customers_feature_group = FeatureGroup( name=customers_feature_group_name, sagemaker_session=sagemaker_session ) orders_feature_group = FeatureGroup( name=orders_feature_group_name, sagemaker_session=sagemaker_session )
import time current_time_sec = int(round(time.time())) record_identifier_feature_name = "customer_id"
附加 EventTime
功能到您的資料影格。此參數為必要參數,並為每個資料點加上時間戳記:
customer_data["EventTime"] = pd.Series([current_time_sec]*len(customer_data), dtype="float64") orders_data["EventTime"] = pd.Series([current_time_sec]*len(orders_data), dtype="float64")
將功能定義載入至您的功能群組:
customers_feature_group.load_feature_definitions(data_frame=customer_data) orders_feature_group.load_feature_definitions(data_frame=orders_data)
下列呼叫create
會分別建立兩個功能群組 orders_feature_group
customers_feature_group
和 :
customers_feature_group.create( s3_uri=f"s3://{s3_bucket_name}/{prefix}", record_identifier_name=record_identifier_feature_name, event_time_feature_name="EventTime", role_arn=role, enable_online_store=True ) orders_feature_group.create( s3_uri=f"s3://{s3_bucket_name}/{prefix}", record_identifier_name=record_identifier_feature_name, event_time_feature_name="EventTime", role_arn=role, enable_online_store=True )
為了確認您的功能群組已建立,我們使用 DescribeFeatureGroup
和 ListFeatureGroups
APIs來顯示:
customers_feature_group.describe()
orders_feature_group.describe()
sagemaker_session.boto_session.client('sagemaker', region_name=region).list_feature_groups() # We use the boto client to list FeatureGroups
步驟 4:將資料擷取至功能群組
功能群組建立後,我們可以將資料放入其中。如果您使用的是 SageMaker AI AWS SDK for Python (Boto3),請使用 ingest
API 呼叫。如果您使用的是適用於 Python 的 SDK (Boto3),請使用 PutRecord
API。擷取這兩個選項的資料需要不到 1 分鐘的時間。此範例使用適用於 Python 的 SageMaker AI SDK (Boto3),因此會使用 ingest
API 呼叫:
def check_feature_group_status(feature_group): status = feature_group.describe().get("FeatureGroupStatus") while status == "Creating": print("Waiting for Feature Group to be Created") time.sleep(5) status = feature_group.describe().get("FeatureGroupStatus") print(f"FeatureGroup {feature_group.name} successfully created.") check_feature_group_status(customers_feature_group) check_feature_group_status(orders_feature_group)
customers_feature_group.ingest( data_frame=customer_data, max_workers=3, wait=True )
orders_feature_group.ingest( data_frame=orders_data, max_workers=3, wait=True )
使用任意的客戶記錄 ID,573291 我們用 get_record
來檢查資料是否已被擷取到特徵群組。
customer_id = 573291 sample_record = sagemaker_session.boto_session.client('sagemaker-featurestore-runtime', region_name=region).get_record(FeatureGroupName=customers_feature_group_name, RecordIdentifierValueAsString=str(customer_id))
print(sample_record)
以下示範如何使用 batch_get_record
來取得一批記錄。
all_records = sagemaker_session.boto_session.client( "sagemaker-featurestore-runtime", region_name=region ).batch_get_record( Identifiers=[ { "FeatureGroupName": customers_feature_group_name, "RecordIdentifiersValueAsString": ["573291", "109382", "828400", "124013"], }, { "FeatureGroupName": orders_feature_group_name, "RecordIdentifiersValueAsString": ["573291", "109382", "828400", "124013"], }, ] )
print(all_records)
步驟 5:清除
在這裡,我們會移除我們建立的功能群組。
customers_feature_group.delete() orders_feature_group.delete()
步驟 6:後續步驟
在此範例筆記本中,您了解如何開始使用特徵存放區、建立特徵群組,以及將資料擷取到其中。
如需如何使用 Feature Store 進行詐騙偵測使用案例的進階範例,請參閱使用 Feature Store 進行詐騙偵測
步驟 7:程式設計人員的程式碼範例
在這本筆記本中,我們使用了各種不同的 API 調用。其中大部分可透過 SageMaker Python SDK 存取,但有些僅存在於 Boto3 中。您可以直接在 Feature Store 物件上叫用 SageMaker Python SDK API 呼叫,而若要叫用 Boto3 內存在的 API 呼叫,您必須先透過 Boto3 和 SageMaker AI 工作階段存取 Boto3 用戶端:例如 sagemaker_session.boto_session.client()
。
以下是此筆記本的 API 呼叫清單。這些呼叫存在於 中SDK for Python,並存在於 Boto3 中,供您參考:
適用於 Python (Boto3) API 呼叫的 SDK
describe() ingest() delete() create() load_feature_definitions()
Boto3 API 調用
list_feature_groups() get_record()