Skalertrening og slutninger av tusenvis av ML-modeller med Amazon SageMaker | Amazon Web Services

Skalertrening og slutninger av tusenvis av ML-modeller med Amazon SageMaker | Amazon Web Services

Ettersom maskinlæring (ML) blir stadig mer utbredt i et bredt spekter av bransjer, finner organisasjoner behovet for å trene og betjene et stort antall ML-modeller for å møte de ulike behovene til kundene deres. Spesielt for leverandører av programvare som en tjeneste (SaaS), er evnen til å trene og betjene tusenvis av modeller effektivt og kostnadseffektivt avgjørende for å holde seg konkurransedyktig i et raskt utviklende marked.

Opplæring og betjening av tusenvis av modeller krever en robust og skalerbar infrastruktur, og det er der Amazon SageMaker kan hjelpe. SageMaker er en fullt administrert plattform som gjør det mulig for utviklere og dataforskere å bygge, trene og distribuere ML-modeller raskt, samtidig som de tilbyr kostnadsbesparende fordeler ved å bruke AWS Cloud-infrastrukturen.

I dette innlegget utforsker vi hvordan du kan bruke SageMaker-funksjoner, inkludert Amazon SageMaker-prosessering, SageMaker treningsjobber og SageMaker multi-model endpoints (MMEs), for å trene og betjene tusenvis av modeller på en kostnadseffektiv måte. For å komme i gang med den beskrevne løsningen, kan du se den medfølgende notatboken på GitHub.

Use case: Energiprognoser

For dette innlegget påtar vi oss rollen som et ISV-selskap som hjelper kundene deres med å bli mer bærekraftige ved å spore energiforbruket deres og gi prognoser. Vårt firma har 1,000 kunder som ønsker å bedre forstå energibruken deres og ta informerte beslutninger om hvordan de skal redusere miljøpåvirkningen. For å gjøre dette bruker vi et syntetisk datasett og trener en ML-modell basert på Profeten for hver kunde å lage energiforbruksprognoser. Med SageMaker kan vi effektivt trene og betjene disse 1,000 modellene, og gi kundene våre nøyaktig og handlingsdyktig innsikt i energibruken deres.

Det er tre funksjoner i det genererte datasettet:

  • Kunde ID – Dette er en heltallsidentifikator for hver kunde, fra 0–999.
  • tidsstempel – Dette er en dato-/klokkeslettverdi som angir tidspunktet da energiforbruket ble målt. Tidsstemplene genereres tilfeldig mellom start- og sluttdatoene spesifisert i koden.
  • forbruk – Dette er en flytverdi som indikerer energiforbruket, målt i en eller annen vilkårlig enhet. Forbruksverdiene genereres tilfeldig mellom 0–1,000 XNUMX med sinusformet sesongvariasjon.

Løsningsoversikt

For å effektivt trene og betjene tusenvis av ML-modeller, kan vi bruke følgende SageMaker-funksjoner:

  • SageMaker-behandling – SageMaker Processing er en fullstendig administrert dataforberedelsestjeneste som lar deg utføre databehandling og modellevalueringsoppgaver på inndataene dine. Du kan bruke SageMaker Processing til å transformere rådata til formatet som trengs for opplæring og slutninger, i tillegg til å kjøre batch- og nettbaserte evalueringer av modellene dine.
  • SageMaker treningsjobber – Du kan bruke SageMaker-opplæringsjobber til å trene modeller på en rekke algoritmer og inndatatyper, og spesifisere beregningsressursene som trengs for opplæring.
  • SageMaker MME-er – Multi-modell endepunkter lar deg være vert for flere modeller på ett enkelt endepunkt, noe som gjør det enkelt å betjene spådommer fra flere modeller ved hjelp av en enkelt API. SageMaker MME-er kan spare tid og ressurser ved å redusere antall endepunkter som trengs for å betjene spådommer fra flere modeller. MME-er støtter hosting av både CPU- og GPU-støttede modeller. Merk at i vårt scenario bruker vi 1,000 modeller, men dette er ikke en begrensning av selve tjenesten.

Følgende diagram illustrerer løsningsarkitekturen.

arkitektur som viser den beskrevne prosessen

Arbeidsflyten inkluderer følgende trinn:

  1. Vi bruker SageMaker Processing til å forhåndsbehandle data og lage en enkelt CSV-fil per kunde og lagre den i Amazon enkel lagringstjeneste (Amazon S3).
  2. SageMaker-opplæringsjobben er konfigurert til å lese utdataene fra SageMaker-behandlingsjobben og distribuere den på en round-robin-måte til treningsinstansene. Merk at dette også kan oppnås med Amazon SageMaker-rørledninger.
  3. Modellartefaktene lagres i Amazon S3 av treningsjobben, og serveres direkte fra SageMaker MME.

Skaler trening til tusenvis av modeller

Skalering av opplæringen til tusenvis av modeller er mulig via distribution parameter for Treningsinngang klasse i SageMaker Python SDK, som lar deg spesifisere hvordan data distribueres på tvers av flere treningsforekomster for en treningsjobb. Det er tre alternativer for distribution parameter: FullyReplicated, ShardedByS3Keyog ShardedByRecord. De ShardedByS3Key alternativet betyr at treningsdataene deles av S3-objektnøkkelen, hvor hver treningsforekomst mottar et unikt delsett av dataene, og unngår duplisering. Etter at dataene er kopiert av SageMaker til opplæringsbeholderne, kan vi lese mappe- og filstrukturen for å trene opp en unik modell per kundefil. Følgende er et eksempel på en kodebit:

# Assume that the training data is in an S3 bucket already, pass the parent folder
s3_input_train = sagemaker.inputs.TrainingInput( s3_data='s3://my-bucket/customer_data', distribution='ShardedByS3Key'
) # Create a SageMaker estimator and set the training input
estimator = sagemaker.estimator.Estimator(...)
estimator.fit(inputs=s3_input_train)

Hver SageMaker treningsjobb lagrer modellen som er lagret i /opt/ml/model mappen til treningsbeholderen før du arkiverer den i en model.tar.gz fil, og laster den deretter opp til Amazon S3 når treningsjobben er fullført. Superbrukere kan også automatisere denne prosessen med SageMaker Pipelines. Når du lagrer flere modeller via samme treningsjobb, oppretter SageMaker en enkelt model.tar.gz fil som inneholder alle de trente modellene. Dette vil da bety at vi, for å kunne betjene modellen, må pakke ut arkivet først. For å unngå dette bruker vi sjekkpunkter for å lagre tilstanden til individuelle modeller. SageMaker gir funksjonaliteten til å kopiere sjekkpunkter opprettet under treningsjobben til Amazon S3. Her må sjekkpunktene lagres på et forhåndsspesifisert sted, med standard /opt/ml/checkpoints. Disse sjekkpunktene kan brukes til å gjenoppta treningen på et senere tidspunkt eller som en modell for utplassering på et endepunkt. For en oppsummering på høyt nivå av hvordan SageMaker-treningsplattformen administrerer lagringsbaner for opplæringsdatasett, modellartefakter, sjekkpunkter og utdata mellom AWS Cloud-lagring og opplæringsjobber i SageMaker, se Amazon SageMaker Treningslagringsmapper for treningsdatasett, sjekkpunkter, modellartefakter og utganger.

Følgende kode bruker en fiktiv model.save() funksjon inne i train.py skript som inneholder treningslogikken:

import tarfile
import boto3
import os [ ... argument parsing ... ] for customer in os.list_dir(args.input_path): # Read data locally within the Training job df = pd.read_csv(os.path.join(args.input_path, customer, 'data.csv')) # Define and train the model model = MyModel() model.fit(df) # Save model to output directory with open(os.path.join(output_dir, 'model.json'), 'w') as fout: fout.write(model_to_json(model)) # Create the model.tar.gz archive containing the model and the training script with tarfile.open(os.path.join(output_dir, '{customer}.tar.gz'), "w:gz") as tar: tar.add(os.path.join(output_dir, 'model.json'), "model.json") tar.add(os.path.join(args.code_dir, "training.py"), "training.py")

Skaler slutninger til tusenvis av modeller med SageMaker MME-er

SageMaker MMEer lar deg betjene flere modeller samtidig ved å opprette en endepunktkonfigurasjon som inkluderer en liste over alle modellene som skal betjenes, og deretter opprette et endepunkt ved å bruke den endepunktkonfigurasjonen. Det er ikke nødvendig å distribuere endepunktet på nytt hver gang du legger til en ny modell fordi endepunktet vil automatisk betjene alle modeller som er lagret i de angitte S3-banene. Dette oppnås med Multi -modellserver (MMS), et åpen kildekode-rammeverk for å betjene ML-modeller som kan installeres i containere for å gi grensesnittet som oppfyller kravene til de nye MME container APIene. I tillegg kan du bruke andre modellservere, inkludert TorchServe og Triton. MMS kan installeres i din egendefinerte beholder via SageMaker Inference Toolkit. For å lære mer om hvordan du konfigurerer Dockerfilen til å inkludere MMS og bruke den til å betjene modellene dine, se Bygg din egen container for SageMaker Multi-Model endepunkter.

Følgende kodebit viser hvordan du oppretter en MME ved å bruke SageMaker Python SDK:

from sagemaker.multidatamodel import MultiDataModel # Create the MultiDataModel definition
multimodel = MultiDataModel( name='customer-models', model_data_prefix=f's3://{bucket}/scaling-thousand-models/models', model=your_model,
) # Deploy on a real-time endpoint
predictor = multimodel.deploy( initial_instance_count=1, instance_type='ml.c5.xlarge',
)

Når MME er live, kan vi påkalle den for å generere spådommer. Påkallinger kan gjøres i hvilken som helst AWS SDK så vel som med SageMaker Python SDK, som vist i følgende kodebit:

predictor.predict( data='{"period": 7}', # the payload, in this case JSON target_model='{customer}.tar.gz' # the name of the target model
)

Når du ringer en modell, blir modellen i utgangspunktet lastet fra Amazon S3 på instansen, noe som kan resultere i en kaldstart når du ringer en ny modell. Ofte brukte modeller bufres i minnet og på disk for å gi slutninger med lav latens.

konklusjonen

SageMaker er en kraftig og kostnadseffektiv plattform for opplæring og betjening av tusenvis av ML-modeller. Funksjonene, inkludert SageMaker Processing, opplæringsjobber og MME-er, gjør det mulig for organisasjoner å effektivt trene og betjene tusenvis av modeller i stor skala, samtidig som de drar nytte av de kostnadsbesparende fordelene ved å bruke AWS Cloud-infrastrukturen. For å lære mer om hvordan du bruker SageMaker til opplæring og servering av tusenvis av modeller, se Behandle data, Tren en modell med Amazon SageMaker og Vert for flere modeller i én beholder bak ett endepunkt.


Om forfatterne

Bilde av DavideDavide Gallitelli er en spesialistløsningsarkitekt for AI/ML i EMEA-regionen. Han er basert i Brussel og jobber tett med kunder i hele Benelux. Han har vært utvikler siden han var veldig ung, og begynte å kode i en alder av 7. Han begynte å lære AI/ML på universitetet, og har forelsket seg i det siden den gang.

Bilde av MauritsMaurits de Groot er en løsningsarkitekt hos Amazon Web Services, basert i Amsterdam. Han liker å jobbe med maskinlæringsrelaterte emner og har en forkjærlighet for startups. På fritiden liker han å gå på ski og spille squash.

Tidstempel:

Mer fra AWS maskinlæring