특성 저장소 소개 예제 노트북 - Amazon SageMaker AI

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

특성 저장소 소개 예제 노트북

중요

Amazon SageMaker Studio 또는 Amazon SageMaker Studio Classic에서 Amazon SageMaker 리소스를 만들도록 허용하는 사용자 지정 IAM 정책은 해당 리소스에 태그를 추가할 수 있는 권한도 부여해야 합니다. Studio와 Studio Classic은 만드는 리소스에 태그를 자동으로 지정하기 때문에 리소스에 태그를 추가할 권한이 필요합니다. IAM 정책이 Studio 및 Studio Classic에서 리소스를 만들도록 허용하지만 태그 지정은 허용하지 않는 경우 리소스 만들기를 시도할 때 'AccessDenied' 오류가 발생할 수 있습니다. 자세한 내용은 SageMaker AI 리소스에 태그를 지정할 수 있는 권한 제공 섹션을 참조하세요.

SageMaker 리소스를 만들 수 있는 권한을 부여하는 AWS Amazon SageMaker AI에 대한 관리형 정책에는 해당 리소스를 만드는 동안 태그를 추가할 수 있는 권한이 이미 포함되어 있습니다.

이 페이지의 예제 코드는 특성 저장소 소개 예제 노트북을 참조합니다. Studio Classic, 노트북 인스턴스 또는 JupyterLab에서 이 노트북을 실행하는 것을 권장합니다.이 가이드의 코드는 개념적이며 복사할 경우 제대로 작동하지 않기 때문입니다.

다음을 사용하여 예시 노트북이 포함된 aws/amazon-sagemaker-examples GitHub 리포지토리를 복제합니다.

이제 SageMaker AI 예제 노트북이 있으므로 amazon-sagemaker-examples/sagemaker-featurestore 디렉터리로 이동하여 특성 저장소 소개 예제 노트북을 엽니다.

1단계: SageMaker AI 세션 설정

특성 저장소 사용을 시작하려면 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())

다음 다이어그램은 Feature Store에 데이터가 수집되기 전에 거치는 단계를 보여줍니다. 이 노트북에서는 여러 소스의 데이터가 존재하고 이를 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_dataorders_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_grouporders_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 )

특성 그룹이 만들어졌는지 확인하기 위해 DescribeFeatureGroupListFeatureGroups 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 AI를 사용하는 경우 ingest API 호출을 AWS SDK for Python (Boto3)사용합니다. SDK for Python(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를 사기 감지에 사용하는 방법에 대한 고급 예시는 Fraud Detection with Feature Store를 참조하세요.

7단계: 프로그래머용 코드 예시

이 노트북에서는 다양한 API 직접 호출을 사용했습니다. 대부분은 SageMaker Python SDK를 통해 액세스할 수 있지만 일부는 Boto3 내에서만 존재합니다. 특성 저장소 객체에서 직접 SageMaker Python SDK API 호출을 호출할 수 있지만 Boto3 내에 있는 API 호출을 호출하려면 먼저 Boto3 및 SageMaker AI 세션, 예를 들어를 통해 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()