Zephyrnet-logotyp

Förbättra ML-utvecklares produktivitet med vikter och fördomar: ett exempel på datorvision på Amazon SageMaker

Datum:

Innehållet och åsikterna i det här inlägget tillhör tredjepartsförfattaren och AWS ansvarar inte för innehållet eller noggrannheten i detta inlägg.

Allt eftersom fler organisationer använder tekniker för djupinlärning som datorseende och naturlig språkbehandling, behöver utvecklarpersonen för maskininlärning (ML) skalbara verktyg kring experimentspårning, härkomst och samarbete. Experimentspårning inkluderar metadata som operativsystem, använd infrastruktur, bibliotek och in- och utdatauppsättningar – ofta spåras manuellt på ett kalkylblad. Härstamning involverar spårning av datamängder, transformationer och algoritmer som används för att skapa en ML-modell. Samarbetet inkluderar ML-utvecklare som arbetar med ett enda projekt och även ML-utvecklare som delar sina resultat mellan team och affärsintressenter – en process som vanligtvis görs via e-post, skärmdumpar och PowerPoint-presentationer.

I det här inlägget tränar vi en modell för att identifiera objekt för ett autonomt fordonsanvändningsfall med hjälp av vikter och fördomar (W&B) och Amazon SageMaker. Vi visar upp hur den gemensamma lösningen minskar manuellt arbete för ML-utvecklaren, skapar mer transparens i modellutvecklingsprocessen och gör det möjligt för team att samarbeta i projekt.

Vi kör detta exempel på Amazon SageMaker Studio för dig att prova själv.

Översikt över vikter och fördomar

Vikter och fördomar hjälper ML-team att bygga bättre modeller snabbare. Med bara några rader kod i din SageMaker-anteckningsbok kan du omedelbart felsöka, jämföra och reproducera dina modeller – arkitektur, hyperparametrar, git-commits, modellvikter, GPU-användning, datauppsättningar och förutsägelser – allt samtidigt som du samarbetar med dina lagkamrater.

W&B litar på mer än 200,000 XNUMX ML-utövare från några av de mest innovativa företagen och forskningsorganisationerna i världen. För att prova det gratis, registrera dig på Vikter och fördomar, Eller besöka Lista över W&B AWS Marketplace.

Komma igång med SageMaker Studio

SageMaker Studio är den första helt integrerade utvecklingsmiljön (IDE) för ML. Studio tillhandahåller ett enda webbaserat gränssnitt där ML-utövare och datavetare kan bygga, träna och distribuera modeller med några få klick, allt på ett ställe.

För att komma igång med Studio behöver du ett AWS-konto och ett AWS identitets- och åtkomsthantering (IAM) användare eller roll med behörighet att skapa en Studio-domän. Hänvisa till Ombord på Amazon SageMaker Domain för att skapa en domän, och Studio dokumentation för en översikt över hur du använder Studios visuella gränssnitt och anteckningsböcker.

Ställ in miljön

För det här inlägget är vi intresserade av att köra vår egen kod, så låt oss importera några anteckningsböcker från GitHub. Vi använder följande GitHub repo som ett exempel, så låt oss ladda den här anteckningsboken.

Du kan klona ett arkiv antingen via terminalen eller Studio UI. För att klona ett arkiv genom terminalen, öppna en systemterminal (på Fil meny, välj Nya och terminal) och skriv in följande kommando:

git clone https://github.com/wandb/SageMakerStudio

För att klona ett arkiv från Studio UI, se Klona ett Git-förråd i SageMaker Studio.

För att komma igång, välj 01_data_processing.ipynb anteckningsbok. Du tillfrågas med en prompt för kärnbyte. Det här exemplet använder PyTorch, så vi kan välja den förbyggda PyTorch 1.10 Python 3.8 GPU optimerad bild för att starta vår anteckningsbok. Du kan se appen starta, och när kärnan är klar visar den instanstypen och kärnan längst upp till höger på din anteckningsbok.

Vår anteckningsbok behöver några ytterligare beroenden. Det här arkivet tillhandahåller en requirements.txt med de ytterligare beroenden. Kör den första cellen för att installera de nödvändiga beroenden:

%pip install -r requirements.txt

Du kan också skapa en livscykelkonfiguration för att automatiskt installera paketen varje gång du startar PyTorch-appen. Ser Anpassa Amazon SageMaker Studio med hjälp av livscykelkonfigurationer för instruktioner och ett exempel på implementering.

Använd vikter och fördomar i SageMaker Studio

Vikter och fördomar (wandb) är ett standard Python-bibliotek. När det väl har installerats är det så enkelt som att lägga till några rader kod till ditt träningsskript och du är redo att logga experiment. Vi har redan installerat det via vår requirements.txt-fil. Du kan också installera det manuellt med följande kod:

! pip install wandb

Fallstudie: Autonom semantisk segmentering av fordon

dataset

Vi använder Cambridge-driving Labeled Video Database (CamVid) för detta exempel. Den innehåller en samling videor med semantiska objektklassetiketter, komplett med metadata. Databasen tillhandahåller marksanningsetiketter som associerar varje pixel med en av 32 semantiska klasser. Vi kan versionera vår datauppsättning som en wandb.Artefakt, på så sätt kan vi referera till det senare. Se följande kod:

with wandb.init(project="sagemaker_camvid_demo", job_type="upload"):
   artifact = wandb.Artifact(
       name='camvid-dataset',
       type='dataset',
       metadata={
           "url": 'https://s3.amazonaws.com/fast-ai-imagelocal/camvid.tgz',
           "class_labels": class_labels
       },
       description="The Cambridge-driving Labeled Video Database (CamVid) is the first collection of videos with object class semantic labels, complete with metadata. The database provides ground truth labels that associate each pixel with one of 32 semantic classes."
   )
   artifact.add_dir(path)
   wandb.log_artifact(artifact)

Du kan följa med i 01_data_processing.ipynb anteckningsbok.

Vi loggar även en bord av datamängden. Tabeller är rika och kraftfulla DataFrame-liknande enheter som gör att du kan fråga och analysera tabelldata. Du kan förstå dina datauppsättningar, visualisera modellförutsägelser och dela insikter i en central instrumentpanel.

Vikt- och fördomstabeller stöder många rich media-format, som bild, ljud och vågformer. För en fullständig lista över medieformat, se Datatyper.

Följande skärmdump visar en tabell med råa bilder med segmentering av grundsanningen. Du kan också se en interaktiv version av denna tabell.

bild

Träna en modell

Vi kan nu skapa en modell och träna den på vår datauppsättning. Vi använder PyTorch och fastai att snabbt prototypera en baslinje och sedan använda wandb.Sweeps för att optimera våra hyperparametrar. Följ med i 02_semantic_segmentation.ipynb anteckningsbok. När du tillfrågas om en kärna när du öppnar anteckningsboken, välj samma kärna från vår första anteckningsbok, PyTorch 1.10 Python 3.8 GPU optimerad. Dina paket är redan installerade eftersom du använder samma app.

Modellen är tänkt att lära sig en annotering per pixel av en scen som tagits från den autonoma agentens synvinkel. Modellen måste kategorisera eller segmentera varje pixel i en given scen i 32 relevanta kategorier, som väg, fotgängare, trottoar eller bilar. Du kan välja vilken som helst av de segmenterade bilderna i tabellen och komma åt detta interaktiva gränssnitt för att komma åt segmenteringsresultaten och kategorierna.

Eftersom den fastai biblioteket har integration med wandb, kan du helt enkelt passera WandbCallback till eleven:

from fastai.callback.wandb import WandbCallback

loss_func=FocalLossFlat(axis=1)
model = SegmentationModel(backbone, hidden_dim, num_classes=num_classes)
wandb_callback = WandbCallback(log_preds=True)
   learner = Learner(
        data_loader,
        model,
        loss_func=loss_func,
        metrics=metrics,
        cbs=[wandb_callback],
    )

learn.fit_one_cycle(TRAIN_EPOCHS, LEARNING_RATE)

För baslinjeexperimenten bestämde vi oss för att använda en enkel arkitektur inspirerad av UNet papper med olika ryggrad från timm. Vi tränade våra modeller med Fokalförlust som kriterium. Med Weights & Biases kan du enkelt skapa instrumentpaneler med sammanfattningar av dina experiment för att snabbt analysera träningsresultat, som visas i följande skärmdump. Du kan också se den här instrumentpanelen interaktivt.

Hyperparametersökning med svep

För att förbättra prestandan för baslinjemodellen måste vi välja den bästa modellen och den bästa uppsättningen hyperparametrar att träna. W&B gör detta enkelt för oss att använda svep.

Vi utför a Bayesiansk hyperparametersökning med målet att maximera modellens förgrundsnoggrannhet på valideringsdataset. För att utföra svepet definierar vi konfigurationsfilen sweep.yaml. Inuti den här filen skickar vi den önskade metoden att använda: bayes och parametrarna och deras motsvarande värden för att söka. I vårt fall provar vi olika ryggrader, batchstorlekar och förlustfunktioner. Vi utforskar också olika optimeringsparametrar som inlärningshastighet och viktminskning. Eftersom dessa är kontinuerliga värden, samplar vi från en fördelning. Det finns flera tillgängliga konfigurationsalternativ för svep.

program: train.py
project: sagemaker_camvid_demo
method: bayes
metric:
    name: foreground_acc
    goal: maximize
early_terminate:
    type: hyperband
    min_iter: 5
parameters:
    backbone:
        values: ["mobilenetv2_100","mobilenetv3_small_050","mobilenetv3_large_100","resnet18","resnet34","resnet50","vgg19"]
    batch_size: 
        values: [8, 16]
    image_resize_factor: 
        value: 4
    loss_function: 
        values: ["categorical_cross_entropy", "focal", "dice"]
    learning_rate: 
        distribution: uniform 
        min: 1e-5
        max: 1e-2
    weight_decay: 
        distribution: uniform
        min: 0.0 
        max: 0.05

Efteråt, i en terminal, startar du svepet med hjälp av wandb kommandorad:

$ wandb sweep sweep.yaml —-project="sagemaker_camvid_demo"

Och starta sedan en svepagent på den här maskinen med följande kod:

$ wandb agent <sweep_id>

När svepet är klart kan vi använda en parallell koordinatplot för att utforska modellernas prestanda med olika ryggrader och olika uppsättningar hyperparametrar. Utifrån det kan vi se vilken modell som presterar bäst.

Följande skärmdump visar resultaten av svepen, inklusive ett parallellkoordinatdiagram och parameterkorrelationsdiagram. Du kan också se denna svepinstrumentpanel interaktivt.

Vi kan härleda följande viktiga insikter från svepet:

  • Lägre inlärningshastighet och lägre viktminskning resulterar i bättre förgrundsnoggrannhet och Dice-poäng.
  • Batchstorlek har starka positiva korrelationer med måtten.
  • Smakämnen VGG-baserade ryggrader kanske inte är ett bra alternativ att träna vår slutliga modell eftersom de är benägna att resultera i en försvinnande lutning. (De filtreras bort när förlusten divergerade.)
  • Smakämnen ResNet ryggraden resulterar i bästa övergripande prestanda med avseende på måtten.
  • ResNet34 eller ResNet50 ryggraden bör väljas för den slutliga modellen på grund av deras starka prestanda i termer av mått.

Data och modellhärstamning

W&B-artefakter designades för att göra det enkelt att versionera dina datauppsättningar och modeller, oavsett om du vill lagra dina filer med W&B eller om du redan har en hink som du vill att W&B ska spåra. När du har spårat dina datauppsättningar eller modellfiler loggar W&B automatiskt varje ändring, vilket ger dig en fullständig och granskningsbar historik över ändringar i dina filer.

I vårt fall loggas datamängden, modellerna och olika tabeller som genereras under utbildningen till arbetsytan. Du kan snabbt se och visualisera denna härstamning genom att gå till Artefakter sida.

bild

Tolka modellförutsägelser

Vikt & fördomar är särskilt användbart när man bedömer modellprestanda genom att använda kraften i wandb.Tables att visualisera var vår modell går dåligt. I det här fallet är vi särskilt intresserade av att upptäcka korrekt utsatta användare som cyklar och fotgängare.

Vi loggade de förutspådda maskerna tillsammans med tärningspoängkoefficienten per klass i en tabell. Vi filtrerade sedan efter rader som innehöll de önskade klasserna och sorterade efter stigande ordning på tärningspoängen.

I följande tabell filtrerar vi först genom att välja var Dice-poängen är positiv (fotgängare finns på bilden). Sedan sorterar vi i stigande ordning för att identifiera våra värst upptäckta fotgängare. Tänk på att en tärningspoäng som är lika med 1 betyder att du delar upp fotgängarklassen korrekt. Du kan också se den här tabellen interaktivt.

bild

Vi kan upprepa denna analys med andra utsatta klasser, som cyklar eller trafikljus.

Den här funktionen är ett mycket bra sätt att identifiera bilder som inte är korrekt märkta och tagga dem för att återkommentera.

Slutsats

Det här inlägget visade upp Weights & Biases MLOps-plattformen, hur man ställer in W&B i SageMaker Studio och hur man kör en introduktionsanteckningsbok om den gemensamma lösningen. Vi gick sedan igenom ett användningsfall för semantisk segmentering av autonoma fordon och demonstrerade spårningsträningskörningar med W&B-experiment, hyperparameteroptimering med W&B-svep och tolkning av resultat med W&B-tabeller.

Om du är intresserad av att lära dig mer kan du komma åt live W&B rapport. För att prova Weights & Biases gratis, registrera dig på Vikter och fördomar, Eller besöka Lista över W&B AWS Marketplace.


Om författarna

Thomas Capelle är en maskininlärningsingenjör på vikter och fördomar. Han är ansvarig för att hålla www.github.com/wandb/examples förrådet live och uppdaterat. Han bygger också innehåll på MLOPS, tillämpningar av W&B till industrier och rolig djupinlärning i allmänhet. Tidigare använde han djupinlärning för att lösa kortsiktiga prognoser för solenergi. Han har en bakgrund inom stadsplanering, kombinatorisk optimering, transportekonomi och tillämpad matematik.

Durga Sury är en ML Solutions Architect i Amazon SageMaker Service SA-teamet. Hon brinner för att göra maskininlärning tillgängligt för alla. Under sina tre år på AWS har hon hjälpt till att sätta upp AI/ML-plattformar för företagskunder. När hon inte jobbar älskar hon motorcykelturer, mysterieromaner och vandringar med sin fyraåriga husky.

Karthik Bharathy är produktledare för Amazon SageMaker med över ett decennium av produkthantering, produktstrategi, utförande och lanseringserfarenhet.

plats_img

Senaste intelligens

plats_img

Chatta med oss

Hallå där! Hur kan jag hjälpa dig?