기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
호스팅 서비스가 포함된 사용자 지정 추론 코드
이 섹션에서는 Amazon이 호스팅 서비스를 위해 자체 추론 코드를 실행하는 Docker 컨테이너와 SageMaker 상호 작용하는 방법을 설명합니다. 이 정보를 사용하여 추론 코드를 작성하고 도커 이미지를 생성합니다.
주제
가 추론 이미지를 SageMaker 실행하는 방법
컨테이너를 실행 파일로 실행하도록 구성하려면 Dockerfile에서 ENTRYPOINT
지침을 사용합니다. 유의할 사항:
-
모델 추론의 경우 는 컨테이너를 다음과 같이 SageMaker 실행합니다.
docker run
image
serveSageMaker 는 이미지 이름 뒤에
serve
인수를 지정하여 컨테이너의 기본CMD
문을 재정의합니다.serve
인수는 또한 Dockerfile에서CMD
명령을 사용하여 입력한 인수 또한 재정의합니다. -
SageMaker 는 모든 컨테이너가 루트 사용자와 함께 실행될 것으로 예상합니다. 루트 사용자만 사용하도록 컨테이너를 생성하세요. 가 컨테이너를 SageMaker 실행하면 루트 수준 액세스 권한이 없는 사용자가 권한 문제를 일으킬 수 있습니다.
-
exec
지침의ENTRYPOINT
양식을 사용하는 것이 좋습니다.ENTRYPOINT ["executable", "param1", "param2"]
예:
ENTRYPOINT ["python", "k_means_inference.py"]
exec
형식의ENTRYPOINT
명령은,/bin/sh
의 하위로서가 아니라, 실행 파일을 직접 시작합니다. 이를 통해 작업SIGTERM
SIGKILL
과 SageMaker API 같은 신호를 수신할 수 있으며, 이는 필수 사항입니다.예를 들어
CreateEndpoint
API를 사용하여 엔드포인트를 생성할 때 SageMaker는 요청에서 지정하는 엔드포인트 구성에 필요한 ML 컴퓨팅 인스턴스 수를 프로비저닝합니다. 는 해당 인스턴스에서 Docker 컨테이너를 SageMaker 실행합니다.엔드포인트를 지원하는 인스턴스 수를 줄이면(를 호출하여API)
UpdateEndpointWeightsAndCapacities
는 종료되는 인스턴스에서 Docker 컨테이너를 중지하는 명령을 SageMaker 실행합니다. 명령은SIGTERM
신호를 전송한 다음 30초 후에SIGKILL
신호를 전송합니다.엔드포인트를 업데이트하면(를 호출하여API)
UpdateEndpoint
는 다른 ML 컴퓨팅 인스턴스 세트를 SageMaker 시작하고 추론 코드가 포함된 Docker 컨테이너를 실행합니다. 그런 다음 명령을 실행하여 이전 Docker 컨테이너를 중지합니다. Docker 컨테이너를 중지하려면 명령은SIGTERM
신호를 전송한 다음 30초 후에SIGKILL
신호를 전송합니다. -
SageMaker 는
CreateModel
요청에 제공한 컨테이너 정의를 사용하여 다음과 같이 환경 변수와 컨테이너의 DNS 호스트 이름을 설정합니다.-
ContainerDefinition.Environment
string-to-string 맵을 사용하여 환경 변수를 설정합니다. -
를 사용하여 DNS 호스트 이름을 설정합니다
ContainerDefinition.ContainerHostname
.
-
-
(
CreateEndpointConfig
요청에 GPU기반 ML 컴퓨팅 인스턴스를 지정하여) 모델 추론에 GPU 디바이스를 사용할 계획인 경우 컨테이너가nvidia-docker
호환되는지 확인하세요. NVIDIA 드라이버를 이미지와 번들링하지 마세요. 에 대한 자세한 내용은 NVIDIA/nvidia-docker를nvidia-docker
참조하세요. -
tini
초기화기는train
및serve
인수와 혼동되므로 컨테이너의 SageMaker 진입점으로 사용할 수 없습니다.
가 모델 아티팩트를 SageMaker 로드하는 방법
CreateModel
API 요청에서 ModelDataUrl
또는 S3DataSource
파라미터를 사용하여 모델 아티팩트가 저장되는 S3 위치를 식별할 수 있습니다. 는 추론 코드에서 사용할 수 있도록 모델 아티팩트를 S3 위치에서 /opt/ml/model
디렉터리로 SageMaker 복사합니다. 컨테이너에 /opt/ml/model
에 대한 읽기 전용 액세스 권한이 있습니다. 이 디렉터리에는 쓰지 마세요.
ModelDataUrl
은 tar.gz 파일을 가리켜야 합니다. 그렇지 않으면 파일을 다운로드하지 SageMaker 않습니다.
에서 모델을 학습시킨 경우 SageMaker모델 아티팩트는 Amazon S3에 단일 압축 타르 파일로 저장됩니다. 외부에서 모델을 학습시킨 경우 SageMaker컨테이너가 시작되기 전에 이 단일 압축 tar 파일을 생성하고 S3 위치에 저장해야 합니다. 이 tar 파일은 /opt/ml/model 디렉터리에 SageMaker 압축 해제됩니다.
대형 모델을 배포하는 경우 압축되지 않은 모델 배포하기을 수행하는 것을 권장합니다.
컨테이너의 추론 요청 응답 방법
추론을 얻기 위해 클라이언트 애플리케이션은 POST 요청을 엔드포인트에 SageMaker 전송합니다. 는 요청을 컨테이너에 SageMaker 전달하고 컨테이너의 추론 결과를 클라이언트에 반환합니다.
컨테이너가 수신할 추론 요청에 대한 자세한 내용은 Amazon SageMaker API 참조의 다음 작업을 참조하세요.
추론 컨테이너 요구 사항
추론 요청에 응답하려면 컨테이너가 다음 요구 사항을 충족해야 합니다.
-
SageMaker 는 에서 지원하는
POST
헤더를 제외한 모든 헤더를 스트립InvokeEndpoint
합니다. 헤더를 추가할 SageMaker 수 있습니다. 추론 컨테이너는 이러한 추가 헤더를 안전하게 무시할 수 있어야 합니다. -
추론 요청을 수신하려면 컨테이너에 포트 8080에서 수신하는 웹 서버가 있어야 하고,
/invocations
및/ping
엔드포인트에 대한POST
요청을 수락해야 합니다. -
고객의 모델 컨테이너는 250ms 이내에 소켓 연결 요청을 수락해야 합니다.
-
고객의 모델 컨테이너는 60초 안에 요청에 응답해야 합니다. 모델 자체가
/invocations
에 응답하는 데 최대 처리 시간이 60초까지 걸릴 수 있기 때문입니다. 모델에 50~60초의 처리 시간이 걸리는 경우 SDK 소켓 제한 시간을 70초로 설정해야 합니다.
예 호출 함수
다음 예제에서는 컨테이너의 코드가 추론 요청을 처리하는 방법을 보여 줍니다. 이 예제에서는 InvokeEndpoint 작업을 사용하여 클라이언트 애플리케이션이 보내는 요청을 처리합니다.
예 스트리밍 요청을 위한 호출 함수
다음 예제에서는 추론 컨테이너의 코드가 스트리밍 추론 요청을 처리하는 방법을 보여 줍니다. 이 예제에서는 InvokeEndpointWithResponseStream 작업을 사용하여 클라이언트 애플리케이션이 보내는 요청을 처리합니다.
컨테이너가 스트리밍 추론 요청을 처리할 때, 컨테이너는 모델의 추론을 모델이 생성함에 따라 점진적으로 일련의 부분으로 반환합니다. 클라이언트 애플리케이션은 응답이 제공되는 즉시 응답을 받기 시작합니다. 모델이 전체 응답을 생성할 때까지 기다릴 필요가 없습니다. 사용자는 스트리밍을 구현하여 챗봇, 가상 어시스턴트, 음악 생성기와 같은 빠른 대화형 환경을 지원할 수 있습니다.
컨테이너의 상태 확인(핑) 요청 응답 방법
SageMaker 는 다음과 같은 상황에서 새 추론 컨테이너를 시작합니다.
-
CreateEndpoint
,UpdateEndpoint
및UpdateEndpointWeightsAndCapacities
API 호출에 응답 -
보안 패치
-
비정상 인스턴스 대체
컨테이너 시작 직후 는 /ping
엔드포인트에 정기 GET 요청을 보내기 SageMaker 시작합니다.
컨테이너에서 가장 간단한 요구 사항은 HTTP 200 상태 코드와 빈 본문으로 응답하는 것입니다. 이는 컨테이너가 /invocations
엔드포인트에서 추론 요청을 수락할 준비가 SageMaker 되었음을 나타냅니다.
컨테이너가 시작 후 8분 동안 200초로 일관되게 응답하여 상태 확인을 통과하지 못하면 새 인스턴스 시작이 실패합니다. 이로 인해 가 실패CreateEndpoint
하여 엔드포인트가 실패 상태로 유지됩니다. 에서 요청한 업데이트UpdateEndpoint
가 완료되지 않고, 보안 패치가 적용되지 않으며, 비정상 인스턴스는 대체되지 않습니다.
최소 기준이 컨테이너가 정적 200을 반환하는 반면 컨테이너 개발자는 이 기능을 사용하여 더욱 자세한 확인을 수행할 수 있습니다. /ping
시도의 요청 제한 시간은 2초입니다.