레지스트리에서 모델 배포 - Amazon SageMaker

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

레지스트리에서 모델 배포

모델 버전을 등록하고 배포를 승인한 후 실시간 추론을 위해 SageMaker 엔드포인트에 배포합니다. SDK 또는 AWS SDK for Python (Boto3) (Boto3)를 SageMaker 사용하여 모델을 배포할 수 있습니다.

기계 학습 작업(MLOps) 프로젝트를 생성하고 모델 배포가 포함된 MLOps 프로젝트 템플릿을 선택하면 모델 레지스트리의 승인된 모델 버전이 프로덕션에 자동으로 배포됩니다. MLOps 프로젝트 사용에 SageMaker 대한 자세한 내용은 섹션을 참조하세요MLOps SageMaker 프로젝트를 통한 자동화.

계정 간 리소스 정책을 추가하여 AWS 계정이 다른 계정에서 생성된 모델 버전을 배포하도록 활성화할 수도 있습니다. 예를 들어 조직의 한 팀은 모델 훈련을 담당하고 다른 팀은 모델 배포 및 업데이트를 담당할 수 있습니다.

레지스트리에서 모델 배포(SageMaker SDK)

Amazon SageMaker PythonSDK을 사용하여 모델 버전을 배포하려면 다음 코드 조각을 사용합니다.

from sagemaker import ModelPackage from time import gmtime, strftime model_package_arn = 'arn:aws:sagemaker:us-east-2:12345678901:model-package/modeltest/1' model = ModelPackage(role=role, model_package_arn=model_package_arn, sagemaker_session=sagemaker_session) model.deploy(initial_instance_count=1, instance_type='ml.m5.xlarge')

레지스트리에서 모델 배포(Boto3)

를 사용하여 모델 버전을 배포하려면 다음 단계를 AWS SDK for Python (Boto3)완료합니다.

  1. 다음 코드 조각은 SageMaker Boto3 클라이언트sm_client와 이 변수 에 ARN 저장된 모델 버전을 이미 생성했다고 가정합니다model_version_arn.

    create_model API 작업을 호출하여 모델 버전에서 모델 객체를 생성합니다. 모델 객체에 Containers 대한 의 일부로 모델 버전의 Amazon 리소스 이름(ARN)을 전달합니다.

    model_name = 'DEMO-modelregistry-model-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) print("Model name : {}".format(model_name)) container_list = [{'ModelPackageName': model_version_arn}] create_model_response = sm_client.create_model( ModelName = model_name, ExecutionRoleArn = role, Containers = container_list ) print("Model arn : {}".format(create_model_response["ModelArn"]))
  2. create_endpoint_config를 호출하여 엔드포인트 구성을 생성합니다. 엔드포인트 구성은 엔드포인트에 사용할 Amazon EC2 인스턴스의 수와 유형을 지정합니다.

    endpoint_config_name = 'DEMO-modelregistry-EndpointConfig-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) print(endpoint_config_name) create_endpoint_config_response = sm_client.create_endpoint_config( EndpointConfigName = endpoint_config_name, ProductionVariants=[{ 'InstanceType':'ml.m4.xlarge', 'InitialVariantWeight':1, 'InitialInstanceCount':1, 'ModelName':model_name, 'VariantName':'AllTraffic'}])
  3. create_endpoint를 호출하여 엔드포인트를 생성합니다.

    endpoint_name = 'DEMO-modelregistry-endpoint-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) print("EndpointName={}".format(endpoint_name)) create_endpoint_response = sm_client.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name) print(create_endpoint_response['EndpointArn'])

다른 계정에서 모델 버전 배포

계정 간 리소스 정책을 추가하여 AWS 계정이 다른 계정에서 생성된 모델 버전을 배포하도록 허용할 수 있습니다. 예를 들어 조직의 한 팀은 모델 훈련을 담당하고 다른 팀은 모델 배포 및 업데이트를 담당할 수 있습니다. 이러한 리소스 정책을 만들 때는 액세스 권한을 부여하려는 특정 리소스에 정책을 적용합니다. 의 교차 계정 리소스 정책에 대한 자세한 내용은 AWS Identity and Access Management 사용 설명서교차 계정 정책 평가 로직을 AWS참조하세요.

참고

교차 계정 모델 배포를 위한 훈련 중에 KMS 키를 사용하여 출력 데이터 구성 작업을 암호화해야 합니다.

에서 교차 계정 모델 배포를 활성화하려면 배포하려는 모델 버전 SageMaker, 모델 그룹의 추론 이미지가 있는 Amazon ECR리포지토리, 모델 버전이 저장된 Amazon S3 버킷이 포함된 모델 그룹에 대한 교차 계정 리소스 정책을 제공해야 합니다.

다른 계정에서 생성된 모델을 배포할 수 있으려면 AmazonSageMakerFullAccess 관리형 정책이 있는 역할 등 SageMaker 작업에 액세스할 수 있는 역할이 있어야 합니다. SageMaker 관리형 정책에 대한 자세한 내용은 섹션을 참조하세요AWS Amazon용 관리형 정책 SageMaker.

다음 예시에서는 이러한 세 가지 리소스 모두에 대한 교차 계정 정책을 만들고 해당 정책을 리소스에 적용합니다. 또한 이 예제에서는 이전에 다음 변수를 정의했다고 가정합니다.

  • bucket - 모델 버전이 저장되는 Amazon S3 버킷입니다.

  • kms_key_id - 훈련 출력을 암호화하는 데 사용되는 KMS 키입니다.

  • sm_client – SageMaker Boto3 클라이언트입니다.

  • model_package_group_name - 교차 계정 액세스 권한을 부여하려는 모델 그룹입니다.

  • model_package_group_arn - 교차 계정 액세스 권한을 부여하려는 모델 그룹ARN입니다.

import json # The cross-account id to grant access to cross_account_id = "123456789012" # Create the policy for access to the ECR repository ecr_repository_policy = { 'Version': '2012-10-17', 'Statement': [{ 'Sid': 'AddPerm', 'Effect': 'Allow', 'Principal': { 'AWS': f'arn:aws:iam::{cross_account_id}:root' }, 'Action': ['ecr:*'] }] } # Convert the ECR policy from JSON dict to string ecr_repository_policy = json.dumps(ecr_repository_policy) # Set the new ECR policy ecr = boto3.client('ecr') response = ecr.set_repository_policy( registryId = account, repositoryName = 'decision-trees-sample', policyText = ecr_repository_policy ) # Create a policy for accessing the S3 bucket bucket_policy = { 'Version': '2012-10-17', 'Statement': [{ 'Sid': 'AddPerm', 'Effect': 'Allow', 'Principal': { 'AWS': f'arn:aws:iam::{cross_account_id}:root' }, 'Action': 's3:*', 'Resource': f'arn:aws:s3:::{bucket}/*' }] } # Convert the policy from JSON dict to string bucket_policy = json.dumps(bucket_policy) # Set the new policy s3 = boto3.client('s3') response = s3.put_bucket_policy( Bucket = bucket, Policy = bucket_policy) # Create the KMS grant for encryption in the source account to the # Model Registry account Model Group client = boto3.client('kms') response = client.create_grant( GranteePrincipal=cross_account_id, KeyId=kms_key_id Operations=[ 'Decrypt', 'GenerateDataKey', ], ) # 3. Create a policy for access to the Model Group. model_package_group_policy = { 'Version': '2012-10-17', 'Statement': [{ 'Sid': 'AddPermModelPackageGroup', 'Effect': 'Allow', 'Principal': { 'AWS': f'arn:aws:iam::{cross_account_id}:root' }, 'Action': ['sagemaker:DescribeModelPackageGroup'], 'Resource': f'arn:aws:sagemaker:{region}:{account}:model-package-group/{model_package_group_name}' },{ 'Sid': 'AddPermModelPackageVersion', 'Effect': 'Allow', 'Principal': { 'AWS': f'arn:aws:iam::{cross_account_id}:root' }, 'Action': ["sagemaker:DescribeModelPackage", "sagemaker:ListModelPackages", "sagemaker:UpdateModelPackage", "sagemaker:CreateModel"], 'Resource': f'arn:aws:sagemaker:{region}:{account}:model-package/{model_package_group_name}/*' }] } # Convert the policy from JSON dict to string model_package_group_policy = json.dumps(model_package_group_policy) # Set the policy to the Model Group response = sm_client.put_model_package_group_policy( ModelPackageGroupName = model_package_group_name, ResourcePolicy = model_package_group_policy) print('ModelPackageGroupArn : {}'.format(create_model_package_group_response['ModelPackageGroupArn'])) print("First Versioned ModelPackageArn: " + model_package_arn) print("Second Versioned ModelPackageArn: " + model_package_arn2) print("Success! You are all set to proceed for cross-account deployment.")