특성 저장소 소개 예제 노트북
중요
Amazon SageMaker Studio 또는 Amazon SageMaker Studio Classic에서 Amazon SageMaker 리소스를 만들도록 허용하는 사용자 지정 IAM 정책은 해당 리소스에 태그를 추가할 수 있는 권한도 부여해야 합니다. Studio와 Studio Classic은 만드는 리소스에 태그를 자동으로 지정하기 때문에 리소스에 태그를 추가할 권한이 필요합니다. IAM 정책이 Studio 및 Studio Classic에서 리소스를 만들도록 허용하지만 태그 지정은 허용하지 않는 경우 리소스 만들기를 시도할 때 'AccessDenied' 오류가 발생할 수 있습니다. 자세한 내용은 SageMaker 리소스 태그 지정을 위한 권한 제공 섹션을 참조하세요.
SageMaker 리소스를 만들 수 있는 권한을 부여하는 Amazon SageMaker용 AWS 관리형 정책에는 해당 리소스를 만드는 동안 태그를 추가할 수 있는 권한이 이미 포함되어 있습니다.
이 페이지의 예제 코드는 특성 저장소 소개
다음을 사용하여 예시 노트북이 포함된 aws/amazon-sagemaker-examples
-
Studio Classic의 경우
Studio Classic을 시작합니다. Studio 또는 Studio Classic이 기본 환경으로 활성화된 경우 Studio Classic을 열 수 있습니다. Studio Classic을 여는 방법에 관한 지침은 Amazon SageMaker 콘솔을 사용하여 Studio Classic 시작 섹션을 참조하세요.
SageMaker Studio Classic에서 Git 리포지토리 복제의 단계에 따라 aws/amazon-sagemaker-examples
GitHub 리포지토리를 Studio Classic에 복제합니다. -
Amazon SageMaker 노트북 인스턴스의 경우
노트북 인스턴스에 액세스의 지침에 따라 SageMaker 노트북 인스턴스를 시작합니다.
예시 노트북 액세스의 지침에 따라 노트북에 예시가 이미 있는지 확인합니다. 없다면 Amazon SageMaker 계정에 Git 리포지토리 추가의 지침을 따릅니다.
이제 SageMaker 예시 노트북이 있으므로 amazon-sagemaker-examples/sagemaker-featurestore
디렉터리로 이동하여 Feature Store 소개
1단계: SageMaker 세션 설정
Feature Store 사용을 시작하려면 SageMaker 세션을 만듭니다. 그런 다음 특성을 위해 사용할 Amazon Simple Storage Service(Amazon S3) 버킷을 설정합니다. Amazon S3 버킷은 오프라인 저장소입니다. 다음 코드는 SageMaker 기본 버킷을 사용하고 여기에 사용자 지정 접두사를 추가합니다.
참고
노트북을 실행하는 데 사용하는 역할에는 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())
다음 다이어그램은 Feature Store에 데이터가 수집되기 전에 거치는 단계를 보여줍니다. 이 노트북에서는 여러 소스의 데이터가 존재하고 이를 Feature Store에 독립적으로 저장하려는 경우의 사용 사례를 보여줍니다. 이 예에서는 데이터 웨어하우스의 데이터(고객 데이터)와 실시간 스트리밍 서비스의 데이터(주문 데이터를 고려합니다.
3단계: 특성 그룹 생성
먼저 customer_data 및 orders_data에 대한 특성 그룹 이름을 만드는 것으로 시작합니다. 그런 다음 두 개의 특성 그룹을 만듭니다. 하나는 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
및 orders_data
에 대한 FeatureGroup
객체를 인스턴스화합니다.
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)
다음은 두 개의 특성 그룹, customers_feature_group
및 orders_feature_group
각각을 만들기 위해 create
를 직접 호출합니다.
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
API를 사용하여 표시합니다.
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 AWS SDK for Python (Boto3)을 사용하는 경우 ingest
API 직접 호출을 사용하세요. SDK for Python(Boto3)을 사용하는 경우 PutRecord
API를 사용합니다. 이 두 옵션 모두에서 데이터를 수집하는 데 1분도 걸리지 않습니다. 이 예시에서는 SageMaker SDK for Python(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를 사기 감지에 사용하는 방법에 대한 고급 예시는 Fraud Detection with Feature Store
7단계: 프로그래머용 코드 예시
이 노트북에서는 다양한 API 직접 호출을 사용했습니다. 대부분은 SageMaker Python SDK를 통해 액세스할 수 있지만 일부는 Boto3 내에서만 존재합니다. Feature Store 객체에서 곧바로 SageMaker Python SDK API를 호출할 수 있지만 Boto3 내에 있는 API를 호출하려면 먼저 Boto3 및 SageMaker 세션을 통해 Boto3 클라이언트에 액세스해야 합니다(예: sagemaker_session.boto_session.client()
).
다음은 이 노트북에 대한 API 직접 호출 목록입니다. 이러한 직접 호출은 SDK for Python에 존재하며 참조용으로 Boto3에 존재합니다.
SDK for Python(Boto3) API 직접 호출
describe() ingest() delete() create() load_feature_definitions()
Boto3 API 직접 호출
list_feature_groups() get_record()