Att skapa robusta och återanvändbara pipelines för maskininlärning (ML) kan vara en komplex och tidskrävande process. Utvecklare testar vanligtvis sina bearbetnings- och träningsskript lokalt, men själva pipelinesna testas vanligtvis i molnet. Att skapa och köra en fullständig pipeline under experimentering lägger till oönskade omkostnader och kostnader till utvecklingens livscykel. I det här inlägget beskriver vi hur du kan använda Amazon SageMaker Pipelines lokalt läge att köra ML pipelines lokalt för att minska både pipelineutveckling och körtid samtidigt som kostnaden minskar. Efter att pipelinen har testats helt lokalt kan du enkelt köra den igen med Amazon SageMaker hanterade resurser med bara några rader kodändringar.
Översikt över ML:s livscykel
En av de viktigaste drivkrafterna för nya innovationer och applikationer i ML är tillgängligheten och mängden data tillsammans med billigare beräkningsalternativ. Inom flera domäner har ML visat sig kapabel att lösa problem som tidigare varit olösliga med klassisk big data och analytiska tekniker, och efterfrågan på datavetenskap och ML-utövare ökar stadigt. Från en mycket hög nivå består ML-livscykeln av många olika delar, men byggandet av en ML-modell består vanligtvis av följande generella steg:
- Datarensning och förberedelse (funktionsteknik)
- Modellträning och trimning
- Modellutvärdering
- Modellimplementering (eller batchtransformering)
I databeredningssteget laddas data, masseras och omvandlas till den typ av indata eller funktioner som ML-modellen förväntar sig. Att skriva skript för att transformera data är vanligtvis en iterativ process, där snabba återkopplingsslingor är viktiga för att påskynda utvecklingen. Det är normalt inte nödvändigt att använda hela datasetet när du testar funktionsteknikskript, varför du kan använda lokallägesfunktion av SageMaker Processing. Detta gör att du kan köra lokalt och uppdatera koden iterativt med hjälp av en mindre datauppsättning. När den slutliga koden är klar skickas den till fjärrbearbetningsjobbet, som använder hela datasetet och körs på SageMaker-hanterade instanser.
Utvecklingsprocessen liknar dataförberedelsesteget för både modellutbildning och modellutvärderingssteg. Dataforskare använder lokallägesfunktion av SageMaker Training för att snabbt iterera med mindre datauppsättningar lokalt, innan du använder all data i ett SageMaker-hanterat kluster av ML-optimerade instanser. Detta påskyndar utvecklingsprocessen och eliminerar kostnaden för att köra ML-instanser som hanteras av SageMaker medan du experimenterar.
När en organisations ML-mognad ökar kan du använda Amazon SageMaker-rörledningar att skapa ML-pipelines som sammanfogar dessa steg, vilket skapar mer komplexa ML-arbetsflöden som bearbetar, tränar och utvärderar ML-modeller. SageMaker Pipelines är en helt hanterad tjänst för att automatisera de olika stegen i ML-arbetsflödet, inklusive dataladdning, datatransformation, modellträning och inställning samt modelldistribution. Tills nyligen kunde du utveckla och testa dina skript lokalt men var tvungen att testa dina ML-pipelines i molnet. Detta gjorde att iterationen av ML-pipelines flöde och form blev en långsam och kostsam process. Nu, med den extra lokallägesfunktionen i SageMaker Pipelines, kan du iterera och testa dina ML-pipelines på samma sätt som du testar och itererar på dina bearbetnings- och träningsskript. Du kan köra och testa dina pipelines på din lokala dator genom att använda en liten delmängd av data för att validera pipelinesyntaxen och funktionerna.
SageMaker-rörledningar
SageMaker Pipelines tillhandahåller ett helautomatiskt sätt att köra enkla eller komplexa ML-arbetsflöden. Med SageMaker Pipelines kan du skapa ML-arbetsflöden med en lättanvänd Python SDK och sedan visualisera och hantera ditt arbetsflöde med hjälp av Amazon SageMaker Studio. Dina datavetenskapsteam kan bli mer effektiva och skala snabbare genom att lagra och återanvända arbetsflödesstegen du skapar i SageMaker Pipelines. Du kan också använda förbyggda mallar som automatiserar skapandet av infrastruktur och arkiv för att bygga, testa, registrera och distribuera modeller i din ML-miljö. Dessa mallar är automatiskt tillgängliga för din organisation och tillhandahålls med hjälp av AWS servicekatalog produkter.
SageMaker Pipelines ger kontinuerlig integration och kontinuerlig implementering (CI/CD) till ML, som att upprätthålla paritet mellan utvecklings- och produktionsmiljöer, versionskontroll, on-demand-testning och end-to-end-automatisering, vilket hjälper dig att skala ML genom hela din organisation. DevOps-utövare vet att några av de främsta fördelarna med att använda CI/CD-tekniker inkluderar en ökning av produktiviteten via återanvändbara komponenter och en ökning av kvaliteten genom automatiserade tester, vilket leder till snabbare avkastning på investeringen för dina affärsmål. Dessa fördelar är nu tillgängliga för MLOps-utövare genom att använda SageMaker Pipelines för att automatisera träning, testning och distribution av ML-modeller. Med lokalt läge kan du nu iterera mycket snabbare samtidigt som du utvecklar skript för användning i en pipeline. Observera att lokala pipeline-instanser inte kan ses eller köras inom Studio IDE; ytterligare visningsalternativ för lokala pipelines kommer dock att finnas tillgängliga snart.
SageMaker SDK tillhandahåller ett allmänt syfte lokal lägeskonfiguration som gör det möjligt för utvecklare att köra och testa processorer och estimatorer som stöds i sin lokala miljö. Du kan använda träning i lokalt läge med flera AWS-stödda ramverksbilder (TensorFlow, MXNet, Chainer, PyTorch och Scikit-Learn) såväl som bilder du själv tillhandahåller.
SageMaker Pipelines, som bygger en Directed Acyclic Graph (DAG) av orkestrerade arbetsflödessteg, stöder många aktiviteter som är en del av ML-livscykeln. I lokalt läge stöds följande steg:
- Bearbetar arbetssteg – En förenklad, hanterad upplevelse på SageMaker för att köra arbetsbelastningar för databearbetning, såsom funktionsteknik, datavalidering, modellutvärdering och modelltolkning
- Utbildning arbetssteg – En iterativ process som lär en modell att göra förutsägelser genom att presentera exempel från en träningsdatauppsättning
- Hyperparameter tuning jobb – Ett automatiserat sätt att utvärdera och välja de hyperparametrar som ger den mest exakta modellen
- Villkorliga löpsteg – Ett steg som ger en villkorad körning av grenar i en pipeline
- Modellsteg – Med hjälp av CreateModel-argument kan detta steg skapa en modell för användning i transformeringssteg eller senare distribution som en slutpunkt
- Förvandla arbetssteg – Ett batchtransformeringsjobb som genererar förutsägelser från stora datamängder och kör slutledning när en beständig slutpunkt inte behövs
- Misslyckade steg – Ett steg som stoppar en pipelinekörning och markerar körningen som misslyckad
Lösningsöversikt
Vår lösning visar de väsentliga stegen för att skapa och köra SageMaker Pipelines i lokalt läge, vilket innebär att man använder lokala CPU-, RAM- och diskresurser för att ladda och köra arbetsflödesstegen. Din lokala miljö kan köras på en bärbar dator med populära IDE:er som VSCode eller PyCharm, eller så kan den vara värd hos SageMaker med klassiska anteckningsbokinstanser.
Lokalt läge tillåter datavetare att sy ihop steg, som kan inkludera bearbetnings-, utbildnings- och utvärderingsjobb, och köra hela arbetsflödet lokalt. När du är klar med att testa lokalt kan du köra om pipelinen i en SageMaker-hanterad miljö genom att ersätta LocalPipelineSession
objekt med PipelineSession
, vilket ger konsekvens till ML-livscykeln.
För det här anteckningsbokexemplet använder vi en allmänt tillgänglig standarduppsättning, den UCI Machine Learning Abalone Dataset. Målet är att träna en ML-modell för att bestämma åldern på en fjällsnigel utifrån dess fysiska mätningar. I kärnan är detta ett regressionsproblem.
All kod som krävs för att köra detta anteckningsboksexempel är tillgänglig på GitHub i amazon-sagemaker-exempel förvaret. I det här anteckningsbokexemplet skapas varje pipeline-arbetsflödessteg oberoende och kopplas sedan samman för att skapa pipeline. Vi skapar följande steg:
- Bearbetningssteg (funktionsteknik)
- Träningssteg (modellträning)
- Bearbetningssteg (modellutvärdering)
- Villkorssteg (modellnoggrannhet)
- Skapa modellsteg (modell)
- Transformeringssteg (batchtransformering)
- Registrera modellsteg (modellpaket)
- Felsteg (körning misslyckades)
Följande diagram illustrerar vår pipeline.
Förutsättningar
För att följa med i det här inlägget behöver du följande:
När dessa förutsättningar är på plats kan du köra exempelanteckningsboken enligt beskrivningen i följande avsnitt.
Bygg din pipeline
I det här anteckningsbokexemplet använder vi SageMaker skriptläge för de flesta av ML-processerna, vilket innebär att vi tillhandahåller den faktiska Python-koden (skript) för att utföra aktiviteten och skicka en referens till denna kod. Skriptläge ger stor flexibilitet för att kontrollera beteendet inom SageMaker-bearbetningen genom att låta dig anpassa din kod samtidigt som du drar fördel av SageMaker förbyggda behållare som XGBoost eller Scikit-Learn. Den anpassade koden skrivs till en Python-skriptfil med hjälp av celler som börjar med det magiska kommandot %%writefile
, som följande:
%%writefile code/evaluation.py
Den primära aktiveraren för lokalt läge är LocalPipelineSession
objekt, som är instansierat från Python SDK. Följande kodsegment visar hur man skapar en SageMaker-pipeline i lokalt läge. Även om du kan konfigurera en lokal datasökväg för många av de lokala pipeline-stegen, är Amazon S3 standardplatsen för att lagra datautmatningen av transformationen. Den nya LocalPipelineSession
objekt skickas till Python SDK i många av SageMakers arbetsflödes API-anrop som beskrivs i det här inlägget. Observera att du kan använda local_pipeline_session
variabel för att hämta referenser till S3-standardbucket och det aktuella regionnamnet.
Innan vi skapar de individuella pipeline-stegen ställer vi in några parametrar som används av pipeline. Vissa av dessa parametrar är strängliterala, medan andra skapas som speciella uppräknade typer som tillhandahålls av SDK. Den uppräknade skrivningen säkerställer att giltiga inställningar tillhandahålls till pipelinen, som den här, som skickas till ConditionLessThanOrEqualTo
steg längre ner:
mse_threshold = ParameterFloat(name="MseThreshold", default_value=7.0)
För att skapa ett databearbetningssteg, som här används för att utföra funktionsutveckling, använder vi SKLearnProcessor
för att ladda och transformera datamängden. Vi passerar local_pipeline_session
variabel till klasskonstruktorn, som instruerar arbetsflödessteget att köras i lokalt läge:
Därefter skapar vi vårt första faktiska pipelinesteg, a ProcessingStep
objekt, som importerats från SageMaker SDK. Processorargumenten returneras från ett anrop till SKLearnProcessor
run() metod. Detta arbetsflödessteg kombineras med andra steg mot slutet av notebook-datorn för att indikera operationsordningen inom pipeline.
Därefter tillhandahåller vi kod för att upprätta ett träningssteg genom att först instansiera en standardkalkylator med SageMaker SDK. Vi passerar detsamma local_pipeline_session
variabel till estimatorn, som heter xgb_train, som sagemaker_session
argument. Eftersom vi vill träna en XGBoost-modell måste vi generera en giltig bild-URI genom att ange följande parametrar, inklusive ramverket och flera versionsparametrar:
Vi kan valfritt kalla ytterligare estimatormetoder, till exempel set_hyperparameters()
, för att tillhandahålla hyperparameterinställningar för träningsjobbet. Nu när vi har en estimator konfigurerad är vi redo att skapa själva utbildningssteget. Återigen importerar vi TrainingStep
klass från SageMaker SDK-biblioteket:
Därefter bygger vi ytterligare ett bearbetningssteg för att utföra modellutvärdering. Detta görs genom att skapa en ScriptProcessor
instans och passerar local_pipeline_session
objekt som en parameter:
För att möjliggöra distribution av den tränade modellen, antingen till en SageMaker realtidsslutpunkt eller till en batchtransform, måste vi skapa en Model
objekt genom att skicka modellartefakter, rätt bild-URI och eventuellt vår anpassade slutledningskod. Vi passerar sedan detta Model
invända mot en ModelStep
, som läggs till den lokala pipelinen. Se följande kod:
Därefter skapar vi ett batchtransformeringssteg där vi skickar in en uppsättning funktionsvektorer och utför slutledning. Vi måste först skapa en Transformer
objekt och passera local_pipeline_session
parameter till den. Sedan skapar vi en TransformStep
, skicka de nödvändiga argumenten och lägg till detta till pipelinedefinitionen:
Slutligen vill vi lägga till ett grenvillkor i arbetsflödet så att vi bara kör batchtransform om resultaten av modellutvärderingen uppfyller våra kriterier. Vi kan indikera detta villkor genom att lägga till a ConditionStep
med en speciell tillståndstyp, som ConditionLessThanOrEqualTo
. Vi räknar sedan upp stegen för de två grenarna, och definierar i huvudsak om/annat eller sant/falskt grenar av pipelinen. If_steps som finns i ConditionStep
(steg_skapa_modell, step_transform) körs närhelst villkoret utvärderas till True
.
Följande diagram illustrerar denna villkorliga gren och de associerade if/else-steg. Endast en gren körs, baserat på resultatet av modellutvärderingssteget jämfört med tillståndssteget.
Nu när vi har alla våra steg definierade och de underliggande klassinstanserna skapade, kan vi kombinera dem till en pipeline. Vi tillhandahåller några parametrar och definierar på ett avgörande sätt operationsordningen genom att helt enkelt lista stegen i önskad ordning. Observera att TransformStep
visas inte här eftersom det är målet för det villkorliga steget och tillhandahölls som stegargument till ConditionalStep
tidigare.
För att köra pipelinen måste du anropa två metoder: pipeline.upsert()
, som laddar upp pipelinen till den underliggande tjänsten, och pipeline.start()
, som börjar köra pipelinen. Du kan använda olika andra metoder för att undersöka körstatus, lista pipelinestegen och mer. Eftersom vi använde pipeline-sessionen för lokalt läge, körs alla dessa steg lokalt på din processor. Cellutgången under startmetoden visar utdata från pipeline:
Du bör se ett meddelande längst ned i cellutgången som liknar följande:
Pipeline execution d8c3e172-089e-4e7a-ad6d-6d76caf987b7 SUCCEEDED
Återgå till hanterade resurser
Efter att vi har bekräftat att pipelinen körs utan fel och vi är nöjda med flödet och formen på pipelinen, kan vi återskapa pipelinen men med SageMaker-hanterade resurser och köra den igen. Den enda ändring som krävs är att använda PipelineSession
objekt istället för LocalPipelineSession
:
från sagemaker.workflow.pipeline_context importera LocalPipelineSessionfrom sagemaker.workflow.pipeline_context import PipelineSession
local_pipeline_session = LocalPipelineSession()pipeline_session = PipelineSession()
Detta informerar tjänsten om att köra varje steg som refererar till detta sessionsobjekt på SageMaker-hanterade resurser. Med tanke på den lilla ändringen illustrerar vi endast de nödvändiga kodändringarna i följande kodcell, men samma ändring skulle behöva implementeras på varje cell med hjälp av local_pipeline_session
objekt. Ändringarna är dock identiska i alla celler eftersom vi bara ersätter local_pipeline_session
objekt med pipeline_session
objekt.
Efter att det lokala sessionsobjektet har ersatts överallt, återskapar vi pipelinen och kör den med SageMaker-hanterade resurser:
Städa upp
Om du vill hålla ordning på Studiomiljön kan du använda följande metoder för att ta bort SageMaker-pipelinen och modellen. Hela koden finns i exemplet anteckningsbok.
Slutsats
Tills nyligen kunde du använda lokallägesfunktionen i SageMaker Processing och SageMaker Training för att iterera på dina bearbetnings- och träningsskript lokalt, innan du körde dem på all data med SageMaker-hanterade resurser. Med den nya funktionen för lokalt läge i SageMaker Pipelines kan ML-utövare nu tillämpa samma metod när de itererar på sina ML-pipelines, och sätter ihop de olika ML-arbetsflödena. När pipelinen är klar för produktion krävs bara några rader kodändringar för att köra den med SageMaker-hanterade resurser. Detta minskar pipelinekörningstiden under utveckling, vilket leder till snabbare pipelineutveckling med snabbare utvecklingscykler, samtidigt som kostnaden för SageMaker-hanterade resurser minskar.
Om du vill veta mer, besök Amazon SageMaker-rörledningar or Använd SageMaker Pipelines för att köra dina jobb lokalt.
Om författarna
Paul Hargis har fokuserat sina ansträngningar på maskininlärning på flera företag, inklusive AWS, Amazon och Hortonworks. Han tycker om att bygga tekniska lösningar och lära människor hur man får ut det mesta av det. Innan han började på AWS var han ledande arkitekt för Amazon Exports and Expansions, och hjälpte amazon.com att förbättra upplevelsen för internationella shoppare. Paul gillar att hjälpa kunder att utöka sina maskininlärningsinitiativ för att lösa verkliga problem.
Niklas Palm är lösningsarkitekt på AWS i Stockholm, där han hjälper kunder över hela Norden att lyckas i molnet. Han brinner särskilt för serverlös teknik tillsammans med IoT och maskininlärning. Utanför arbetet är Niklas en ivrig längdskidåkare och snowboardåkare samt en mästare.
Kirit Thadaka är en ML Solutions Architect som arbetar i SageMaker Service SA-teamet. Innan Kirit började på AWS arbetade Kirit med AI-startups i ett tidigt skede, följt av en tid konsultation i olika roller inom AI-forskning, MLOps och tekniskt ledarskap.
- Avancerat (300)
- AI
- ai konst
- ai art generator
- har robot
- AIML
- Amazon SageMaker
- Amazon SageMaker autopilot
- artificiell intelligens
- artificiell intelligenscertifiering
- artificiell intelligens inom bankväsendet
- artificiell intelligens robot
- robotar med artificiell intelligens
- programvara för artificiell intelligens
- AWS maskininlärning
- blockchain
- blockchain konferens ai
- coingenius
- konversationskonstnärlig intelligens
- kryptokonferens ai
- dalls
- djupt lärande
- du har google
- maskininlärning
- plato
- plato ai
- Platon Data Intelligence
- Platon spel
- PlatonData
- platogaming
- skala ai
- syntax
- Teknisk instruktion
- zephyrnet