Model Hosting Patterns i SageMaker: Bedste praksis i test og opdatering af modeller på SageMaker PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Model Hosting Patterns i SageMaker: Bedste praksis i test og opdatering af modeller på SageMaker

Amazon SageMaker er en fuldt administreret tjeneste, der giver udviklere og dataforskere mulighed for hurtigt at bygge, træne og implementere maskinlæringsmodeller (ML). Med SageMaker kan du implementere dine ML-modeller på hostede endepunkter og få slutningsresultater i realtid. Du kan nemt se præstationsmålingerne for dine slutpunkter i amazoncloudwatch, skalerer endepunkter automatisk baseret på trafik, og opdatere dine modeller i produktion uden at miste nogen tilgængelighed. SageMaker tilbyder en bred vifte af muligheder for at implementere ML-modeller til slutninger på en af ​​følgende måder, afhængigt af din brugssituation:

  • Brug SageMaker til synkrone forudsigelser, der skal serveres i størrelsesordenen millisekunder inferens i realtid
  • Til arbejdsbelastninger, der har inaktive perioder mellem trafik-spurgterne og kan tolerere koldstart, brug Serverløs slutning
  • Brug SageMaker til anmodninger med store nyttelaststørrelser på op til 1 GB, lange behandlingstider (op til 15 minutter) og ventetid i næsten realtid (sekunder til minutter). Asynkron inferens
  • Brug SageMaker for at få forudsigelser for et helt datasæt batch transformation

Realtidsinferens er ideel til inferensarbejdsbelastninger, hvor du har realtid, interaktive krav til lav latenstid. Du implementerer din model til SageMaker-hostingtjenester og får et slutpunkt, der kan bruges til slutninger. Disse endepunkter understøttes af en fuldt administreret infrastruktur og support automatisk skalering. Du kan forbedre effektiviteten og omkostningerne ved at kombinere flere modeller til et enkelt slutpunkt ved hjælp af multi-model slutpunkter or multi-container endepunkter.

Der er visse tilfælde, hvor du ønsker at implementere flere varianter af den samme model i produktionen for at måle deres ydeevne, måle forbedringer eller køre A/B-tests. I sådanne tilfælde er SageMaker multi-variant-endepunkter nyttige, fordi de giver dig mulighed for at implementere flere produktionsvarianter af en model til det samme SageMaker-slutpunkt.

I dette indlæg diskuterer vi SageMaker multi-variant slutpunkter og bedste praksis for optimering.

Sammenligning af SageMaker-indledningsmuligheder i realtid

Følgende diagram giver et hurtigt overblik over mulighederne for slutninger i realtid med SageMaker.

Et enkelt-model slutpunkt giver dig mulighed for at implementere én model på en container hostet på dedikerede forekomster eller serverløs for lav latenstid og høj gennemstrømning. Du kan oprette en model og hente a SageMaker understøttet billede til populære rammer såsom TensorFlow, PyTorch, Scikit-learn og mere. Hvis du arbejder med en tilpasset ramme til din model, kan du også medbring egen container der installerer dine afhængigheder.

SageMaker understøtter også mere avancerede muligheder såsom multi-model endpoints (MME'er) og multi-container endpoints (MCE'er). MME'er er nyttige, når du har at gøre med hundreder til titusindvis af modeller, og hvor du ikke behøver at implementere hver model som et individuelt slutpunkt. MME'er giver dig mulighed for at hoste flere modeller på en omkostningseffektiv, skalerbar måde inden for det samme slutpunkt ved at bruge en delt serveringscontainer, der hostes på en instans. Den underliggende infrastruktur (container og instans) forbliver den samme, men modellerne indlæses og losses dynamisk fra en fælles S3-placering, alt efter brug og mængden af ​​tilgængelig hukommelse på slutpunktet. Din applikation skal blot inkludere et API-kald med målmodellen til dette endepunkt for at opnå lav-latens, high-throughput-inferens. I stedet for at betale for et separat slutpunkt for hver enkelt model, kan du hoste mange modeller til prisen for et enkelt slutpunkt.

MCE'er giver dig mulighed for at køre op til 15 forskellige ML-containere på et enkelt slutpunkt og påkalde dem uafhængigt. Du kan bygge disse ML-beholdere på forskellige serveringsstakke (såsom ML-framework, modelserver og algoritme), som skal køres på det samme slutpunkt for at spare omkostninger. Du kan sy beholderne sammen i en seriel inferenspipeline eller påkald containeren uafhængigt. Dette kan være ideelt, når du har flere forskellige ML-modeller, der har forskellige trafikmønstre og lignende ressourcebehov. Eksempler på, hvornår man skal bruge MCE'er omfatter, men er ikke begrænset til, følgende:

  • Hosting af modeller på tværs af forskellige rammer (såsom TensorFlow, PyTorch og Scikit-learn), der ikke har tilstrækkelig trafik til at mætte den fulde kapacitet af en instans
  • Hosting af modeller fra den samme ramme med forskellige ML-algoritmer (såsom anbefalinger, prognoser eller klassificering) og handlerfunktioner
  • Sammenligninger af lignende arkitekturer, der kører på forskellige rammeversioner (såsom TensorFlow 1.x vs. TensorFlow 2.x) til scenarier som A/B-testning

SageMaker multi-variant endpoints (MVE'er) giver dig mulighed for at teste flere modeller eller modelversioner bag det samme slutpunkt ved hjælp af produktionsvarianter. Hver produktionsvariant identificerer en ML-model og de ressourcer, der er implementeret til at hoste modellen, såsom serveringsbeholderen og instansen.

Oversigt over SageMaker multi-variant slutpunkter

I produktions-ML-arbejdsgange forfiner dataforskere og ML-ingeniører modeller gennem en række forskellige metoder, såsom genoptræning baseret på data-/model-/konceptdrift, justering af hyperparameter, valg af funktioner, valg af framework og mere. Udførelse af A/B-test mellem en ny model og en gammel model med produktionstrafik kan være et effektivt sidste trin i valideringsprocessen for en ny model. I A/B-test tester du forskellige varianter af dine modeller og sammenligner, hvordan hver variant klarer sig i forhold til hinanden. Du vælger derefter den bedst ydende model for at erstatte den tidligere model med en ny version, der leverer bedre ydeevne end den tidligere version. Ved at bruge produktionsvarianter kan du teste disse ML-modeller og forskellige modelversioner bag det samme endepunkt. Du kan træne disse ML-modeller ved hjælp af forskellige datasæt, forskellige algoritmer og ML-frameworks; distribuer dem til forskellige instanstyper; eller enhver kombination af disse muligheder. Belastningsbalanceren, der er forbundet til SageMaker-slutpunktet, giver mulighed for at distribuere påkaldelsesanmodningerne på tværs af flere produktionsvarianter. For eksempel kan du fordele trafik mellem produktionsvarianter ved at angive trafikfordelingen for hver variant, eller du kan påberåbe en specifik variant direkte for hver anmodning.

Du kan også konfigurere politikken for automatisk skalering til automatisk at skalere dine varianter ind eller ud baseret på metrics såsom anmodninger pr. sekund.

Følgende diagram illustrerer mere detaljeret, hvordan MVE fungerer.

SageMaker multi-variant slutpunkt

Det er også meget ligetil at implementere en MVE. Alt du skal gøre er at definere modelobjekter med billedet og modeldata ved hjælp af create_model konstruere fra SageMaker Python SDK, og definere slutpunktskonfigurationerne vha production_variant konstruktioner til at skabe produktionsvarianter, hver med deres egne forskellige model- og ressourcekrav (instanstype og antal). Dette giver dig mulighed for også at teste modeller på forskellige instanstyper. For at implementere skal du bruge endpoint_from_production_variant konstruktion for at skabe slutpunktet.

Under oprettelse af slutpunkt leverer SageMaker den hostingforekomst, der er angivet i slutpunktsindstillingerne, og downloader modellen og inferensbeholderen specificeret af produktionsvarianten til hostingforekomsten. Hvis et vellykket svar returneres efter start af containeren og udførelse af et sundhedstjek med et ping, sendes en meddelelse, der angiver, at oprettelsen af ​​slutpunktet er fuldført, til brugeren. 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 eksempel oprettede vi to varianter, hver med sin egen model (disse kunne også have forskellige instanstyper og antal). Vi sætter en initial_weight af 1 for begge varianter: det betyder, at 50 % af vores anmodninger går til Variant1, og de resterende 50 % til Variant2. Summen af ​​vægte på tværs af begge varianter er 2, og hver variant har vægttildeling på 1. Dette indebærer, at hver variant modtager 50 % af den samlede trafik.

Påkaldelse af endepunktet svarer til den almindelige SageMaker-konstruktion invoke_endpoint; du kan kalde endepunktet direkte med dataene som en nyttelast:

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

SageMaker udsender målinger som f.eks Latency , Invocations for hver variant i CloudWatch. For en komplet liste over målinger, som SageMaker udsender, se Overvåg Amazon SageMaker med Amazon CloudWatch. Du kan forespørge CloudWatch for at få antallet af kald pr. variant for at se, hvordan kald er opdelt på tværs af varianter som standard.

For at kalde en specifik version af modellen skal du angive en variant som TargetVariant i opkaldet til invoke_endpoint:

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

Du kan evaluere hver produktionsvariants ydeevne ved at gennemgå målinger såsom nøjagtighed, præcision, genkaldelse, F1-score og modtagerens driftskarakteristik/areal under kurven for hver variant ved hjælp af Amazon SageMaker Model Monitor. Du kan derefter beslutte at øge trafikken til den bedste model ved at opdatere de vægte, der er tildelt hver variant ved at ringe OpdaterEndpointWeightsAndCapacitys. Dette ændrer trafikfordelingen til dine produktionsvarianter uden at kræve opdateringer til dit slutpunkt. Så i stedet for 50 % af trafikken fra den indledende opsætning, flytter vi 75 % af trafikken til Variant2 ved at tildele nye vægte til hver variant vha 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 tilfreds med en variants ydeevne, kan du dirigere 100 % af trafikken til den variant. Du kan f.eks. indstille vægten for Variant1 til 0 og vægten for Variant2 til 1. SageMaker sender derefter 100 % af alle slutningsanmodninger til Variant2. Du kan derefter trygt opdatere dit slutpunkt og slette Variant1 fra dit slutpunkt. Du kan også fortsætte med at teste nye modeller i produktionen ved at tilføje nye varianter til dit slutpunkt. Du kan også konfigurere disse endepunkter til at skalere automatisk baseret på den trafik, endepunkterne modtager.

Fordele ved multi-variant endepunkter

SageMaker MVE'er giver dig mulighed for at gøre følgende:

  • Implementer og test flere varianter af en model ved hjælp af det samme SageMaker-slutpunkt. Dette er nyttigt til at teste variationer af en model i produktionen. Antag for eksempel, at du har implementeret en model i produktionen. Du kan teste en variant af modellen ved at lede en lille mængde trafik, f.eks. 5 %, til den nye model.
  • Evaluer modellens ydeevne i produktionen uden at afbryde trafikken ved at overvåge operationelle målinger for hver variant i CloudWatch.
  • Opdater modeller i produktion uden at miste nogen tilgængelighed. Du kan ændre et slutpunkt uden at tage modeller, der allerede er implementeret i produktion, ud af drift. Du kan f.eks. tilføje nye modelvarianter, opdatere ML-beregningsinstansens konfigurationer af eksisterende modelvarianter eller ændre fordelingen af ​​trafik mellem modelvarianter. For mere information, se Opdater slutpunkt , OpdaterEndpointWeightsAndCapacitys.

Udfordringer ved brug af multi-variant slutpunkter

SageMaker MVE'er kommer med følgende udfordringer:

  • Belastningstestindsats – Du skal bruge en del indsats og ressourcer til at teste og sammenligne modelmatrix for hver variant. For at en A/B-test kan betragtes som vellykket, skal du udføre en statistisk analyse af de målinger, der er indsamlet fra testen, for at afgøre, om der er et statistisk signifikant resultat. Det kan blive udfordrende at minimere at udforske dårligt ydende varianter. Du kan potentielt bruge den flerarmede bandit optimeringsteknik for at undgå at sende trafik til eksperimenter, der ikke fungerer, og optimere ydeevnen, mens du tester. Til belastningstest kan du også udforske Amazon SageMaker Inference Recommender at udføre omfattende benchmarks baseret på produktionskrav til latenstid og gennemløb, tilpassede trafikmønstre og forekomster (op til 10), som du vælger.
  • Tæt kobling mellem modelvariant og endepunkt – Det kan blive vanskeligt afhængigt af modelimplementeringsfrekvensen, fordi endepunktet kan ende i updating status for hver produktionsvariant, der opdateres. SageMaker understøtter også opstillingsværn, som du nemt kan skifte fra den nuværende model i produktion til en ny på en kontrolleret måde. Denne mulighed introducerer kanariefugl , lineær trafikskiftetilstande, så du kan have detaljeret kontrol over flytningen af ​​trafik fra din nuværende model til den nye i løbet af opdateringen. Med indbyggede sikkerhedsforanstaltninger, såsom automatisk tilbagerulning, kan du fange problemer tidligt og automatisk træffe korrigerende handlinger, før de forårsager betydelig produktionspåvirkning.

Bedste praksis for multi-variant slutpunkter

Når du hoster modeller, der bruger SageMaker MVE'er, skal du overveje følgende:

  • SageMaker er fantastisk til at teste nye modeller, fordi du nemt kan implementere dem i et A/B-testmiljø, og du betaler kun for det, du bruger. Du debiteres pr. forbrugt instanstime for hver instans, mens slutpunktet kører. Når du er færdig med dine tests og ikke bruger endepunktet eller varianterne længere, bør du slette det for at spare omkostninger. Du kan altid genskabe den, når du har brug for den igen, fordi modellen er gemt i Amazon Simple Storage Service (Amazon S3).
  • Du bør bruge den mest optimale instanstype og -størrelse til at implementere modeller. SageMaker tilbyder pt ML-beregningsforekomster på forskellige familier. En slutpunktforekomst kører hele tiden (mens forekomsten er i drift). Derfor kan valg af den rigtige type instans have en betydelig indflydelse på de samlede omkostninger og ydeevne af ML-modeller. Belastningstest er den bedste praksis til at bestemme den passende instanstype og flådestørrelse, med eller uden automatisk skalering for dit live-endepunkt for at undgå overprovisionering og ekstra betaling for kapacitet, du ikke har brug for.
  • Du kan overvåge modelydelse og ressourceudnyttelse i CloudWatch. Du kan konfigurere en ProductionVariant at anvende Applikation automatisk skalering. For at angive metrics og målværdier for en skaleringspolitik skal du konfigurere en målsporingsskaleringspolitik. Du kan bruge enten en foruddefineret metric eller en brugerdefineret metric. For flere oplysninger om politikkonfigurationssyntaks, se TargetTrackingScalingPolicyConfiguration. For information om konfiguration af automatisk skalering, se Skaler automatisk Amazon SageMaker-modeller. For hurtigt at definere en målsporingsskaleringspolitik for en variant kan du vælge en specifik CloudWatch-metrik og indstille tærskelværdier. Brug f.eks. metric SageMakerVariantInvocationsPerInstance at overvåge det gennemsnitlige antal gange pr. minut, som hver forekomst for en variant påkaldes, eller brug metric CPUUtilization at overvåge summen af ​​arbejde, der håndteres af en CPU. Følgende eksempel bruger SageMakerVariantInvocationsPerInstance foruddefineret metric for at justere antallet af variantforekomster, så hver forekomst har en InvocationsPerInstance metrisk på 70:
{
	"TargetValue": 70.0,
	"PredefinedMetricSpecification":
	{
		"PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
	}
}

  • Ændring eller sletning af modelartefakter eller ændring af slutningskode efter implementering af en model giver uforudsigelige resultater. Før du implementerer modeller til produktion, er det en god praksis at kontrollere, om modelhosting i lokal tilstand er vellykket efter tilstrækkelig fejlretning af inferenskodestykkerne (som f.eks. model_fn, input_fn, predict_fnog output_fn) i det lokale udviklingsmiljø som en SageMaker notebook-instans eller lokal server. Hvis du har brug for at ændre eller slette modelartefakter eller ændre inferenskode, skal du ændre slutpunktet ved at angive en ny slutpunktskonfiguration. Når du har angivet den nye endepunktskonfiguration, kan du ændre eller slette de modelartefakter, der svarer til den gamle endepunktskonfiguration.
  • Du kan bruge SageMaker batch transformation at teste produktionsvarianter. Batchtransformation er ideel til at få slutninger fra store datasæt. Du kan oprette et separat transformationsjob for hver ny modelvariant og bruge et valideringsdatasæt til at teste. For hvert transformationsjob skal du angive et unikt modelnavn og placering i Amazon S3 for outputfilen. For at analysere resultaterne, brug inferens pipeline logs og metrikker.

Konklusion

SageMaker giver dig mulighed for nemt at A/B-teste ML-modeller i produktion ved at køre flere produktionsvarianter på et slutpunkt. Du kan bruge SageMakers muligheder til at teste modeller, der er blevet trænet ved hjælp af forskellige træningsdatasæt, hyperparametre, algoritmer eller ML-frameworks; hvordan de klarer sig på forskellige instanstyper; eller en kombination af alle ovenstående. Du kan angive trafikfordelingen mellem varianterne på et slutpunkt, og SageMaker opdeler slutningstrafikken til varianterne baseret på den specificerede fordeling. Alternativt, hvis du vil teste modeller for specifikke kundesegmenter, kan du angive den variant, der skal behandle en slutningsanmodning ved at angive TargetVariant header, og SageMaker dirigerer anmodningen til den variant, du har angivet. For mere information om A/B-test, se Sikker opdatering af modeller i produktion.

Referencer


Om forfatterne

Model Hosting Patterns i SageMaker: Bedste praksis i test og opdatering af modeller på SageMaker PlatoBlockchain Data Intelligence. Lodret søgning. Ai.Deepali Rajale er AI/ML Specialist Technical Account Manager hos Amazon Web Services. Hun arbejder med virksomhedskunder, der giver teknisk vejledning om implementering af maskinlæringsløsninger med bedste praksis. I sin fritid nyder hun at vandre, filme og hænge ud med familie og venner.

Model Hosting Patterns i SageMaker: Bedste praksis i test og opdatering af modeller på SageMaker PlatoBlockchain Data Intelligence. Lodret søgning. Ai.Dhawal Patel er Principal Machine Learning Architect hos AWS. Han har arbejdet med organisationer lige fra store virksomheder til mellemstore startups om problemer relateret til distribueret computing og kunstig intelligens. Han fokuserer på Deep learning, herunder NLP og Computer Vision domæner. Han hjælper kunder med at opnå højtydende modelslutning på SageMaker.

Model Hosting Patterns i SageMaker: Bedste praksis i test og opdatering af modeller på SageMaker PlatoBlockchain Data Intelligence. Lodret søgning. Ai. Saurabh Trikande er Senior Product Manager for Amazon SageMaker Inference. Han brænder for at arbejde med kunder og er motiveret af målet om at demokratisere machine learning. Han fokuserer på kerneudfordringer relateret til implementering af komplekse ML-applikationer, multi-tenant ML-modeller, omkostningsoptimeringer og at gøre implementering af deep learning-modeller mere tilgængelig. I sin fritid nyder Saurabh at vandre, lære om innovative teknologier, følge TechCrunch og tilbringe tid med sin familie.

Tidsstempel:

Mere fra AWS maskinindlæring