Organizirajte svojo pot strojnega učenja z Amazon SageMaker Experiments in Amazon SageMaker Pipelines PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Organizirajte svojo pot strojnega učenja z Amazon SageMaker Experiments in Amazon SageMaker Pipelines

Postopek izdelave modela strojnega učenja (ML) je iterativen, dokler ne najdete modela kandidata, ki dobro deluje in je pripravljen za uporabo. Ko podatkovni znanstveniki ponavljajo ta proces, potrebujejo zanesljivo metodo za preprosto sledenje poskusom, da bi razumeli, kako je bila zgrajena vsaka različica modela in kako je delovala.

Amazon SageMaker omogoča ekipam, da izkoristijo široko paleto funkcij za hitro pripravo, gradnjo, usposabljanje, uvajanje in spremljanje modelov ML. Amazonski cevovodi SageMaker zagotavlja ponovljiv postopek za ponavljanje dejavnosti gradnje modela in je integriran z Eksperimenti Amazon SageMaker. Privzeto je vsak cevovod SageMaker povezan s poskusom in vsak zagon tega cevovoda se v tem poskusu spremlja kot poskus. Nato se vašim ponovitvam samodejno sledi brez dodatnih korakov.

V tej objavi si podrobneje ogledamo motivacijo za avtomatiziranim postopkom za sledenje eksperimentom s preizkusi in izvornimi zmogljivostmi, vgrajenimi v cevovode.

Zakaj je pomembno, da so vaši poskusi organizirani?

Za trenutek stopimo korak nazaj in poskušajmo razumeti, zakaj je pomembno, da so poskusi organizirani za strojno učenje. Ko podatkovni znanstveniki pristopijo k novemu problemu ML, morajo odgovoriti na številna različna vprašanja, od razpoložljivosti podatkov do tega, kako bodo merili učinkovitost modela.

Na začetku je proces poln negotovosti in se zelo ponavlja. Posledično lahko ta eksperimentalna faza proizvede več modelov, od katerih je vsak ustvarjen iz lastnih vnosov (podatkovnih nizov, skriptov za usposabljanje in hiperparametrov) in proizvaja svoje lastne rezultate (artefakte modela in metrike vrednotenja). Izziv je torej slediti vsem tem vhodom in izhodom vsake ponovitve.

Podatkovni znanstveniki običajno usposabljajo veliko različnih različic modela, dokler ne najdejo kombinacije transformacije podatkov, algoritma in hiperparametrov, ki ima za posledico najbolj učinkovito različico modela. Vsaka od teh edinstvenih kombinacij je en sam poskus. S sledljivim zapisom vhodnih podatkov, algoritmov in hiperparametrov, ki so bili uporabljeni v tem preskušanju, lahko skupina za podatkovno znanost zlahka reproducira svoje korake.

Vzpostavljen avtomatiziran postopek za sledenje poskusom izboljša zmožnost reprodukcije in uvajanja določenih različic modela, ki dobro delujejo. Izvorna integracija Pipelines s Experiments omogoča enostavno samodejno sledenje in upravljanje poskusov med poteki cevovodov.

Prednosti poskusov SageMaker

SageMaker Experiments omogoča podatkovnim znanstvenikom, da organizirajo, sledijo, primerjajo in ocenjujejo svoje ponovitve usposabljanja.

Začnimo najprej s pregledom, kaj lahko storite s preizkusi:

  • Organizirajte poskuse – Eksperimenti strukturirajo eksperimentiranje z entiteto najvišje ravni, imenovano an poskus ki vsebuje nabor poskusi. Vsak poskus vsebuje nabor korakov, imenovanih preskusne komponente. Vsaka preskusna komponenta je kombinacija naborov podatkov, algoritmov in parametrov. Eksperimente si lahko predstavljate kot mapo na najvišji ravni za organiziranje svojih hipotez, svoje poskuse kot podmape za vsak skupinski testni zagon in svoje preskusne komponente kot vaše datoteke za vsak primerek testnega zagona.
  • Sledite poskusom – Eksperimenti omogočajo podatkovnim znanstvenikom, da sledijo eksperimentom. Ponuja možnost samodejnega dodeljevanja opravil SageMaker preizkusu prek preprostih konfiguracij in prek SDK-jev za sledenje.
  • Primerjaj in oceni poskuse – Integracija eksperimentov z Amazon SageMaker Studio olajša izdelavo vizualizacij podatkov in primerjavo različnih poskusov. Do preskusnih podatkov lahko dostopate tudi prek Python SDK, da ustvarite lastno vizualizacijo s svojimi prednostnimi knjižnicami za risanje.

Če želite izvedeti več o API-jih in SDK-jih Experiments, priporočamo naslednjo dokumentacijo: CreateExperiment in Amazon SageMaker Experiments Python SDK.

Če se želite potopiti globlje, priporočamo, da si ogledate amazon-sagemaker-examples/sagemaker-experiments GitHub repozitorij za nadaljnje primere.

Integracija med cevovodi in eksperimenti

Cevovodi za gradnjo modela, ki so del Pipelines, so namensko izdelani za ML in vam omogočajo, da orkestrirate svoje naloge gradnje modela z orodjem za cevovod, ki vključuje izvorne integracije z drugimi funkcijami SageMaker, kot tudi prilagodljivost za razširitev vašega cevovoda s koraki, ki se izvajajo zunaj SageMakerja. . Vsak korak določa dejanje, ki ga izvede cevovod. Odvisnosti med koraki so definirane z neposrednim acikličnim grafom (DAG), zgrajenim z uporabo Pipelines Python SDK. Cevovod SageMaker lahko zgradite programsko prek istega SDK-ja. Ko je cevovod uveden, lahko po želji vizualizirate njegov delovni tok v Studiu.

Cevovodi se samodejno integrirajo s preizkusi tako, da samodejno ustvarijo poskus in poskus za vsako izvedbo. Cevovodi samodejno ustvarijo preizkus in poskus za vsako izvedbo cevovoda, preden zaženejo korake, razen če ni določen eden ali oba od teh vnosov. Med izvajanjem opravila SageMaker v cevovodu cevovod poveže preizkus s poskusom in s preizkusom poveže vsako preskusno komponento, ki jo ustvari opravilo. Programsko določanje lastnega poskusa ali poskusa vam omogoča, da natančno prilagodite, kako organizirati svoje poskuse.

Potek dela, ki ga predstavljamo v tem primeru, je sestavljen iz niza korakov: korak predprocesiranja za razdelitev našega vhodnega nabora podatkov na nabore podatkov za usposabljanje, testiranje in preverjanje; korak uglaševanja za nastavitev naših hiperparametrov in začetek usposabljanja za usposabljanje modela z uporabo Vgrajen algoritem XGBoost; in končno korak modela za ustvarjanje modela SageMaker iz najbolje usposobljenega artefakta modela. Cevovodi ponujajo tudi več izvorno podprtih vrste korakov zunaj tega, o čemer se razpravlja v tej objavi. Ponazarjamo tudi, kako lahko sledite svojemu delovnemu toku cevovoda ter ustvarite meritve in primerjalne grafikone. Poleg tega pokažemo, kako povezati novo ustvarjeno preskušanje z obstoječim poskusom, ki je bil morda ustvarjen, preden je bil cevovod definiran.

Koda cevovodov SageMaker

Beležnico si lahko ogledate in prenesete iz GitHub repozitorij povezanih s to objavo. Ogledamo si kodo, specifično za cevovode, da jo bolje razumemo.

Cevovodi vam omogočajo posredovanje parametrov med izvajanjem. Tukaj definiramo vrste primerkov obdelave in usposabljanja ter število v času izvajanja s prednastavljenimi privzetimi vrednostmi:

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

Nato nastavimo skript za obdelavo, ki prenese in razdeli vhodni nabor podatkov na dele usposabljanja, preizkusa in validacije. Uporabljamo SKLearnProcessor za izvajanje tega koraka predprocesiranja. Da bi to naredili, definiramo objekt procesorja z vrsto primerka in številom, potrebnim za izvajanje opravila obdelave.

Cevovodi nam omogočajo, da dosežemo različico podatkov na programski način z uporabo spremenljivk, specifičnih za izvajanje, kot je ExecutionVariables.PIPELINE_EXECUTION_ID, ki je edinstven ID poteka cevovoda. Ustvarimo lahko na primer edinstven ključ za shranjevanje izhodnih naborov podatkov Preprosta storitev shranjevanja Amazon (Amazon S3), ki jih povezuje z določenim cevovodom. Za celoten seznam spremenljivk glejte Izvedbene spremenljivke.

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

Nato nadaljujemo z ustvarjanjem predmeta ocenjevalca za usposabljanje modela XGBoost. Nastavili smo nekaj statičnih hiperparametrov, ki se običajno uporabljajo z XGBoost:

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
)

Izvajamo hiperparametrsko uravnavanje modelov, ki jih ustvarimo z uporabo a ContinuousParameter obseg za lambda. Izbira ene metrike kot objektivne metrike sporoči uglaševalcu (primerku, ki izvaja opravila prilagajanja hiperparametrov), da boste opravilo usposabljanja ovrednotili na podlagi te specifične metrike. Uglaševalec vrne najboljšo kombinacijo na podlagi najboljše vrednosti za to objektivno metriko, kar pomeni najboljšo kombinacijo, ki zmanjša najboljšo povprečno kvadratno napako (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",
        ),
    } 
)

Korak uglaševanja izvaja več poskusov s ciljem določitve najboljšega modela med testiranimi obsegi parametrov. Z metodo get_top_model_s3_uri, razvrstimo 50 najbolj zmogljivih različic URI-ja artefakta modela S3 in izvlečemo samo najbolj zmogljivo različico (navedemo k=0 za najboljše), da ustvarite model SageMaker.

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

Ko se cevovod izvaja, ustvari preskusne komponente za vsako opravilo prilagajanja hiperparametrov in vsako opravilo SageMaker, ki ga ustvarijo koraki cevovoda.

Integracijo cevovodov s poskusi lahko dodatno konfigurirate tako, da ustvarite a PipelineExperimentConfig in ga posredujte predmetu cevovoda. Oba parametra določata ime poskusa, ki bo ustvarjen, in poskus, ki se bo nanašal na celoten potek cevovoda.

Če želite cevovod povezati z obstoječim poskusom, lahko posredujete njegovo ime in Pipelines bo z njim povezal nov poskus. Z nastavitvijo lahko preprečite ustvarjanje poskusa in poskusa za zagon cevovoda pipeline_experiment_config do None.

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

Vrste primerkov in štetje posredujemo naprej kot parametre ter verižimo prejšnje korake po naslednjem vrstnem redu. Potek dela cevovoda je implicitno definiran z izhodi koraka, ki so vhodi drugega koraka.

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

Popoln cevovod je zdaj ustvarjen in pripravljen za uporabo. V cevovod dodamo vlogo izvajanja in ga zaženemo. Od tu lahko gremo na konzolo SageMaker Studio Pipelines in vizualno spremljamo vsak korak. Do povezanih dnevnikov lahko dostopate tudi s konzole za odpravljanje napak v cevovodu.

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

Prejšnji posnetek zaslona prikazuje zeleno uspešno zagnan cevovod. Meritve enega poskusa pridobimo iz izvajanja cevovoda z naslednjo kodo:

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

Primerjajte meritve za vsako preskusno komponento

Rezultate nastavitve hiperparametrov lahko narišete v Studiu ali prek drugih knjižnic za izris Python. Prikazujemo oba načina za to.

Raziščite metrike usposabljanja in ocenjevanja v Studiu

Studio ponuja interaktivni uporabniški vmesnik, kjer lahko ustvarite interaktivne risbe. Koraki so naslednji:

  1. Izberite Eksperimenti in poskusi Iz Viri SageMaker ikona na levi stranski vrstici.
  2. Izberite poskus, da ga odprete.
  3. Izberite (z desnim klikom) poskus, ki vas zanima.
  4. Izberite Odpri na seznamu preskusnih komponent.
  5. Pritisnite Shift izbrati preskusne komponente, ki predstavljajo delovna mesta za usposabljanje.
  6. Izberite Dodajte grafikon.
  7. Izberite Nova lestvica in ga prilagodite za izris zbranih meritev, ki jih želite analizirati. Za naš primer uporabe izberite naslednje:
    1. za Vrsta podatkov¸ izberite Povzetek statistike.
    2. za Vrsta grafikona¸ izberite Graf raztrosa.
    3. za Os X, izberite lambda.
    4. za Os Y, izberite validation:rmse_last.

Nov grafikon se prikaže na dnu okna z oznako '8'.

S pritiskom lahko vključite več ali manj usposabljanj Shift in izbiro ikone očesa za bolj interaktivno izkušnjo.

Organizirajte svojo pot strojnega učenja z Amazon SageMaker Experiments in Amazon SageMaker Pipelines PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Analitika s poskusi SageMaker

Ko je cevovod končan, lahko hitro vizualiziramo, kako se različne različice modela primerjajo glede na meritve, zbrane med usposabljanjem. Prej smo izvozili vse preskusne meritve v a pand DataFrame uporabo ExperimentAnalytics. Izris, pridobljen v Studiu, lahko reproduciramo s pomočjo knjižnice Matplotlib.

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

zaključek

Izvorna integracija med SageMaker Pipelines in SageMaker Experiments omogoča podatkovnim znanstvenikom, da samodejno organizirajo, sledijo in vizualizirajo eksperimente med dejavnostmi razvoja modela. Ustvarite lahko poskuse, da organizirate celotno delo pri razvoju modela, na primer naslednje:

  • Primer poslovne uporabe, ki ga obravnavate, na primer ustvarjanje poskusa za napovedovanje odliva strank
  • Eksperiment v lasti ekipe podatkovne znanosti v zvezi s tržno analitiko, na primer
  • Poseben projekt podatkovne znanosti in strojnega učenja

V tej objavi smo se poglobili v cevovode, da pokažemo, kako jih lahko uporabite v tandemu z eksperimenti za organizacijo popolnoma avtomatiziranega poteka dela od konca do konca.

Kot naslednji korak lahko uporabite te tri funkcije SageMaker – Studio, Experiments in Pipelines – za vaš naslednji projekt ML.

Priporočena branja


O avtorjih

Paolo Di FrancescoPaolo Di Francesco je arhitekt rešitev pri AWS. Ima izkušnje na področju telekomunikacij in programskega inženiringa. Navdušen je nad strojnim učenjem in se trenutno osredotoča na uporabo svojih izkušenj za pomoč strankam pri doseganju njihovih ciljev na AWS, zlasti v razpravah o MLOps. Izven službe rad igra nogomet in bere.

Organizirajte svojo pot strojnega učenja z Amazon SageMaker Experiments in Amazon SageMaker Pipelines PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Mario Bourgoin je višji arhitekt partnerskih rešitev za AWS, specialist za AI/ML in globalni tehnološki vodja za MLOps. Sodeluje s podjetniškimi strankami in partnerji, ki uvajajo rešitve AI v oblaku. Ima več kot 30 let izkušenj s strojnim učenjem in umetno inteligenco v startupih in podjetjih, začenši z ustvarjanjem enega prvih komercialnih sistemov strojnega učenja za velike podatke. Mario prosti čas preživi ob igranju s svojimi tremi belgijskimi Tervurenci, kuhanju večerje za svojo družino ter spoznavanju matematike in kozmologije.

Organizirajte svojo pot strojnega učenja z Amazon SageMaker Experiments in Amazon SageMaker Pipelines PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Ganapathi Krishnamoorthi je višji arhitekt za rešitve ML pri AWS. Ganapathi ponuja predpisane smernice startup in poslovnim strankam ter jim pomaga pri načrtovanju in uvajanju aplikacij v oblaku v velikem obsegu. Specializiran je za strojno učenje in je osredotočen na pomoč strankam pri uporabi AI/ML za njihove poslovne rezultate. Ko ni v službi, rad raziskuje na prostem in posluša glasbo.

Organizirajte svojo pot strojnega učenja z Amazon SageMaker Experiments in Amazon SageMaker Pipelines PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.Valerie Sunthakith je arhitekt rešitev za AWS, dela v igralniški industriji in s partnerji uvaja rešitve AI. Svojo kariero namerava zgraditi okoli računalniškega vida. Valerie svoj prosti čas porabi za potovanja, odkrivanje novih restavracij in spreminjanje notranjosti hiše.

Časovni žig:

Več od Strojno učenje AWS