Modellvärdsmönster i SageMaker: Bästa metoder för att testa och uppdatera modeller på SageMaker PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Modellvärdsmönster i SageMaker: Bästa metoder för att testa och uppdatera modeller på SageMaker

Amazon SageMaker är en helt hanterad tjänst som ger utvecklare och datavetare möjligheten att snabbt bygga, träna och distribuera modeller för maskininlärning (ML). Med SageMaker kan du distribuera dina ML-modeller på värdbaserade slutpunkter och få slutsatser i realtid. Du kan enkelt se prestandamåtten för dina slutpunkter i amazoncloudwatch, automatiskt skala slutpunkter baserat på trafik, och uppdatera dina modeller i produktion utan att förlora någon tillgänglighet. SageMaker erbjuder ett brett utbud av alternativ för att distribuera ML-modeller för slutledning på något av följande sätt, beroende på ditt användningsfall:

  • För synkrona förutsägelser som måste visas i storleksordningen millisekunder, använd SageMaker slutledning i realtid
  • För arbetsbelastningar som har tomgångsperioder mellan trafiksprutor och som kan tolerera kallstarter, använd Serverlös slutledning
  • För förfrågningar med stora nyttolaststorlekar upp till 1 GB, långa bearbetningstider (upp till 15 minuter) och fördröjningskrav i nästan realtid (sekunder till minuter), använd SageMaker Asynkron slutledning
  • För att få förutsägelser för en hel datauppsättning, använd SageMaker batch-omvandling

Realtidsinferens är idealisk för slutledningsarbetsbelastningar där du har interaktiva realtidskrav med låg latens. Du distribuerar din modell till SageMakers värdtjänster och får en slutpunkt som kan användas för slutledning. Dessa slutpunkter backas upp av en helt hanterad infrastruktur och support automatisk skalning. Du kan förbättra effektiviteten och kostnaden genom att kombinera flera modeller till en enda slutpunkt med hjälp av flermodell slutpunkter or slutpunkter för flera behållare.

Det finns vissa användningsfall där du vill distribuera flera varianter av samma modell i produktion för att mäta deras prestanda, mäta förbättringar eller köra A/B-tester. I sådana fall är SageMaker multi-variant endpoints användbara eftersom de tillåter dig att distribuera flera produktionsvarianter av en modell till samma SageMaker endpoint.

I det här inlägget diskuterar vi SageMaker multi-variant endpoints och bästa praxis för optimering.

Jämför SageMaker realtids slutledningsalternativ

Följande diagram ger en snabb översikt över realtidsinferensalternativen med SageMaker.

En slutpunkt med en enda modell låter dig distribuera en modell på en behållare som är värd för dedikerade instanser eller serverlös för låg latens och hög genomströmning. Du kan skapa en modell och hämta a Bild som stöds av SageMaker för populära ramverk som TensorFlow, PyTorch, Scikit-learn och mer. Om du arbetar med ett anpassat ramverk för din modell kan du också ta med egen container som installerar dina beroenden.

SageMaker stöder också mer avancerade alternativ som multi-model endpoints (MME) och multi-container endpoints (MCEs). MME:er är användbara när du har att göra med hundratals till tiotusentals modeller och där du inte behöver distribuera varje modell som en individuell slutpunkt. Med MME:er kan du vara värd för flera modeller på ett kostnadseffektivt, skalbart sätt inom samma slutpunkt genom att använda en delad serverbehållare som är värd för en instans. Den underliggande infrastrukturen (behållare och instans) förblir densamma, men modellerna laddas och lossas dynamiskt från en gemensam S3-plats, beroende på användning och mängden tillgängligt minne på slutpunkten. Din applikation behöver helt enkelt inkludera ett API-anrop med målmodellen till denna slutpunkt för att uppnå låg latens, hög genomströmning slutledning. Istället för att betala för en separat slutpunkt för varje enskild modell kan du vara värd för många modeller för priset av en enda slutpunkt.

MCE:er gör att du kan köra upp till 15 olika ML-behållare på en enda slutpunkt och anropa dem oberoende. Du kan bygga dessa ML-behållare på olika serveringsstackar (som ML-ramverk, modellserver och algoritm) för att köras på samma slutpunkt för kostnadsbesparingar. Du kan sy ihop behållarna i en seriell slutledningspipeline eller anropa behållaren självständigt. Detta kan vara idealiskt när du har flera olika ML-modeller som har olika trafikmönster och liknande resursbehov. Exempel på när man ska använda MCE inkluderar, men är inte begränsade till, följande:

  • Hosta modeller över olika ramverk (som TensorFlow, PyTorch och Scikit-learn) som inte har tillräckligt med trafik för att mätta hela kapaciteten för en instans
  • Hosta modeller från samma ramverk med olika ML-algoritmer (som rekommendationer, prognoser eller klassificering) och hanterarfunktioner
  • Jämförelser av liknande arkitekturer som körs på olika ramverksversioner (som TensorFlow 1.x vs. TensorFlow 2.x) för scenarier som A/B-testning

SageMaker multi-variant endpoints (MVEs) låter dig testa flera modeller eller modellversioner bakom samma endpoint med hjälp av produktionsvarianter. Varje produktionsvariant identifierar en ML-modell och de resurser som används för att vara värd för modellen, såsom serveringsbehållaren och instansen.

Översikt över SageMaker multi-variant endpoints

I produktions-ML-arbetsflöden förfinar datavetare och ML-ingenjörer modeller genom en mängd olika metoder, såsom omskolning baserad på data/modell/konceptdrift, hyperparameterjustering, funktionsval, ramverksval och mer. Att utföra A/B-tester mellan en ny modell och en gammal modell med produktionstrafik kan vara ett effektivt sista steg i valideringsprocessen för en ny modell. I A/B-testning testar du olika varianter av dina modeller och jämför hur varje variant presterar i förhållande till varandra. Du väljer sedan den bäst presterande modellen för att ersätta den tidigare modellen med en ny version som ger bättre prestanda än den tidigare versionen. Genom att använda produktionsvarianter kan du testa dessa ML-modeller och olika modellversioner bakom samma slutpunkt. Du kan träna dessa ML-modeller med hjälp av olika datauppsättningar, olika algoritmer och ML-ramverk; distribuera dem till olika instanstyper; eller någon kombination av dessa alternativ. Lastbalanseraren som är ansluten till SageMaker-slutpunkten ger möjlighet att distribuera anropsbegäranden över flera produktionsvarianter. Du kan till exempel fördela trafik mellan produktionsvarianter genom att ange trafikfördelningen för varje variant, eller så kan du anropa en specifik variant direkt för varje begäran.

Du kan också konfigurera policyn för automatisk skalning för att automatiskt skala in eller ut dina varianter baserat på mätvärden som förfrågningar per sekund.

Följande diagram illustrerar hur MVE fungerar mer i detalj.

SageMaker multivariant slutpunkt

Att distribuera en MVE är också väldigt enkelt. Allt du behöver göra är att definiera modellobjekt med bilden och modelldata med hjälp av create_model konstruera från SageMaker Python SDK, och definiera slutpunktskonfigurationerna med hjälp av production_variant konstruktioner för att skapa produktionsvarianter, var och en med sina egna olika modell- och resurskrav (instanstyp och antal). Detta gör att du även kan testa modeller på olika instanstyper. För att distribuera, använd endpoint_from_production_variant konstruktion för att skapa slutpunkten.

Under skapandet av endpoint tillhandahåller SageMaker värdinstansen som anges i ändpunktsinställningarna och laddar ner modellen och slutledningsbehållaren som specificeras av produktionsvarianten till värdinstansen. Om ett lyckat svar returneras efter att ha startat behållaren och utfört en hälsokontroll med en ping, skickas ett meddelande som indikerar att skapandet av slutpunkten är klar till användaren. Se följande kod:

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 föregående exemplet skapade vi två varianter, var och en med sin egen modell (dessa kan också ha olika instanstyper och antal). Vi sätter en initial_weight av 1 för båda varianterna: detta betyder att 50 % av våra förfrågningar går till Variant1, och de återstående 50 % till Variant2. Summan av vikter för båda varianterna är 2 och varje variant har vikttilldelning på 1. Detta innebär att varje variant får 50 % av den totala trafiken.

Att anropa slutpunkten liknar den vanliga SageMaker-konstruktionen invoke_endpoint; du kan anropa slutpunkten direkt med data som nyttolast:

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

SageMaker avger mätvärden som t.ex Latency och Invocations för varje variant i CloudWatch. För en komplett lista över mätvärden som SageMaker avger, se Övervaka Amazon SageMaker med Amazon CloudWatch. Du kan fråga CloudWatch för att få antalet anrop per variant, för att se hur anrop delas mellan varianter som standard.

För att anropa en specifik version av modellen, ange en variant som TargetVariant i samtalet till invoke_endpoint:

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

Du kan utvärdera varje produktionsvariants prestanda genom att granska mätvärden som noggrannhet, precision, återkallelse, F1-poäng och mottagarens funktionsegenskaper/area under kurvan för varje variant med hjälp av Amazon SageMaker modellmonitor. Du kan sedan välja att öka trafiken till den bästa modellen genom att uppdatera vikterna som tilldelats varje variant genom att ringa Uppdatera EndpointWeightsAndCapacitys. Detta ändrar trafikfördelningen till dina produktionsvarianter utan att behöva uppdatera din slutpunkt. Så istället för 50 % av trafiken från den första installationen flyttar vi 75 % av trafiken till Variant2 genom att tilldela nya vikter till varje variant med hjälp av UpdateEndpointWeightsAndCapacities. Se följande kod:

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

När du är nöjd med en variants prestanda kan du dirigera 100 % av trafiken till den varianten. Du kan till exempel ställa in vikten för Variant1 till 0 och vikten för Variant2 till 1. SageMaker skickar sedan 100 % av alla slutledningsförfrågningar till Variant2. Du kan sedan säkert uppdatera din slutpunkt och ta bort Variant1 från din slutpunkt. Du kan också fortsätta att testa nya modeller i produktion genom att lägga till nya varianter till din slutpunkt. Du kan också konfigurera dessa ändpunkter så att de skalas automatiskt baserat på den trafik som ändpunkterna tar emot.

Fördelar med multi-variant endpoints

SageMaker MVEs låter dig göra följande:

  • Distribuera och testa flera varianter av en modell med samma SageMaker-slutpunkt. Detta är användbart för att testa varianter av en modell i produktion. Anta till exempel att du har distribuerat en modell i produktion. Du kan testa en variant av modellen genom att dirigera en liten mängd trafik, säg 5 %, till den nya modellen.
  • Utvärdera modellens prestanda i produktionen utan att störa trafiken genom att övervaka driftsstatistik för varje variant i CloudWatch.
  • Uppdatera modeller i produktion utan att förlora någon tillgänglighet. Du kan ändra en slutpunkt utan att ta modeller som redan har distribuerats i produktion ur drift. Du kan till exempel lägga till nya modellvarianter, uppdatera ML-beräkningsinstanskonfigurationerna för befintliga modellvarianter eller ändra fördelningen av trafik mellan modellvarianter. För mer information, se Uppdatera slutpunkt och Uppdatera EndpointWeightsAndCapacitys.

Utmaningar vid användning av multivariant endpoints

SageMaker MVEs kommer med följande utmaningar:

  • Belastningstestning – Du måste lägga ner en hel del ansträngning och resurser för att testa och jämföra modellmatriser för varje variant. För att ett A/B-test ska anses vara framgångsrikt måste du utföra en statistisk analys av mätvärdena som samlats in från testet för att avgöra om det finns ett statistiskt signifikant resultat. Det kan bli utmanande att minimera utforskande av dåliga prestandavarianter. Du kan potentiellt använda den flerarmade banditen optimeringsteknik för att undvika att skicka trafik till experiment som inte fungerar och optimera prestandan medan du testar. För belastningstestning kan du också utforska Amazon SageMaker Inference Recommender att utföra omfattande benchmarks baserat på produktionskrav för latens och genomströmning, anpassade trafikmönster och instanser (upp till 10) som du väljer.
  • Tät koppling mellan modellvariant och ändpunkt – Det kan bli knepigt beroende på modellens utbyggnadsfrekvens, eftersom slutpunkten kan hamna i updating status för varje produktionsvariant som uppdateras. SageMaker stöder också utbyggnadsskyddsräcken, som du kan använda för att enkelt byta från nuvarande modell i produktion till en ny på ett kontrollerat sätt. Detta alternativ introducerar kanariefågel och linjär trafikväxlingslägen så att du kan ha detaljerad kontroll över växlingen av trafik från din nuvarande modell till den nya under uppdateringens gång. Med inbyggda säkerhetsåtgärder som automatisk återställning kan du fånga problem tidigt och automatiskt vidta korrigerande åtgärder innan de orsakar betydande produktionspåverkan.

Bästa metoder för slutpunkter med flera varianter

Tänk på följande när du är värd för modeller som använder SageMaker MVE:

  • SageMaker är utmärkt för att testa nya modeller eftersom du enkelt kan distribuera dem i en A/B-testmiljö och du betalar bara för det du använder. Du debiteras per förbrukad instanstimme för varje instans medan slutpunkten körs. När du är klar med dina tester och inte använder slutpunkten eller varianterna i stor utsträckning längre, bör du ta bort den för att spara kostnader. Du kan alltid återskapa den när du behöver den igen eftersom modellen är lagrad i Amazon enkel lagringstjänst (Amazon S3).
  • Du bör använda den mest optimala instanstypen och storleken för att distribuera modeller. SageMaker erbjuder för närvarande ML-beräkningsinstanser på olika instansfamiljer. En slutpunktsinstans körs hela tiden (medan instansen är i drift). Att välja rätt typ av instans kan därför ha en betydande inverkan på den totala kostnaden och prestandan för ML-modeller. Lasttestning är den bästa praxisen för att bestämma lämplig instanstyp och flottans storlek, med eller utan automatisk skalning för din live-slutpunkt för att undvika överprovisionering och betala extra för kapacitet du inte behöver.
  • Du kan övervaka modellprestanda och resursutnyttjande i CloudWatch. Du kan konfigurera en ProductionVariant att använda Applikationsautomatisk skalning. För att ange mätvärden och målvärden för en skalningspolicy, konfigurerar du en målspårningsskalningspolicy. Du kan använda antingen ett fördefinierat mått eller ett anpassat mått. Mer information om syntax för policykonfiguration finns i TargetTrackingScalingPolicyConfiguration. För information om hur du konfigurerar automatisk skalning, se Skala Amazon SageMaker-modeller automatiskt. För att snabbt definiera en målspårningsskalningspolicy för en variant kan du välja ett specifikt CloudWatch-mått och ställa in tröskelvärden. Använd till exempel metrisk SageMakerVariantInvocationsPerInstance för att övervaka det genomsnittliga antalet gånger per minut som varje instans för en variant anropas, eller använd mått CPUUtilization för att övervaka summan av arbete som hanteras av en CPU. Följande exempel använder SageMakerVariantInvocationsPerInstance fördefinierat mått för att justera antalet variantinstanser så att varje instans har en InvocationsPerInstance mått på 70:
{
	"TargetValue": 70.0,
	"PredefinedMetricSpecification":
	{
		"PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
	}
}

  • Att ändra eller ta bort modellartefakter eller ändra slutledningskod efter att ha distribuerat en modell ger oförutsägbara resultat. Innan du distribuerar modeller till produktion är det en god praxis att kontrollera om modellvärdskapet i lokalt läge är framgångsrikt efter att ha felsökt inferenskodavsnitten tillräckligt (som t.ex. model_fn, input_fn, predict_fnoch output_fn) i den lokala utvecklingsmiljön som en SageMaker notebook-instans eller lokal server. Om du behöver ändra eller ta bort modellartefakter eller ändra slutledningskod, ändra slutpunkten genom att tillhandahålla en ny slutpunktskonfiguration. När du har tillhandahållit den nya ändpunktskonfigurationen kan du ändra eller ta bort modellartefakterna som motsvarar den gamla ändpunktskonfigurationen.
  • Du kan använda SageMaker batch-omvandling att testa produktionsvarianter. Batchtransform är idealisk för att få slutsatser från stora datamängder. Du kan skapa ett separat transformeringsjobb för varje ny modellvariant och använda en valideringsdatauppsättning för att testa. För varje transformeringsjobb, ange ett unikt modellnamn och plats i Amazon S3 för utdatafilen. För att analysera resultaten, använd slutledningsloggar och mätvärden.

Slutsats

SageMaker gör att du enkelt kan A/B-testa ML-modeller i produktion genom att köra flera produktionsvarianter på en slutpunkt. Du kan använda SageMakers möjligheter för att testa modeller som har tränats med hjälp av olika träningsdataset, hyperparametrar, algoritmer eller ML-ramverk; hur de presterar på olika instanstyper; eller en kombination av allt ovanstående. Du kan tillhandahålla trafikfördelningen mellan varianterna på en slutpunkt, och SageMaker delar upp slutledningstrafiken till varianterna baserat på den specificerade fördelningen. Alternativt, om du vill testa modeller för specifika kundsegment, kan du ange varianten som ska behandla en slutsatsförfrågan genom att tillhandahålla TargetVariant header, och SageMaker kommer att dirigera begäran till den variant som du angav. För mer information om A/B-testning, se Säker uppdatera modeller i produktion.

Referensprojekt


Om författarna

Modellvärdsmönster i SageMaker: Bästa metoder för att testa och uppdatera modeller på SageMaker PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Deepali Rajale är AI/ML Specialist Technical Account Manager på Amazon Web Services. Hon arbetar med företagskunder och tillhandahåller teknisk vägledning om implementering av maskininlärningslösningar med bästa praxis. På fritiden tycker hon om att vandra, filma och umgås med familj och vänner.

Modellvärdsmönster i SageMaker: Bästa metoder för att testa och uppdatera modeller på SageMaker PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Dhawal Patel är en huvudarkitekt för maskininlärning på AWS. Han har arbetat med organisationer som sträcker sig från stora företag till medelstora startups med problem relaterade till distribuerad datoranvändning och artificiell intelligens. Han fokuserar på djupinlärning inklusive NLP- och Computer Vision-domäner. Han hjälper kunder att uppnå högpresterande modellslutningar på SageMaker.

Modellvärdsmönster i SageMaker: Bästa metoder för att testa och uppdatera modeller på SageMaker PlatoBlockchain Data Intelligence. Vertikal sökning. Ai. Saurabh Trikande är senior produktchef för Amazon SageMaker Inference. Han brinner för att arbeta med kunder och motiveras av målet att demokratisera maskininlärning. Han fokuserar på kärnutmaningar relaterade till att distribuera komplexa ML-applikationer, multi-tenant ML-modeller, kostnadsoptimeringar och att göra implementeringen av djupinlärningsmodeller mer tillgänglig. På sin fritid gillar Saurabh att vandra, lära sig om innovativ teknik, följa TechCrunch och umgås med sin familj.

Tidsstämpel:

Mer från AWS maskininlärning