Utilizați propriile scripturi de antrenament și selectați automat cel mai bun model utilizând optimizarea hiperparametrului în Amazon SageMaker PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Utilizați propriile scripturi de antrenament și selectați automat cel mai bun model folosind optimizarea hiperparametrului în Amazon SageMaker

Succesul oricărei conducte de învățare automată (ML) depinde nu doar de calitatea modelului utilizat, ci și de capacitatea de a antrena și de a repeta acest model. Una dintre modalitățile cheie de a îmbunătăți un model ML este prin alegerea unor parametri reglabili mai buni, cunoscuți ca hiperparametri. Aceasta este cunoscută sub denumirea de optimizare hiperparametrică (HPO). Cu toate acestea, efectuarea manuală a acestei reglaje poate fi adesea greoaie din cauza dimensiunii spațiului de căutare, implicând uneori mii de iterații de antrenament.

Această postare arată cum Amazon SageMaker vă permite nu numai să aduceți propriul algoritm model folosind modul script, ci și să utilizați algoritmul HPO încorporat. Veți învăța cum să transmiteți cu ușurință metrica de evaluare la alegere Amazon CloudWatch, din care puteți extrage această măsură pentru a ghida algoritmul automat HPO. Puteți crea apoi un job de reglare HPO care orchestrează mai multe joburi de instruire și resurse de calcul asociate. La finalizare, puteți vedea cel mai bun loc de muncă de formare conform metricii de evaluare.

Prezentare generală a soluțiilor

Parcurgem următorii pași:

  1. Utilizați modul script SageMaker pentru a aduce propriul nostru model deasupra unui container gestionat de AWS.
  2. Refactorizați scriptul nostru de antrenament pentru a imprima metrica noastră de evaluare.
  3. Găsiți valoarea în CloudWatch Logs.
  4. Extrageți valoarea din CloudWatch.
  5. Utilizați HPO pentru a selecta cel mai bun model prin reglarea acestei valori de evaluare.
  6. Monitorizați HPO și găsiți cel mai bun loc de muncă de formare.

Cerințe preliminare

Pentru această prezentare generală, ar trebui să aveți următoarele condiții prealabile:

Utilizați algoritmi personalizați pe un container gestionat de AWS

A se referi la Aduceți-vă propriul model cu modul script Amazon SageMaker pentru o privire mai detaliată asupra aducerii unui model personalizat în SageMaker folosind un container gestionat de AWS.

Noi folosim Setul de date MNIST pentru acest exemplu. MNIST este un set de date utilizat pe scară largă pentru clasificarea cifrelor scrise de mână, constând din 70,000 de imagini etichetate în tonuri de gri de 28×28 pixeli ale cifrelor scrise de mână. Setul de date este împărțit în 60,000 de imagini de antrenament și 10,000 de imagini de testare, conținând 10 clase (una pentru fiecare cifră).

  1. Deschideți instanța de notebook și rulați următoarea comandă pentru a descărca mnist.py fișier:
    !wget https://raw.githubusercontent.com/aws/amazon-sagemaker-examples/main/hyperparameter_tuning/pytorch_mnist/mnist.py

    Înainte de a obține și stoca datele, să creăm o sesiune SageMaker. De asemenea, ar trebui să specificăm găleata S3 și prefixul de utilizat pentru antrenament și datele modelului. Acesta ar trebui să fie în aceeași regiune ca și instanța notebook-ului, instruirea și găzduirea. Următorul cod folosește găleată implicită dacă există deja, sau creează unul nou, dacă nu există. De asemenea, trebuie să includem rolul IAM ARN pentru a oferi acces la formarea și găzduirea la datele dvs. Folosim get_execution_role() pentru a obține rolul IAM pe care l-ați creat pentru instanța dvs. de notebook.

  2. Creați o sesiune cu următorul cod:
    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. Acum să obținem datele, să le stocăm în folderul nostru local /datași încărcați-l pe 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)

    Acum putem crea un estimator pentru a configura jobul de instruire PyTorch. Nu ne concentrăm pe codul de antrenament propriu-zis aici (mnist.py) în detaliu. Să vedem cum putem invoca cu ușurință acest script de antrenament pentru a inițializa un job de instruire.

  4. În următorul cod, includem un script de punct de intrare numit mnist.py care conține codul nostru de antrenament personalizat:
    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. Pentru a ne asigura că acest job de instruire a fost configurat corect, cu cod de antrenament funcțional, putem începe un job de instruire potrivindu-l la datele pe care le-am încărcat pe Amazon S3. SageMaker se asigură că datele noastre sunt disponibile în sistemul de fișiere local, astfel încât scriptul nostru de antrenament poate citi doar datele de pe disc:
    estimator.fit({"training": inputs})

Cu toate acestea, nu creăm un singur loc de muncă de formare. Folosim capacitatea de reglare automată a modelului a SageMaker prin utilizarea unui job de reglare hiperparametrică. Reglarea modelului este complet agnostică față de algoritmul actual al modelului. Pentru mai multe informații despre toți hiperparametrii pe care îi puteți regla, consultați Efectuați reglarea automată a modelului cu SageMaker.

Pentru fiecare hiperparametru pe care dorim să-l optimizăm, trebuie să definim următoarele:

  • Un nume
  • Un tip (parametrii pot fi fie un număr întreg, continuu sau categoric)
  • O serie de valori de explorat
  • Un tip de scalare (liniară, logaritmică, logaritmică inversă sau automată); aceasta ne permite să controlăm modul în care va fi explorat un anumit interval de parametri

De asemenea, trebuie să definim metrica pentru care optimizăm. Poate fi orice valoare numerică atâta timp cât este vizibilă în jurnalul de antrenament și puteți trece o expresie regulată pentru a o extrage.

Dacă ne uităm la linia 181 din mnist.py, putem vedea cum tipărim în logger:

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

De fapt, putem vedea această ieșire în jurnalele jobului de antrenament pe care tocmai l-am executat. Prin deschiderea grupului de jurnal /aws/sagemaker/TrainingJobs pe consola CloudWatch, ar trebui să avem un eveniment de jurnal care începe cu pytorch-training- urmat de un marcaj temporal și de un nume generat.

Următoarea captură de ecran evidențiază jurnalul pe care îl căutăm.

Să începem acum să construim jobul nostru de reglare a hiperparametrului.

  1. După cum am menționat, trebuie mai întâi să definim câteva informații despre hiperparametri, sub obiect, după cum urmează:
    hyperparameter_ranges = {
    "lr": ContinuousParameter(0.001, 0.1),
    "batch-size": CategoricalParameter([32, 64, 128, 256, 512]),
    }

    Aici am definit cei doi hiperparametri ai noștri. Rata de învățare (lr) este un parametru continuu (deci o valoare continuă) în intervalul 0.001 și 0.1. Dimensiunea lotului (batch-size) este un parametru categoric cu valorile discrete precedente.

    Apoi, specificăm metrica obiectivă pe care dorim să o reglam și definiția acesteia. Aceasta include expresia regulată (regex) necesară pentru a extrage acea valoare din jurnalele CloudWatch ale jobului de antrenament pe care l-am văzut anterior. Specificăm, de asemenea, un nume descriptiv, pierderea medie a testului și tipul de obiectiv ca Minimizare, astfel încât reglarea hiperparametrului caută să minimizeze metrica obiectivă atunci când se caută cea mai bună setare de hiperparametru.

  2. Specificați valoarea cu următorul cod:
    metric_definitions = [{"Name": "average test loss", "Regex": "Test set: Average loss: ([0-9.]+)"}]
    objective_metric_name = "average test loss"
    objective_type = "Minimize"

    Acum suntem gata să ne creăm HyperparameterTuner obiect. Pe lângă numele, tipul și definiția metricii obiective, trecem în hyperparameter_ranges obiect și estimatorul pe care l-am creat anterior. De asemenea, precizăm numărul de joburi pe care dorim să le rulăm în total, împreună cu numărul care ar trebui să ruleze în paralel. Am ales numărul maxim de locuri de muncă ca 9, dar de obicei ați opta pentru un număr mult mai mare (cum ar fi 50) pentru o performanță optimă.

  3. Creați HyperparameterTuner obiect cu următorul cod:
    tuner = HyperparameterTuner(
    estimator,
    objective_metric_name,
    hyperparameter_ranges,
    metric_definitions,
    max_jobs=9,
    max_parallel_jobs=3,
    objective_type=objective_type,
    )

Înainte de a începe munca de reglare, merită remarcat modul în care sunt determinate combinațiile de hiperparametri. Pentru a obține rezultate bune, trebuie să alegeți intervalele potrivite de explorat. În mod implicit, este utilizată strategia de căutare bayesiană, descrisă mai departe în Cum funcționează ajustarea hiperparametrului.

Cu optimizarea bayesiană, reglarea hiperparametrului este tratată ca a regres problemă. Pentru a rezolva această problemă de regresie, face ghiciri despre combinațiile de hiperparametri care vor obține cele mai bune rezultate și rulează joburi de antrenament pentru a testa aceste valori. Utilizează regresia pentru a alege următorul set de valori de hiperparametru de testat. Există un compromis clar de exploatare/explorare pe care strategia de căutare îl face aici. Poate alege valorile hiperparametrului apropiate de combinația care a dus la cea mai bună muncă anterioară de antrenament pentru a îmbunătăți treptat performanța. Sau, poate alege valori mai departe, pentru a încerca să exploreze o nouă gamă de valori care nu este încă bine înțeleasă.

Cu toate acestea, puteți specifica alte strategii de căutare. Următoarele strategii sunt acceptate în SageMaker:

  • Căutare în grilă – Încearcă orice combinație posibilă între gama de hiperparametri specificată.
  • Căutare aleatorie – Încearcă combinații aleatorii între intervalul de valori specificat. Nu depinde de rezultatele joburilor de antrenament anterioare, astfel încât puteți rula numărul maxim de joburi de antrenament simultane fără a afecta performanța reglajului.
  • Căutare hiperbandă – Folosește atât rezultatele intermediare, cât și cele finale ale joburilor de antrenament pentru a realoca epoci la configurații de hiperparametri bine utilizate și le oprește automat pe cele care au performanțe slabe.

De asemenea, puteți explora aducerea propriului algoritm, așa cum este explicat în Aduceți propriul algoritm de optimizare a hiperparametrilor pe Amazon SageMaker.

  1. Lansăm apoi antrenament pe obiectul tuner în sine (nu estimatorul), apelând .fit() și trecerea pe calea S3 către setul nostru de date de testare și tren:
    tuner.fit({"training": inputs})

Apoi putem urmări progresul lucrării noastre de reglare pe consola SageMaker, pe Lucrări de reglare a hiperparametrilor pagină. Lucrarea de reglare învârte resursele de calcul de bază necesare prin orchestrarea fiecărei curse de antrenament individuale și a calculului asociat.

Apoi, este ușor să vedeți toate joburile de formare individuale care au fost finalizate sau sunt în curs de desfășurare, împreună cu valoarea metrică obiectivă asociată. În următoarea captură de ecran, putem vedea că primul lot de locuri de muncă de formare este complet, care conține trei în total, conform specificațiilor noastre max_parallel_jobs valoare de 3. La finalizare, putem găsi cea mai bună muncă de pregătire – cea care minimizează pierderea medie de test – pe Cel mai bun job de antrenament tab.

Captură de ecran a listei de joburi de formare

A curăța

Pentru a evita costurile viitoare, ștergeți resursele pe care le-ați inițializat. Acestea sunt compartimentul S3, rolul IAM și instanța de blocnotes SageMaker.

Concluzie

În această postare, am discutat despre cum putem aduce propriul nostru model în SageMaker și apoi folosim optimizarea automată a hiperparametrilor pentru a selecta cea mai bună lucrare de antrenament. Am folosit setul de date popular MNIST pentru a vedea cum putem specifica o metrică obiectiv personalizată pentru care lucrarea HPO ar trebui să se optimizeze. Prin extragerea acestei metrici obiective din CloudWatch și prin specificarea diferitelor valori ale hiperparametrului, putem lansa și monitoriza cu ușurință jobul HPO.

Dacă aveți nevoie de mai multe informații sau doriți să vedeți cum folosesc clienții noștri HPO, consultați Reglarea automată a modelelor Amazon SageMaker. Adaptați-vă propriul model pentru optimizarea automată a hiperparametrilor în SageMaker astăzi.


Despre autor

Utilizați propriile scripturi de antrenament și selectați automat cel mai bun model utilizând optimizarea hiperparametrului în Amazon SageMaker PlatoBlockchain Data Intelligence. Căutare verticală. Ai.Sam Price este un consultant de servicii profesionale specializat în AI/ML și analiză de date la Amazon Web Services. El lucrează îndeaproape cu clienții din sectorul public din domeniul sănătății și științele vieții pentru a rezolva probleme provocatoare. Când nu face asta, lui Sam îi place să cânte la chitară și la tenis și să-și vadă trupele indie preferate.

Timestamp-ul:

Mai mult de la Învățare automată AWS