Modellvertsmønstre i SageMaker: Beste praksis for testing og oppdatering av modeller på SageMaker PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Modellvertsmønstre i SageMaker: Beste praksis for testing og oppdatering av modeller på SageMaker

Amazon SageMaker er en fullstendig administrert tjeneste som gir utviklere og dataforskere muligheten til raskt å bygge, trene og distribuere maskinlæringsmodeller (ML). Med SageMaker kan du distribuere ML-modellene dine på vertsbaserte endepunkter og få konklusjonsresultater i sanntid. Du kan enkelt se ytelsesberegningene for endepunktene dine i Amazon CloudWatch, automatisk skaler endepunkter basert på trafikk, og oppdater modellene dine i produksjon uten å miste noen tilgjengelighet. SageMaker tilbyr et bredt utvalg av alternativer for å distribuere ML-modeller for slutning på en av følgende måter, avhengig av bruksområdet ditt:

  • For synkrone spådommer som må serveres i størrelsesorden millisekunder, bruk SageMaker sanntidsslutning
  • For arbeidsbelastninger som har inaktive perioder mellom trafikksprut og som tåler kaldstart, bruk Serverløs slutning
  • Bruk SageMaker for forespørsler med store nyttelaststørrelser på opptil 1 GB, lange behandlingstider (opptil 15 minutter) og nesten sanntids latenskrav (sekunder til minutter). Asynkron inferens
  • For å få spådommer for et helt datasett, bruk SageMaker batch-transformasjon

Sanntidsslutninger er ideell for inferensarbeidsbelastninger der du har sanntid, interaktive krav til lav latens. Du distribuerer modellen din til SageMaker-vertstjenester og får et endepunkt som kan brukes til slutninger. Disse endepunktene støttes av en fullstendig administrert infrastruktur og støtte automatisk skalering. Du kan forbedre effektiviteten og kostnadene ved å kombinere flere modeller til ett enkelt endepunkt ved å bruke flermodell-endepunkter or endepunkter for flere beholdere.

Det er visse brukstilfeller der du ønsker å distribuere flere varianter av samme modell i produksjon for å måle ytelsen, måle forbedringer eller kjøre A/B-tester. I slike tilfeller er SageMaker multivariantendepunkter nyttige fordi de lar deg distribuere flere produksjonsvarianter av en modell til samme SageMaker-endepunkt.

I dette innlegget diskuterer vi SageMaker multi-variant endepunkter og beste praksis for optimalisering.

Sammenligning av SageMaker sanntidsslutningsalternativer

Følgende diagram gir en rask oversikt over sanntidsslutningsalternativene med SageMaker.

Et endepunkt med én modell lar deg distribuere én modell på en beholder som er vert for dedikerte forekomster eller serverløs for lav ventetid og høy gjennomstrømning. Du kan lage en modell og hente a SageMaker-støttet bilde for populære rammeverk som TensorFlow, PyTorch, Scikit-learn og mer. Hvis du jobber med et tilpasset rammeverk for modellen din, kan du også ta med egen container som installerer avhengighetene dine.

SageMaker støtter også mer avanserte alternativer som multi-model endpoints (MMEs) og multi-container endpoints (MCEs). MME-er er nyttige når du har å gjøre med hundrevis til titusenvis av modeller og der du ikke trenger å distribuere hver modell som et individuelt endepunkt. MMEer lar deg være vert for flere modeller på en kostnadseffektiv, skalerbar måte innenfor samme endepunkt ved å bruke en delt serveringsbeholder som er vert for en forekomst. Den underliggende infrastrukturen (beholder og instans) forblir den samme, men modellene lastes og losses dynamisk fra en felles S3-plassering, i henhold til bruk og mengden minne som er tilgjengelig på endepunktet. Applikasjonen din trenger ganske enkelt å inkludere et API-kall med målmodellen til dette endepunktet for å oppnå lav latens og høy gjennomstrømming. I stedet for å betale for et separat endepunkt for hver enkelt modell, kan du være vert for mange modeller for prisen av et enkelt endepunkt.

MCE-er lar deg kjøre opptil 15 forskjellige ML-beholdere på ett enkelt endepunkt og påkalle dem uavhengig. Du kan bygge disse ML-beholderne på forskjellige serveringsstabler (som ML-rammeverk, modellserver og algoritme), som skal kjøres på samme endepunkt for kostnadsbesparelser. Du kan sy beholderne sammen i en seriell inferensrørledning eller påkalle beholderen uavhengig. Dette kan være ideelt når du har flere ulike ML-modeller som har ulike trafikkmønstre og lignende ressursbehov. Eksempler på når man skal bruke MCE-er inkluderer, men er ikke begrenset til, følgende:

  • Hosting av modeller på tvers av forskjellige rammeverk (som TensorFlow, PyTorch og Scikit-learn) som ikke har tilstrekkelig trafikk til å mette hele kapasiteten til en forekomst
  • Hosting av modeller fra samme rammeverk med forskjellige ML-algoritmer (som anbefalinger, prognoser eller klassifisering) og behandlerfunksjoner
  • Sammenligninger av lignende arkitekturer som kjører på forskjellige rammeverkversjoner (som TensorFlow 1.x vs. TensorFlow 2.x) for scenarier som A/B-testing

SageMaker multi-variant endpoints (MVEs) lar deg teste flere modeller eller modellversjoner bak samme endepunkt ved å bruke produksjonsvarianter. Hver produksjonsvariant identifiserer en ML-modell og ressursene som er distribuert for å være vert for modellen, for eksempel serveringsbeholderen og forekomsten.

Oversikt over SageMaker multi-variant endepunkter

I produksjons-ML-arbeidsflyter foredler dataforskere og ML-ingeniører modeller gjennom en rekke metoder, for eksempel omskolering basert på data/modell/konseptdrift, hyperparameterinnstilling, funksjonsvalg, rammeverkvalg og mer. Å utføre A/B-testing mellom en ny modell og en gammel modell med produksjonstrafikk kan være et effektivt siste trinn i valideringsprosessen for en ny modell. I A/B-testing tester du ulike varianter av modellene dine og sammenligner hvordan hver variant presterer i forhold til hverandre. Du velger deretter den modellen med best ytelse for å erstatte den forrige modellen med en ny versjon som gir bedre ytelse enn den forrige versjonen. Ved å bruke produksjonsvarianter kan du teste disse ML-modellene og ulike modellversjoner bak samme endepunkt. Du kan trene disse ML-modellene ved å bruke forskjellige datasett, forskjellige algoritmer og ML-rammeverk; distribuer dem til forskjellige instanstyper; eller en kombinasjon av disse alternativene. Lastbalanseren koblet til SageMaker-endepunktet gir muligheten til å distribuere invokasjonsforespørslene på tvers av flere produksjonsvarianter. Du kan for eksempel distribuere trafikk mellom produksjonsvarianter ved å spesifisere trafikkfordelingen for hver variant, eller du kan påkalle en spesifikk variant direkte for hver forespørsel.

Du kan også konfigurere policyen for automatisk skalering til å automatisk skalere variantene dine inn eller ut basert på beregninger som forespørsler per sekund.

Følgende diagram illustrerer hvordan MVE fungerer mer detaljert.

SageMaker multi-variant endepunkt

Det er også veldig enkelt å distribuere en MVE. Alt du trenger å gjøre er å definere modellobjekter med bildet og modelldataene ved å bruke create_model konstruere fra SageMaker Python SDK, og definere endepunktkonfigurasjonene ved hjelp av production_variant konstruksjoner for å lage produksjonsvarianter, hver med sine egne forskjellige modell- og ressurskrav (forekomsttype og antall). Dette gjør at du også kan teste modeller på forskjellige instanstyper. For å distribuere, bruk endpoint_from_production_variant konstruksjon for å lage endepunktet.

Under opprettelse av endepunkt leverer SageMaker vertsforekomsten spesifisert i endepunktinnstillingene og laster ned modellen og slutningsbeholderen spesifisert av produksjonsvarianten til vertsforekomsten. Hvis et vellykket svar returneres etter å ha startet beholderen og utført en helsesjekk med en ping, sendes en melding som indikerer at endepunktopprettelsen er fullført til brukeren. Se følgende kode:

sm_session.create_model(
	name=model_name,
	role=role,
	container_defs={'Image':  image_uri, 'ModelDataUrl': model_url}
	)

sm_session.create_model(
	name=model_name2,
	role=role,
	container_defs={'Image':  image_uri, 'ModelDataUrl': model_url2 }
	)

variant1 = production_variant(
	model_name=model_name,
	instance_type="ml.c5.4xlarge",
	initial_instance_count=1,
	variant_name="Variant1",
	initial_weight=1
	)

variant2 = production_variant(
	model_name=model_name2,
	instance_type="ml.m5.4xlarge",
	initial_instance_count=1,
	variant_name="Variant2",
	initial_weight=1
	)

sm_session.endpoint_from_production_variants(
	name=endpoint_name,
	production_variants=[variant1,  variant2]
	)

I det foregående eksemplet laget vi to varianter, hver med sin egen modell (disse kan også ha forskjellige forekomsttyper og antall). Vi setter en initial_weight av 1 for begge varianter: dette betyr at 50 % av forespørslene våre går til Variant1, og de resterende 50 % til Variant2. Summen av vekter på tvers av begge variantene er 2 og hver variant har vekttilordning 1. Dette innebærer at hver variant mottar 50 % av den totale trafikken.

Å påkalle endepunktet ligner på den vanlige SageMaker-konstruksjonen invoke_endpoint; du kan ringe endepunktet direkte med dataene som nyttelast:

sm_runtime.invoke_endpoint(
	EndpointName=endpoint_name,
	ContentType="text/csv",
	Body=payload
	)

SageMaker sender ut beregninger som f.eks Latency og Invocations for hver variant i CloudWatch. For en fullstendig liste over beregninger som SageMaker sender ut, se Overvåk Amazon SageMaker med Amazon CloudWatch. Du kan spørre CloudWatch for å få antall påkallinger per variant, for å se hvordan påkallinger er delt på tvers av varianter som standard.

For å starte en spesifikk versjon av modellen, spesifiser en variant som TargetVariant i samtalen til invoke_endpoint:

sm_runtime.invoke_endpoint(
	EndpointName=endpoint_name,
	ContentType="text/csv",
	Body=payload,
	TargetVariant="Variant1"
	)

Du kan evaluere ytelsen til hver produksjonsvariant ved å gjennomgå beregninger som nøyaktighet, presisjon, tilbakekalling, F1-poengsum og mottakerdriftskarakteristikk/område under kurven for hver variant ved å bruke Amazon SageMaker modellmonitor. Du kan deretter bestemme deg for å øke trafikken til den beste modellen ved å oppdatere vektene som er tildelt hver variant ved å ringe Oppdater EndpointWeightsAndCapasities. Dette endrer trafikkdistribusjonen til produksjonsvariantene dine uten å kreve oppdateringer av endepunktet. Så i stedet for 50 % av trafikken fra det første oppsettet, flytter vi 75 % av trafikken til Variant2 ved å tildele nye vekter til hver variant ved hjelp av UpdateEndpointWeightsAndCapacities. Se følgende kode:

sm.update_endpoint_weights_and_capacities(
	EndpointName=endpoint_name,
	DesiredWeightsAndCapacities=[
	{
		"DesiredWeight": 25,
		"VariantName": variant1["VariantName"]
	},
	{
		"DesiredWeight": 75,
		"VariantName": variant2["VariantName"]
	}
] )

Når du er fornøyd med en variants ytelse, kan du rute 100 % av trafikken til den varianten. Du kan for eksempel stille inn vekten for Variant1 til 0 og vekten for Variant2 til 1. SageMaker sender deretter 100 % av alle slutningsforespørsler til Variant2. Du kan da trygt oppdatere endepunktet og slette Variant1 fra endepunktet ditt. Du kan også fortsette å teste nye modeller i produksjon ved å legge til nye varianter til endepunktet ditt. Du kan også konfigurere disse endepunktene til å skalere automatisk basert på trafikken endepunktene mottar.

Fordeler med multi-variant endepunkter

SageMaker MVEer lar deg gjøre følgende:

  • Distribuer og test flere varianter av en modell ved å bruke det samme SageMaker-endepunktet. Dette er nyttig for å teste varianter av en modell i produksjon. Anta for eksempel at du har distribuert en modell i produksjon. Du kan teste en variant av modellen ved å lede en liten mengde trafikk, for eksempel 5 %, til den nye modellen.
  • Evaluer modellytelsen i produksjonen uten å forstyrre trafikken ved å overvåke driftsmålinger for hver variant i CloudWatch.
  • Oppdater modeller i produksjon uten å miste noen tilgjengelighet. Du kan endre et endepunkt uten å ta modeller som allerede er distribuert i produksjon ut av drift. Du kan for eksempel legge til nye modellvarianter, oppdatere ML-beregningsforekomstkonfigurasjonene til eksisterende modellvarianter eller endre fordelingen av trafikk mellom modellvarianter. For mer informasjon, se Oppdater endepunkt og Oppdater EndpointWeightsAndCapasities.

Utfordringer ved bruk av multi-variant endepunkter

SageMaker MVEer kommer med følgende utfordringer:

  • Lastetesting – Du må legge inn en god del innsats og ressurser for testing og modellmatrisesammenlikninger for hver variant. For at en A/B-test skal anses som vellykket, må du utføre en statistisk analyse av beregningene som er samlet inn fra testen for å finne ut om det er et statistisk signifikant resultat. Det kan bli utfordrende å minimere å utforske varianter med dårlige resultater. Du kan potensielt bruke den flerarmede banditten optimaliseringsteknikk for å unngå å sende trafikk til eksperimenter som ikke fungerer og optimalisere ytelsen mens du tester. For belastningstesting kan du også utforske Amazon SageMaker Inference Recommender å utføre omfattende benchmarks basert på produksjonskrav for ventetid og gjennomstrømning, tilpassede trafikkmønstre og forekomster (opptil 10) som du velger.
  • Tett kobling mellom modellvariant og endepunkt – Det kan bli vanskelig avhengig av modellens distribusjonsfrekvens, fordi endepunktet kan havne i updating status for hver produksjonsvariant som oppdateres. SageMaker støtter også utplasseringsrekkverk, som du enkelt kan bytte fra dagens modell i produksjon til en ny på en kontrollert måte. Dette alternativet introduserer kanarifugl og lineær trafikkskiftende moduser slik at du kan ha detaljert kontroll over flyttingen av trafikk fra din nåværende modell til den nye i løpet av oppdateringen. Med innebygde sikkerhetstiltak som automatisk tilbakeføring, kan du fange opp problemer tidlig og automatisk iverksette korrigerende tiltak før de forårsaker betydelig produksjonspåvirkning.

Beste praksis for endepunkter med flere varianter

Når du er vert for modeller som bruker SageMaker MVE-er, bør du vurdere følgende:

  • SageMaker er flott for å teste nye modeller fordi du enkelt kan distribuere dem i et A/B-testmiljø og du betaler kun for det du bruker. Du belastes per forbrukt forekomsttime for hver forekomst mens endepunktet kjører. Når du er ferdig med testene og ikke bruker endepunktet eller variantene mye lenger, bør du slette det for å spare kostnader. Du kan alltid gjenskape den når du trenger den igjen fordi modellen er lagret i Amazon enkel lagringstjeneste (Amazon S3).
  • Du bør bruke den mest optimale forekomsttypen og -størrelsen for å distribuere modeller. SageMaker tilbyr for tiden ML-beregningsforekomster på ulike familier. En endepunktforekomst kjører hele tiden (mens forekomsten er i bruk). Derfor kan valg av riktig type forekomst ha en betydelig innvirkning på totalkostnaden og ytelsen til ML-modeller. Lasttesting er den beste fremgangsmåten for å bestemme riktig forekomsttype og flåtestørrelse, med eller uten automatisk skalering for live-endepunktet for å unngå overforsyning og betale ekstra for kapasitet du ikke trenger.
  • Du kan overvåke modellytelse og ressursutnyttelse i CloudWatch. Du kan konfigurere en ProductionVariant å bruke Applikasjonsautomatisk skalering. For å spesifisere beregningene og målverdiene for en skaleringspolicy, konfigurerer du en målsporingsskaleringspolicy. Du kan bruke enten en forhåndsdefinert beregning eller en egendefinert beregning. For mer informasjon om syntaks for policykonfigurasjon, se TargetTrackingScalingPolicyConfiguration. For informasjon om konfigurering av automatisk skalering, se Skala Amazon SageMaker-modeller automatisk. For raskt å definere en målsporingsskaleringspolicy for en variant, kan du velge en spesifikk CloudWatch-beregning og angi terskelverdier. Bruk for eksempel metrikk SageMakerVariantInvocationsPerInstance for å overvåke gjennomsnittlig antall ganger per minutt hver forekomst for en variant påkalles, eller bruk beregning CPUUtilization å overvåke summen av arbeid som håndteres av en CPU. Følgende eksempel bruker SageMakerVariantInvocationsPerInstance forhåndsdefinert beregning for å justere antall variantforekomster slik at hver forekomst har en InvocationsPerInstance metrikk på 70:
{
	"TargetValue": 70.0,
	"PredefinedMetricSpecification":
	{
		"PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
	}
}

  • Endring eller sletting av modellartefakter eller endring av slutningskode etter utplassering av en modell gir uforutsigbare resultater. Før du distribuerer modeller til produksjon, er det en god praksis å sjekke om modellverten i lokal modus er vellykket etter tilstrekkelig feilsøking av slutningskodebitene (som f.eks. model_fn, input_fn, predict_fnog output_fn) i det lokale utviklingsmiljøet som en SageMaker-notebook-forekomst eller lokal server. Hvis du trenger å endre eller slette modellartefakter eller endre slutningskode, endre endepunktet ved å gi en ny endepunktkonfigurasjon. Etter at du har angitt den nye endepunktkonfigurasjonen, kan du endre eller slette modellartefakter som tilsvarer den gamle endepunktkonfigurasjonen.
  • Du kan bruke SageMaker batch-transformasjon å teste produksjonsvarianter. Batch-transformasjon er ideell for å få slutninger fra store datasett. Du kan opprette en separat transformasjonsjobb for hver nye modellvariant og bruke et valideringsdatasett for å teste. For hver transformasjonsjobb, spesifiser et unikt modellnavn og plassering i Amazon S3 for utdatafilen. For å analysere resultatene, bruk slutningsrørledningslogger og beregninger.

konklusjonen

SageMaker lar deg enkelt A/B-teste ML-modeller i produksjon ved å kjøre flere produksjonsvarianter på et endepunkt. Du kan bruke SageMakers evner til å teste modeller som har blitt trent ved hjelp av forskjellige treningsdatasett, hyperparametre, algoritmer eller ML-rammeverk; hvordan de presterer på forskjellige instanstyper; eller en kombinasjon av alle de ovennevnte. Du kan gi trafikkfordelingen mellom variantene på et endepunkt, og SageMaker deler slutningstrafikken til variantene basert på den angitte distribusjonen. Alternativt, hvis du ønsker å teste modeller for spesifikke kundesegmenter, kan du spesifisere varianten som skal behandle en slutningsforespørsel ved å oppgi TargetVariant header, og SageMaker vil rute forespørselen til varianten du spesifiserte. For mer informasjon om A/B-testing, se Trygg oppdatering av modeller i produksjon.

Referanser


Om forfatterne

Modellvertsmønstre i SageMaker: Beste praksis for testing og oppdatering av modeller på SageMaker PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Deepali Rajale er AI/ML Specialist Technical Account Manager hos Amazon Web Services. Hun jobber med bedriftskunder og gir teknisk veiledning om implementering av maskinlæringsløsninger med beste praksis. På fritiden liker hun å gå tur, filme og henge med familie og venner.

Modellvertsmønstre i SageMaker: Beste praksis for testing og oppdatering av modeller på SageMaker PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Dhawal Patel er en hovedmaskinlæringsarkitekt ved AWS. Han har jobbet med organisasjoner som spenner fra store bedrifter til mellomstore startups med problemer knyttet til distribuert databehandling og kunstig intelligens. Han fokuserer på dyp læring inkludert NLP- og Computer Vision-domener. Han hjelper kundene med å oppnå høy ytelse modellslutning på SageMaker.

Modellvertsmønstre i SageMaker: Beste praksis for testing og oppdatering av modeller på SageMaker PlatoBlockchain Data Intelligence. Vertikalt søk. Ai. Saurabh Trikande er senior produktsjef for Amazon SageMaker Inference. Han brenner for å jobbe med kunder og er motivert av målet om å demokratisere maskinlæring. Han fokuserer på kjerneutfordringer knyttet til distribusjon av komplekse ML-applikasjoner, multi-tenant ML-modeller, kostnadsoptimaliseringer og å gjøre distribusjon av dyplæringsmodeller mer tilgjengelig. På fritiden liker Saurabh å gå tur, lære om innovative teknologier, følge TechCrunch og tilbringe tid med familien.

Tidstempel:

Mer fra AWS maskinlæring