BLOG

Amazon SageMaker Operators를 사용하여 Kubernetes에서 머신 러닝 추론 간소화하기
작성일: 2020-04-09

Amazon SageMaker Operators for Kubernetes를 사용하면 SageMaker 호스팅 엔드 포인트로 기존 Kubernetes 클러스터를 확장할 수 있습니다.

 

신뢰할 수 있고 효율적인 서비스를 만들기 위해 기계 학습 추론에 투자가 필요합니다. XGBoost 모델의 경우 개발자는 Flask를 통해 모델을 로드한 다음 엔드 포인트를 실행하는 애플리케이션을 작성해야 합니다. 이를 위해서는 개발자가 대기 행렬 관리, 완벽한 배치 및 새로 훈련된 모델의 재로드에 대해 생각해야 합니다. 그런 다음 서빙 컨테이너가 Docker 저장소로 푸시되어야 하며, 여기에서 Kubernetes를 가져와서 클러스터에 배포할 수 있습니다. 이러한 단계를 수행하려면 데이터 과학자가 모델 정확도 개선과 관련이 없는 작업을 처리하고, 개발 일정을 추가하고 반복하는 데 더 많은 시간이 걸리는 개발 운영 엔지니어를 고용해야 합니다.

 

SageMaker Operators를 사용하면 개발자는 저장된 모델의 S3 저장 위치를 ​​지정하는 yaml 파일만 작성하면 되며, 안전한 엔드 포인트를 통해 실시간 예측을 사용할 수 있습니다. 엔드 포인트 재구성은 yaml 파일을 업데이트하는 것만큼 간단합니다. 사용하기 쉬울 뿐만 아니라 이 서비스에는 다음과 같은 기능도 있습니다.

 

  • 다중 모델 엔드 포인트 – 수십 개 이상의 모델을 호스팅하는 것은 구성이 어려워 기기들이 낮은 효율성으로 작동되게 합니다. 다중 모델 엔드 포인트는 서빙을 위해 모델 아티팩트를 즉시 로드하여 하나의 인스턴스를 설정합니다.
  • 엘라스틱 인퍼런스 – 저렴한 가격으로 배포할 수 있는 분할 GPU에서 더 작은 워크로드를 실행
  • 높은 활용도 및 다이나믹 오토스케일링 – 엔드 포인트는 100 % 성능으로 실행하고 초당 호출과 같이 정의한 사용자 지정 메트릭에 따라 복제본을 추가할 수 있습니다. 또는 클라이언트 성능을 위해 사전 정의된 메트릭에서 자동 스케일링을 구성할 수 있습니다.
  • 가용 영역 전송 – 정전이 발생하면 Amazon SageMaker는 엔드 포인트를 VPC 내의 다른 가용 영역으로 자동 이동합니다.
  • A / B 테스트 – 여러 모델을 설정하고 단일 엔드 포인트에서 설정한 양에 비례하는 트래픽 전송
  • 보안 – 엔드 포인트는 HTTPS로 생성되며 프라이빗 VPC (인터넷 송신 없음)에서 실행되도록 구성하고 AWS PrivateLink를 통해 액세스할 수 있습니다.
  • 컴플라이언스 준비 – Amazon SageMaker는 HIPAA, PCI DSS 및 SOC (1, 2, 3) 규칙 및 규정을 준수하는 것으로 인증되었습니다.

 

SageMaker Operators를 통해 Kubernetes에서 사용할 수 있는 기능은 함께 패키지되어 모델 제공을 시작하는 데 걸리는 시간을 단축하고며, 생산 인프라를 설정하고 유지 관리하는 데 필요한 개발 리소스를 줄여줍니다. 이는 EKS 또는 EC2 단독 소유권 비용보다 90 % 감소시켜줄 수 있습니다.

 

하여 오늘은 Amazon SageMaker Operators for Kubernetes를 설정하여 kubectl에서 사전 훈련된 XGBoost 모델의 엔드 포인트를 완전히 생성하고 업데이트하는 방법에 대해 설명 드리고자 합니다. 해당 솔루션은 다음 단계를 거칩니다.

 

  • 모델을 제공하는 데 필요한 Amazon SageMaker 권한을 부여하는 IAM Amazon SageMaker 역할을 생성합니다.
  • Amazon SageMaker에 모델을 배포할 YAML 파일 준비합니다.
  • 모델을 Amazon SageMaker에 배포합니다.
  • 엔드 포인트를 쿼리하여 프리딕션을 얻습니다.
  • 배포된 모델을 지속해서 업데이트합니다.

 

 

전제 조건

 

본 예제에서는 다음과 같은 전제 조건이 있다고 가정해 보겠습니다.

  • 쿠버네티스 클러스터
  • 클러스터에 설치된 Amazon SageMaker Operators
  • 배포할 수 있는 XGBoost 모델

 

Amazon EKS 클러스터에 운영자를 설치하는 방법에 대한 자세한 내용은 ‘Amazon SageMaker Operators for Kubernetes를 소개합니다!’ 블로그 글을 참고해 주십시오. 기존에 보유하고 계신 XGBoost 모델을 가져오실 수도 있지만 본 튜토리얼에서는 언급한 대로 게시물의 기존 모델을 사용합니다.

 

 

Amazon SageMaker 실행 역할 생성

 

Amazon SageMaker에는 모델을 제공하는 것으로 가정하는 IAM 역할이 필요합니다. 아직 가지고 계신 모델이 없는 경우 다음 bash코드를 사용하여 만드시면 됩니다.

export assume_role_policy_document={

  “Version”: “2012-10-17”,

  “Statement”: [{

    “Effect”: “Allow”,

    “Principal”: {

      “Service”: “sagemaker.amazonaws.com”

    },

    “Action”: “sts:AssumeRole” 

}]

}

aws iam createrole rolename <execution role name> \

    assumerolepolicydocument \

    $assume_role_policy_document

aws iam attachrolepolicy rolename <execution role name> \

    policyarn \

    arn:aws:iam::aws:policy/AmazonSageMakerFullAccess

 

 

<execution role name> 적절한 역할 이름으로 바꿔주십시오. 이를 통해 모델을 제공할 때 Amazon SageMaker가 추정하는 데 사용할 수 있는 IAM 역할이 생성됩니다.

 

 

호스팅 배포 준비

 

Operators는HostingDeployment라는 이름의 CRD (Custom Resource Definition)를 제공합니다.  HostingDeployment를 사용하여 Amazon SageMaker 호스팅에서 모델 배포를 구성합니다.

호스팅 배포를 준비하려면 파일을 만들어 이름을 hosting.yaml로 설정하시고 다음 내용을 포함하시면 됩니다.

apiVersion: sagemaker.aws.amazon.com/v1

kind: HostingDeployment

metadata:

  name: hostingdeployment

spec:

  region: useast2

  productionVariants:

    variantName: AllTraffic

      modelName: xgboostmodel

      initialInstanceCount: 1

      instanceType: ml.r5.large

      initialVariantWeight: 1

  models:

    name: xgboostmodel

      executionRoleArn: SAGEMAKER_EXECUTION_ROLE_ARN

      containers:

        containerHostname: xgboost

          modelDataUrl: s3://BUCKET_NAME/model.tar.gz

          image: 825641698319.dkr.ecr.useast2.amazonaws.com/xgboost:latest

 

 

SAGEMAKER_EXECUTION_ROLE_ARN 이전 단계에서 만든 실행 역할의 ARN으로 바꿔주세요. BUCKET_NAME 을 모델이 포함된 버킷으로 바꿔주세요.

버킷 지역, HostingDeployment지역 및 이미지 ECR 지역이 모두 같은지 확인하세요.

 

 

Amazon SageMake에 모델 배포

 

이제를 kubectl apply -f hosting.yaml를 실행하여 배포를 시작할 수 있습니다. 다음 코드를 참조하세요.

$ kubectl apply f hosting.yaml

hostingdeployment.sagemaker.aws.amazon.com/hostingdeployment created

 

 

kubectl get hostingdeployments로 배포 상태를 추적할 수 있습니다. 다음 코드를 참조하세요.

$ kubectl get hostingdeployments

NAME                 STATUS     SAGEMAKERENDPOINTNAME

hostingdeployment   Creating   hostingdeployment38ecac47487611eaa81606fc3390e6ba

 

 

모델 엔드 포인트를 배포하는 데 최대 15분이 걸릴 수 있습니다. 아래 명령을 사용하여 상태를 확인하실 수 있습니다. 엔드 포인트는 InService 상태에 도달하면 쿼리 준비가 완료됩니다.

$ kubectl get hostingdeployments

NAME                 STATUS      SAGEMAKERENDPOINTNAME

hostingdeployment   InService   hostingdeployment38ecac47487611eaa81606fc3390e6ba

 

 

엔드 포인트 쿼리

 

엔드 포인트가 가동되면 다음 예제 코드와 함께 작동하는지 테스트할 수 있습니다.

$ aws sagemakerruntime invokeendpoint \

  region useast2 \

  endpointname SAGEMAKERENDPOINTNAME \

  body $(seq 784 | xargs echo | sed ‘s/ /,/g’) \

  >(cat) \

  contenttype text/csv > /dev/null

 

 

이 bash명령은 AWS CLI를 사용하여 HTTPS 엔드 포인트에 연결합니다. 생성한 모델은 MNIST 숫자 데이터 세트를 기반으로 하며 예측 변수는 이미지의 숫자를 읽습니다. 이 호출을 하면 이미지의 픽셀을 나타내는 784개의 기능이 CSV 형식으로 포함된 추론 페이로드를 전송합니다. 모델이 페이로드에 있다고 생각하는 예측된 수치를 확인할 수 있습니다. 다음 코드를 참조하세요.

$ aws sagemakerruntime invokeendpoint \

  region useast2 \

  endpointname hostingdeployment38ecac47487611eaa81606fc3390e6ba \

  body $(seq 784 | xargs echo | sed ‘s/ /,/g’) \

  >(cat) \

  contenttype text/csv > /dev/null

8.0

 

 

엔드 포인트가 작동 중임을 확인할 수 있습니다.

 

 

일관된 업데이트

 

모델을 배포한 후 Kubernetes YAML을 변경하면 operator가 엔드 포인트를 업데이트할 수 있습니다. 업데이트는 일관된 방식으로 Amazon SageMaker에 전파됩니다. 이를 통해 엔드 포인트를 서술문으로 구성하고 operator가 세부 사항을 처리할 수 있게 합니다.

이를 보여드리기 위해, 모델 인스턴스 유형을 ml.r5.large에서  ml.c5.2xlarge로 변경해보겠습니다. 다음 단계를 완료해주세요.

 

1. 인스턴스 유형을 hosting.yaml에서 ml.c5.2xlarge로 수정해주세요. 다음 코드를 참조하세요.

apiVersion: sagemaker.aws.amazon.com/v1

kind: HostingDeployment

metadata:

  name: hosting-deployment

spec:

  region: us-east-2

  productionVariants:

    – variantName: AllTraffic

      modelName: xgboost-model

      initialInstanceCount: 1

      instanceType: ml.c5.2xlarge

      initialVariantWeight: 1

  models:

    – name: xgboost-model

      executionRoleArn: SAGEMAKER_EXECUTION_ROLE_ARN

      containers:

        – containerHostname: xgboost

          modelDataUrl: s3://BUCKET_NAME/model.tar.gz

          image: 825641698319.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest

2. Kubernetes 클러스터에 변경 사항을 적용해주세요. 다음 코드를 참조하세요.

$ kubectl apply -f hosting.yaml

hostingdeployment.sagemaker.aws.amazon.com/hosting-deployment configured

 

3. 호스팅 배포 상태를 불러옵니다.   Updating가 표시되고 준비가 되면 InService로 변경됩니다. 다음 코드를 참조하세요.

$ kubectl get hostingdeployments

NAME                 STATUS     SAGEMAKER-ENDPOINT-NAME

hosting-deployment   Updating   hosting-deployment-38ecac47487611eaa81606fc3390e6ba

 

엔드 포인트는 업데이트 내내 활성 상태로 유지되며 계속해서 사용할 수 있습니다. 자세한 내용과 예시는 GitHub 리포지토리에서 확인해보세요.

 

 

제거

 

엔드 포인트를 삭제하고 추가 사용 요금이 발생하지 않도록 하려면 kubectl delete -f hosting.yaml을 실행하세요. 다음 코드를 참조하세요.

$ kubectl delete f hosting.yaml

hostingdeployment.sagemaker.aws.amazon.com “hosting-deployment” deleted

 

 

글을 마치며…

 

오늘은 Amazon SageMaker Operators for Kubernetes 로 실시간 추론을 수행하는 방법을 보여드렸습니다. 해당 서비스는 또한 교육 및 하이퍼 파라미터 튜닝도 지원합니다.

Amazon SageMaker Operators for Kubernetes 에 대한 피드백 또는 개선 사항이 있으시다면, Amazon SageMaker에 대한 AWS 포럼 또는 GitHub 리포지토리에 여러분의 의견을 남겨주시기 바랍니다.

 

 

원문 URL: https://aws.amazon.com/ko/blogs/machine-learning/simplify-machine-learning-inference-on-kubernetes-with-amazon-sagemaker-operators/

** 메가존클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 개제하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달 드리도록 하겠습니다.