Amazon SageMaker AI 서버리스 추론 엔드포인트와 관련된 문제를 해결하려면 어떻게 해야 합니까?
Amazon SageMaker AI 서버리스 추론 엔드포인트를 워크로드에 사용할 때 오류가 발생합니다.
해결 방법
수신한 오류 메시지를 기반으로 문제를 해결하십시오.
서버리스 추론 엔드포인트에 비해 이미지 컨테이너 크기가 너무 큼
서버리스 추론 엔드포인트는 실시간 엔드포인트와 마찬가지로 Bring Your Own Container(BYOC)를 지원합니다. AWS Lambda는 이러한 특정 유형의 추론을 지원하므로 이 특정 유형의 추론에 대한 컨테이너 크기는 10GB 미만이어야 합니다.
컨테이너가 10GB 한도를 초과하면 다음과 비슷한 오류 메시지가 표시됩니다.
"Image size 11271073144 is greater than the supported size 10737418240"
문제를 해결하려면 다음 작업 중 하나를 수행하십시오.
- 사용하지 않는 패키지를 제거하고 Docker 파일의 계층 수를 최소화하여 이미지 크기를 줄이고 Docker 컨테이너를 최적화합니다.
- 더 작은 기본 이미지를 사용하고 새 엔드포인트 구성을 생성합니다. 실시간 엔드포인트를 호스팅하기 위해 원하는 인스턴스 유형과 기타 관련 파라미터를 지정합니다.
- 서버리스 엔드포인트에서 실시간 엔드포인트로 전환합니다. 새 엔드포인트 구성을 생성하여 실시간 엔드포인트를 호스팅할 인스턴스 유형 및 기타 파라미터를 지정합니다. 그런 다음, 기존 엔드포인트를 새 구성으로 업데이트합니다.
- 새 엔드포인트 구성을 생성하려면 다음 템플릿을 사용합니다.
참고: YourVariantName을 인스턴스의 변형 이름으로 바꾸고 YourModelName을 모델 이름으로 바꿉니다. 1을 초기 인스턴스 개수로 바꿉니다. ml.m5.xlarge를 해당 인스턴스 유형으로 바꿉니다. 1.0을 인스턴스의 초기 변형 가중치로 바꿉니다.import boto3 client = boto3.client('sagemaker', region_name = 'us-east-1') endpoint_config_name = 'new-endpoint-config' production_variants = [ { 'VariantName': 'AllTraffic', 'ModelName': 'ModelName', 'InitialInstanceCount': 1, 'InstanceType': 'ml.m5.xlarge', 'InitialVariantWeight': 1.0 } ] create_endpoint_config_response = client.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=production_variants ) - 새 구성으로 새 엔드포인트를 생성하여 서버리스에서 실시간 엔드포인트로 전환합니다. 또는 기존 서버리스 엔드포인트를 새 구성으로 업데이트합니다.
새 엔드포인트 생성 예:
기존 엔드포인트 업데이트 예:endpoint_name = 'new-endpoint' create_endpoint_response = client.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name )endpoint_name = 'my-old-endpoint' update_endpoint_response = client.update_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name )
컨테이너 크기를 확인하려면 Amazon Elastic Container Registry(ECR)에서 이미지 URI를 검색합니다. 그런 다음, 아래 Docker 명령을 실행하여 Docker 이미지 세부 정보를 가져옵니다.
docker images
서버리스 추론 엔드포인트의 메모리 또는 디스크 공간 부족
SageMaker AI 서버리스 엔드포인트의 최대 메모리 할당량은 6GB이고 임시 디스크 스토리지 용량은 5GB입니다.
서버리스 엔드포인트의 메모리가 제한을 초과하면 다음과 비슷한 오류 메시지가 표시됩니다.
"UnexpectedStatusException: Error hosting endpoint: Failed. Reason: Ping failed due to insufficient memory."
문제를 해결하려면 다음 옵션 중에서 선택하십시오.
- MemorySizeInMB 파라미터를 조정합니다.
- 워커 구성을 최적화합니다.
- 엔드포인트를 실시간 엔드포인트로 배포하고 필요한 인스턴스 세부 정보를 제공합니다.
MemorySizeInMB 파라미터 조정
- MemorySizeInMB를 늘려 새로운 서버리스 엔드포인트 구성을 생성합니다.
예:
참고: YourVariantName을 변형 이름으로 바꾸고 YourModelName을 모델 이름으로 바꾸십시오. NewMemorySize를 메모리 크기 제한으로 바꾸십시오. 사용할 수 있는 최대값은 6GB입니다.import boto3 client = boto3.client('sagemaker', region_name='us-east-1') endpoint_config_name = "new-endpoint-config" endpoint_config_response = client.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { "VariantName": YourVariantName, "ModelName": YourModelName, "ServerlessConfig": { "MemorySizeInMB": NewMemorySize, "MaxConcurrency": 1, }, }, ], ) - 서버리스 엔드포인트를 새 구성으로 업데이트합니다.
예:endpoint_name = 'my-old-endpoint' update_endpoint_response = client.update_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name )
워커 구성 최적화
메모리 오류를 피하려면 컨테이너에서 사용 가능한 모든 CPU 리소스를 사용하는 워커를 하나만 생성합니다. 이 접근 방식은 일부 SageMaker AI 컨테이너가 각 vCPU에 대한 워커를 생성할 수 있는 실시간 엔드포인트와 다릅니다.
SageMaker AI 추론 툴킷을 사용하여 사전 빌드된 컨테이너의 경우, SAGEMAKER_MODEL_SERVER_WORKERS를 1로 설정하여 추론을 위한 모델 생성을 수정하십시오.
예:
import boto3 client = boto3.client('sagemaker', region_name='us-east-1') response = client.create_model( ModelName='YourModelName', Containers=[ { 'Image': "YourImage" 'Mode': 'SingleModel', 'ModelDataUrl': "YourModelDataURL", 'Environment': { 'SAGEMAKER_CONTAINER_LOG_LEVEL': '20', 'SAGEMAKER_MODEL_SERVER_WORKERS': '1' } } ], ExecutionRoleArn=role )
참고: YourModelName을 모델 이름으로 바꾸고, YourImage를 이미지 이름으로 바꾸고, YourModelDataUrl을 모델 데이터 URL로 바꾸십시오.
엔드포인트를 실시간 엔드포인트로 배포하고 필요한 인스턴스 세부 정보 제공
엔드포인트를 실시간 엔드포인트로 배포하는 방법에 대한 자세한 내용은 이 문서의 "서버리스 엔드포인트에서 실시간 엔드포인트로 전환"을 참조하십시오.
디스크 공간 부족
서버리스 엔드포인트에 사용 가능한 디스크 공간이 없는 경우 다음과 같은 오류 메시지가 표시될 수 있습니다.
"OSError: [Errno 28] No space left on device"
이 문제를 해결하려면 다음 작업을 수행하십시오.
- 압축된 모델 크기가 압축을 풀 때 사용 가능한 디스크 공간을 초과하지 않는지 확인합니다. 파일은 압축된 크기의 3배까지 압축 해제됩니다.
- 더 작은 모델 아티팩트를 사용한 다음, .tar 아카이브의 모든 파일이 배포에 필수적인지 확인합니다.
- 서버리스 추론이 가능하지 않은 경우 실시간 엔드포인트에 배포하여 인스턴스 사양을 사용자 지정합니다.
서버리스 추론 엔드포인트의 콜드 스타트 시나리오
리소스 프로비저닝의 온디맨드 특성과 SageMaker AI 서버리스 추론 제한 사항 때문에 SageMaker AI 서버리스 추론 엔드포인트를 사전 워밍하는 확실한 방법은 없습니다. 자세한 내용은 콜드 스타트 최소화를 참조하십시오.
할당된 ProvisionedConcurrency에 대해 SageMaker AI는 엔드포인트를 웜 상태로 유지하여 밀리초 내에 응답합니다. 콜드 스타트 지연 문제를 최소화하려면 ProvisionedConcurrency로 엔드포인트를 업데이트하십시오. 자세한 내용은 Amazon CloudWatch로 Amazon SageMaker AI를 모니터링하기 위한 지표를 참조하십시오.
다음 단계를 완료하십시오.
- ProvisionedConcurrency가 MaxConcurrency보다 작거나 같은 새 서버리스 엔드포인트 구성을 생성합니다.
구성 예시:
참고: YourVariantName을 변형 이름으로 바꾸고 YourModelName을 모델 이름으로 바꾸십시오. NewMemorySize를 메모리 크기 제한으로 바꾸십시오. 사용할 수 있는 최대값은 6GB입니다.import boto3 client = boto3.client('sagemaker', region_name='us-east-1') endpoint_config_name = "new-endpoint-config" endpoint_config_response = client.create_endpoint_config( EndpointConfigName=endpoint_config_name, ProductionVariants=[ { "VariantName": YourVariantName, "ModelName": YourModelName, "ServerlessConfig": { "MemorySizeInMB": NewMemorySize, "MaxConcurrency": 1, "ProvisionedConcurrency": 1, }, }, ], ) - 엔드포인트를 새 구성으로 업데이트합니다.
예:endpoint_name = 'my-serverless-endpoint' update_endpoint_response = client.update_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name )
참고: SageMaker AI 서버리스 추론 벤치마킹 툴킷을 사용하여 서버리스 엔드포인트에 가장 효율적인 배포 구성을 결정하는 것이 좋습니다.
관련 정보
- 언어
- 한국어

관련 콘텐츠
질문됨 일 년 전