직접 호출이 가능한 다중 컨테이너 엔드포인트 사용 - 아마존 SageMaker

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

직접 호출이 가능한 다중 컨테이너 엔드포인트 사용

SageMaker 다중 컨테이너 엔드포인트를 통해 고객은 여러 컨테이너를 배포하여 엔드포인트에 다양한 모델을 배포할 수 있습니다. SageMaker 단일 엔드포인트에서 최대 15개의 서로 다른 추론 컨테이너를 호스팅할 수 있습니다. 직접 호출을 사용하면 다중 컨테이너 엔드포인트에서 호스팅되는 특정 추론 컨테이너에 요청을 보낼 수 있습니다.

직접 호출을 통해 다중 컨테이너 엔드포인트를 호출하세요.

직접 호출로 다중 컨테이너 엔드포인트를 호출하려면 다른 엔드포인트를 호출하는 것처럼 invoke_endpoint를 호출하고 TargetContainerHostname 파라미터를 사용하여 호출할 컨테이너를 지정합니다.

다음 예제는 다중 컨테이너 엔드포인트의 secondContainer를 직접 호출하여 예측을 가져옵니다.

import boto3 runtime_sm_client = boto3.Session().client('sagemaker-runtime') response = runtime_sm_client.invoke_endpoint( EndpointName ='my-endpoint', ContentType = 'text/csv', TargetContainerHostname='secondContainer', Body = body)

다중 컨테이너 엔드포인트에 대한 직접 호출 요청이 각각 있는 경우 TargetContainerHostname가 있는 컨테이너만 호출 요청을 처리합니다. 다음 중 하나를 수행하면 확인 오류가 발생합니다.

  • 엔드포인트에 존재하지 않는 TargetContainerHostname를 지정하세요

  • 직접 호출하도록 구성된 엔드포인트에 대한 요청에는 TargetContainerHostname 값을 지정하지 마십시오.

  • 직접 호출이 구성되지 않은 엔드포인트에 대한 요청에는 TargetContainerHostname 값을 지정하세요

직접 호출을 통한 다중 컨테이너 엔드포인트의 보안

직접 호출이 가능한 다중 컨테이너 엔드포인트의 경우 메모리와 스토리지 볼륨을 공유하여 단일 인스턴스에 여러 컨테이너를 호스팅할 수 있습니다. 보안 컨테이너를 사용하고, 요청을 대상 컨테이너에 올바르게 매핑하고, 사용자에게 대상 컨테이너에 대한 올바른 액세스 권한을 제공하는 것은 귀하의 책임입니다. SageMaker는 IAM 역할을 통해 IAM ID 기반 정책을 제공하여 해당 역할에 대한 리소스 액세스를 허용할지 거부할지 여부와 조건을 지정하는 데 사용합니다. IAM 역할에 대한 자세한 내용은 AWS Identity and Access Management 사용 설명서IAM 역할 단원을 참조하세요. 자격 증명 기반 정책에 대한 자세한 내용은 자격 증명 기반 정책 및 리소스 기반 정책을 참조하세요.

기본적으로 직접 호출이 가능한 다중 컨테이너 엔드포인트에 대한 InvokeEndpoint 권한을 가진 IAM 주체는 invoke_endpoint 호출 시 지정한 엔드포인트 이름을 사용하여 엔드포인트 내의 모든 컨테이너를 호출할 수 있습니다. 다중 컨테이너 엔드포인트 내의 제한된 컨테이너 세트에 invoke_endpoint 대한 액세스를 제한해야 하는 경우 IAM 조건 키를 사용하세요 sagemaker:TargetContainerHostname 다음 정책은 엔드포인트 내의 특정 컨테이너에 대한 호출을 제한하는 방법을 보여줍니다.

다음 정책은 TargetContainerHostname 필드 값이 지정된 정규식 중 하나와 일치하는 경우에만 invoke_endpoint 요청을 허용합니다.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sagemaker:InvokeEndpoint" ], "Effect": "Allow", "Resource": "arn:aws:sagemaker:region:account-id:endpoint/endpoint_name", "Condition": { "StringLike": { "sagemaker:TargetContainerHostname": ["customIps*", "common*"] } } } ] }

다음 정책은 TargetContainerHostname 필드 값이 Deny 문의 지정된 정규 표현식 중 하나와 일치하는 경우 invoke_endpoint 요청을 거부합니다.

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "sagemaker:InvokeEndpoint" ], "Effect": "Allow", "Resource": "arn:aws:sagemaker:region:account-id:endpoint/endpoint_name", "Condition": { "StringLike": { "sagemaker:TargetContainerHostname": ["*"] } } }, { "Action": [ "sagemaker:InvokeEndpoint" ], "Effect": "Deny", "Resource": "arn:aws:sagemaker:region:account-id:endpoint/endpoint_name", "Condition": { "StringLike": { "sagemaker:TargetContainerHostname": ["special*"] } } } ] }

SageMaker 조건 키에 대한 자세한 내용은 사용 설명서의 조건 키를 참조하십시오 SageMaker.AWS Identity and Access Management

직접 호출을 사용하는 다중 컨테이너 엔드포인트에 대한 지표

에 나열된 엔드포인트 지표 외에도 컨테이너별 SageMaker 지표도 제공합니다. SageMaker 아마존과 함께 아마존을 모니터링하세요 CloudWatch

직접 호출을 사용하는 다중 컨테이너 엔드포인트에 대한 컨테이너별 지표는 두 개의 네임스페이스, 즉 CloudWatch 및 으로 분류됩니다. AWS/SageMaker aws/sagemaker/Endpoints aws/sagemaker/Endpoints 네임스페이스에는 호출 관련 지표가 포함되고 AWS/SageMaker 네임스페이스에는 메모리 및 CPU 사용률 지표가 포함됩니다.

다음 표에는 직접 호출이 가능한 다중 컨테이너 엔드포인트에 대한 컨테이너별 지표가 나열되어 있습니다. 모든 지표는 [EndpointName, VariantName, ContainerName] 차원을 사용합니다. 이 차원은 특정 엔드포인트에서 특정 변형에 대해 특정 컨테이너에 해당하는 지표를 필터링합니다. 이러한 지표는 추론 파이프라인용 지표과 동일한 지표 이름을 공유하지만 컨테이너별 수준 [EndpointName, VariantName, ContainerName]에서 공유합니다.

지표 이름 설명 측정기준 NameSpace
Invocations 엔드포인트 내 컨테이너로 전송된 InvokeEndpoint 요청 수입니다. 해당 컨테이너에 전송된 총 요청 수를 가져오려면 Sum 통계를 사용합니다. 단위: 없음 유효한 통계: Sum, Sample Count EndpointName, VariantName, ContainerName AWS/SageMaker
Invocation4XX Errors 모델이 특정 컨테이너에 대해 4xx HTTP 응답 코드를 반환하는 InvokeEndpoint 요청의 수. 각 응답에 대해 a를 전송합니다. 4xx SageMaker 1 단위: 없음 유효한 통계: Average, Sum EndpointName, VariantName, ContainerName AWS/SageMaker
Invocation5XX Errors 모델이 특정 컨테이너에 대해 5xx HTTP 응답 코드를 반환하는 InvokeEndpoint 요청의 수. 각 5xx 응답에 대해 a를 SageMaker 보냅니다1. 단위: 없음 유효한 통계: Average, Sum EndpointName, VariantName, ContainerName AWS/SageMaker
ContainerLatency 에서 본 결과 대상 컨테이너가 응답하는 데 걸린 시간입니다 SageMaker. ContainerLatency요청을 보내고, 모델 컨테이너에서 응답을 가져오고, 컨테이너에서 추론을 완료하는 데 걸린 시간을 포함합니다. 단위: 마이크로초 유효한 통계: Average, Sum, Min, Max, Sample Count EndpointName, VariantName, ContainerName AWS/SageMaker
OverheadLatency 오버헤드로 인해 클라이언트 요청에 응답하는 데 걸리는 시간에 추가된 시간입니다. SageMaker OverheadLatency요청을 SageMaker 받은 시간부터 클라이언트에게 응답을 반환할 때까지의 시간을 측정한 값입니다. ModelLatency 오버헤드 지연 시간은 특히 요청 및 응답 페이로드 크기, 요청 빈도와 요청 인증 또는 권한 부여 등과 같은 요인에 따라 달라질 수 있습니다. 단위: 마이크로초 유효한 통계: Average, Sum, Min, Max, `샘플 개수` EndpointName, VariantName, ContainerName AWS/SageMaker
CPUUtilization 인스턴스에서 실행 중인 각 컨테이너에서 사용하는 CPU 유닛의 비율(%)입니다. 값은 0%~100% 사이가 될 수 있고, CPU의 수를 곱합니다. 예를 들어 CPU가 4개인 경우 CPUUtilization는 0%~400%가 될 수 있습니다. 직접 호출이 있는 엔드포인트의 경우 CPU 사용률 지표의 수는 해당 엔드포인트의 컨테이너 수와 같습니다. 단위: 백분율 EndpointName, VariantName, ContainerName aws/sagemaker/Endpoints
MemoryUtilizaton 인스턴스에서 실행 중인 각 컨테이너에서 사용하는 메모리의 비율(%)입니다. 해당 값 범위는 0% ~ 100%입니다. CPU 사용률과 마찬가지로 직접 호출이 있는 엔드포인트에서 MemoryUtilization 메트릭 수는 해당 엔드포인트의 컨테이너 수와 같습니다. 단위: 백분율 EndpointName, VariantName, ContainerName aws/sagemaker/Endpoints

위 표의 모든 지표는 직접 호출을 사용하는 다중 컨테이너 엔드포인트에만 해당됩니다. 이러한 특수 컨테이너별 지표 외에도 테이블의 모든 지표에 대해 ContainerLatency를 예상하는 차원 [EndpointName, VariantName]을 포함하는 변형 수준의 지표도 있습니다.

다중 컨테이너 엔드포인트 자동 크기 조정

InvocationsPerInstance 지표를 사용하여 다중 컨테이너 엔드포인트의 자동 크기 조정을 구성하려는 경우 각 컨테이너의 모델이 각 추론 요청에서 유사한 CPU 사용률과 지연 시간을 나타내는 것이 좋습니다. 다중 컨테이너 엔드포인트에 대한 트래픽이 낮은 CPU 사용률 모델에서 높은 CPU 사용률 모델로 전환되지만 전체 호출 볼륨이 동일하게 유지되면 엔드포인트가 확장되지 않고 높은 CPU 사용률 모델에 대한 모든 요청을 처리할 인스턴스가 충분하지 않을 수 있으므로 이 방법을 사용하는 것이 좋습니다. 엔드포인트 자동 크기 조정에 대한 자세한 내용은 Amazon SageMaker 모델 자동 크기 조정 단원을 참조하세요.

다중 컨테이너 엔드포인트 문제 해결

다음 단원은 다중 컨테이너 엔드포인트의 오류를 해결하는 데 도움이 될 수 있습니다.

핑 상태 확인 오류

컨테이너가 여러 개 있으면 엔드포인트 생성 시 엔드포인트 메모리와 CPU에 더 많은 압력이 가해집니다. 특히, 사용률 압력이 컨테이너 수에 비례하기 때문에 MemoryUtilizationCPUUtilization 지표가 단일 컨테이너 엔드포인트보다 높습니다. 따라서 모든 모델을 로드하기에 충분한 메모리와 CPU를 갖춘 인스턴스 유형을 선택하여 인스턴스에 충분한 메모리가 있는지 확인하는 것이 좋습니다(추론 파이프라인 배포에도 동일한 지침이 적용됨). 그렇지 않으면 XXX did not pass the ping health check과 같은 오류가 발생하여 엔드포인트 생성이 실패할 수 있습니다.

=true Docker 레이블 누락 accept-bind-to-port

다중 컨테이너 엔드포인트의 컨테이너는 포트 8080 대신 SAGEMAKER_BIND_TO_PORT 환경 변수에 지정된 포트에서 수신 대기합니다. 컨테이너가 다중 컨테이너 엔드포인트에서 실행되는 경우 이 환경 변수를 컨테이너에 SageMaker 자동으로 제공합니다. 이 환경 변수가 없으면 컨테이너의 수신 포트는 기본적으로 8080 포트 사용으로 설정됩니다. 다음 명령을 사용하면 컨테이너가 이 요구 사항을 준수함을 나타내는 레이블을 Dockerfile에 추가할 수 있습니다.

LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true

그렇지 않으면 Your Ecr Image XXX does not contain required com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true Docker label(s).과 같은 오류 메시지가 표시됩니다.

컨테이너가 두 번째 포트에서 수신해야 하는 경우에는 SAGEMAKER_SAFE_PORT_RANGE 환경 변수가 지정한 범위 내에서 포트를 선택합니다. 값을 XXXX - YYYY 형식의 포함 범위로 지정합니다. 여기서 XXXX와 YYYY는 여러 자리 정수입니다. SageMaker 다중 컨테이너 엔드포인트에서 컨테이너를 실행할 때 이 값을 자동으로 제공합니다.