

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

# 추론 파이프라인을 사용하여 실시간으로 예측 실행하기
<a name="inference-pipeline-real-time"></a>

추론 파이프라인에서 훈련된 모델을 사용하여 외부 전처리를 수행하지 않고도 실시간 예측을 직접 수행할 수 있습니다. 파이프라인을 구성할 때 Amazon SageMaker AI에 있는 기본 제공 기능 변환기를 사용할 수 있습니다. 또는 scikit-learn 또는 Spark 코드 몇 줄만 사용하여 자체 변환 로직을 구현할 수도 있습니다.

기계 학습 파이프라인을 위한 직렬화 형식 지정 및 실행 엔진인 [MLeap](https://combust.github.io/mleap-docs/)은, 파이프라인을 훈련하고 훈련된 파이프라인을 MLeap 번들이라는 직렬화된 파이프라인으로 내보내기 위해 Spark, Scikit-learn 및 TensorFlow를 지원합니다. 이러한 번들은 배치 모드 채점을 위해 Spark로, 실시간 API 서비스 강화를 위해 MLeap 런타임으로 다시 역직렬화할 수 있습니다.

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

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

컨테이너가 두 번째 포트에서 수신해야 하는 경우에는 `SAGEMAKER_SAFE_PORT_RANGE` 환경 변수가 지정한 범위 내에서 포트를 선택합니다. 값은 **"XXXX-YYYY"** 형식의 포함 범위로 지정하는데, 여기서 `XXXX`와 `YYYY`는 여러 자릿수로 표시되는 정수입니다. SageMaker AI는 멀티컨테이너 파이프라인에서 컨테이너를 실행할 때 이 값을 자동으로 제공합니다.

**참고**  
[SageMaker AI 기본 제공 알고리즘](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html)이 포함된 파이프라인에서 사용자 지정 Docker 이미지를 사용하려면 [Amazon Elastic Container Registry(Amazon ECR) 정책](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)이 필요합니다. Amazon ECR 리포지토리가 SageMaker AI에 이미지를 풀링할 수 있는 권한을 부여해야 합니다. 자세한 내용은 [추론 파이프라인에 대한 Amazon ECR 권한 문제 해결](inference-pipeline-troubleshoot.md#inference-pipeline-troubleshoot-permissions) 단원을 참조하십시오.

## 추론 파이프라인 엔드포인트 생성 및 배포
<a name="inference-pipeline-real-time-sdk"></a>

다음 코드는 SageMaker AI SDK를 사용하여 연속으로 SparkML 및 XGBoost 모델을 가지고 실시간 추론 파이프라인 모델을 만들고 배포합니다.

```
from sagemaker.model import Model
from sagemaker.pipeline_model import PipelineModel
from sagemaker.sparkml.model import SparkMLModel

sparkml_data = 's3://{}/{}/{}'.format(s3_model_bucket, s3_model_key_prefix, 'model.tar.gz')
sparkml_model = SparkMLModel(model_data=sparkml_data)
xgb_model = Model(model_data=xgb_model.model_data, image=training_image)

model_name = 'serial-inference-' + timestamp_prefix
endpoint_name = 'serial-inference-ep-' + timestamp_prefix
sm_model = PipelineModel(name=model_name, role=role, models=[sparkml_model, xgb_model])
sm_model.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge', endpoint_name=endpoint_name)
```

## 추론 파이프라인 엔드포인트에서 실시간 추론 요청
<a name="inference-pipeline-endpoint-request"></a>

다음 예제는 추론 엔드포인트를 호출하고 요청 페이로드를 JSON 형식으로 전달하여 실시간으로 예측하는 방법을 보여줍니다.

```
import sagemaker
from sagemaker.predictor import json_serializer, json_deserializer, Predictor

payload = {
        "input": [
            {
                "name": "Pclass",
                "type": "float",
                "val": "1.0"
            },
            {
                "name": "Embarked",
                "type": "string",
                "val": "Q"
            },
            {
                "name": "Age",
                "type": "double",
                "val": "48.0"
            },
            {
                "name": "Fare",
                "type": "double",
                "val": "100.67"
            },
            {
                "name": "SibSp",
                "type": "double",
                "val": "1.0"
            },
            {
                "name": "Sex",
                "type": "string",
                "val": "male"
            }
        ],
        "output": {
            "name": "features",
            "type": "double",
            "struct": "vector"
        }
    }

predictor = Predictor(endpoint=endpoint_name, sagemaker_session=sagemaker.Session(), serializer=json_serializer,
                                content_type='text/csv', accept='application/json')

print(predictor.predict(payload))
```

`predictor.predict(payload)`에서 얻은 응답은 모델의 추론 결과입니다.

## 실시간 추론 파이프라인 예제
<a name="inference-pipeline-example"></a>

엔드포인트를 배포하고 추론 요청을 실행한 다음 응답을 역직렬화하는 방법을 보여주는 [SKLearn 예측기를 사용하여 노트북 예제](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/sagemaker-python-sdk/scikit_learn_randomforest/Sklearn_on_SageMaker_end2end.ipynb)를 실행할 수 있습니다. [Amazon SageMaker 예제 GitHub 리포지토리](https://github.com/awslabs/amazon-sagemaker-examples)에서 이 노트북과 더 많은 예제를 찾을 수 있습니다.