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