Opret Amazon SageMaker-modelbygningspipelines og implementer R-modeller ved hjælp af RStudio på Amazon SageMaker PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Opret Amazon SageMaker-modelbygningspipelines og implementer R-modeller ved hjælp af RStudio på Amazon SageMaker

I november 2021 i samarbejde med RStudio PBC, Vi annoncerede den generelle tilgængelighed af RStudio på Amazon SageMaker, branchens første fuldt administrerede RStudio Workbench IDE i skyen. Du kan nu medbringe din nuværende RStudio-licens til nemt at migrere dine selvadministrerede RStudio-miljøer til Amazon SageMaker i nogle få enkle trin.

RStudio er en af ​​de mest populære IDE'er blandt R-udviklere til maskinlæring (ML) og datavidenskabsprojekter. RStudio leverer open source-værktøjer til R og virksomhedsklar professionel software til datavidenskabsteams til at udvikle og dele deres arbejde i organisationen. At bringe RStudio på SageMaker giver dig ikke kun adgang til AWS-infrastrukturen på en fuldt administreret måde, men det giver dig også indbygget adgang til SageMaker.

I dette indlæg undersøger vi, hvordan du kan bruge SageMaker-funktioner via RStudio på SageMaker til at bygge en SageMaker-pipeline, der bygger, behandler, træner og registrerer dine R-modeller. Vi udforsker også brugen af ​​SageMaker til vores modelimplementering, alt ved hjælp af R.

Løsningsoversigt

Følgende diagram viser den arkitektur, der er brugt i vores løsning. Al kode brugt i dette eksempel kan findes i GitHub repository.

Forudsætninger

For at følge dette indlæg kræves adgang til RStudio på SageMaker. Hvis du er ny til at bruge RStudio på SageMaker, skal du gennemgå Kom godt i gang med RStudio på Amazon SageMaker.

Vi skal også bygge brugerdefinerede Docker-containere. Vi bruger AWS CodeBuild at bygge disse containere, så du skal bruge et par ekstra AWS identitets- og adgangsstyring (IAM) tilladelser, som du måske ikke har som standard. Før du fortsætter, skal du sikre dig, at den IAM-rolle, du bruger, har en tillidspolitik med CodeBuild:

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

Følgende tilladelser kræves også i IAM-rollen for at køre en build i CodeBuild og skubbe billedet til Amazon Elastic Container Registry (Amazon 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"
                }
            }
        }
    ]
}

Opret baseline R-containere

For at bruge vores R-scripts til bearbejdning og træning på SageMaker-bearbejdnings- og træningsjob, skal vi skabe vores egne Docker containere indeholdende den nødvendige kørselstid og pakker. Muligheden for at bruge din egen container, som er en del af SageMaker-tilbuddet, giver stor fleksibilitet til udviklere og dataforskere til at bruge de værktøjer og rammer, de selv vælger, stort set uden begrænsninger.

Vi opretter to R-aktiverede Docker-containere: en til behandling af job og en til træning og implementering af vores modeller. Behandling af data kræver typisk andre pakker og biblioteker end modellering, så det giver mening her at adskille de to faser og bruge forskellige containere.

For flere detaljer om brug af beholdere med SageMaker, se Brug af Docker-containere med SageMaker.

Den beholder, der anvendes til forarbejdning, er defineret som følger:

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"]

Til dette indlæg bruger vi en enkel og forholdsvis let beholder. Afhængigt af dine eller din organisations behov vil du måske forudinstallere flere R-pakker.

Den container, der bruges til træning og implementering, er defineret som følger:

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-kernen kører på en Docker-container, så du vil ikke være i stand til at bygge og implementere containerne ved hjælp af Docker-kommandoer direkte på din Studio-session. I stedet kan du bruge det meget nyttige bibliotek sagemaker-studio-image-build, som i det væsentlige outsourcer opgaven med at bygge containere til CodeBuild.

Med følgende kommandoer opretter vi to Amazon ECR-registre: sagemaker-r-processing , sagemaker-r-train-n-deploy, og byg de respektive containere, som vi bruger senere:

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")

Opret pipeline

Nu hvor containerne er bygget og klar, kan vi skabe SageMaker-pipeline, der orkestrerer modelbygningens arbejdsgang. Den fulde kode for dette er under filen pipeline.R i depotet. Den nemmeste måde at oprette en SageMaker-pipeline på er ved at bruge SageMaker SDK, som er et Python-bibliotek, som vi kan få adgang til ved hjælp af biblioteket retikulere. Dette giver os adgang til alle funktioner i SageMaker uden at forlade R-sprogmiljøet.

Den pipeline, vi bygger, har følgende komponenter:

  • Forbehandlingstrin – Dette er et SageMaker-behandlingsjob (ved at bruge sagemaker-r-processing container) ansvarlig for at forbehandle dataene og opdele dataene i tog- og testdatasæt.
  • Træningstrin – Dette er et SageMaker træningsjob (ved hjælp af sagemaker-r-train-n-deploy container) ansvarlig for træning af modellen. I dette eksempel træner vi en simpel lineær model.
  • Evalueringstrin – Dette er et SageMaker-behandlingsjob (ved at bruge sagemaker-r-processing container) ansvarlig for at udføre evaluering af modellen. Specifikt i dette eksempel er vi interesseret i RMSE (root mean square error) på testdatasættet, som vi ønsker at bruge i det næste trin samt at associere med selve modellen.
  • Betinget trin – Dette er et betinget trin, der er hjemmehørende i SageMaker-pipelines, der giver os mulighed for at forgrene pipeline-logikken baseret på en eller anden parameter. I dette tilfælde forgrener pipelinen sig baseret på værdien af ​​RMSE, der er beregnet i det foregående trin.
  • Registrer modeltrin – Hvis det foregående betingede trin er True, og modellens ydeevne er acceptabel, så registreres modellen i modelregistret. For mere information, se Registrer og implementer modeller med Model Registry.

Kald først upsert-funktionen for at oprette (eller opdatere) pipelinen, og kald derefter startfunktionen for faktisk at begynde at køre pipelinen:

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()

Undersøg pipeline- og modelregistret

En af de gode ting ved at bruge RStudio på SageMaker er, at du ved at være på SageMaker-platformen kan bruge det rigtige værktøj til det rigtige job og hurtigt skifte mellem dem baseret på, hvad du skal gøre.

Så snart vi starter rørledningen, kan vi skifte til Amazon SageMaker Studio, som giver os mulighed for at visualisere rørledningen og overvåge nuværende og tidligere kørsler af den.

For at se detaljer om den pipeline, vi lige har oprettet og kørt, skal du navigere til Studio IDE-grænsefladen, vælge SageMaker ressourcer, vælg Rørledninger på rullemenuen, og vælg pipeline (i dette tilfælde, AbalonePipelineUsingR).

Opret Amazon SageMaker-modelbygningspipelines og implementer R-modeller ved hjælp af RStudio på Amazon SageMaker PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Dette afslører detaljer om rørledningen, inklusive alle nuværende og tidligere kørsler. Vælg den seneste for at få en visuel repræsentation af pipelinen, som på følgende skærmbillede.

DAG'en for pipelinen oprettes automatisk af tjenesten baseret på dataafhængighederne mellem trinene såvel som baseret på tilpassede tilføjede afhængigheder (ikke tilføjet nogen i dette eksempel).

Når kørslen er færdig, hvis den lykkes, bør du se alle trinene blive grønne.

Opret Amazon SageMaker-modelbygningspipelines og implementer R-modeller ved hjælp af RStudio på Amazon SageMaker PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Hvis du vælger et af de individuelle trin, vises detaljer om det specifikke trin, herunder input, output, logfiler og indledende konfigurationsindstillinger. Dette giver dig mulighed for at bore ned i rørledningen og undersøge eventuelle fejlslagne trin.

På samme måde, når pipelinen er færdig med at køre, gemmes en model i modelregistret. For at få adgang til det, i SageMaker ressourcer vælg Modelregistrering på rullemenuen og vælg din model. Dette afslører listen over registrerede modeller, som vist på det følgende skærmbillede. Vælg en for at åbne detaljeringssiden for den pågældende modelversion.

Opret Amazon SageMaker-modelbygningspipelines og implementer R-modeller ved hjælp af RStudio på Amazon SageMaker PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Når du har åbnet en version af modellen, skal du vælge Opdater status , Godkend at godkende modellen.

På dette tidspunkt, baseret på din use case, kan du konfigurere denne godkendelse til at udløse yderligere handlinger, herunder implementeringen af ​​modellen i henhold til dine behov.

Serverløs udrulning af modellen

Når du har trænet og registreret en model på SageMaker, er det ligetil at implementere modellen på SageMaker.

Der er flere muligheder for, hvordan du kan implementere en model, såsom batch-inferens, realtidsslutpunkter eller asynkrone slutpunkter. Hver metode kommer med flere nødvendige konfigurationer, herunder valg af den instanstype, du ønsker, samt skaleringsmekanismen.

Til dette eksempel bruger vi den nyligt annoncerede funktion i SageMaker, Serverløs slutning (i preview-tilstand som i skrivende stund), for at implementere vores R-model på et serverløst slutpunkt. For denne type endepunkt definerer vi kun mængden af ​​RAM, som vi ønsker at blive allokeret til modellen til slutning, såvel som det maksimale antal tilladte samtidige påkald af modellen. SageMaker sørger for at være vært for modellen og automatisk skalering efter behov. Du debiteres kun for det nøjagtige antal sekunder og data, der bruges af modellen, uden omkostninger for inaktiv tid.

Du kan implementere modellen til et serverløst slutpunkt med følgende kode:

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")

Hvis du ser fejlen ClientError: An error occurred (ValidationException) when calling the CreateModel operation: Invalid approval status "PendingManualApproval" den model, du vil implementere, er ikke blevet godkendt. Følg trinene fra det forrige afsnit for at godkende din model.

Kald slutpunktet ved at sende en anmodning til det HTTP-slutpunkt, vi implementerede, eller brug i stedet SageMaker SDK. I den følgende kode kalder vi slutpunktet på nogle testdata:

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)

Slutpunktet, vi påberåbte, var et serverløst slutpunkt, og som sådan bliver vi debiteret for den nøjagtige varighed og de anvendte data. Du bemærker måske, at første gang du kalder slutpunktet, tager det cirka et sekund at reagere. Dette skyldes koldstartstidspunktet for det serverløse slutpunkt. Hvis du laver en ny påkaldelse kort efter, returnerer modellen forudsigelsen i realtid, fordi den allerede er varm.

Når du er færdig med at eksperimentere med slutpunktet, kan du slette det med følgende kommando:

predictor$delete_endpoint(delete_endpoint_config=TRUE)

Konklusion

I dette indlæg gik vi gennem processen med at skabe en SageMaker-pipeline ved hjælp af R i vores RStudio-miljø og viste, hvordan man implementerer vores R-model på et serverløst slutpunkt på SageMaker ved hjælp af SageMaker-modelregistret.

Med kombinationen af ​​RStudio og SageMaker kan du nu oprette og orkestrere komplette end-to-end ML-workflows på AWS ved at bruge vores foretrukne sprog, R.

For at dykke dybere ned i denne løsning opfordrer jeg dig til at gennemgå kildekoden til denne løsning samt andre eksempler på GitHub.


Om forfatteren

Opret Amazon SageMaker-modelbygningspipelines og implementer R-modeller ved hjælp af RStudio på Amazon SageMaker PlatoBlockchain Data Intelligence. Lodret søgning. Ai.Georgios Schinas er en Specialist Solutions Architect for AI/ML i EMEA-regionen. Han er baseret i London og arbejder tæt sammen med kunder i Storbritannien og Irland. Georgios hjælper kunder med at designe og implementere maskinlæringsapplikationer i produktion på AWS med en særlig interesse i MLOps-praksis og gør det muligt for kunder at udføre maskinlæring i stor skala. I sin fritid nyder han at rejse, lave mad og tilbringe tid med venner og familie.

Tidsstempel:

Mere fra AWS maskinindlæring