배치 작업에서 자체 추론 코드 사용 - 아마존 SageMaker

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

배치 작업에서 자체 추론 코드 사용

이 섹션에서는 Amazon이 배치 변환을 위해 자체 추론 코드를 실행하는 Docker 컨테이너와 SageMaker 상호 작용하는 방식을 설명합니다. 이 정보를 사용하여 추론 코드를 작성하고 Docker 이미지를 생성합니다.

추론 이미지 SageMaker 실행 방법

컨테이너를 실행 파일로 실행하도록 구성하려면 Dockerfile에서 ENTRYPOINT 지침을 사용합니다. 유념할 사항:

  • 일괄 변환의 경우 사용자 대신 모델을 SageMaker 호출합니다. SageMaker 컨테이너를 다음과 같이 실행합니다.

    docker run image serve

    일괄 변환에 대한 입력은 작은 파일로 분할하여 병렬로 처리할 수 있는 형식이어야 합니다. 이러한 형식에는 CSV, JSON, JSON Lines, TFRecord, RecordIO가 포함됩니다.

    SageMaker 이미지 이름 뒤에 serve 인수를 지정하여 컨테이너의 기본 CMD 명령문을 재정의합니다. serve 인수는 또한 Dockerfile에서 CMD 명령을 사용하여 입력한 인수 또한 재정의합니다.

     

  • exec 지침의 ENTRYPOINT 양식을 사용하는 것이 좋습니다.

    ENTRYPOINT ["executable", "param1", "param2"]

    예:

    ENTRYPOINT ["python", "k_means_inference.py"]

     

  • SageMaker 컨테이너 내부 CreateModelCreateTransformJob컨테이너에 지정된 환경 변수를 설정합니다. 또한 다음 환경 변수가 채워집니다.

    • SAGEMAKER_BATCH는 배치 변환에서 컨테이너가 실행될 때 true로 설정됩니다.

    • SAGEMAKER_MAX_PAYLOAD_IN_MB는 HTTP를 통해 컨테이너로 전송될 크기가 가장 큰 페이로드로 설정됩니다.

    • SAGEMAKER_BATCH_STRATEGY는 컨테이너가 호출당 단일 레코드를 받을 때는 SINGLE_RECORD로, 컨테이너가 페이로드에 맞는 대로 많은 수의 레코드를 받을 때는 MULTI_RECORD로 설정됩니다.

    • SAGEMAKER_MAX_CONCURRENT_TRANSFORMS는 동시에 열 수 있는 최대 /invocations 요청 수로 설정됩니다.

    참고

    마지막 환경 변수 3개는 사용자가 생성한 API 호출에서 가져옵니다. 사용자가 이러한 환경 변수의 값을 설정하지 않은 경우에는 해당 환경 변수가 전달되지 않습니다. 이러한 경우 기본값 또는 (/execution-parameters에 대한 응답으로) 알고리즘에서 요청한 값이 사용됩니다.

  • (CreateTransformJob 요청에 GPU 기반 ML 컴퓨팅 인스턴스를 지정하여) 모델 추론에 GPU 디바이스를 사용하려는 경우 컨테이너가 nvidia-docker와 호환 가능한지 확인해야 합니다. 이미지가 포함된 NVIDIA 드라이버를 번들화하지 마십시오. nvidia-docker에 대한 추가 정보는 NVIDIA/nvidia-docker를 참조하십시오.

     

  • SageMaker 컨테이너의 진입점으로 init 이니셜라이저를 사용할 수 없습니다. 교육 및 서비스 인수로 인해 혼동되기 때문입니다.

모델 아티팩트를 SageMaker 로드하는 방법

CreateModel 요청에서 컨테이너 정의는 ModelDataUrl 파라미터를 포함하며, 이 파라미터는 모델 아티팩트가 저장되는 Amazon S3의 위치를 식별합니다. 를 SageMaker 사용하여 추론을 실행하면 이 정보를 사용하여 모델 아티팩트를 복사할 위치를 결정합니다. 결과물은 추론 코드에서 사용할 Docker 컨테이너의 /opt/ml/model 디렉터리에 복사됩니다.

ModelDataUrl 파라미터는 tar.gz 파일을 가리켜야 합니다. 그렇지 않으면 SageMaker가 해당 파일을 다운로드할 수 없습니다. 에서 SageMaker 모델을 학습시키면 아티팩트가 Amazon S3에 압축된 단일 tar 파일로 저장됩니다. 다른 프레임워크에서 모델을 학습시키는 경우 Amazon S3에 모델 아티팩트를 압축된 tar 파일로 저장해야 합니다. SageMaker 일괄 변환 작업이 시작되기 전에 이 tar 파일의 압축을 풀고 컨테이너의 /opt/ml/model 디렉터리에 저장합니다.

컨테이너의 요청 처리 방법

컨테이너는 포트 8080에서 호출 및 ping 요청에 응답하는 웹 서버를 구현해야 합니다. 일괄 변환의 경우 동적 런타임 구성을 제공하는 실행 매개 변수 요청을 구현하는 알고리즘을 설정할 수 있습니다. SageMaker SageMaker는 다음 엔드포인트를 사용합니다.

  • ping—컨테이너의 상태를 주기적으로 확인하는 데 사용됩니다. SageMaker 호출 요청을 보내기 전에 핑 요청이 성공하기 위해 HTTP 200 상태 코드와 빈 본문이 표시될 때까지 기다립니다. 호출 요청을 보낼 때 ping 요청을 사용하여 모델을 메모리에 로드함으로써 추론을 생성할 수도 있습니다.

  • (선택 사항) execution-parameters—런타임 중 알고리즘이 작업에 대한 최적의 튜닝 파라미터를 제공하도록 허용합니다. 알고리즘은 컨테이너에 사용 가능한 메모리 및 CPU를 기반으로 작업에 적합한 MaxConcurrentTransforms, BatchStrategy, MaxPayloadInMB 값을 선택합니다.

호출 요청을 호출하기 전에 실행 매개변수 요청 호출을 SageMaker 시도합니다. 일괄 변환 작업을 생성할 때, 및 매개 변수의 MaxConcurrentTransforms 값을 제공할 수 있습니다. BatchStrategy MaxPayloadInMB SageMaker 다음 우선 순위를 사용하여 이러한 매개 변수의 값을 결정합니다.

  1. CreateTransformJob 요청을 생성할 때 제공한 파라미터 값.

  2. 실행 매개변수 엔드포인트를 SageMaker 호출할 때 모델 컨테이너가 반환하는 값>

  3. 기본 파라미터 값(다음 표 참조).

    파라미터 기본값
    MaxConcurrentTransforms

    1

    BatchStrategy

    MULTI_RECORD

    MaxPayloadInMB

    6

GET execution-parameters 요청에 대한 응답은 JSON 객체와 MaxConcurrentTransforms, BatchStrategy, MaxPayloadInMB 파라미터에 대한 키입니다. 다음은 유효한 응답의 예입니다.

{ “MaxConcurrentTransforms”: 8, “BatchStrategy": "MULTI_RECORD", "MaxPayloadInMB": 6 }

컨테이너의 추론 요청 응답 방법

추론을 얻기 위해 Amazon은 추론 컨테이너에 POST 요청을 SageMaker 보냅니다. POST 요청 본문에는 Amazon S3의 데이터가 포함되어 있습니다. Amazon은 요청을 컨테이너로 SageMaker 전달하고 컨테이너로부터 추론 결과를 반환하여 응답의 데이터를 Amazon S3에 저장합니다.

추론 요청을 수신하려면 컨테이너에 포트 8080에서 수신하는 웹 서버가 있어야 하고 /invocations 엔드포인트에 대한 POST 요청을 수락해야 합니다. ModelClientConfig를 통해 추론 요청 제한 시간 및 최대 재시도 횟수를 구성할 수 있습니다.

컨테이너의 상태 확인(핑) 요청 응답 방법

컨테이너에 대한 가장 간단한 요구 사항은 HTTP 200 상태 코드 및 비어 있는 본문을 포함하여 응답하는 것입니다. 이는 컨테이너가 SageMaker 엔드포인트에서 추론 요청을 수락할 준비가 되었음을 나타냅니다. /invocations

최소 기준이 컨테이너가 정적 200을 반환하는 반면 컨테이너 개발자는 이 기능을 사용하여 더욱 자세한 확인을 수행할 수 있습니다. /ping 시도의 요청 제한 시간은 2초입니다.