Amazon SageMaker PlatoBlockchain Data Intelligence에서 RStudio를 사용하여 Amazon SageMaker 모델 구축 파이프라인을 생성하고 R 모델을 배포합니다. 수직 검색. 일체 포함.

Amazon SageMaker 모델 구축 파이프라인을 생성하고 Amazon SageMaker에서 RStudio를 사용하여 R 모델 배포

2021년 XNUMX월 알스튜디오 PBC우리 발표 일반적인 가용성 Amazon SageMaker의 RStudio, 클라우드에서 업계 최초의 완전 관리형 RStudio Workbench IDE. 이제 현재 RStudio 라이선스를 가져와 자체 관리형 RStudio 환경을 다음으로 쉽게 마이그레이션할 수 있습니다. 아마존 세이지 메이커 몇 가지 간단한 단계만 거치면 됩니다.

RStudio는 머신 러닝(ML) 및 데이터 과학 프로젝트를 위해 R 개발자들 사이에서 가장 인기 있는 IDE 중 하나입니다. RStudio는 데이터 과학 팀이 조직에서 작업을 개발하고 공유할 수 있도록 R용 오픈 소스 도구와 엔터프라이즈급 전문 소프트웨어를 제공합니다. SageMaker에서 RStudio를 가져오면 완전 관리형 방식으로 AWS 인프라에 액세스할 수 있을 뿐만 아니라 SageMaker에 대한 기본 액세스도 제공됩니다.

이 게시물에서는 SageMaker의 RStudio를 통해 SageMaker 기능을 사용하여 R 모델을 빌드, 처리, 교육 및 등록하는 SageMaker 파이프라인을 구축하는 방법을 살펴봅니다. 또한 모두 R을 사용하여 모델 배포에 SageMaker를 사용하는 방법을 살펴봅니다.

솔루션 개요

다음 다이어그램은 솔루션에 사용된 아키텍처를 보여줍니다. 이 예제에 사용된 모든 코드는 GitHub 저장소.

사전 조건

이 게시물을 팔로우하려면 SageMaker에서 RStudio에 액세스해야 합니다. SageMaker에서 RStudio를 처음 사용하는 경우 검토하십시오. Amazon SageMaker에서 RStudio 시작하기.

또한 사용자 지정 Docker 컨테이너를 빌드해야 합니다. 우리는 사용 AWS 코드빌드 이러한 컨테이너를 빌드하려면 몇 가지 추가 작업이 필요합니다. AWS 자격 증명 및 액세스 관리 (IAM) 기본적으로 가질 수 없는 권한. 계속하기 전에 사용 중인 IAM 역할에 CodeBuild에 대한 신뢰 정책이 있는지 확인하십시오.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "codebuild.amazonaws.com"
        ]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

CodeBuild에서 빌드를 실행하고 이미지를 푸시하려면 다음 권한도 IAM 역할에 필요합니다. Amazon Elastic Container Registry (아마존 ECR):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "codebuild:DeleteProject",
                "codebuild:CreateProject",
                "codebuild:BatchGetBuilds",
                "codebuild:StartBuild"
            ],
            "Resource": "arn:aws:codebuild:*:*:project/sagemaker-studio*"
        },
        {
            "Effect": "Allow",
            "Action": "logs:CreateLogStream",
            "Resource": "arn:aws:logs:*:*:log-group:/aws/codebuild/sagemaker-studio*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:GetLogEvents",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:log-group:/aws/codebuild/sagemaker-studio*:log-stream:*"
        },
        {
            "Effect": "Allow",
            "Action": "logs:CreateLogGroup",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ecr:CreateRepository",
                "ecr:BatchGetImage",
                "ecr:CompleteLayerUpload",
                "ecr:DescribeImages",
                "ecr:DescribeRepositories",
                "ecr:UploadLayerPart",
                "ecr:ListImages",
                "ecr:InitiateLayerUpload", 
                "ecr:BatchCheckLayerAvailability",
                "ecr:PutImage"
            ],
            "Resource": "arn:aws:ecr:*:*:repository/sagemaker-studio*"
        },
        {
            "Sid": "ReadAccessToPrebuiltAwsImages",
            "Effect": "Allow",
            "Action": [
                "ecr:BatchGetImage",
                "ecr:GetDownloadUrlForLayer"
            ],
            "Resource": [
                "arn:aws:ecr:*:763104351884:repository/*",
                "arn:aws:ecr:*:217643126080:repository/*",
                "arn:aws:ecr:*:727897471807:repository/*",
                "arn:aws:ecr:*:626614931356:repository/*",
                "arn:aws:ecr:*:683313688378:repository/*",
                "arn:aws:ecr:*:520713654638:repository/*",
                "arn:aws:ecr:*:462105765813:repository/*"
            ]
        },
        {
            "Sid": "EcrAuthorizationTokenRetrieval",
            "Effect": "Allow",
            "Action": [
                "ecr:GetAuthorizationToken"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
              "s3:GetObject",
              "s3:DeleteObject",
              "s3:PutObject"
              ],
            "Resource": "arn:aws:s3:::sagemaker-*/*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:CreateBucket"
            ],
            "Resource": "arn:aws:s3:::sagemaker*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:GetRole",
                "iam:ListRoles"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::*:role/*",
            "Condition": {
                "StringLikeIfExists": {
                    "iam:PassedToService": "codebuild.amazonaws.com"
                }
            }
        }
    ]
}

기준선 R 컨테이너 만들기

SageMaker 처리 및 교육 작업에 대한 처리 및 교육에 R 스크립트를 사용하려면 자체 스크립트를 생성해야 합니다. 고정 컨테이너 필요한 런타임 및 패키지를 포함합니다. SageMaker 제품의 일부인 자체 컨테이너를 사용할 수 있는 기능은 개발자와 데이터 과학자가 사실상 제한 없이 원하는 도구와 프레임워크를 사용할 수 있는 큰 유연성을 제공합니다.

두 개의 R 지원 Docker 컨테이너를 만듭니다. 하나는 작업 처리용이고 다른 하나는 모델 교육 및 배포용입니다. 데이터 처리에는 일반적으로 모델링과 다른 패키지와 라이브러리가 필요하므로 여기서는 두 단계를 분리하고 다른 컨테이너를 사용하는 것이 좋습니다.

SageMaker에서 컨테이너 사용에 대한 자세한 내용은 다음을 참조하십시오. SageMaker에서 Docker 컨테이너 사용.

처리에 사용되는 컨테이너는 다음과 같이 정의됩니다.

FROM public.ecr.aws/docker/library/r-base:4.1.2

# Install tidyverse
RUN apt update && apt-get install -y --no-install-recommends 
    r-cran-tidyverse
    
RUN R -e "install.packages(c('rjson'))"

ENTRYPOINT ["Rscript"]

이 포스트에서는 간단하고 비교적 가벼운 컨테이너를 사용합니다. 귀하 또는 귀하의 조직의 요구 사항에 따라 몇 가지 더 많은 R 패키지를 사전 설치할 수 있습니다.

학습 및 배포에 사용되는 컨테이너는 다음과 같이 정의됩니다.

FROM public.ecr.aws/docker/library/r-base:4.1.2

RUN apt-get -y update && apt-get install -y --no-install-recommends 
    wget 
    apt-transport-https 
    ca-certificates 
    libcurl4-openssl-dev 
    libsodium-dev
    
RUN apt-get update && apt-get install -y python3-dev python3-pip 
RUN pip3 install boto3
RUN R -e "install.packages(c('readr','plumber', 'reticulate'),dependencies=TRUE, repos='http://cran.rstudio.com/')"

ENV PATH="/opt/ml/code:${PATH}"

WORKDIR /opt/ml/code

COPY ./docker/run.sh /opt/ml/code/run.sh
COPY ./docker/entrypoint.R /opt/ml/entrypoint.R

RUN /bin/bash -c 'chmod +x /opt/ml/code/run.sh'

ENTRYPOINT ["/bin/bash", "run.sh"]

RStudio 커널은 Docker 컨테이너에서 실행되므로 Studio 세션에서 직접 Docker 명령을 사용하여 컨테이너를 빌드하고 배포할 수 없습니다. 대신 매우 유용한 라이브러리를 사용할 수 있습니다. sagemaker-스튜디오-이미지-빌드, 기본적으로 컨테이너 빌드 작업을 CodeBuild에 아웃소싱합니다.

다음 명령을 사용하여 두 개의 Amazon ECR 레지스트리를 생성합니다. sagemaker-r-processingsagemaker-r-train-n-deploy, 나중에 사용할 각 컨테이너를 빌드합니다.

if (!py_module_available("sagemaker-studio-image-build")){py_install("sagemaker-studio-image-build", pip=TRUE)}
system("cd pipeline-example ; sm-docker build . —file ./docker/Dockerfile-train-n-deploy —repository sagemaker-r-train-and-deploy:1.0")
system("cd pipeline-example ; sm-docker build . —file ./docker/Dockerfile-processing —repository sagemaker-r-processing:1.0")

파이프라인 생성

이제 컨테이너가 구축되고 준비되었으므로 모델 구축 워크플로를 조정하는 SageMaker 파이프라인을 생성할 수 있습니다. 이것의 전체 코드는 파일 아래에 있습니다 pipeline.R 저장소에서. SageMaker 파이프라인을 생성하는 가장 쉬운 방법은 라이브러리를 사용하여 액세스할 수 있는 Python 라이브러리인 SageMaker SDK를 사용하는 것입니다. 망상하다. 이를 통해 R 언어 환경을 벗어나지 않고도 SageMaker의 모든 기능에 액세스할 수 있습니다.

우리가 구축한 파이프라인에는 다음 구성 요소가 있습니다.

  • 전처리 단계 – SageMaker 처리 작업입니다( sagemaker-r-processing 컨테이너)는 데이터를 사전 처리하고 데이터를 학습 및 테스트 데이터 세트로 분할하는 일을 담당합니다.
  • 훈련 단계 – SageMaker 교육 작업입니다( sagemaker-r-train-n-deploy 컨테이너) 모델 학습을 담당합니다. 이 예에서는 간단한 선형 모델을 훈련합니다.
  • 평가 단계 – SageMaker 처리 작업입니다( sagemaker-r-processing 컨테이너)는 모델 평가를 수행할 책임이 있습니다. 특히 이 예에서 우리는 다음 단계에서 사용하고 모델 자체와 연결하려는 테스트 데이터 세트의 RMSE(제곱 평균 오차)에 관심이 있습니다.
  • 조건부 단계 – 이것은 SageMaker 파이프라인 고유의 조건부 단계로, 일부 매개변수를 기반으로 파이프라인 로직을 분기할 수 있습니다. 이 경우 파이프라인은 이전 단계에서 계산된 RMSE 값을 기준으로 분기됩니다.
  • 모델 단계 등록 – 이전 조건부 단계가 다음과 같은 경우 True, 그리고 모델의 성능이 허용되면 모델은 모델 레지스트리에 등록됩니다. 자세한 내용은 다음을 참조하십시오. 모델 레지스트리에 모델 등록 및 배포.

먼저 upsert 함수를 호출하여 파이프라인을 생성(또는 업데이트)한 다음 start 함수를 호출하여 실제로 파이프라인 실행을 시작합니다.

source("pipeline-example/pipeline.R")
my_pipeline <- get_pipeline(input_data_uri=s3_raw_data)

upserted <- my_pipeline$upsert(role_arn=role_arn)
started <- my_pipeline$start()

파이프라인 및 모델 레지스트리 검사

SageMaker에서 RStudio를 사용할 때의 좋은 점 중 하나는 SageMaker 플랫폼에 있으면 올바른 작업에 적합한 도구를 사용하고 수행해야 할 작업에 따라 도구 간에 신속하게 전환할 수 있다는 것입니다.

파이프라인 실행을 시작하자마자 아마존 세이지 메이커 스튜디오, 이를 통해 파이프라인을 시각화하고 파이프라인의 현재 및 이전 실행을 모니터링할 수 있습니다.

방금 생성하고 실행한 파이프라인에 대한 세부 정보를 보려면 Studio IDE 인터페이스로 이동하여 다음을 선택합니다. SageMaker 리소스선택한다. 파이프 라인 드롭다운 메뉴에서 파이프라인을 선택합니다(이 경우 AbalonePipelineUsingR).

Amazon SageMaker PlatoBlockchain Data Intelligence에서 RStudio를 사용하여 Amazon SageMaker 모델 구축 파이프라인을 생성하고 R 모델을 배포합니다. 수직 검색. 일체 포함.

모든 현재 및 이전 실행을 포함하여 파이프라인의 세부 정보가 표시됩니다. 다음 스크린샷에 따라 파이프라인의 시각적 표현을 불러오려면 최신 것을 선택하십시오.

파이프라인의 DAG는 단계 간의 데이터 종속성과 사용자 지정 추가 종속성을 기반으로 서비스에 의해 자동으로 생성됩니다(이 예에서는 추가되지 않음).

실행이 완료되면 성공하면 모든 단계가 녹색으로 변하는 것을 볼 수 있습니다.

Amazon SageMaker PlatoBlockchain Data Intelligence에서 RStudio를 사용하여 Amazon SageMaker 모델 구축 파이프라인을 생성하고 R 모델을 배포합니다. 수직 검색. 일체 포함.

개별 단계를 선택하면 입력, 출력, 로그 및 초기 구성 설정을 포함하여 특정 단계에 대한 세부 정보가 표시됩니다. 이를 통해 파이프라인을 드릴다운하고 실패한 단계를 조사할 수 있습니다.

마찬가지로 파이프라인 실행이 완료되면 모델이 모델 레지스트리에 저장됩니다. 액세스하려면 SageMaker 리소스 창, 선택 모델 레지스트리 드롭다운에서 모델을 선택합니다. 그러면 다음 스크린샷과 같이 등록된 모델 목록이 표시됩니다. 특정 모델 버전에 대한 세부 정보 페이지를 열려면 하나를 선택하십시오.

Amazon SageMaker PlatoBlockchain Data Intelligence에서 RStudio를 사용하여 Amazon SageMaker 모델 구축 파이프라인을 생성하고 R 모델을 배포합니다. 수직 검색. 일체 포함.

모델 버전을 연 후 다음을 선택합니다. 상태 업데이트승인 모델을 승인합니다.

이 시점에서 사용 사례에 따라 필요에 따라 모델 배포를 포함하여 추가 작업을 트리거하도록 이 승인을 설정할 수 있습니다.

모델의 서버리스 배포

SageMaker에서 모델을 교육하고 등록한 후에는 SageMaker에서 모델을 배포하는 것이 간단합니다.

배치 추론, 실시간 엔드포인트 또는 비동기 엔드포인트와 같이 모델을 배포하는 방법에는 여러 가지 옵션이 있습니다. 각 방법에는 원하는 인스턴스 유형과 조정 메커니즘 선택을 포함하여 몇 가지 필수 구성이 함께 제공됩니다.

이 예에서는 최근에 발표된 SageMaker 기능을 사용합니다. 서버리스 추론 (작성 당시 미리보기 모드에서), 서버리스 엔드포인트에 R 모델을 배포합니다. 이 유형의 엔드포인트의 경우 추론을 위해 모델에 할당하려는 RAM의 양과 모델의 허용되는 최대 동시 호출 수만 정의합니다. SageMaker는 필요에 따라 모델 호스팅 및 자동 크기 조정을 처리합니다. 유휴 시간에 대한 비용 없이 모델에서 사용한 정확한 시간(초)과 데이터에 대해서만 비용이 청구됩니다.

다음 코드를 사용하여 서버리스 엔드포인트에 모델을 배포할 수 있습니다.

model_package_arn <- 'ENTER_MODEL_PACKAGE_ARN_HERE'
model <- sagemaker$ModelPackage(
                        role=role_arn, 
                        model_package_arn=model_package_arn, 
                        sagemaker_session=session)
serverless_config <- sagemaker$serverless$ServerlessInferenceConfig(
                        memory_size_in_mb=1024L, 
                        max_concurrency=5L)
model$deploy(serverless_inference_config=serverless_config, 
             endpoint_name="serverless-r-abalone-endpoint")

오류가 보이면 ClientError: An error occurred (ValidationException) when calling the CreateModel operation: Invalid approval status "PendingManualApproval" 배포하려는 모델이 승인되지 않았습니다. 이전 섹션의 단계에 따라 모델을 승인합니다.

배포한 HTTP 엔드포인트에 요청을 보내 엔드포인트를 호출하거나 대신 SageMaker SDK를 사용합니다. 다음 코드에서는 일부 테스트 데이터에서 엔드포인트를 호출합니다.

library(jsonlite)
x = list(features=format_csv(abalone_t[1:3,1:11]))
x = toJSON(x)

# test the endpoint
predictor <- sagemaker$predictor$Predictor(endpoint_name="serverless-r-abalone-endpoint", sagemaker_session=session)
predictor$predict(x)

우리가 호출한 엔드포인트는 서버리스 엔드포인트였으므로 정확한 기간과 사용된 데이터에 대한 요금이 부과됩니다. 끝점을 처음 호출할 때 응답하는 데 약 XNUMX초가 걸린다는 것을 알 수 있습니다. 이는 서버리스 엔드포인트의 콜드 스타트 ​​시간 때문입니다. 직후에 다른 호출을 수행하면 이미 따뜻하기 때문에 모델이 실시간으로 예측을 반환합니다.

끝점 실험을 마치면 다음 명령을 사용하여 끝점을 삭제할 수 있습니다.

predictor$delete_endpoint(delete_endpoint_config=TRUE)

결론

이 게시물에서는 RStudio 환경에서 R을 사용하여 SageMaker 파이프라인을 생성하는 과정을 살펴보고 SageMaker 모델 레지스트리를 사용하여 SageMaker의 서버리스 엔드포인트에 R 모델을 배포하는 방법을 보여주었습니다.

이제 RStudio와 SageMaker를 결합하여 선호하는 언어인 R을 사용하여 AWS에서 완전한 종단 간 ML 워크플로를 만들고 오케스트레이션할 수 있습니다.

이 솔루션에 대해 더 자세히 알아보려면 다음에서 이 솔루션의 소스 코드와 다른 예제를 검토하는 것이 좋습니다. GitHub의.


저자에 관하여

Amazon SageMaker PlatoBlockchain Data Intelligence에서 RStudio를 사용하여 Amazon SageMaker 모델 구축 파이프라인을 생성하고 R 모델을 배포합니다. 수직 검색. 일체 포함.게오르기오스 쉬나스 EMEA 지역의 AI/ML 전문 솔루션 설계자입니다. 그는 런던에 기반을 두고 있으며 영국 및 아일랜드의 고객과 긴밀하게 협력하고 있습니다. Georgios는 고객이 MLOps 사례에 특히 관심을 갖고 AWS의 프로덕션 환경에서 기계 학습 애플리케이션을 설계 및 배포하고 고객이 대규모로 기계 학습을 수행할 수 있도록 지원합니다. 여가 시간에는 여행, 요리, 친구 및 가족과 함께 시간을 보내는 것을 즐깁니다.

타임 스탬프 :

더보기 AWS 기계 학습