Brug dine egne træningsscripts og vælg automatisk den bedste model ved hjælp af hyperparameteroptimering i Amazon SageMaker PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Brug dine egne træningsscripts og vælg automatisk den bedste model ved hjælp af hyperparameteroptimering i Amazon SageMaker

Succesen for enhver maskinlæring (ML) pipeline afhænger ikke kun af kvaliteten af ​​den anvendte model, men også evnen til at træne og gentage denne model. En af de vigtigste måder at forbedre en ML-model på er ved at vælge bedre afstembare parametre, kendt som hyperparametre. Dette er kendt som hyperparameteroptimering (HPO). Men at udføre denne tuning manuelt kan ofte være besværligt på grund af størrelsen af ​​søgeområdet, nogle gange involverer tusindvis af træningsgentagelser.

Dette indlæg viser hvordan Amazon SageMaker giver dig mulighed for ikke kun at medbringe din egen modelalgoritme ved hjælp af script-tilstand, men også bruge den indbyggede HPO-algoritme. Du vil lære, hvordan du nemt kan udlæse den valgte evalueringsmetrik til amazoncloudwatch, hvorfra du kan udtrække denne metrik for at guide den automatiske HPO-algoritme. Du kan derefter oprette et HPO-tuningjob, der orkestrerer flere træningsjob og tilknyttede computerressourcer. Når du er færdig, kan du se det bedste træningsjob i henhold til evalueringsmetrikken.

Løsningsoversigt

Vi gennemgår følgende trin:

  1. Brug SageMaker script-tilstand til at bringe vores egen model oven på en AWS-administreret container.
  2. Refaktorer vores træningsscript for at udskrive vores evalueringsmetrik.
  3. Find metrikken i CloudWatch-logfiler.
  4. Uddrag metrikken fra CloudWatch.
  5. Brug HPO til at vælge den bedste model ved at tune på denne evalueringsmetrik.
  6. Overvåg HPO og find det bedste træningsjob.

Forudsætninger

For denne gennemgang skal du have følgende forudsætninger:

Brug tilpassede algoritmer på en AWS-administreret container

Der henvises til Medbring din egen model med Amazon SageMaker script-tilstand for et mere detaljeret kig på at bringe en brugerdefineret model ind i SageMaker ved hjælp af en AWS-administreret container.

Vi bruger MNIST datasæt for dette eksempel. MNIST er et meget brugt datasæt til håndskrevne cifferklassificering, bestående af 70,000 mærkede 28×28 pixel gråtonebilleder af håndskrevne cifre. Datasættet er opdelt i 60,000 træningsbilleder og 10,000 testbilleder, der indeholder 10 klasser (en for hvert ciffer).

  1. Åbn din notebook-instans og kør følgende kommando for at downloade mnist.py fil:
    !wget https://raw.githubusercontent.com/aws/amazon-sagemaker-examples/main/hyperparameter_tuning/pytorch_mnist/mnist.py

    Inden vi henter og gemmer dataene, lad os oprette en SageMaker-session. Vi bør også specificere S3-spanden og præfikset, der skal bruges til træning og modeldata. Dette bør være inden for samme region som notebook-forekomsten, træningen og hostingen. Følgende kode bruger standard spand hvis den allerede eksisterer, eller opretter en ny, hvis den ikke gør det. Vi skal også inkludere IAM-rollen ARN for at give træning og hosting adgang til dine data. Vi bruger get_execution_role() for at få den IAM-rolle, som du oprettede for din notebook-forekomst.

  2. Opret en session 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. Lad os nu hente dataene, gem dem i vores lokale mappe /data, og upload det 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 nu oprette en estimator til at konfigurere PyTorch-træningsjobbet. Vi fokuserer ikke på den faktiske træningskode her (mnist.py) meget detaljeret. Lad os se på, hvordan vi nemt kan påberåbe os dette træningsscript for at initialisere et træningsjob.

  4. I den følgende kode inkluderer vi et indgangsscript kaldet mnist.py, der indeholder vores tilpassede træningskode:
    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 at sikre, at dette træningsjob er blevet konfigureret korrekt, med fungerende træningskode, kan vi starte et træningsjob ved at tilpasse det til de data, vi uploadede til Amazon S3. SageMaker sikrer, at vores data er tilgængelige i det lokale filsystem, så vores træningsscript kan bare læse dataene fra disken:
    estimator.fit({"training": inputs})

Vi skaber dog ikke et eneste træningsjob. Vi bruger den automatiske modelindstillingsfunktion i SageMaker gennem brugen af ​​et hyperparameterindstillingsjob. Modeltuning er fuldstændig agnostisk over for den faktiske modelalgoritme. For mere information om alle de hyperparametre, du kan indstille, henvises til Udfør automatisk modeljustering med SageMaker.

For hver hyperparameter, som vi ønsker at optimere, skal vi definere følgende:

  • Et navn
  • En type (parametre kan enten være et heltal, kontinuerligt eller kategorisk)
  • En række værdier at udforske
  • En skaleringstype (lineær, logaritmisk, omvendt logaritmisk eller auto); dette lader os kontrollere, hvordan et specifikt parameterområde vil blive udforsket

Vi skal også definere den metric, vi optimerer til. Det kan være en hvilken som helst numerisk værdi, så længe den er synlig i træningsloggen, og du kan sende et regulært udtryk for at udtrække det.

Hvis vi ser på linje 181 i mnist.py, kan vi se, hvordan vi udskriver 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 dette output i logfilerne for det træningsjob, vi lige har kørt. Ved at åbne loggruppen /aws/sagemaker/TrainingJobs på CloudWatch-konsollen bør vi have en loghændelse, der begynder med pytorch-training- efterfulgt af et tidsstempel og genereret navn.

Følgende skærmbillede fremhæver den log, vi leder efter.

Lad os nu begynde med at bygge vores hyperparameter tuning job.

  1. Som nævnt skal vi først definere nogle oplysninger om hyperparametrene under objektet som følger:
    hyperparameter_ranges = {
    "lr": ContinuousParameter(0.001, 0.1),
    "batch-size": CategoricalParameter([32, 64, 128, 256, 512]),
    }

    Her definerede vi vores to hyperparametre. Læringshastigheden (lr) er en kontinuerlig parameter (derfor en kontinuerlig værdi) i området 0.001 og 0.1. Batchstørrelsen (batch-størrelse) er en kategorisk parameter med de foregående diskrete værdier.

    Dernæst specificerer vi den objektive metrik, som vi gerne vil justere, og dens definition. Dette inkluderer det regulære udtryk (regex), der er nødvendigt for at udtrække denne metrisk fra CloudWatch-logfilerne for det træningsjob, som vi tidligere så. Vi specificerer også et beskrivende navn, gennemsnitstesttab og objektivtypen som Minimer, så hyperparameterjusteringen søger at minimere den objektive metrisk, når der søges efter den bedste hyperparameterindstilling.

  2. Angiv metrikken 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"

    Nu er vi klar til at skabe vores HyperparameterTuner objekt. Ud over det objektive metriske navn, type og definition videregiver vi hyperparameter_ranges objektet og den estimator, vi tidligere har oprettet. Vi angiver også det antal job, vi ønsker at køre i alt, sammen med det antal, der skal køre parallelt. Vi har valgt det maksimale antal job som 9, men du vil typisk vælge et meget højere antal (som f.eks. 50) for at opnå optimal ydeevne.

  3. Opret 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 tuning-jobbet, er det værd at bemærke, hvordan kombinationerne af hyperparametre bestemmes. For at få gode resultater skal du vælge de rigtige områder at udforske. Som standard bruges den Bayesianske søgestrategi, beskrevet yderligere i Sådan fungerer Hyperparameter Tuning.

Med Bayesiansk optimering behandles hyperparameter tuning som en regression problem. For at løse dette regressionsproblem laver den gæt om, hvilke hyperparameterkombinationer der vil få de bedste resultater, og kører træningsjob for at teste disse værdier. Den bruger regression til at vælge det næste sæt hyperparameterværdier, der skal testes. Der er en klar udnyttelse/udforsk-afvejning, som søgestrategien gør her. Den kan vælge hyperparameterværdier tæt på den kombination, der resulterede i det bedste tidligere træningsjob for gradvist at forbedre ydeevnen. Eller den kan vælge værdier længere væk for at prøve at udforske en ny række værdier, som endnu ikke er godt forstået.

Du kan dog angive andre søgestrategier. Følgende strategier understøttes i SageMaker:

  • Netsøgning – Prøver alle mulige kombinationer blandt de specificerede hyperparametre.
  • Tilfældig søgning – Prøver tilfældige kombinationer blandt de angivne værdier. Det afhænger ikke af resultaterne af tidligere træningsjob, så du kan køre det maksimale antal samtidige træningsjob uden at påvirke ydeevnen af ​​tuning.
  • Hyperbånd søgning – Bruger både mellemliggende og endelige resultater af træningsjob til at omallokere epoker til veludnyttede hyperparameterkonfigurationer og stopper automatisk dem, der underpræsterer.

Du kan også udforske at medbringe din egen algoritme, som forklaret i Medbring din egen hyperparameteroptimeringsalgoritme på Amazon SageMaker.

  1. Vi starter derefter træning på selve tunerobjektet (ikke estimatoren), der kalder .fit() og passerer i S3-stien til vores tog- og testdatasæt:
    tuner.fit({"training": inputs})

Vi kan derefter følge udviklingen af ​​vores tuning-job på SageMaker-konsollen på Hyperparameter tuning job side. Tuning-jobbet spinner de underliggende beregningsressourcer op, der er nødvendige ved at orkestrere hver enkelt træningskørsel og dens tilhørende beregning.

Så er det nemt at se alle de individuelle uddannelsesjob, der er afsluttet eller i gang, sammen med deres tilhørende objektive metriske værdi. I det følgende skærmbillede kan vi se, at det første parti af træningsjob er afsluttet, som indeholder tre i alt ifølge vores specificerede max_parallel_jobs værdi på 3. Efter afslutningen kan vi finde det bedste træningsjob – det der minimerer det gennemsnitlige testtab – på Bedste træningsjob fane.

Skærmbillede af listen over træningsjob

Ryd op

Slet de ressourcer, du initialiserede, for at undgå fremtidige gebyrer. Disse er S3-bøtten, IAM-rollen og SageMaker notebook-forekomsten.

Konklusion

I dette indlæg diskuterede vi, hvordan vi kan bringe vores egen model ind i SageMaker og derefter bruge automatiseret hyperparameteroptimering til at vælge det bedste træningsjob. Vi brugte det populære MNIST-datasæt til at se på, hvordan vi kan specificere en tilpasset objektiv metrik, som HPO-jobbet skal optimere på. Ved at udtrække denne objektive metrik fra CloudWatch og specificere forskellige hyperparameterværdier kan vi nemt starte og overvåge HPO-jobbet.

Hvis du har brug for mere information, eller ønsker at se, hvordan vores kunder bruger HPO, henvises til Amazon SageMaker Automatisk Model Tuning. Tilpas din egen model til automatiseret hyperparameteroptimering i SageMaker i dag.


Om forfatteren

Brug dine egne træningsscripts og vælg automatisk den bedste model ved hjælp af hyperparameteroptimering i Amazon SageMaker PlatoBlockchain Data Intelligence. Lodret søgning. Ai.Sam Price er en Professional Services Consultant med speciale i AI/ML og dataanalyse hos Amazon Web Services. Han arbejder tæt sammen med offentlige kunder inden for sundheds- og biovidenskab for at løse udfordrende problemer. Når han ikke gør dette, nyder Sam at spille guitar og tennis og se sine yndlings-indie-bands.

Tidsstempel:

Mere fra AWS maskinindlæring