로컬에서 개발된 아티팩트에서 AWS로 Xgboost 모델 배포, 추론 파이프라인 추가

새로운 교육이 성능을 수정하고 메트릭을 변경하며 궁극적으로 근본적인 요구에 응답하지 않을 수 있기 때문에 AWS 환경에서 모델을 교육하지 않고 클라우드에 모델을 배포해야 하는 회사 또는 클라이언트가 있습니다.

이 블로그에서는 개발자용으로 구축된 Xgboost 모델 바이너리를 배포하는 방법을 보여줍니다. 여기서 사후 처리 계층은 sagemaker의 추론 파이프라인을 통해 추가되어 엔드포인트를 배포합니다.

Xgboost 알고리즘



트리 기반 앙상블 방법은 사용되는 변수에 대한 해석을 제공하는 것 외에도 좋은 성능을 보이는 경우가 많기 때문에 기계 학습 솔루션 개발자 커뮤니티에서 인기 있는 모델이 됩니다. 익스트림 그래디언트 부스팅(Xgboost)은 확장성이 뛰어난 솔루션일 뿐만 아니라 최소한의 리소스를 사용하여 희소 데이터를 처리하는 데 널리 유용한 트리 기반 앙상블 방법의 변형입니다. Xgboost는 적응 알고리즘으로 간주되는 각 이전 학습자의 오류를 캡처하는 학습 프로세스가 순차적인 감독 학습 모델입니다. 또한 학습을 ​​위해 경사 하강법을 사용하십시오. 다음 그림은 그래디언트 부스팅 작업을 보여줍니다.



.pkl에서 tar.gz로 부스터 추가



이 간행물의 주요 프로세스와 중심 주제는 이 섹션에서 번역됩니다. 트리 기반 모델을 학습한 결과로 나타나는 기본 요소는 부스터입니다. Xgboost 라이브러리를 사용할 때 모델을 훈련하고 저장합니다. 여기서 모델링 단계의 일련의 속성이 저장되며 모델의 추론 및 사용을 위해 기여하지 않습니다. 이와 같이 모델이 저장된 형식에서 부스터만 구출하여 사전 구축된 AWS Xgboost 솔루션과 통신하고 솔루션의 배포 및 사용을 생성할 수 있습니다.

import xgboost
import joblib
import tarfile
model_pkl=joblib.load('model_client.pkl')
booster=model_pkl.get_booster()
booster.save_model('xgboost-model')
# add xgboost-model to tar.gz file
fp = tarfile.open("model.tar.gz","w:gz")
fp.add('xgboost-model')
fp.close()


Sagemaker에서 모델 생성



첫 번째 단계는 알고리즘 컨테이너의 URL을 표시하는 것입니다. 이 경우 AWS용으로 발급된 컨테이너를 사용

region = Session().boto_region_name
xgboost_container = sagemaker.image_uris.retrieve("xgboost", region, "1.0-1")


다음 설정은 sagemaker의 SDK로 모델을 생성하는 것입니다. S3 및 알고리즘 컨테이너의 위치 아티팩트를 용이하게 해야 합니다.

from sagemaker.model import Model
xgboost_model=Model(xgboost_container,
                  model_data='s3://file_path_in_s3/model.tar.gz',
                  role=sagemaker.get_execution_role())


추론 파이프라인 설정



다음 단계는 모델 출력 처리 설정입니다. 이를 위해 SkLearnModel을 통해 후처리 모델을 생성합니다.

사후 처리




from sagemaker.sklearn.model import SKLearnModel

FRAMEWORK_VERSION = '0.23-1'
entry_point = 'postprocessing.py'

postprocessing_model = SKLearnModel(
    model_data='s3://file_path_in_s3/model.tar.gz',
    role=role,
    entry_point=entry_point,
    framework_version=FRAMEWORK_VERSION,
    sagemaker_session=sagemaker_session
)


진입점은 기본적으로 모델(문자열)의 출력을 관리하고 컨텍스트를 연결하는 기능을 포함하는 Python 파일입니다. 이를 위해 프로젝트의 바이너리 또는 다중 클래스 및 컨텍스트를 고려하십시오. 다음은 이 코드의 추출을 보여줍니다.


def output_fn(prediction, accept):

    accept, params = cgi.parse_header(accept.lower())

    if accept == "application/json":
        results = []
        classes = prediction['classes']
        score=prediction['scores']
        score.insert(0,1-score[0])
        score=[score]
        for scores in score: 
            row = []
            for class_, score in zip(classes, scores):
                row.append({
                    'id': class_,
                    'score': score
                })

            results.append(row)

        json_output = {"context": results[0]}


파이프라인 모델




from sagemaker.pipeline import PipelineModel

model_name='name-model'
inference_model = PipelineModel(
    name=model_name, 
    role=sagemaker.get_execution_role(), 
    models=[ 
        xgboost_model,
        postprocessing_model,
    ])


엔드포인트 배포 및 테스트



마지막으로 엔드포인트를 통해 모델을 배포합니다. 여기서 모델은 순차적으로 작동하여 사용자가 설계한 구성에 따라 출력을 얻습니다.

inference_model.deploy(
    initial_instance_count=1,
    instance_type='ml.m5.xlarge',  
    endpoint_name=endpoint_name
)


다음 코드에서 사후 처리 컨테이너가 포함된 엔드포인트를 호출할 때 응답을 볼 수 있습니다.

b'{"context": [{"id": "class-0", "score": 0.24162}, {"id": "class-1", "score": 0.75837}]}'


결론 및 토론



위에 나열된 단계를 사용하여 모델을 AWS 클라우드에 배포하여 로컬로 구축된 모델의 일관성과 성능을 보장할 수 있습니다. 이 경로를 사용하여 개발할 수 있는 것은 작업한 알고리즘의 전처리 작업을 수행하고 전처리 계층을 추론 파이프라인에 추가하여 필요에 따라 이 단계를 구성하는 것입니다.

참조


  • XGBoost: A Scalable Tree Boosting System
  • XGBoost Algorithm - AWS
  • SDK Sagemaker python - PipelineModel
  • 좋은 웹페이지 즐겨찾기