Uporabite lastne skripte za usposabljanje in samodejno izberite najboljši model z optimizacijo hiperparametrov v Amazon SageMaker PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Uporabite lastne skripte za usposabljanje in samodejno izberite najboljši model z optimizacijo hiperparametrov v Amazon SageMaker

Uspeh katerega koli cevovoda strojnega učenja (ML) ni odvisen le od kakovosti uporabljenega modela, ampak tudi od zmožnosti usposabljanja in ponavljanja tega modela. Eden od ključnih načinov za izboljšanje modela ML je izbira boljših nastavljivih parametrov, znanih kot hiperparametrov. To je znano kot optimizacija hiperparametrov (HPO). Vendar je lahko ročno uravnavanje zaradi velikosti iskalnega prostora pogosto okorno, včasih vključuje na tisoče ponovitev usposabljanja.

Ta objava prikazuje, kako Amazon SageMaker vam omogoča ne samo, da vnesete svoj algoritem modela z uporabo skriptnega načina, ampak tudi uporabite vgrajeni algoritem HPO. Naučili se boste, kako preprosto izpisati metriko vrednotenja po izbiri amazoncloudwatch, iz katerega lahko izvlečete to metriko za vodenje samodejnega algoritma HPO. Nato lahko ustvarite opravilo za uravnavanje HPO, ki orkestrira več opravil usposabljanja in povezanih računalniških virov. Po zaključku si lahko ogledate najboljše delo usposabljanja glede na metriko ocenjevanja.

Pregled rešitev

Sprehodimo se skozi naslednje korake:

  1. Uporabite skriptni način SageMaker, da postavite naš lastni model na vsebnik, ki ga upravlja AWS.
  2. Preoblikujte naš skript za usposabljanje, da natisnete našo metriko ocenjevanja.
  3. Poiščite meritev v dnevnikih CloudWatch.
  4. Izvlecite meritev iz CloudWatch.
  5. Uporabite HPO, da izberete najboljši model tako, da prilagodite to metriko vrednotenja.
  6. Spremljajte HPO in poiščite najboljše delovno mesto za usposabljanje.

Predpogoji

Za ta korak morate imeti naslednje predpogoje:

Uporabite algoritme po meri v vsebniku, ki ga upravlja AWS

Nanašati se na Prinesite svoj model s skriptnim načinom Amazon SageMaker za podrobnejši pogled na prenos modela po meri v SageMaker z uporabo vsebnika, ki ga upravlja AWS.

Mi uporabljamo Nabor podatkov MNIST za ta primer. MNIST je pogosto uporabljen nabor podatkov za klasifikacijo ročno napisanih števk, sestavljen iz 70,000 označenih sivinskih slik ročno napisanih števk velikosti 28×28 slikovnih pik. Nabor podatkov je razdeljen na 60,000 vadbenih slik in 10,000 testnih slik, ki vsebujejo 10 razredov (enega za vsako števko).

  1. Odprite primerek svojega prenosnika in zaženite naslednji ukaz, da prenesete mnist.py datoteka:
    !wget https://raw.githubusercontent.com/aws/amazon-sagemaker-examples/main/hyperparameter_tuning/pytorch_mnist/mnist.py

    Preden pridobimo in shranimo podatke, ustvarimo sejo SageMaker. Določiti bi morali tudi vedro S3 in predpono za uporabo za usposabljanje in modelne podatke. To mora biti znotraj iste regije kot primerek prenosnega računalnika, usposabljanje in gostovanje. Naslednja koda uporablja privzeto vedro če že obstaja, ali ustvari novo, če ne obstaja. Vključiti moramo tudi vlogo IAM ARN, da omogočimo dostop do vaših podatkov za usposabljanje in gostovanje. Uporabljamo get_execution_role() da pridobite vlogo IAM, ki ste jo ustvarili za svoj primerek prenosnika.

  2. Ustvarite sejo z naslednjo kodo:
    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. Zdaj pridobimo podatke in jih shranimo v lokalno mapo /data, in ga naložite v 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)

    Zdaj lahko ustvarimo ocenjevalnik za nastavitev vadbenega opravila PyTorch. Tukaj se ne osredotočamo na dejansko kodo usposabljanja (mnist.py) zelo podrobno. Poglejmo, kako lahko preprosto prikličemo ta skript za usposabljanje za inicializacijo opravila za usposabljanje.

  4. V naslednjo kodo vključujemo skript vstopne točke, imenovan mnist.py, ki vsebuje našo kodo za usposabljanje po meri:
    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. Za zagotovitev, da je bilo to usposabljanje pravilno konfigurirano, lahko z delujočo kodo usposabljanja začnemo usposabljanje tako, da ga prilagodimo podatkom, ki smo jih naložili v Amazon S3. SageMaker zagotavlja, da so naši podatki na voljo v lokalnem datotečnem sistemu, tako da lahko naš skript za usposabljanje samo prebere podatke z diska:
    estimator.fit({"training": inputs})

Vendar pa ne ustvarjamo niti enega delovnega mesta za usposabljanje. Zmožnost samodejnega prilagajanja modela SageMaker uporabljamo z uporabo opravila prilagajanja hiperparametrov. Uravnavanje modela je popolnoma neodvisno od dejanskega algoritma modela. Za več informacij o vseh hiperparametrih, ki jih lahko nastavite, glejte Izvedite samodejno uravnavanje modela s programom SageMaker.

Za vsak hiperparameter, ki ga želimo optimizirati, moramo definirati naslednje:

  • Ime
  • Vrsta (parametri so lahko celo število, zvezni ali kategorični)
  • Razpon vrednosti za raziskovanje
  • Vrsta skaliranja (linearno, logaritemsko, obratno logaritemsko ali samodejno); to nam omogoča nadzor nad tem, kako bo raziskan določen obseg parametrov

Določiti moramo tudi metriko, za katero optimiziramo. Lahko je katera koli številska vrednost, če je vidna v dnevniku usposabljanja in lahko posredujete regularni izraz, da jo izvlečete.

Če pogledamo vrstico 181 v mnist.py, lahko vidimo, kako tiskamo v zapisovalnik:

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

Pravzaprav lahko vidimo ta rezultat v dnevnikih opravila usposabljanja, ki smo ga pravkar izvedli. Z odpiranjem skupine dnevnikov /aws/sagemaker/TrainingJobs na konzoli CloudWatch bi morali imeti dogodek dnevnika, ki se začne z pytorch-training- ki mu sledita časovni žig in ustvarjeno ime.

Naslednji posnetek zaslona poudarja dnevnik, ki ga iščemo.

Zdaj pa začnimo graditi našo nalogo prilagajanja hiperparametrov.

  1. Kot že omenjeno, moramo najprej definirati nekaj informacij o hiperparametrih pod objektom, kot sledi:
    hyperparameter_ranges = {
    "lr": ContinuousParameter(0.001, 0.1),
    "batch-size": CategoricalParameter([32, 64, 128, 256, 512]),
    }

    Tukaj smo definirali naša dva hiperparametra. Stopnja učenja (lr) je zvezen parameter (torej zvezna vrednost) v območju 0.001 in 0.1. Velikost serije (velikost serije) je kategorični parameter s predhodnimi diskretnimi vrednostmi.

    Nato določimo objektivno metriko, ki jo želimo prilagoditi, in njeno definicijo. To vključuje regularni izraz (regex), potreben za ekstrahiranje te metrike iz dnevnikov CloudWatch opravila usposabljanja, ki smo ga videli prej. Določimo tudi opisno ime povprečne testne izgube in vrsto cilja kot Minimiziraj, tako da nastavitev hiperparametrov poskuša minimizirati objektivno metriko pri iskanju najboljše nastavitve hiperparametra.

  2. Podajte metriko z naslednjo kodo:
    metric_definitions = [{"Name": "average test loss", "Regex": "Test set: Average loss: ([0-9.]+)"}]
    objective_metric_name = "average test loss"
    objective_type = "Minimize"

    Zdaj smo pripravljeni ustvariti našo HyperparameterTuner predmet. Poleg imena objektivne metrike, vrste in definicije posredujemo hyperparameter_ranges objekt in cenilec, ki smo ga predhodno ustvarili. Določimo tudi skupno število opravil, ki jih želimo izvajati, skupaj s številom, ki naj se izvajajo vzporedno. Izbrali smo največje število opravil kot 9, vendar bi se za optimalno delovanje običajno odločili za veliko večje število (na primer 50).

  3. Ustvarite HyperparameterTuner objekt z naslednjo kodo:
    tuner = HyperparameterTuner(
    estimator,
    objective_metric_name,
    hyperparameter_ranges,
    metric_definitions,
    max_jobs=9,
    max_parallel_jobs=3,
    objective_type=objective_type,
    )

Preden začnemo z nastavljanjem, je vredno omeniti, kako so določene kombinacije hiperparametrov. Če želite doseči dobre rezultate, morate izbrati prave razpone za raziskovanje. Privzeto se uporablja Bayesova iskalna strategija, opisana v nadaljevanju Kako deluje nastavitev hiperparametrov.

Z Bayesovo optimizacijo se uravnavanje hiperparametrov obravnava kot a regresija problem. Da bi rešil ta regresijski problem, ugiba, katere kombinacije hiperparametrov bodo dosegle najboljše rezultate, in izvaja usposabljanja za testiranje teh vrednosti. Za izbiro naslednjega niza vrednosti hiperparametrov za testiranje uporablja regresijo. Obstaja jasen kompromis med izkoriščanjem in raziskovanjem, ki ga tukaj naredi iskalna strategija. Izbere lahko vrednosti hiperparametrov, ki so blizu kombinaciji, ki je privedla do najboljšega prejšnjega usposabljanja, da postopno izboljša zmogljivost. Ali pa lahko izbere vrednosti bolj oddaljene, da poskusi raziskati nov obseg vrednosti, ki še ni dobro razumljen.

Lahko pa določite druge strategije iskanja. SageMaker podpira naslednje strategije:

  • Iskanje po mreži – Preizkusi vsako možno kombinacijo v obsegu navedenih hiperparametrov.
  • Naključno iskanje – Poskusi z naključnimi kombinacijami med navedenim obsegom vrednosti. Ni odvisno od rezultatov prejšnjih izobraževalnih opravil, tako da lahko izvedete največje število sočasnih izobraževalnih opravil, ne da bi to vplivalo na uspešnost uglaševanja.
  • Hiperpasovno iskanje – Uporablja tako vmesne kot končne rezultate izobraževalnih del za prerazporeditev epoh v dobro izkoriščene konfiguracije hiperparametrov in samodejno ustavi tiste, ki niso uspešne.

Raziščete lahko tudi lasten algoritem, kot je razloženo v Prinesite svoj algoritem optimizacije hiperparametrov v Amazon SageMaker.

  1. Nato zaženemo usposabljanje na samem predmetu uglaševalnika (ne na ocenjevalcu) in kličemo .fit() in posredovanje poti S3 do našega vlaka in testnega nabora podatkov:
    tuner.fit({"training": inputs})

Nato lahko spremljamo potek našega uglaševanja na konzoli SageMaker na Hiperparametrska nastavitev strani. Posel uglaševanja vrti temeljne računalniške vire, potrebne z orkestriranjem vsakega posameznega izvajanja usposabljanja in z njim povezanega računanja.

Potem je enostavno videti vsa posamezna izobraževalna opravila, ki so bila zaključena ali so v teku, skupaj z njihovo povezano objektivno metrično vrednostjo. Na naslednjem posnetku zaslona lahko vidimo, da je končana prva serija izobraževalnih opravil, ki vsebuje skupaj tri v skladu z našimi navodili max_parallel_jobs vrednost 3. Po zaključku lahko na Najboljše usposabljanje tab.

Posnetek zaslona seznama delovnih mest za usposabljanje

Čiščenje

Da se izognete prihodnjim stroškom, izbrišite vire, ki ste jih inicializirali. To so vedro S3, vloga IAM in primerek prenosnika SageMaker.

zaključek

V tej objavi smo razpravljali o tem, kako lahko v SageMaker prenesemo lasten model in nato uporabimo samodejno optimizacijo hiperparametrov, da izberemo najboljše usposabljanje. Uporabili smo priljubljen nabor podatkov MNIST, da bi ugotovili, kako lahko določimo ciljno metriko po meri, za katero naj opravilo HPO optimizira. Z ekstrahiranjem te objektivne metrike iz CloudWatch in določanjem različnih vrednosti hiperparametrov lahko preprosto zaženemo in spremljamo opravilo HPO.

Če potrebujete več informacij ali želite videti, kako naše stranke uporabljajo HPO, se obrnite na Samodejno prilagajanje modela Amazon SageMaker. Prilagodite svoj model za samodejno optimizacijo hiperparametrov v SageMaker še danes.


O avtorju

Uporabite lastne skripte za usposabljanje in samodejno izberite najboljši model z optimizacijo hiperparametrov v Amazon SageMaker PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Sam Price je svetovalec za strokovne storitve, specializiran za AI/ML in analitiko podatkov pri Amazon Web Services. Pri reševanju zahtevnih problemov tesno sodeluje s strankami iz javnega sektorja v zdravstvu in znanostih o življenju. Ko tega ne počne, Sam uživa v igranju kitare in tenisa ter ob ogledu svojih najljubših indie skupin.

Časovni žig:

Več od Strojno učenje AWS