Minimer produksjonseffekten av ML-modelloppdateringer med Amazon SageMaker skyggetesting av PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Minimer produksjonseffekten av ML-modelloppdateringer med Amazon SageMaker-skyggetesting

Amazon SageMaker lar deg nå sammenligne ytelsen til en ny versjon av en modellserveringsstabel med den gjeldende utrullede versjonen før en full produksjonsutrulling ved å bruke en utrullingssikkerhetspraksis kjent som skyggetesting. Skyggetesting kan hjelpe deg med å identifisere potensielle konfigurasjonsfeil og ytelsesproblemer før de påvirker sluttbrukere. Med SageMaker trenger du ikke å investere i å bygge din skyggetestinginfrastruktur, slik at du kan fokusere på modellutvikling. SageMaker tar seg av å distribuere den nye versjonen sammen med den nåværende versjonen som betjener produksjonsforespørsler, og dirigerer en del av forespørslene til skyggeversjonen. Du kan deretter sammenligne ytelsen til de to versjonene ved å bruke beregninger som ventetid og feilfrekvens. Dette gir deg større tillit til at produksjonsutrullinger til SageMaker-inferensendepunkter ikke vil forårsake ytelsesregresjoner, og hjelper deg med å unngå avbrudd på grunn av utilsiktede feilkonfigurasjoner.

I dette innlegget demonstrerer vi denne nye SageMaker-evnen. Den tilsvarende eksempelnotisboken er tilgjengelig i denne GitHub Repository.

Oversikt over løsning

Modellserveringsinfrastrukturen din består av maskinlæringsmodellen (ML), serveringsbeholderen eller dataforekomsten. La oss vurdere følgende scenarier:

  • Du vurderer å promotere en ny modell som har blitt validert offline til produksjon, men ønsker å evaluere operasjonelle ytelsesberegninger, for eksempel ventetid, feilfrekvens og så videre, før du tar denne avgjørelsen.
  • Du vurderer endringer i serveringsinfrastrukturbeholderen din, for eksempel oppdatering av sårbarheter eller oppgradering til nyere versjoner, og ønsker å vurdere virkningen av disse endringene før markedsføring til produksjon.
  • Du vurderer å endre ML-forekomsten din og ønsker å evaluere hvordan den nye forekomsten vil fungere med direkte slutningsforespørsler.

Følgende diagram illustrerer løsningsarkitekturen.

For hvert av disse scenariene, velg en produksjonsvariant du vil teste mot, og SageMaker distribuerer automatisk den nye varianten i skyggemodus og ruter en kopi av slutningsforespørslene til den i sanntid innenfor samme endepunkt. Bare svarene fra produksjonsvarianten returneres til den anropende applikasjonen. Du kan velge å forkaste eller logge svarene til skyggevarianten for sammenligning uten nett. Eventuelt kan du overvåke variantene gjennom et innebygd dashbord med en side-ved-side-sammenligning av ytelsesberegningene. Du kan bruke denne funksjonen enten gjennom SageMaker inference update-endpoint APIs eller gjennom SageMaker-konsollen.

Shadow-varianter bygger på toppen av produksjonsvariantens evne i SageMaker-slutningsendepunkter. For å gjenta, a produksjonsvariant består av ML-modellen, serveringsbeholderen og ML-instansen. Fordi hver variant er uavhengig av andre, kan du ha forskjellige modeller, beholdere eller forekomsttyper på tvers av varianter. SageMaker lar deg spesifisere retningslinjer for automatisk skalering på en per-variant basis, slik at de kan skaleres uavhengig basert på innkommende belastning. SageMaker støtter opptil 10 produksjonsvarianter per endepunkt. Du kan enten konfigurere en variant til å motta en del av den innkommende trafikken ved å angi variantvekter, eller spesifisere målvarianten i den innkommende forespørselen. Svaret fra produksjonsvarianten sendes tilbake til invokeren.

A skyggevariant (ny) har samme komponenter som en produksjonsvariant. En brukerspesifisert del av forespørslene, kjent som trafikkprøveprosent, videresendes til skyggevarianten. Du kan velge å logge inn responsen til skyggevarianten Amazon enkel lagringstjeneste (Amazon S3) eller kast den.

Merk at SageMaker støtter maksimalt én skyggevariant per endepunkt. For et endepunkt med en skyggevariant kan det maksimalt være én produksjonsvariant.

Etter at du har satt opp produksjons- og skyggevariantene, kan du overvåke påkallingsberegninger for både produksjon og skyggevarianter i Amazon CloudWatch under AWS/SageMaker navneområde. Alle oppdateringer til SageMaker-endepunktet er orkestrert ved hjelp av blå/grønne utplasseringer og skje uten tap i tilgjengelighet. Endepunktene dine vil fortsette å svare på produksjonsforespørsler når du legger til, endrer eller fjerner skyggevarianter.

Du kan bruke denne funksjonen på en av to måter:

  • Administrert skyggetesting ved hjelp av SageMaker-konsollen – Du kan utnytte konsollen for en guidet opplevelse for å administrere ende-til-ende-reisen med skyggetesting. Dette lar deg sette opp skyggetester for en forhåndsdefinert varighet, overvåke fremdriften gjennom et direkte dashbord, rydde opp etter fullføring og følge resultatene.
  • Selvbetjent skyggetesting ved hjelp av SageMaker Inference API-er – Hvis distribusjonsarbeidsflyten din allerede bruker opprette/oppdater/slett-endepunkt-APIer, kan du fortsette å bruke dem til å administrere Shadow Variants.

I de følgende avsnittene går vi gjennom hvert av disse scenariene.

Scenario 1 – Administrert skyggetesting ved hjelp av SageMaker-konsollen

Hvis du ønsker å velge SageMaker for å administrere ende-til-ende-arbeidsflyten for å lage, administrere og handle på resultatene av skyggetestene, bør du vurdere å bruke Shadow-testenes funksjon i Inferens-delen av SageMaker-konsollen. Som nevnt tidligere, lar dette deg sette opp skyggetester for en forhåndsdefinert varighet, overvåke fremdriften gjennom et direkte dashbord, presentere oppryddingsalternativer ved fullføring og handle på resultatene. For å lære mer, vennligst besøk skyggetestene seksjon av vår dokumentasjon for en trinnvis gjennomgang av denne funksjonen.

Forutsetninger

Modellene for produksjon og skygge må lages på SageMaker. Vennligst referer til CreateModel API her..

Trinn 1 – Lag en skyggetest

Naviger til slutning delen av venstre navigasjonspanel på SageMaker-konsollen og velg deretter Shadow tests. Dette tar deg til et dashbord med alle de planlagte, kjørende og fullførte skyggetestene. Klikk 'lag en skyggetest'. Skriv inn et navn for testen og velg neste.

Dette tar deg til siden for skyggetestinnstillinger. Du kan velge en eksisterende IAM-rolle eller opprette en som har AmazonSageMakerFullAccess IAM-policy vedlagt. Deretter velger du 'Opprett et nytt endepunkt' og skriv inn et navn (xgb-prod-shadow-1). Du kan legge til én produksjon og én skyggevariant knyttet til dette endepunktet ved å klikke på 'Legge til' i Varianter-delen. Du kan velge modellene du har laget i 'Legg til modell' dialogboks. Dette skaper en produksjon eller variant. Eventuelt kan du endre forekomsttypen og antallet knyttet til hver variant.

All trafikken går til produksjonsvarianten og den svarer på invokasjonsforespørsler. Du kan kontrollere en del av forespørslene som rutes til skyggevarianten ved å endre Traffic Sampling Percentage.

Du kan kontrollere varigheten av testen fra en time til 30 dager. Hvis det ikke er spesifisert, er det som standard 7 dager. Etter denne perioden markeres testen som fullført. Hvis du kjører en test på et eksisterende endepunkt, vil den bli rullet tilbake til tilstanden før testen starter ved fullføring.

Du kan eventuelt fange opp forespørslene og svarene til Shadow-varianten ved å bruke Datafangst alternativer. Hvis det ikke er spesifisert, blir svarene til skyggevarianten forkastet.

Minimer produksjonseffekten av ML-modelloppdateringer med Amazon SageMaker skyggetesting av PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Minimer produksjonseffekten av ML-modelloppdateringer med Amazon SageMaker skyggetesting av PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Trinn 2 – Overvåk en skyggetest

Du kan se listen over skyggetester ved å navigere til Shadow Tests delen under Inferens. Klikk på skyggetesten som ble opprettet i forrige trinn for å se detaljene for en skyggetest og overvåke den mens den pågår eller etter at den er fullført.

Minimer produksjonseffekten av ML-modelloppdateringer med Amazon SageMaker skyggetesting av PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Metrikk-delen gir en sammenligning av nøkkelberegningene og gir overliggende grafer mellom produksjons- og skyggevariantene, sammen med beskrivende statistikk. Du kan sammenligne påkallingsberegninger som f.eks ModelLatency og Invocation4xxErrors samt instansberegninger som f.eks CPUUtilization og DiskUtilization.

Minimer produksjonseffekten av ML-modelloppdateringer med Amazon SageMaker skyggetesting av PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Trinn 3 – Markedsfør Shadow-varianten til den nye produksjonsvarianten

Ved sammenligning kan du enten velge å promotere skyggevarianten til å være den nye produksjonsvarianten eller fjerne skyggevarianten. For begge disse alternativene, velg 'Merk fullført' øverst på siden. Dette gir deg muligheten til å enten fremme eller fjerne skyggevarianten.

Hvis du velger å promotere, vil du bli tatt til en distribusjonsside, der du kan bekrefte variantinnstillingene før distribusjon. Før distribusjon anbefaler vi å dimensjonere skyggevariantene dine slik at de kan håndtere 100 % av påkallingstrafikken. Hvis du ikke bruker skyggetesting for å evaluere alternative forekomsttyper eller -størrelser, kan du bruke "beholde produksjonsvariantinnstillingene. Ellers kan du velge å 'beholde innstillingene for skyggevarianter. Hvis du velger dette alternativet, må du sørge for at trafikksamplingen er satt til 100 %. Alternativt kan du spesifisere forekomsttype og antall hvis du ønsker å overstyre disse innstillingene.

Når du bekrefter distribusjonen, vil SageMaker starte en oppdatering av endepunktet ditt for å promotere skyggevarianten til den nye produksjonsvarianten. Som med SageMaker alle oppdateringer, vil endepunktet ditt fortsatt være operativt under oppdateringen.

Minimer produksjonseffekten av ML-modelloppdateringer med Amazon SageMaker skyggetesting av PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Minimer produksjonseffekten av ML-modelloppdateringer med Amazon SageMaker skyggetesting av PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Scenario 2: Skyggetesting ved bruk av SageMaker-inferens-APIer

Denne delen dekker hvordan du bruker de eksisterende SageMaker create/update/delete-endpoint APIene for å distribuere skyggevarianter.

For dette eksemplet har vi to XGBoost-modeller som representerer to forskjellige versjoner av modellene som er forhåndsopplært. model.tar.gz er modellen som for tiden brukes i produksjon. model2 er den nyere modellen, og vi ønsker å teste ytelsen i form av operasjonelle beregninger som latens før vi bestemmer oss for å bruke den i produksjon. Vi utplasserer model2 som en skyggevariant av model.tar.gz. Begge ferdigtrente modellene oppbevares i den offentlige S3-bøtten s3://sagemaker-sample-files. Vi laster først ned modellen vår lokale dataforekomst og laster deretter opp til S3.

Modellene i dette eksemplet brukes til å forutsi sannsynligheten for at en mobilkunde forlater sin nåværende mobiloperatør. Datasettet vi bruker er offentlig tilgjengelig og ble nevnt i boken Oppdage kunnskap i data av Daniel T. Larose. Disse modellene ble trent ved hjelp av XGB Churn Prediction Notebook i SageMaker. Du kan også bruke dine egne ferdigtrente modeller, i så fall kan du hoppe over nedlasting fra s3://sagemaker-sample-files og kopier dine egne modeller direkte til modell/mappe.

!aws s3 cp s3://sagemaker-sample-files/models/xgb-churn/xgb-churn-prediction-model.tar.gz model/
!aws s3 cp s3://sagemaker-sample-files/models/xgb-churn/xgb-churn-prediction-model2.tar.gz model/

Trinn 1 – Lag modeller

Vi laster opp modellfilene til vår egen S3-bøtte og lager to SageMaker-modeller. Se følgende kode:

model_url = S3Uploader.upload(
    local_path="model/xgb-churn-prediction-model.tar.gz",
    desired_s3_uri=f"s3://{bucket}/{prefix}",
)
model_url2 = S3Uploader.upload(
    local_path="model/xgb-churn-prediction-model2.tar.gz",
    desired_s3_uri=f"s3://{bucket}/{prefix}",
from sagemaker import image_uris
image_uri = image_uris.retrieve("xgboost", boto3.Session().region_name, "0.90-1")
image_uri2 = image_uris.retrieve("xgboost", boto3.Session().region_name, "0.90-2")

model_name = f"DEMO-xgb-churn-pred-{datetime.now():%Y-%m-%d-%H-%M-%S}"
model_name2 = f"DEMO-xgb-churn-pred2-{datetime.now():%Y-%m-%d-%H-%M-%S}"

resp = sm.create_model(
    ModelName=model_name,
    ExecutionRoleArn=role,
    Containers=[{"Image": image_uri, "ModelDataUrl": model_url}],
)

resp = sm.create_model(
    ModelName=model_name2,
    ExecutionRoleArn=role,
    Containers=[{"Image": image_uri2, "ModelDataUrl": model_url2}],
)

Trinn 2 – Distribuer de to modellene som produksjons- og skyggevarianter til et endepunkt i sanntid

Vi lager en endepunktkonfigurasjon med produksjons- og skyggevariantene. De ProductionVariants og ShadowProductionVariants er av spesiell interesse. Begge disse variantene har ml.m5.xlarge forekomster med 4 vCPUer og 16 GiB minne, og den første forekomsttellingen er satt til 1. Se følgende kode:

ep_config_name = f"Shadow-EpConfig-{datetime.now():%Y-%m-%d-%H-%M-%S}"
production_variant_name = "production"
shadow_variant_name = "shadow"
create_endpoint_config_response = sm.create_endpoint_config(
    EndpointConfigName=ep_config_name,
    ProductionVariants=[
    # Type: Array of ProductionVariant (https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html) objects
      { 
         "VariantName": shadow_variant_name,
        {
            "VariantName": production_variant_name,
            "ModelName": model_name,
            "InstanceType": "ml.m5.xlarge",
            "InitialInstanceCount": 2,
            "InitialVariantWeight": 1,
        }
    ],
     # Type: Array of ShadowProductionVariants 
    ShadowProductionVariants = [
         "ModelName": model_name2,
         "InitialInstanceCount": 1,
         "InitialVariantWeight": 0.5,
         "InstanceType": "ml.m5.xlarge" 
      }
   ]
)

Til slutt lager vi produksjons- og skyggevarianten:

endpoint_name = f"xgb-prod-shadow-{datetime.now():%Y-%m-%d-%H-%M-%S}"
create_endpoint_api_response = sm.create_endpoint(
                                    EndpointName=endpoint_name,
                                    EndpointConfigName=ep_config_name,
                                )

Trinn 3 – Påkall endepunktet for testing

Etter at endepunktet er opprettet, kan du begynne å kalle det. Vi sender rundt 3,000 forespørsler på en sekvensiell måte:

def invoke_endpoint(endpoint_name, wait_interval_sec=0.01, should_raise_exp=False):
    with open("test_data/test-dataset-input-cols.csv", "r") as f:
        for row in f:
            payload = row.rstrip("n")
            try:
                for i in range(10): #send the same payload 10 times for testing purpose
                    response = sm_runtime.invoke_endpoint(
                        EndpointName=endpoint_name, ContentType="text/csv", Body=payload
                    )
            except Exception as e:
                print("E", end="", flush=True)
                if should_raise_exp:
                    raise e

invoke_endpoint(endpoint_name)

Trinn 4 – Sammenlign beregninger

Nå som vi har distribuert både produksjons- og skyggemodellene, la oss sammenligne påkallingsberegningene. For en liste over påkallingsberegninger som er tilgjengelige for sammenligning, se Overvåk Amazon SageMaker med Amazon CloudWatch. La oss starte med å sammenligne påkallelser mellom produksjons- og skyggevariantene.

De InvocationsPerInstance metrisk refererer til antall påkallinger sendt til produksjonsvarianten. En brøkdel av disse påkallelsene, spesifisert i variantvekten, sendes til skyggevarianten. Påkallingen per instans beregnes ved å dele det totale antallet påkallinger på antall instanser i en variant. Som vist i de følgende diagrammene, kan vi bekrefte at både produksjons- og skyggevariantene mottar invokasjonsforespørsler i henhold til vektene spesifisert i endepunktkonfigurasjonen.

Minimer produksjonseffekten av ML-modelloppdateringer med Amazon SageMaker skyggetesting av PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Minimer produksjonseffekten av ML-modelloppdateringer med Amazon SageMaker skyggetesting av PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

La oss deretter sammenligne modellforsinkelsen (ModelLatency metrisk) mellom produksjons- og skyggevariantene. Modelllatens er tiden det tar en modell å svare, sett fra SageMaker. Vi kan observere hvordan modelllatensen til skyggevarianten er sammenlignet med produksjonsvarianten uten å utsette sluttbrukere for skyggevarianten.

Minimer produksjonseffekten av ML-modelloppdateringer med Amazon SageMaker skyggetesting av PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Vi forventer overhead latens (OverheadLatency metrisk) for å være sammenlignbare på tvers av produksjons- og skyggevarianter. Overhead latency er intervallet målt fra det tidspunktet SageMaker mottar forespørselen til den returnerer et svar til klienten, minus modelllatensen.

Minimer produksjonseffekten av ML-modelloppdateringer med Amazon SageMaker skyggetesting av PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Trinn 5- Markedsfør din skyggevariant

For å promotere skyggemodellen til produksjon, lag en ny endepunktkonfigurasjon med gjeldende ShadowProductionVariant som den nye ProductionVariant og fjern ShadowProductionVariant. Dette vil fjerne strømmen ProductionVariant og fremme skyggevarianten til å bli den nye produksjonsvarianten. Som alltid er alle SageMaker-oppdateringer orkestrert som blå/grønne distribusjoner under panseret, og det er ingen tap av tilgjengelighet mens du utfører oppdateringen.

Eventuelt kan du utnytte Utplasseringsrekkverk hvis du vil bruke alt på en gang trafikkskifting og automatisk tilbakeføring under oppdateringen.

promote_ep_config_name = f"PromoteShadow-EpConfig-{datetime.now():%Y-%m-%d-%H-%M-%S}"

create_endpoint_config_response = sm.create_endpoint_config(
    EndpointConfigName=promote_ep_config_name,
    ProductionVariants=[
        {
            "VariantName": shadow_variant_name,
            "ModelName": model_name2,
            "InstanceType": "ml.m5.xlarge",
            "InitialInstanceCount": 2,
            "InitialVariantWeight": 1.0,
        }
    ],
)
print(f"Created EndpointConfig: {create_endpoint_config_response['EndpointConfigArn']}")

update_endpoint_api_response = sm.update_endpoint(
    EndpointName=endpoint_name,
    EndpointConfigName=promote_ep_config_name,
)

wait_for_endpoint_in_service(endpoint_name)

sm.describe_endpoint(EndpointName=endpoint_name)

Trinn 6 – Rydd opp

Hvis du ikke planlegger å bruke dette endepunktet videre, bør du slette endepunktet for å unngå ekstra kostnader og rydde opp i andre ressurser som er opprettet i denne bloggen.

dsm.delete_endpoint(EndpointName=endpoint_name)
sm.delete_endpoint_config(EndpointConfigName=ep_config_name)
sm.delete_endpoint_config(EndpointConfigName=promote_ep_config_name)
sm.delete_model(ModelName=model_name)
sm.delete_model(ModelName=model_name2)

konklusjonen

I dette innlegget introduserte vi en ny funksjon for SageMaker-inferens for å sammenligne ytelsen til en ny versjon av en modellserveringsstabel med den for øyeblikket utplasserte versjonen før en full produksjonsutrulling ved å bruke en utrullingssikkerhetspraksis kjent som skyggetesting. Vi ledet deg gjennom fordelene ved å bruke skyggevarianter og metoder for å konfigurere variantene med en ende-til-ende eksempel. For å lære mer om skyggevarianter, se skyggetester dokumentasjon.


Om forfatterne

Minimer produksjonseffekten av ML-modelloppdateringer med Amazon SageMaker skyggetesting av PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Raghu Ramesha er en maskinlæringsløsningsarkitekt med Amazon SageMaker Service-teamet. Han fokuserer på å hjelpe kunder med å bygge, distribuere og migrere ML-produksjonsarbeidsmengder til SageMaker i stor skala. Han spesialiserer seg på maskinlæring, AI og datasynsdomener, og har en mastergrad i informatikk fra UT Dallas. På fritiden liker han å reise og fotografere.

Minimer produksjonseffekten av ML-modelloppdateringer med Amazon SageMaker skyggetesting av PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Qingwei Li er maskinlæringsspesialist hos Amazon Web Services. Han fikk sin doktorgrad. i Operations Research etter at han brøt sin rådgivers forskningsbevilgningskonto og ikke klarte å levere Nobelprisen han lovet. For tiden hjelper han kunder i finans- og forsikringsbransjen med å bygge maskinlæringsløsninger på AWS. På fritiden liker han å lese og undervise.

Minimer produksjonseffekten av ML-modelloppdateringer med Amazon SageMaker skyggetesting av PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Qiyun Zhao er en senior programvareutviklingsingeniør med Amazon SageMaker Inference Platform-teamet. Han er hovedutvikleren av Deployment Guardrails og Shadow Deployments, og han fokuserer på å hjelpe kunder med å administrere ML-arbeidsbelastninger og distribusjoner i stor skala med høy tilgjengelighet. Han jobber også med utvikling av plattformarkitektur for rask og sikker distribusjon av ML-jobber og kjører ML-eksperimenter på nett på en enkel måte. På fritiden liker han å lese, spille og reise.

Minimer produksjonseffekten av ML-modelloppdateringer med Amazon SageMaker skyggetesting av PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Tarun Sairam er senior produktsjef for Amazon SageMaker Inference. Han er interessert i å lære om de siste trendene innen maskinlæring og hjelpe kunder med å utnytte dem. På fritiden liker han å sykle, stå på ski og spille tennis.

Tidstempel:

Mer fra AWS maskinlæring