Minimera produktionseffekten av ML-modelluppdateringar med Amazon SageMaker skuggtestning av PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Minimera produktionseffekten av ML-modelluppdateringar med Amazon SageMaker skuggtestning

Amazon SageMaker låter dig nu jämföra prestandan för en ny version av en modellserverstack med den för närvarande distribuerade versionen före en fullständig produktionsutrullning med hjälp av en säkerhetsrutin för driftsättning som kallas skuggtestning. Skuggtestning kan hjälpa dig att identifiera potentiella konfigurationsfel och prestandaproblem innan de påverkar slutanvändarna. Med SageMaker behöver du inte investera i att bygga din skuggtestinfrastruktur, vilket gör att du kan fokusera på modellutveckling. SageMaker tar hand om att distribuera den nya versionen tillsammans med den nuvarande versionen som betjänar produktionsförfrågningar, och dirigerar en del av förfrågningarna till skuggversionen. Du kan sedan jämföra prestandan för de två versionerna med hjälp av mätvärden som latens och felfrekvens. Detta ger dig större förtroende för att produktionsutrullningar till SageMaker slutpunkter inte kommer att orsaka prestandaregressioner, och hjälper dig att undvika avbrott på grund av oavsiktliga felkonfigurationer.

I det här inlägget visar vi denna nya SageMaker-kapacitet. Motsvarande exempel på anteckningsboken är tillgänglig i denna GitHub Repository.

Översikt över lösningen

Din modelltjänstinfrastruktur består av maskininlärningsmodellen (ML), servingsbehållaren eller beräkningsinstansen. Låt oss överväga följande scenarier:

  • Du överväger att marknadsföra en ny modell som har validerats offline till produktion, men vill utvärdera operativa prestandamått, såsom latens, felfrekvens och så vidare, innan du fattar detta beslut.
  • Du överväger förändringar av din serveringsinfrastrukturbehållare, som t.ex. korrigering av sårbarheter eller uppgradering till nyare versioner, och vill bedöma effekten av dessa ändringar innan du marknadsförs till produktion.
  • Du överväger att ändra din ML-instans och vill utvärdera hur den nya instansen skulle prestera med direkta slutledningsbegäranden.

Följande diagram illustrerar vår lösningsarkitektur.

För vart och ett av dessa scenarier, välj en produktionsvariant som du vill testa mot och SageMaker distribuerar automatiskt den nya varianten i skuggläge och dirigerar en kopia av slutledningsförfrågningarna till den i realtid inom samma slutpunkt. Endast svaren från produktionsvarianten returneras till den anropande applikationen. Du kan välja att kassera eller logga svaren från skuggvarianten för offlinejämförelse. Alternativt kan du övervaka varianterna genom en inbyggd instrumentpanel med en jämförelse av prestandamåtten sida vid sida. Du kan använda denna funktion antingen via SageMaker inference update-endpoint API:er eller via SageMaker-konsolen.

Skuggvarianter bygger på produktionsvariantkapaciteten i SageMaker slutpunkter. För att upprepa, a produktionsvariant består av ML-modellen, serveringsbehållare och ML-instans. Eftersom varje variant är oberoende av andra kan du ha olika modeller, behållare eller instanstyper över olika varianter. SageMaker låter dig specificera policyer för automatisk skalning per variant så att de kan skalas oberoende baserat på inkommande belastning. SageMaker stöder upp till 10 produktionsvarianter per slutpunkt. Du kan antingen konfigurera en variant för att ta emot en del av den inkommande trafiken genom att ställa in variantvikter, eller ange målvarianten i den inkommande begäran. Svaret från produktionsvarianten skickas tillbaka till anroparen.

A skuggvariant (ny) har samma komponenter som en produktionsvariant. En användarspecificerad del av förfrågningarna, känd som trafikprovtagningsprocent, vidarebefordras till skuggavarianten. Du kan välja att logga in svaret för skuggvarianten Amazon enkel lagringstjänst (Amazon S3) eller släng den.

Observera att SageMaker stöder maximalt en skuggvariant per slutpunkt. För en slutpunkt med en skuggvariant kan det finnas max en produktionsvariant.

När du har ställt in produktions- och skuggvarianterna kan du övervaka anropsmått för både produktion och skuggvarianter i amazoncloudwatch under AWS/SageMaker namnutrymme. Alla uppdateringar av SageMaker-slutpunkten orkestreras med hjälp av blå/gröna utbyggnader och sker utan förlust av tillgänglighet. Dina slutpunkter kommer att fortsätta svara på produktionsförfrågningar när du lägger till, ändrar eller tar bort skuggvarianter.

Du kan använda denna funktion på ett av två sätt:

  • Hanterade skuggtestning med SageMaker-konsolen – Du kan utnyttja konsolen för en guidad upplevelse för att hantera skuggtestningens hela resa. Detta låter dig ställa in skuggtester under en fördefinierad tidsperiod, övervaka framstegen genom en live-instrumentpanel, städa upp när det är klart och agera på resultaten.
  • Självbetjäningsskuggtestning med SageMaker Inference API:er – Om ditt distributionsarbetsflöde redan använder API:er för skapa/uppdatera/ta bort slutpunkt kan du fortsätta använda dem för att hantera Shadow Variants.

I följande avsnitt går vi igenom vart och ett av dessa scenarier.

Scenario 1 – Hanterade skuggtester med SageMaker-konsolen

Om du vill välja SageMaker för att hantera hela arbetsflödet för att skapa, hantera och agera på resultaten av skuggtesterna, överväg att använda Shadow-testens kapacitet i avsnittet Inferens i SageMaker-konsolen. Som tidigare nämnts gör detta att du kan ställa in skuggtester under en fördefinierad tidsperiod, övervaka framstegen genom en live-instrumentpanel, presentera rensningsalternativ när de är klara och agera på resultaten. För att lära dig mer, besök skuggtesterna avsnitt i vår dokumentation för en steg-för-steg-genomgång av denna funktion.

Förutsättningar

Modellerna för produktion och skugga behöver skapas på SageMaker. Vänligen se CreateModel API här..

Steg 1 – Skapa ett skuggtest

Navigera till Slutledning i den vänstra navigeringspanelen på SageMaker-konsolen och välj sedan Shadow tests. Detta tar dig till en instrumentpanel med alla schemalagda, pågående och slutförda skuggtester. Klick 'skapa ett skuggtest'. Ange ett namn för testet och välj nästa.

Detta tar dig till sidan med inställningar för skuggtest. Du kan välja en befintlig IAM-roll eller skapa en som har AmazonSageMakerFullAccess IAM-policy bifogas. Välj sedan 'Skapa en ny slutpunkt' och ange ett namn (xgb-prod-shadow-1). Du kan lägga till en produktion och en skuggvariant associerad med denna slutpunkt genom att klicka på 'Lägg till' i avsnittet Varianter. Du kan välja de modeller du har skapat i 'Lägg till modell' dialog ruta. Detta skapar en produktion eller variant. Alternativt kan du ändra instanstypen och antalet associerade med varje variant.

All trafik går till produktionsvarianten och den svarar på anropsförfrågningar. Du kan styra en del av förfrågningarna som dirigeras till skuggvarianten genom att ändra Traffic Sampling Percentage.

Du kan kontrollera testets längd från en timme till 30 dagar. Om det är ospecificerat är det standard på 7 dagar. Efter denna period markeras testet som avslutat. Om du kör ett test på en befintlig slutpunkt kommer den att återställas till tillståndet innan testet startas när det är slutfört.

Du kan valfritt fånga förfrågningar och svar från Shadow-varianten med hjälp av Data infångning alternativ. Om det lämnas ospecificerat kasseras svaren för skuggvarianten.

Minimera produktionseffekten av ML-modelluppdateringar med Amazon SageMaker skuggtestning av PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Minimera produktionseffekten av ML-modelluppdateringar med Amazon SageMaker skuggtestning av PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Steg 2 – Övervaka ett skuggtest

Du kan se listan över skuggtester genom att navigera till Shadow Tests avsnitt under Inferens. Klicka på skuggtestet som skapades i föregående steg för att se detaljerna för ett skuggtest och övervaka det medan det pågår eller efter att det har slutförts.

Minimera produktionseffekten av ML-modelluppdateringar med Amazon SageMaker skuggtestning av PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Sektionen Metrics ger en jämförelse av nyckelmåtten och tillhandahåller överlagrade grafer mellan produktions- och skuggvarianterna, tillsammans med beskrivande statistik. Du kan jämföra anropsstatistik som t.ex ModelLatency och Invocation4xxErrors samt instansmätningar som t.ex CPUUtilization och DiskUtilization.

Minimera produktionseffekten av ML-modelluppdateringar med Amazon SageMaker skuggtestning av PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Steg 3 – Markera Shadow-varianten till den nya produktionsvarianten

Vid jämförelse kan du antingen välja att marknadsföra skuggvarianten till den nya produktionsvarianten eller ta bort skuggvarianten. För båda dessa alternativ, välj 'Markera färdig' överst på sidan. Detta ger dig ett alternativ att antingen marknadsföra eller ta bort skuggvarianten.

Om du väljer att marknadsföra kommer du till en distributionssida, där du kan bekräfta variantinställningarna före implementeringen. Före implementering rekommenderar vi att du dimensionerar dina skuggvarianter så att de kan hantera 100 % av anropstrafiken. Om du inte använder skuggtestning för att utvärdera alternativa instanstyper eller storlekar, kan du använda "behålla produktionsvariantinställningarna. Annars kan du välja att 'behålla inställningarna för skuggvarianter. Om du väljer det här alternativet, se till att ditt trafiksampling är inställt på 100 %. Alternativt kan du ange instanstyp och antal om du vill åsidosätta dessa inställningar.

När du har bekräftat implementeringen kommer SageMaker att initiera en uppdatering av din slutpunkt för att marknadsföra skuggvarianten till den nya produktionsvarianten. Som med SageMaker alla uppdateringar kommer din slutpunkt fortfarande att vara i drift under uppdateringen.

Minimera produktionseffekten av ML-modelluppdateringar med Amazon SageMaker skuggtestning av PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Minimera produktionseffekten av ML-modelluppdateringar med Amazon SageMaker skuggtestning av PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Scenario 2: Skuggtestning med SageMaker inferens-API:er

Det här avsnittet tar upp hur man använder de befintliga SageMaker create/update/delete-endpoint API:er för att distribuera skuggvarianter.

För det här exemplet har vi två XGBoost-modeller som representerar två olika versioner av modellerna som har förutbildats. model.tar.gz är den modell som för närvarande används i produktionen. model2 är den nyare modellen, och vi vill testa dess prestanda i termer av driftsmått som latens innan vi bestämmer oss för att använda den i produktionen. Vi sätter in model2 som en skuggvariant av model.tar.gz. Båda förtränade modellerna förvaras i den offentliga S3-skopan s3://sagemaker-sample-files. Vi laddar först ner modellen vår lokala datorinstans och laddar sedan upp till S3.

Modellerna i detta exempel används för att förutsäga sannolikheten för att en mobilkund ska lämna sin nuvarande mobiloperatör. Datauppsättningen vi använder är allmänt tillgänglig och nämndes i boken Upptäcka kunskap i data av Daniel T. Larose. Dessa modeller tränades med hjälp av XGB Churn Prediction Notebook i SageMaker. Du kan också använda dina egna förtränade modeller, i så fall kan du hoppa över nedladdning från s3://sagemaker-sample-files och kopiera dina egna modeller direkt till modell/mapp.

!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/

Steg 1 – Skapa modeller

Vi laddar upp modellfilerna till vår egen S3-hink och skapar två SageMaker-modeller. Se följande kod:

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}],
)

Steg 2 – Implementera de två modellerna som produktions- och skuggvarianter till en slutpunkt i realtid

Vi skapar en slutpunktskonfiguration med produktions- och skuggvarianterna. De ProductionVariants och ShadowProductionVariants är av särskilt intresse. Båda dessa varianter har ml.m5.xlarge-instanser med 4 vCPU:er och 16 GiB minne, och det initiala antalet instanser är satt till 1. Se följande kod:

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

Till sist skapar vi produktions- och skuggvarianten:

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

Steg 3 – Anropa slutpunkten för testning

När slutpunkten har skapats kan du börja anropa den. Vi skickar cirka 3,000 XNUMX förfrågningar på ett sekventiellt sätt:

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)

Steg 4 – Jämför mätvärden

Nu när vi har distribuerat både produktions- och skuggmodellerna, låt oss jämföra anropsmåtten. För en lista över anropsmått som är tillgängliga för jämförelse, se Övervaka Amazon SageMaker med Amazon CloudWatch. Låt oss börja med att jämföra anrop mellan produktions- och skuggvarianterna.

Smakämnen InvocationsPerInstance metrisk hänvisar till antalet anrop som skickas till produktionsvarianten. En bråkdel av dessa anrop, specificerade i variantvikten, skickas till skuggvarianten. Anropet per instans beräknas genom att dividera det totala antalet anrop med antalet instanser i en variant. Som visas i följande diagram kan vi bekräfta att både produktions- och skuggvarianterna tar emot anropsbegäranden enligt de vikter som anges i slutpunktskonfigurationen.

Minimera produktionseffekten av ML-modelluppdateringar med Amazon SageMaker skuggtestning av PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Minimera produktionseffekten av ML-modelluppdateringar med Amazon SageMaker skuggtestning av PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Låt oss sedan jämföra modellens latens (ModelLatency metrisk) mellan produktions- och skuggvarianterna. Modelllatens är den tid det tar för en modell att svara, sett från SageMaker. Vi kan observera hur modelllatensen för skuggvarianten kan jämföras med produktionsvarianten utan att utsätta slutanvändare för skuggvarianten.

Minimera produktionseffekten av ML-modelluppdateringar med Amazon SageMaker skuggtestning av PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Vi förväntar oss overhead latens (OverheadLatency metrisk) för att vara jämförbar mellan produktions- och skuggvarianter. Overheadlatens är intervallet som mäts från det att SageMaker tar emot begäran tills det returnerar ett svar till klienten, minus modelllatensen.

Minimera produktionseffekten av ML-modelluppdateringar med Amazon SageMaker skuggtestning av PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Steg 5- Marknadsför din skuggvariant

För att främja skuggmodellen till produktion, skapa en ny slutpunktskonfiguration med aktuell ShadowProductionVariant som den nya ProductionVariant och ta bort ShadowProductionVariant. Detta tar bort strömmen ProductionVariant och främja skuggvarianten till att bli den nya produktionsvarianten. Som alltid är alla SageMaker-uppdateringar orkestrerade som blå/gröna distributioner under huven, och det finns ingen förlust av tillgänglighet när uppdateringen utförs.

Alternativt kan du utnyttja Utplaceringsskyddsräcken om du vill använda trafikväxling på en gång och automatisk återställning under din uppdatering.

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)

Steg 6 – Städa upp

Om du inte planerar att använda den här slutpunkten ytterligare bör du ta bort slutpunkten för att undvika ytterligare avgifter och städa upp andra resurser som skapats i den här 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)

Slutsats

I det här inlägget introducerade vi en ny förmåga hos SageMaker-inferens för att jämföra prestandan hos en ny version av en modellserverstack med den för närvarande utrullade versionen före en fullständig produktionsutrullning med hjälp av en säkerhetsrutin för driftsättning som kallas skuggtestning. Vi gick igenom fördelarna med att använda skuggvarianter och metoder för att konfigurera varianterna med en exemplet från slut till ände. För att lära dig mer om skuggvarianter, se skuggtester dokumentation.


Om författarna

Minimera produktionseffekten av ML-modelluppdateringar med Amazon SageMaker skuggtestning av PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Raghu Ramesha är en maskininlärningslösningsarkitekt med Amazon SageMaker Service-teamet. Han fokuserar på att hjälpa kunder att bygga, distribuera och migrera ML-produktionsarbetsbelastningar till SageMaker i stor skala. Han är specialiserad på domäner för maskininlärning, AI och datorseende och har en magisterexamen i datavetenskap från UT Dallas. På fritiden tycker han om att resa och fotografera.

Minimera produktionseffekten av ML-modelluppdateringar med Amazon SageMaker skuggtestning av PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Qingwei Li är maskininlärningsspecialist på Amazon Web Services. Han fick sin doktorsexamen. i Operations Research efter att han bröt sin rådgivares forskningsbidragskonto och misslyckades med att leverera det Nobelpris han lovade. För närvarande hjälper han kunder inom finanssektorn och försäkringsbranschen att bygga maskininlärningslösningar på AWS. På fritiden gillar han att läsa och undervisa.

Minimera produktionseffekten av ML-modelluppdateringar med Amazon SageMaker skuggtestning av PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Qiyun Zhao är en Senior Software Development Engineer med Amazon SageMaker Inference Platform-teamet. Han är den ledande utvecklaren av Deployment Guardrails och Shadow Deployments, och han fokuserar på att hjälpa kunder att hantera ML-arbetsbelastningar och implementeringar i stor skala med hög tillgänglighet. Han arbetar också med plattformsarkitekturutvecklingar för snabb och säker implementering av ML-jobb och kör ML-onlineexperiment utan problem. På fritiden tycker han om att läsa, spela och resa.

Minimera produktionseffekten av ML-modelluppdateringar med Amazon SageMaker skuggtestning av PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.Tarun Sairam är senior produktchef för Amazon SageMaker Inference. Han är intresserad av att lära sig om de senaste trenderna inom maskininlärning och hjälpa kunder att utnyttja dem. På fritiden tycker han om att cykla, åka skidor och spela tennis.

Tidsstämpel:

Mer från AWS maskininlärning