Järjestä koneoppimismatkasi Amazon SageMaker Experimentsin ja Amazon SageMaker Pipelines PlatoBlockchain Data Intelligencen avulla. Pystysuuntainen haku. Ai.

Järjestä koneoppimismatkasi Amazon SageMaker Experimentsin ja Amazon SageMaker Pipelinesin avulla

Koneoppimismallin (ML) rakentamisprosessi on iteratiivinen, kunnes löydät ehdokasmallin, joka toimii hyvin ja on valmis otettavaksi käyttöön. Kun datatieteilijät iteroivat tätä prosessia, he tarvitsevat luotettavan menetelmän seuratakseen kokeita helposti ymmärtääkseen, kuinka kukin malliversio on rakennettu ja miten se suoriutui.

Amazon Sage Maker antaa tiimille mahdollisuuden hyödyntää laajaa valikoimaa ominaisuuksia ML-mallien nopeaan valmistelemiseen, rakentamiseen, kouluttamiseen, käyttöönottoon ja seurantaan. Amazon SageMaker -putkistot tarjoaa toistettavan prosessin iterointiin mallinrakennustoimintojen kautta, ja se on integroitu Amazon SageMaker -kokeilut. Oletusarvoisesti jokainen SageMaker-putki on liitetty kokeiluun, ja jokaista sen ajoa seurataan kokeiluna kyseisessä kokeessa. Sitten iteraatioita seurataan automaattisesti ilman lisävaiheita.

Tässä viestissä tarkastelemme lähemmin motivaatiota, jonka taustalla on automaattinen prosessi, jolla seurataan kokeiluja ja putkien sisäisiä ominaisuuksia.

Miksi on tärkeää pitää kokeilusi järjestyksessä?

Otetaan hetki taaksepäin ja yritetään ymmärtää, miksi on tärkeää järjestää kokeita koneoppimista varten. Kun datatieteilijät lähestyvät uutta ML-ongelmaa, heidän on vastattava moniin erilaisiin kysymyksiin tietojen saatavuudesta siihen, kuinka he mittaavat mallin suorituskykyä.

Alussa prosessi on täynnä epävarmuutta ja erittäin iteratiivinen. Tämän seurauksena tämä kokeiluvaihe voi tuottaa useita malleja, joista jokainen on luotu omista syötteistään (tietojoukot, koulutusskriptit ja hyperparametrit) ja tuottaa omia tulosteita (mallin artefaktit ja arviointimittarit). Haasteena on sitten pitää kirjaa kaikista näistä kunkin iteroinnin tuloista ja lähdöistä.

Datatieteilijät yleensä kouluttavat monia erilaisia ​​malliversioita, kunnes he löytävät datamuunnosten, algoritmien ja hyperparametrien yhdistelmän, joka johtaa mallin parhaiten toimivaan versioon. Jokainen näistä ainutlaatuisista yhdistelmistä on yksi kokeilu. Kokeilun käyttämien syötteiden, algoritmien ja hyperparametrien jäljitettävän tietueen avulla datatieteen tiimi voi helposti toistaa vaiheensa.

Automaattinen prosessi kokeiden seurantaa varten parantaa kykyä toistaa ja ottaa käyttöön tiettyjä malliversioita, jotka toimivat hyvin. Pipelinesin natiiviintegraatio Experimentsin kanssa tekee kokeilujen automaattisen seurannan ja hallinnan putkiajon aikana helppoa.

SageMaker-kokeilujen edut

SageMaker Experimentsin avulla datatieteilijät voivat organisoida, seurata, vertailla ja arvioida koulutusiteraatioitaan.

Aloitetaan ensin yleiskatsauksella siitä, mitä voit tehdä kokeiluilla:

  • Järjestä kokeita – Experiments strukturoi kokeilun huipputason entiteetillä nimeltä an kokeilu joka sisältää joukon tutkimuksissa. Jokainen kokeilu sisältää joukon vaiheita nimeltä koekomponentit. Jokainen kokeilukomponentti on yhdistelmä tietojoukkoja, algoritmeja ja parametreja. Voit kuvata kokeet ylimmän tason kansioksi hypoteesien järjestämistä varten, kokeilut kunkin ryhmätestiajon alikansioiksi ja kokeilukomponentit tiedostoina jokaiselle testiajon esiintymälle.
  • Seuraa kokeita – Kokeiden avulla datatutkijat voivat seurata kokeita. Se tarjoaa mahdollisuuden määrittää SageMaker-töitä automaattisesti kokeiluun yksinkertaisten konfiguraatioiden ja seuranta-SDK:iden kautta.
  • Vertaa ja arvioi kokeita – Kokeiden integrointi kanssa Amazon SageMaker Studio helpottaa datavisualisaatioiden tuottamista ja erilaisten kokeiden vertailua. Voit myös käyttää kokeilutietoja Python SDK:n kautta luodaksesi oman visualisoinnin käyttämällä haluamiasi piirustuskirjastoja.

Jos haluat lisätietoja Experiments-sovellusliittymistä ja SDK:ista, suosittelemme seuraavaa dokumentaatiota: Luo kokeilu ja Amazon SageMaker Experiments Python SDK.

Jos haluat sukeltaa syvemmälle, suosittelemme tutustumaan amazon-sagemaker-examples/sagemaker-experiments GitHub-arkisto lisää esimerkkejä varten.

Integrointi putkien ja kokeiden välillä

Mallinrakennusputkistot, jotka ovat osa Pipelinejä, on suunniteltu ML:ää varten, ja niiden avulla voit organisoida mallinrakennustehtäviäsi liukuhihnatyökalulla, joka sisältää alkuperäisiä integraatioita muihin SageMaker-ominaisuuksiin sekä joustavuuden laajentaa putkilinjaasi SageMakerin ulkopuolella suoritetuilla vaiheilla. . Jokainen vaihe määrittää toimenpiteen, jonka putkilinja suorittaa. Vaiheiden väliset riippuvuudet määritellään suoralla asyklisellä graafilla (DAG), joka on rakennettu käyttämällä Pipelines Python SDK:ta. Voit rakentaa SageMaker-putkilinjan ohjelmallisesti saman SDK:n kautta. Kun liukuhihna on otettu käyttöön, voit halutessasi visualisoida sen työnkulun Studiossa.

Putket integroituvat automaattisesti kokeiluihin luomalla automaattisesti kokeilun ja kokeilun jokaista ajoa varten. Putkilinjat luovat automaattisesti kokeen ja kokeilun jokaiselle liukuhihnan ajolle ennen vaiheiden suorittamista, ellei jompaakumpaa tai molempia näistä syötteistä ole määritetty. Ajettaessa liukuhihnan SageMaker-työtä, liukuhihna liittää kokeen kokeiluun ja liittää kokeiluun kaikki työn luomat kokeilukomponentit. Määrittämällä oman kokeilusi tai kokeiluversiosi ohjelmallisesti voit hienosäätää kokeilujen järjestämistä.

Tässä esimerkissä esittämämme työnkulku koostuu sarjasta vaiheita: esikäsittelyvaihe, jossa syöttötietojoukot jaetaan harjoitus-, testi- ja validointitietojoukoiksi; viritysvaihe hyperparametreidemme virittämiseksi ja harjoitustyön aloittamiseksi mallin kouluttamiseksi käyttämällä Sisäänrakennettu XGBoost-algoritmi; ja lopuksi mallivaihe SageMaker-mallin luomiseksi parhaiten koulutetusta malliartefaktista. Pipelines tarjoaa myös useita alkuperäisesti tuettuja askeltyypit tässä viestissä käsiteltyjen asioiden ulkopuolella. Havainnollistamme myös, kuinka voit seurata putkilinjasi työnkulkua ja luoda mittareita ja vertailukaavioita. Lisäksi näytämme, kuinka luotu uusi kokeilu voidaan liittää olemassa olevaan kokeiluun, joka on saatettu luoda ennen putkilinjan määrittämistä.

SageMaker Pipelines -koodi

Voit tarkastella ja ladata muistikirjan osoitteesta GitHub-arkisto liittyy tähän viestiin. Katsomme Pipelines-kohtaista koodia ymmärtääksemme sitä paremmin.

Liukulinjat mahdollistavat parametrien välittämisen ajon aikana. Tässä määritämme käsittely- ja opetusilmentymien tyypit ja laskut ajon aikana esiasetetuilla oletusarvoilla:

base_job_prefix = "pipeline-experiment-sample"
model_package_group_name = "pipeline-experiment-model-package"

processing_instance_count = ParameterInteger(
  name="ProcessingInstanceCount", default_value=1
)

training_instance_count = ParameterInteger(
  name="TrainingInstanceCount", default_value=1
)

processing_instance_type = ParameterString(
  name="ProcessingInstanceType", default_value="ml.m5.xlarge"
)
training_instance_type = ParameterString(
  name="TrainingInstanceType", default_value="ml.m5.xlarge"
)

Seuraavaksi määritimme käsittelykomentosarjan, joka lataa ja jakaa syötetietojoukon harjoitus-, testi- ja validointiosiin. Käytämme SKLearnProcessor tämän esikäsittelyvaiheen suorittamiseen. Tätä varten määritämme prosessoriobjektin, jonka ilmentymätyyppi ja määrä tarvitaan käsittelytyön suorittamiseen.

Pipelinesin avulla voimme saavuttaa tietojen versioinnin ohjelmallisesti käyttämällä suorituskohtaisia ​​muuttujia, kuten ExecutionVariables.PIPELINE_EXECUTION_ID, joka on liukuhihnaajon yksilöllinen tunnus. Voimme esimerkiksi luoda ainutlaatuisen avaimen lähtötietojoukon tallentamiseksi Amazonin yksinkertainen tallennuspalvelu (Amazon S3), joka sitoo ne tiettyyn putkilinjaan. Täydellinen muuttujien luettelo on kohdassa Suoritusmuuttujat.

framework_version = "0.23-1"

sklearn_processor = SKLearnProcessor(
    framework_version=framework_version,
    instance_type=processing_instance_type,
    instance_count=processing_instance_count,
    base_job_name="sklearn-ca-housing",
    role=role,
)

process_step = ProcessingStep(
    name="ca-housing-preprocessing",
    processor=sklearn_processor,
    outputs=[
        ProcessingOutput(
            output_name="train",
            source="/opt/ml/processing/train",
            destination=Join(
                on="/",
                values=[
                    "s3://{}".format(bucket),
                    prefix,
                    ExecutionVariables.PIPELINE_EXECUTION_ID,
                    "train",
                ],
            ),
        ),
        ProcessingOutput(
            output_name="validation",
            source="/opt/ml/processing/validation",
            destination=Join(
                on="/",
                values=[
                    "s3://{}".format(bucket),
                    prefix,
                    ExecutionVariables.PIPELINE_EXECUTION_ID,
                    "validation",
                ],
            )
        ),
        ProcessingOutput(
            output_name="test",
            source="/opt/ml/processing/test",
            destination=Join(
                on="/",
                values=[
                    "s3://{}".format(bucket),
                    prefix,
                    ExecutionVariables.PIPELINE_EXECUTION_ID,
                    "test",
                ],
            )
        ),
    ],
    code="california-housing-preprocessing.py",
)

Sitten siirrymme luomaan estimaattoriobjektin XGBoost-mallin kouluttamiseksi. Asetamme joitain staattisia hyperparametreja, joita käytetään yleisesti XGBoostin kanssa:

model_path = f"s3://{default_bucket}/{base_job_prefix}/ca-housing-experiment-pipeline"

image_uri = sagemaker.image_uris.retrieve(
    framework="xgboost",
    region=region,
    version="1.2-2",
    py_version="py3",
    instance_type=training_instance_type,
)

xgb_train = Estimator(
    image_uri=image_uri,
    instance_type=training_instance_type,
    instance_count=training_instance_count,
    output_path=model_path,
    base_job_name=f"{base_job_prefix}/ca-housing-train",
    sagemaker_session=sagemaker_session,
    role=role,
)

xgb_train.set_hyperparameters(
    eval_metric="rmse",
    objective="reg:squarederror",  # Define the object metric for the training job
    num_round=50,
    max_depth=5,
    eta=0.2,
    gamma=4,
    min_child_weight=6,
    subsample=0.7
)

Teemme luomillemme malleille hyperparametrivirityksen käyttämällä a ContinuousParameter alue lambda. Yhden mittarin valitseminen objektiiviseksi mittariksi kertoo virittimelle (ilmentymä, joka suorittaa hyperparametrien viritystöitä), että arvioit koulutustyön tämän tietyn mittarin perusteella. Viritin palauttaa parhaan yhdistelmän, joka perustuu tämän objektiivisen metriikan parhaaseen arvoon, mikä tarkoittaa parasta yhdistelmää, joka minimoi parhaan keskimääräisen neliövirheen (RMSE).

objective_metric_name = "validation:rmse"

hyperparameter_ranges = {
    "lambda": ContinuousParameter(0.01, 10, scaling_type="Logarithmic")
}

tuner = HyperparameterTuner(estimator,
                            objective_metric_name,
                            hyperparameter_ranges,
                            objective_type=objective_type,
                            strategy="Bayesian",
                            max_jobs=10,
                            max_parallel_jobs=3)

tune_step = TuningStep(
    name="HPTuning",
    tuner=tuner_log,
    inputs={
        "train": TrainingInput(
            s3_data=process_step.properties.ProcessingOutputConfig.Outputs[
                "train"
            ].S3Output.S3Uri,
            content_type="text/csv",
        ),
        "validation": TrainingInput(
            s3_data=process_step.properties.ProcessingOutputConfig.Outputs[
                "validation"
            ].S3Output.S3Uri,
            content_type="text/csv",
        ),
    } 
)

Viritysvaihe suorittaa useita kokeita, joiden tavoitteena on määrittää paras malli testatuista parametrialueista. Menetelmän kanssa get_top_model_s3_uri, luokittelemme malliartefaktin S50 URI:n 3 tehokkainta versiota ja poimimme vain parhaiten suoriutuneen version (määritämme k=0 paras) SageMaker-mallin luomiseksi.

model_bucket_key = f"{default_bucket}/{base_job_prefix}/ca-housing-experiment-pipeline"
model_candidate = Model(
    image_uri=image_uri,
    model_data=tune_step.get_top_model_s3_uri(top_k=0, s3_bucket=model_bucket_key),
    sagemaker_session=sagemaker_session,
    role=role,
    predictor_cls=XGBoostPredictor,
)

create_model_step = CreateModelStep(
    name="CreateTopModel",
    model=model_candidate,
    inputs=sagemaker.inputs.CreateModelInput(instance_type="ml.m4.large"),
)

Kun liukuhihna suoritetaan, se luo koekomponentteja jokaiselle hyperparametrin viritystyölle ja jokaiselle liukuhihnan vaiheiden luomalle SageMaker-työlle.

Voit edelleen määrittää putkien integrointia kokeiluihin luomalla a PipelineExperimentConfig objekti ja välitä se liukuhihnaobjektille. Nämä kaksi parametria määrittävät luotavan kokeilun nimen ja kokeilun, joka viittaa koko putkilinjan ajoon.

Jos haluat liittää putkiajon olemassa olevaan kokeiluun, voit välittää sen nimen, jolloin Pipelines liittää uuden kokeilun siihen. Voit estää kokeilun ja kokeilun luomisen ajettavalle liukuhihnalle asettamalla pipeline_experiment_config että None.

#Pipeline experiment config
ca_housing_experiment_config = PipelineExperimentConfig(
    experiment_name,
    Join(
        on="-",
        values=[
            "pipeline-execution",
            ExecutionVariables.PIPELINE_EXECUTION_ID
        ],
    )
)

Välitämme instanssityypit ja -määrät parametreina ja ketjutamme edelliset vaiheet seuraavaan järjestykseen. Liukuhihnan työnkulku määritellään implisiittisesti siten, että vaiheen tuotokset ovat toisen vaiheen syötteitä.

pipeline_name = f"CAHousingExperimentsPipeline"

pipeline = Pipeline(
    name=pipeline_name,
    pipeline_experiment_config=ca_housing_experiment_config,
    parameters=[
        processing_instance_count,
        processing_instance_type,
        training_instance_count,
        training_instance_type
    ],
    steps=[process_step,tune_step,create_model_step],
)

Täysi putkilinja on nyt luotu ja valmis käyttöön. Lisäämme putkiin suoritusroolin ja käynnistämme sen. Täältä voimme siirtyä SageMaker Studio Pipelines -konsoliin ja seurata jokaista vaihetta visuaalisesti. Voit myös käyttää linkitettyjä lokeja konsolista putkilinjan virheenkorjausta varten.

pipeline.upsert(role_arn=sagemaker.get_execution_role())
execution = pipeline.start()

Edellisessä kuvakaappauksessa näkyy vihreällä onnistuneesti suoritettu putki. Saamme yhden kokeilun mittarit liukuhihnan ajosta seuraavalla koodilla:

# SM Pipeline injects the Execution ID into trial component names
execution_id = execution.describe()['PipelineExecutionArn'].split('/')[-1]
source_arn_filter = Filter(
    name="TrialComponentName", operator=Operator.CONTAINS, value=execution_id
)

source_type_filter = Filter(
    name="Source.SourceType", operator=Operator.EQUALS, value="SageMakerTrainingJob"
)

search_expression = SearchExpression(
    filters=[source_arn_filter, source_type_filter]
)

trial_component_analytics = ExperimentAnalytics(
    sagemaker_session=sagemaker_session,
    experiment_name=experiment_name,
    search_expression=search_expression.to_boto()
)

analytic_table = trial_component_analytics.dataframe()
analytic_table.head()

Vertaa kunkin kokeilukomponentin mittareita

Voit piirtää hyperparametrivirityksen tulokset Studiossa tai muiden Python-piirtokirjastojen kautta. Näytämme molemmat tavat tehdä tämä.

Tutustu koulutus- ja arviointimittareihin Studiossa

Studio tarjoaa interaktiivisen käyttöliittymän, jossa voit luoda interaktiivisia juonia. Vaiheet ovat seuraavat:

  1. Valita Kokeilut ja kokeet mistä SageMaker-resurssit -kuvake vasemmalla sivupalkissa.
  2. Valitse kokeilusi avataksesi sen.
  3. Valitse (klikkaa hiiren oikealla painikkeella) kiinnostava kokeilu.
  4. Valita Avaa kokeilukomponenttiluettelossa.
  5. lehdistö siirtyminen valitaksesi koulutustöitä edustavat kokeilukomponentit.
  6. Valita Lisää kaavio.
  7. Valita Uusi kaavio ja muokkaa sitä piirtämään analysoitavat kerätyt tiedot. Valitse käyttötapauksessamme seuraava:
    1. varten Tietotyyppi¸ valitse Yhteenvetotilastot.
    2. varten Kaavion tyyppi¸ valitse Hajontapiirros.
    3. varten X-akseli, valitse lambda.
    4. varten Y-akseli, valitse validation:rmse_last.

Uusi kaavio ilmestyy ikkunan alaosaan, ja siinä on merkintä "8".

Voit sisällyttää enemmän tai vähemmän koulutustehtäviä painamalla siirtyminen ja valitse silmäkuvake interaktiivisemman kokemuksen saamiseksi.

Järjestä koneoppimismatkasi Amazon SageMaker Experimentsin ja Amazon SageMaker Pipelines PlatoBlockchain Data Intelligencen avulla. Pystysuuntainen haku. Ai.

Analyysi SageMaker-kokeiluilla

Kun putkiajo on valmis, voimme nopeasti visualisoida, kuinka mallin eri muunnelmia verrataan koulutuksen aikana kerättyihin mittareihin. Aiemmin vietimme kaikki kokeilutiedot osoitteeseen a Panda DataFrame käyttämällä ExperimentAnalytics. Voimme toistaa Studiossa saadun juonen Matplotlib-kirjaston avulla.

analytic_table.plot.scatter("lambda", "validation:rmse - Last", grid=True)

Yhteenveto

SageMaker Pipelinesin ja SageMaker Experimentsin välinen natiivi integraatio antaa datatutkijoille mahdollisuuden automaattisesti järjestää, seurata ja visualisoida kokeita mallinkehityksen aikana. Voit luoda kokeita järjestääksesi kaiken mallinkehitystyösi, kuten seuraavat:

  • Yrityskäyttötapaus, jota käsittelet, kuten kokeilun luominen asiakkaiden vaihtuvuuden ennustamiseksi
  • Datatieteen tiimin omistama kokeilu koskien esimerkiksi markkinointianalytiikkaa
  • Erityinen datatieteen ja ML-projekti

Tässä viestissä perehdymme putkistoihin näyttääksemme, kuinka voit käyttää sitä yhdessä kokeiden kanssa täysin automatisoidun päästä päähän -työnkulun järjestämiseen.

Seuraavana vaiheena voit käyttää näitä kolmea SageMaker-ominaisuutta – Studio, Experiments ja Pipelines – seuraavassa ML-projektissasi.

Ehdotetut lukemat


Tietoja kirjoittajista

Paolo di FrancescoPaolo di Francesco on ratkaisuarkkitehti AWS:ssä. Hänellä on kokemusta tietoliikenne- ja ohjelmistosuunnittelusta. Hän on intohimoinen koneoppimisesta ja keskittyy tällä hetkellä käyttämään kokemustaan ​​auttaakseen asiakkaita saavuttamaan tavoitteensa AWS:ssä, erityisesti MLOps-keskusteluissa. Työn ulkopuolella hän nauttii jalkapallon pelaamisesta ja lukemisesta.

Järjestä koneoppimismatkasi Amazon SageMaker Experimentsin ja Amazon SageMaker Pipelines PlatoBlockchain Data Intelligencen avulla. Pystysuuntainen haku. Ai.Mario Bourgoin on AWS:n Senior Partner Solutions Architect, AI/ML-asiantuntija ja MLOpsin maailmanlaajuinen tekninen johtaja. Hän työskentelee yritysasiakkaiden ja kumppaneiden kanssa, jotka ottavat käyttöön tekoälyratkaisuja pilvessä. Hänellä on yli 30 vuoden kokemus koneoppimisesta ja tekoälystä startup-yrityksissä ja yrityksissä alkaen yhden ensimmäisistä kaupallisista koneoppimisjärjestelmistä big datalle. Mario viettää vapaa-aikansa leikkimällä kolmen belgialaisen Tervurenin kanssa, valmistaen illallista perheelleen ja oppien matematiikkaa ja kosmologiaa.

Järjestä koneoppimismatkasi Amazon SageMaker Experimentsin ja Amazon SageMaker Pipelines PlatoBlockchain Data Intelligencen avulla. Pystysuuntainen haku. Ai.Ganapathi Krishnamoorthi on vanhempi ML Solutions -arkkitehti AWS:ssä. Ganapathi tarjoaa ohjeellisia ohjeita startup- ja yritysasiakkaille, jotka auttavat heitä suunnittelemaan ja ottamaan käyttöön pilvisovelluksia laajassa mittakaavassa. Hän on erikoistunut koneoppimiseen ja keskittyy auttamaan asiakkaita hyödyntämään tekoälyä/ML:ää liiketoimintansa tulosten saavuttamiseksi. Kun hän ei ole töissä, hän nauttii ulkoilusta ja musiikin kuuntelusta.

Järjestä koneoppimismatkasi Amazon SageMaker Experimentsin ja Amazon SageMaker Pipelines PlatoBlockchain Data Intelligencen avulla. Pystysuuntainen haku. Ai.Valerie Sonthakith on AWS:n ratkaisuarkkitehti, joka työskentelee pelialalla ja tekoälyratkaisuja ottavien kumppaneiden kanssa. Hän pyrkii rakentamaan uransa Computer Visionin ympärille. Vapaa-ajallaan Valerie viettää sen matkustaakseen, löytääkseen uusia ruokapaikkoja ja muuttaakseen talonsa sisustusta.

Aikaleima:

Lisää aiheesta AWS-koneoppiminen