Bruk dine egne treningsskript og velg automatisk den beste modellen ved hjelp av hyperparameteroptimalisering i Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Bruk dine egne treningsskript og velg automatisk den beste modellen ved hjelp av hyperparameteroptimalisering i Amazon SageMaker

Suksessen til enhver maskinlæring (ML) pipeline avhenger ikke bare av kvaliteten på modellen som brukes, men også evnen til å trene og gjenta denne modellen. En av de viktigste måtene å forbedre en ML-modell på er ved å velge bedre justerbare parametere, kjent som hyperparametere. Dette er kjent som hyperparameteroptimalisering (HPO). Men å gjøre denne innstillingen manuelt kan ofte være tungvint på grunn av størrelsen på søkeområdet, noen ganger involverer tusenvis av treningsgjentakelser.

Dette innlegget viser hvordan Amazon SageMaker lar deg ikke bare ta med din egen modellalgoritme ved å bruke skriptmodus, men også bruke den innebygde HPO-algoritmen. Du vil lære hvordan du enkelt kan sende ut den valgte evalueringsberegningen til Amazon CloudWatch, hvorfra du kan trekke ut denne beregningen for å veilede den automatiske HPO-algoritmen. Du kan deretter opprette en HPO-tuning-jobb som orkestrerer flere treningsjobber og tilhørende dataressurser. Når du er ferdig, kan du se den beste treningsjobben i henhold til evalueringsberegningen.

Løsningsoversikt

Vi går gjennom følgende trinn:

  1. Bruk SageMaker-skriptmodus for å bringe vår egen modell på toppen av en AWS-administrert beholder.
  2. Refaktorer treningsskriptet vårt for å skrive ut evalueringsberegningen vår.
  3. Finn beregningen i CloudWatch-logger.
  4. Trekk ut beregningen fra CloudWatch.
  5. Bruk HPO til å velge den beste modellen ved å stille inn denne evalueringsmetrikken.
  6. Overvåk HPO og finn den beste treningsjobben.

Forutsetninger

For dette gjennomgangen bør du ha følgende forutsetninger:

Bruk tilpassede algoritmer på en AWS-administrert beholder

Referere til Ta med din egen modell med Amazon SageMaker-skriptmodus for en mer detaljert titt på å bringe en tilpasset modell inn i SageMaker ved hjelp av en AWS-administrert beholder.

Vi bruker MNIST datasett for dette eksemplet. MNIST er et mye brukt datasett for håndskrevne sifferklassifisering, bestående av 70,000 28 merkede 28×60,000 piksler gråskalabilder av håndskrevne sifre. Datasettet er delt inn i 10,000 10 treningsbilder og XNUMX XNUMX testbilder, som inneholder XNUMX klasser (en for hvert siffer).

  1. Åpne din bærbare forekomst og kjør følgende kommando for å laste ned mnist.py file:
    !wget https://raw.githubusercontent.com/aws/amazon-sagemaker-examples/main/hyperparameter_tuning/pytorch_mnist/mnist.py

    Før vi henter og lagrer dataene, la oss lage en SageMaker-økt. Vi bør også spesifisere S3-bøtte og prefiks som skal brukes for trening og modelldata. Dette bør være innenfor samme region som den bærbare forekomsten, opplæringen og hostingen. Følgende kode bruker standard bøtte hvis den allerede eksisterer, eller oppretter en ny hvis den ikke gjør det. Vi må også inkludere IAM-rollen ARN for å gi opplæring og vertstilgang til dataene dine. Vi bruker get_execution_role() for å få IAM-rollen du opprettet for den bærbare forekomsten.

  2. Opprett en økt med følgende kode:
    import sagemaker
    from sagemaker.tuner import (
    IntegerParameter,
    CategoricalParameter,
    ContinuousParameter,
    HyperparameterTuner,
    )
    session = sagemaker.Session()
    bucket = session.default_bucket()
    prefix = "sagemaker/DEMO-custom-hpo"
    role = sagemaker.get_execution_role()

  3. La oss nå hente dataene, lagre dem i vår lokale mappe /data, og last den opp til Amazon S3:
    from torchvision.datasets import MNIST
    from torchvision import transforms
    MNIST.mirrors = ["https://sagemaker-sample-files.s3.amazonaws.com/datasets/image/MNIST/"]
    MNIST(
    "data",
    download=True,
    transform=transforms.Compose(
    [transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,))]
    ),
    )
    inputs = session.upload_data(path="data", bucket=bucket, key_prefix=prefix)

    Vi kan nå lage en estimator for å sette opp PyTorch-treningsjobben. Vi fokuserer ikke på den faktiske treningskoden her (mnist.py) i stor detalj. La oss se på hvordan vi enkelt kan påkalle dette opplæringsskriptet for å initialisere en treningsjobb.

  4. I den følgende koden inkluderer vi et inngangspunktskript kalt mnist.py som inneholder vår egendefinerte opplæringskode:
    from sagemaker.pytorch import PyTorch
    estimator = PyTorch(
    entry_point="mnist.py",
    role=role,
    py_version="py3",
    framework_version="1.8.0",
    instance_count=1,
    instance_type="ml.c5.2xlarge",
    hyperparameters={"epochs": 5},
    )

  5. For å sikre at denne opplæringsjobben er riktig konfigurert, med fungerende opplæringskode, kan vi starte en opplæringsjobb ved å tilpasse den til dataene vi lastet opp til Amazon S3. SageMaker sikrer at dataene våre er tilgjengelige i det lokale filsystemet, så opplæringsskriptet vårt kan bare lese dataene fra disken:
    estimator.fit({"training": inputs})

Vi oppretter imidlertid ikke en eneste treningsjobb. Vi bruker den automatiske modellinnstillingsfunksjonen til SageMaker gjennom bruk av en hyperparameterinnstillingsjobb. Modellinnstilling er fullstendig agnostisk for selve modellalgoritmen. For mer informasjon om alle hyperparametrene du kan justere, se Utfør automatisk modellinnstilling med SageMaker.

For hver hyperparameter som vi ønsker å optimalisere, må vi definere følgende:

  • Et navn
  • En type (parametere kan enten være et heltall, kontinuerlig eller kategorisk)
  • En rekke verdier å utforske
  • En skaleringstype (lineær, logaritmisk, omvendt logaritmisk eller auto); dette lar oss kontrollere hvordan et spesifikt parameterområde skal utforskes

Vi må også definere beregningen vi optimaliserer for. Det kan være en hvilken som helst numerisk verdi så lenge den er synlig i treningsloggen og du kan sende et regulært uttrykk for å trekke det ut.

Hvis vi ser på linje 181 i mnist.py, kan vi se hvordan vi skriver ut til loggeren:

logger.info(
"Test set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)n".format(
test_loss, correct, len(test_loader.dataset), 100.0 * correct / len(test_loader.dataset)
)

Faktisk kan vi se denne utgangen i loggene til treningsjobben vi nettopp kjørte. Ved å åpne logggruppen /aws/sagemaker/TrainingJobs på CloudWatch-konsollen bør vi ha en logghendelse som begynner med pytorch-training- etterfulgt av et tidsstempel og generert navn.

Følgende skjermbilde fremhever loggen vi leter etter.

La oss nå begynne å bygge vår hyperparameterinnstillingsjobb.

  1. Som nevnt må vi først definere litt informasjon om hyperparametrene, under objektet som følger:
    hyperparameter_ranges = {
    "lr": ContinuousParameter(0.001, 0.1),
    "batch-size": CategoricalParameter([32, 64, 128, 256, 512]),
    }

    Her definerte vi våre to hyperparametre. Læringshastigheten (lr) er en kontinuerlig parameter (derfor en kontinuerlig verdi) i området 0.001 og 0.1. Batchstørrelsen (batch-size) er en kategorisk parameter med de foregående diskrete verdiene.

    Deretter spesifiserer vi den objektive beregningen som vi ønsker å justere og dens definisjon. Dette inkluderer det regulære uttrykket (regex) som trengs for å trekke ut den beregningen fra CloudWatch-loggene til treningsjobben som vi tidligere så. Vi spesifiserer også et beskrivende navn gjennomsnittlig testtap og objektivtypen som Minimer, så hyperparameterinnstillingen søker å minimere målverdien når du søker etter den beste hyperparameterinnstillingen.

  2. Spesifiser beregningen med følgende kode:
    metric_definitions = [{"Name": "average test loss", "Regex": "Test set: Average loss: ([0-9.]+)"}]
    objective_metric_name = "average test loss"
    objective_type = "Minimize"

    Nå er vi klare til å lage vår HyperparameterTuner gjenstand. I tillegg til det objektive metriske navnet, typen og definisjonen, sender vi inn hyperparameter_ranges objektet og estimatoren vi tidligere opprettet. Vi spesifiserer også antall jobber vi ønsker å kjøre totalt, sammen med antall som skal kjøres parallelt. Vi har valgt maksimalt antall jobber som 9, men du vil vanligvis velge et mye høyere antall (for eksempel 50) for optimal ytelse.

  3. Opprett HyperparameterTuner objekt med følgende kode:
    tuner = HyperparameterTuner(
    estimator,
    objective_metric_name,
    hyperparameter_ranges,
    metric_definitions,
    max_jobs=9,
    max_parallel_jobs=3,
    objective_type=objective_type,
    )

Før vi starter innstillingsjobben, er det verdt å merke seg hvordan kombinasjonene av hyperparametere bestemmes. For å få gode resultater, må du velge de riktige områdene å utforske. Som standard brukes den Bayesianske søkestrategien, beskrevet videre i Hvordan Hyperparameter Tuning fungerer.

Med Bayesiansk optimalisering behandles hyperparameterinnstilling som en regresjon problem. For å løse dette regresjonsproblemet gjør den gjetninger om hvilke hyperparameterkombinasjoner som vil gi de beste resultatene, og kjører treningsjobber for å teste disse verdiene. Den bruker regresjon til å velge neste sett med hyperparameterverdier som skal testes. Det er en klar utnyttelse/utforsking avveining som søkestrategien gjør her. Den kan velge hyperparameterverdier nær kombinasjonen som resulterte i den beste tidligere treningsjobben for å forbedre ytelsen gradvis. Eller den kan velge verdier lenger unna, for å prøve å utforske en ny rekke verdier som ennå ikke er godt forstått.

Du kan imidlertid spesifisere andre søkestrategier. Følgende strategier støttes i SageMaker:

  • Rutenettsøk – Prøver alle mulige kombinasjoner blant utvalget av hyperparametere som er spesifisert.
  • Tilfeldig søk – Prøver tilfeldige kombinasjoner blant verdiene som er spesifisert. Det avhenger ikke av resultatene fra tidligere treningsjobber, så du kan kjøre maksimalt antall samtidige treningsjobber uten å påvirke ytelsen til tuning.
  • Hyperbåndsøk – Bruker både mellom- og sluttresultater av treningsjobber for å omfordele epoker til godt brukte hyperparameterkonfigurasjoner, og stopper automatisk de som underpresterer.

Du kan også utforske å ta med din egen algoritme, som forklart i Ta med din egen optimaliseringsalgoritme for hyperparameter på Amazon SageMaker.

  1. Vi starter deretter trening på selve tunerobjektet (ikke estimatoren), og ringer .fit() og passerer i S3-banen til vårt tog- og testdatasett:
    tuner.fit({"training": inputs})

Vi kan deretter følge utviklingen av tuningjobben vår på SageMaker-konsollen, på Hyperparameter tuning jobber side. Tuning-jobben spinner opp de underliggende beregningsressursene som er nødvendige ved å orkestrere hvert enkelt treningsløp og tilhørende beregning.

Da er det enkelt å se alle de individuelle opplæringsjobbene som er fullført eller pågår, sammen med tilhørende objektive metriske verdier. I det følgende skjermbildet kan vi se den første gruppen med opplæringsjobber er fullført, som inneholder tre totalt i henhold til vår spesifiserte max_parallel_jobs verdi på 3. Etter fullføring kan vi finne den beste treningsjobben – den som minimerer gjennomsnittlig testtap – på Beste treningsjobb fanen.

Skjermbilde av listen over treningsjobber

Rydd opp

For å unngå fremtidige kostnader, slett ressursene du initialiserte. Dette er S3-bøtten, IAM-rollen og SageMaker-notebook-forekomsten.

konklusjonen

I dette innlegget diskuterte vi hvordan vi kan bringe vår egen modell inn i SageMaker, og deretter bruke automatisert hyperparameteroptimalisering for å velge den beste treningsjobben. Vi brukte det populære MNIST-datasettet for å se på hvordan vi kan spesifisere en tilpasset målberegning som HPO-jobben skal optimaliseres for. Ved å trekke ut denne objektive beregningen fra CloudWatch, og spesifisere ulike hyperparameterverdier, kan vi enkelt starte og overvåke HPO-jobben.

Hvis du trenger mer informasjon, eller ønsker å se hvordan kundene våre bruker HPO, se Amazon SageMaker Automatisk modellinnstilling. Tilpass din egen modell for automatisert hyperparameteroptimalisering i SageMaker i dag.


Om forfatteren

Bruk dine egne treningsskript og velg automatisk den beste modellen ved hjelp av hyperparameteroptimalisering i Amazon SageMaker PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.Sam Price er en profesjonell tjenestekonsulent som spesialiserer seg på AI/ML og dataanalyse hos Amazon Web Services. Han jobber tett med offentlige kunder innen helse og biovitenskap for å løse utfordrende problemer. Når han ikke gjør dette, liker Sam å spille gitar og tennis, og se sine favoritt-indieband.

Tidstempel:

Mer fra AWS maskinlæring