실시간 추론 컨테이너에 대한 프라이빗 Docker 레지스트리 사용 - 아마존 SageMaker

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

실시간 추론 컨테이너에 대한 프라이빗 Docker 레지스트리 사용

Amazon SageMaker 호스팅을 사용하면 Amazon ECR에 저장된 이미지를 사용하여 기본적으로 실시간 추론을 위한 컨테이너를 구축할 수 있습니다. 사용자는 프라이빗 Docker 레지스트리에 있는 이미지를 통해 실시간 추론용 컨테이너를 선택적으로 빌드할 수 있습니다. 프라이빗 레지스트리는 사용자 계정의 Amazon VPC에서 액세스할 수 있어야 합니다. 프라이빗 Docker 레지스트리에 저장된 이미지를 기준으로 생성하는 모델은 프라이빗 Docker 레지스트리에 액세스할 수 있는 동일한 VPC에 연결되도록 구성해야 합니다. 모델을 VPC에 연결하는 방법에 대한 자세한 내용은 SageMaker 호스팅된 엔드포인트에 Amazon VPC의 리소스에 대한 액세스 권한 부여을(를) 참조하세요.

Docker 레지스트리는 알려진 퍼블릭 인증 기관(CA)의 TLS 인증서로 보호해야 합니다.

참고

프라이빗 Docker 레지스트리는 모델의 VPC 구성에 지정한 보안 그룹으로부터의 인바운드 트래픽을 허용해야 SageMaker 호스팅이 레지스트리에서 모델 이미지를 가져올 수 있습니다.

SageMaker VPC 내부에 개방형 인터넷 경로가 있는 DockerHub 경우 모델 이미지를 가져올 수 있습니다.

Amazon Elastic 컨테이너 레지스트리를 제외한 프라이빗 Docker 레지스트리에 이미지를 저장하세요.

프라이빗 Docker 레지스트리를 사용하여 SageMaker 실시간 추론을 위해 이미지를 저장하려면 Amazon VPC에서 액세스할 수 있는 프라이빗 레지스트리를 생성하십시오. Docker 레지스트리 생성 방법에 대한 자세한 내용은 Docker 설명서의 레지스트리 서버 배포를 참조하세요. Docker 레지스트리는 다음 사항을 준수해야 합니다.

  • 이 레지스트리는 Docker 레지스트리 HTTP API V2 레지스트리여야 합니다.

  • Docker 레지스트리는 모델 생성 시 지정된 VpcConfig 파라미터에 지정한 것과 동일한 VPC에서 액세스할 수 있어야 합니다.

실시간 추론을 위해 프라이빗 Docker 레지스트리의 이미지를 사용하세요.

모델을 생성하여 SageMaker 호스팅에 배포할 때 프라이빗 Docker 레지스트리의 이미지를 사용하여 추론 컨테이너를 구축하도록 지정할 수 있습니다. 이를 create_model 함수 호출에 전달하는 PrimaryContainer 파라미터의 ImageConfig 객체에 지정하세요.

프라이빗 Docker 레지스트리에 저장된 이미지를 추론 컨테이너에 사용하려면
  1. 이미지 구성 객체를 생성하고 RepositoryAccessMode 필드의 값을 Vpc(으)로 지정하세요.

    image_config = { 'RepositoryAccessMode': 'Vpc' }
  2. 프라이빗 Docker 레지스트리에 인증이 필요한 경우 이미지 구성 객체에 RepositoryAuthConfig 객체를 추가하세요. RepositoryAuthConfig객체 RepositoryCredentialsProviderArn 필드에 프라이빗 Docker 레지스트리에 인증할 SageMaker 수 있는 자격 증명을 제공하는 AWS Lambda 함수의 Amazon 리소스 이름 (ARN) 을 지정합니다. 인증을 제공하는 Lambda 함수를 생성하는 방법에 대한 자세한 내용은 프라이빗 SageMaker Docker 레지스트리 인증 허용을(를) 참조하세요.

    image_config = { 'RepositoryAccessMode': 'Vpc', 'RepositoryAuthConfig': { 'RepositoryCredentialsProviderArn': 'arn:aws:lambda:Region:Acct:function:FunctionName' } }
  3. 이전 단계에서 생성한 이미지 구성 객체를 사용하여 create_model에 전달할 기본 컨테이너 객체를 생성하세요.

    이미지를 다이제스트 양식으로 제공하세요. :latest태그를 사용하여 이미지를 제공할 경우 의도한 것보다 최신 버전의 SageMaker 이미지를 가져올 위험이 있습니다. 다이제스트 양식을 사용하면 의도한 이미지 버전을 SageMaker 가져올 수 있습니다.

    primary_container = { 'ContainerHostname': 'ModelContainer', 'Image': 'myteam.myorg.com/docker-local/my-inference-image:<IMAGE-TAG>', 'ImageConfig': image_config }
  4. create_model에 전달할 모델 이름과 실행 역할을 지정하세요.

    model_name = 'vpc-model' execution_role_arn = 'arn:aws:iam::123456789012:role/SageMakerExecutionRole'
  5. 모델의 VPC 구성에 사용할 보안 그룹과 서브넷을 하나 이상 지정하세요. 프라이빗 Docker 레지스트리는 지정된 보안 그룹의 인바운드 트래픽을 허용해야 합니다. 지정된 서브넷은 프라이빗 Docker 레지스트리와 동일한 VPC에 있어야 합니다.

    vpc_config = { 'SecurityGroupIds': ['sg-0123456789abcdef0'], 'Subnets': ['subnet-0123456789abcdef0','subnet-0123456789abcdef1'] }
  6. SageMaker Boto3 클라이언트를 구입하세요.

    import boto3 sm = boto3.client('sagemaker')
  7. PrimaryContainerVpcConfig 파라미터에 대해 이전 단계에서 지정한 값을 이용해 create_model을(를) 호출하여 모델을 생성하세요.

    try: resp = sm.create_model( ModelName=model_name, PrimaryContainer=primary_container, ExecutionRoleArn=execution_role_arn, VpcConfig=vpc_config, ) except Exception as e: print(f'error calling CreateModel operation: {e}') else: print(resp)
  8. 마지막으로, 이전 단계에서 생성한 모델을 이용하여 create_endpoint_configcreate_endpoint를 호출하여 호스팅 엔드포인트를 생성하세요.

    endpoint_config_name = 'my-endpoint-config' sm.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { 'VariantName': 'MyVariant', 'ModelName': model_name, 'InitialInstanceCount': 1, 'InstanceType': 'ml.t2.medium' }, ], ) endpoint_name = 'my-endpoint' sm.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name, ) sm.describe_endpoint(EndpointName=endpoint_name)

프라이빗 SageMaker Docker 레지스트리 인증 허용

인증이 필요한 프라이빗 Docker 레지스트리에서 추론 이미지를 가져오려면 자격 증명을 제공하는 AWS Lambda 함수를 생성하고 create_model을 호출할 때 Lambda 함수의 Amazon 리소스 이름 (ARN) 을 제공하십시오. SageMaker 실행 create_model 시 Docker 레지스트리 인증을 위한 자격 증명을 가져오도록 지정한 Lambda 함수를 호출합니다.

Lambda 함수 생성

다음 형식으로 응답을 반환하는 AWS Lambda 함수를 생성하십시오.

def handler(event, context): response = { "Credentials": {"Username": "username", "Password": "password"} } return response

프라이빗 Docker 레지스트리에 대한 인증을 설정하는 방법에 따라, Lambda 함수가 반환하는 자격 증명의 의미가 다음 중 하나가 될 수 있습니다.

  • 기본 인증을 사용하도록 프라이빗 Docker 레지스트리를 설정할 경우 레지스트리 인증에 필요한 로그인 자격 증명을 제공하세요.

  • 베어러 토큰 인증을 사용하도록 프라이빗 Docker 레지스트리를 설정하면 로그인 자격 증명이 인증 서버로 전송됩니다. 이 인증 서버는 베어러 토큰을 반환하는데, 이 토큰은 프라이빗 Docker 레지스트리 인증에 사용할 수 있습니다.

Lambda에 대한 실행 역할 권한 부여

호출에 사용하는 실행 역할에는 AWS Lambda 함수를 호출할 수 있는 권한이 create_model 있어야 합니다. 실행 역할의 권한 정책에 다음 사항을 추가하세요.

{ "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:*:*:function:*myLambdaFunction*" ] }

Lambda 함수의 myLambdaFunction이름은 어디에 있습니까? 역할 권한 정책을 편집하는 방법에 대한 자세한 내용은 AWS Identity and Access Management 사용 설명서역할 권한 정책(콘솔) 수정을 참조하세요.

참고

AmazonSageMakerFullAccess관리형 정책이 연결된 실행 역할에는 이름에 가 있는 Lambda 함수를 호출할 수 SageMaker있는 권한이 있습니다.

Lambda용 인터페이스 VPC 엔드포인트 생성

Amazon VPC가 인터넷을 통해 트래픽을 전송하지 않고도 AWS Lambda 함수와 통신할 수 있도록 인터페이스 엔드포인트를 생성하세요. 이를 수행하는 방법에 대한 자세한 내용은 AWS Lambda 개발자 안내서Lambda용 인터페이스 VPC 엔드포인트 구성을 참조하세요.

SageMaker 호스팅은 VPC를 통해 Lambda 함수를 lambda.region.amazonaws.com 호출하라는 요청을 보냅니다. 인터페이스 엔드포인트 생성 시 프라이빗 DNS 이름을 선택하면 Amazon Route 53이 Lambda 인터페이스 엔드포인트로 호출을 라우팅합니다. 다른 DNS 공급자를 사용할 경우에는 Lambda 인터페이스 엔드포인트에 lambda.region.amazonaws.com을(를) 매핑해야 합니다.