Skalatræning og inferens af tusindvis af ML-modeller med Amazon SageMaker | Amazon Web Services

Skalatræning og inferens af tusindvis af ML-modeller med Amazon SageMaker | Amazon Web Services

Efterhånden som maskinlæring (ML) bliver mere og mere udbredt i en lang række brancher, oplever organisationer behovet for at træne og betjene et stort antal ML-modeller for at imødekomme deres kunders forskellige behov. Især for software as a service-udbydere (SaaS) er evnen til at træne og betjene tusindvis af modeller effektivt og omkostningseffektivt afgørende for at forblive konkurrencedygtig på et marked i hastig udvikling.

Træning og betjening af tusindvis af modeller kræver en robust og skalerbar infrastruktur, hvilket er hvor Amazon SageMaker kan hjælpe. SageMaker er en fuldt administreret platform, der gør det muligt for udviklere og dataforskere at bygge, træne og implementere ML-modeller hurtigt, samtidig med at det tilbyder de omkostningsbesparende fordele ved at bruge AWS Cloud-infrastrukturen.

I dette indlæg undersøger vi, hvordan du kan bruge SageMaker-funktioner, herunder Amazon SageMaker-behandling, SageMaker træningsjob og SageMaker multi-model endpoints (MME'er), for at træne og betjene tusindvis af modeller på en omkostningseffektiv måde. For at komme i gang med den beskrevne løsning kan du henvise til den medfølgende notesbog på GitHub.

Use case: Energiprognose

Til dette indlæg påtager vi os rollen som en ISV-virksomhed, der hjælper deres kunder med at blive mere bæredygtige ved at spore deres energiforbrug og levere prognoser. Vores virksomhed har 1,000 kunder, som ønsker at forstå deres energiforbrug bedre og træffe informerede beslutninger om, hvordan de kan reducere deres miljøpåvirkning. For at gøre dette bruger vi et syntetisk datasæt og træner en ML-model baseret på Profeten for hver kunde at lave energiforbrugsprognoser. Med SageMaker kan vi effektivt træne og betjene disse 1,000 modeller, hvilket giver vores kunder nøjagtige og handlingsrettede indsigter i deres energiforbrug.

Der er tre funktioner i det genererede datasæt:

  • Kunde ID – Dette er et heltals-id for hver kunde, der spænder fra 0-999.
  • tidsstempel – Dette er en dato/tidsværdi, der angiver det tidspunkt, hvor energiforbruget blev målt. Tidsstemplerne genereres tilfældigt mellem start- og slutdatoerne angivet i koden.
  • forbrug – Dette er en flydende værdi, der angiver energiforbruget, målt i en eller anden vilkårlig enhed. Forbrugsværdierne er tilfældigt genereret mellem 0-1,000 med sinusformet sæsonudsving.

Løsningsoversigt

For effektivt at træne og betjene tusindvis af ML-modeller kan vi bruge følgende SageMaker-funktioner:

  • SageMaker-behandling – SageMaker Processing er en fuldt administreret dataforberedelsestjeneste, der sætter dig i stand til at udføre databehandling og modelevalueringsopgaver på dine inputdata. Du kan bruge SageMaker Processing til at transformere rådata til det format, der er nødvendigt til træning og konklusioner, samt til at køre batch- og onlineevalueringer af dine modeller.
  • SageMaker uddannelse job – Du kan bruge SageMaker træningsjob til at træne modeller på en række forskellige algoritmer og inputdatatyper og specificere de beregningsressourcer, der er nødvendige for træning.
  • SageMaker MME'er – Multi-model endpoints giver dig mulighed for at hoste flere modeller på et enkelt slutpunkt, hvilket gør det nemt at betjene forudsigelser fra flere modeller ved hjælp af en enkelt API. SageMaker MME'er kan spare tid og ressourcer ved at reducere antallet af endepunkter, der er nødvendige for at betjene forudsigelser fra flere modeller. MME'er understøtter hosting af både CPU- og GPU-understøttede modeller. Bemærk, at i vores scenarie bruger vi 1,000 modeller, men dette er ikke en begrænsning af selve tjenesten.

Følgende diagram illustrerer løsningsarkitekturen.

arkitektur, der viser den beskrevne proces

Arbejdsgangen omfatter følgende trin:

  1. Vi bruger SageMaker Processing til at forbehandle data og oprette en enkelt CSV-fil pr. kunde og gemme den i Amazon Simple Storage Service (Amazon S3).
  2. SageMaker-træningsjobbet er konfigureret til at læse output fra SageMaker Processing-jobbet og distribuere det på en round-robin-måde til træningsforekomsterne. Bemærk at dette også kan opnås med Amazon SageMaker Pipelines.
  3. Modelartefakterne gemmes i Amazon S3 af træningsjobbet og serveres direkte fra SageMaker MME.

Skaler træning til tusindvis af modeller

Det er muligt at skalere træningen af ​​tusindvis af modeller via distribution parameter for Træningsinput klasse i SageMaker Python SDK, som giver dig mulighed for at angive, hvordan data fordeles på tværs af flere træningsinstanser for et træningsjob. Der er tre muligheder for distribution parameter: FullyReplicated, ShardedByS3Keyog ShardedByRecord. Det ShardedByS3Key option betyder, at træningsdataene sønderdeles af S3-objektnøgle, hvor hver træningsinstans modtager en unik delmængde af dataene, hvilket undgår duplikering. Efter at dataene er kopieret af SageMaker til træningscontainerne, kan vi læse mappe- og filstrukturen for at træne en unik model pr. kundefil. Følgende er et eksempel på et kodestykke:

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

Hvert SageMaker træningsjob gemmer den model, der er gemt i /opt/ml/model mappe af træningsbeholderen, før den arkiveres i en model.tar.gz fil, og uploader den derefter til Amazon S3, når træningsjob er afsluttet. Superbrugere kan også automatisere denne proces med SageMaker Pipelines. Når du opbevarer flere modeller via samme træningsjob, opretter SageMaker en enkelt model.tar.gz fil, der indeholder alle de trænede modeller. Det ville så betyde, at vi for at kunne betjene modellen først skulle pakke arkivet ud. For at undgå dette bruger vi checkpoints for at gemme de enkelte modellers tilstand. SageMaker giver funktionaliteten til at kopiere kontrolpunkter, der er oprettet under træningsjobbet, til Amazon S3. Her skal kontrolpunkterne gemmes på en forudbestemt placering, hvor standarden er /opt/ml/checkpoints. Disse kontrolpunkter kan bruges til at genoptage træningen på et senere tidspunkt eller som en model til at implementere på et slutpunkt. For en oversigt på højt niveau af, hvordan SageMaker-træningsplatformen administrerer lagringsstier til træningsdatasæt, modelartefakter, kontrolpunkter og output mellem AWS Cloud-lagring og træningsjob i SageMaker, se Amazon SageMaker Training Storage Mapper til træningsdatasæt, kontrolpunkter, modelartefakter og output.

Følgende kode bruger en fiktiv model.save() funktion inde i train.py script, der indeholder træningslogikken:

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 inferens til tusindvis af modeller med SageMaker MME'er

SageMaker MME'er giver dig mulighed for at betjene flere modeller på samme tid ved at oprette en slutpunktskonfiguration, der inkluderer en liste over alle modeller, der skal betjenes, og derefter oprette et slutpunkt ved hjælp af denne slutpunktskonfiguration. Der er ingen grund til at geninstallere endepunktet, hver gang du tilføjer en ny model, fordi endepunktet automatisk vil betjene alle modeller, der er gemt i de angivne S3-stier. Dette opnås med Multi Model Server (MMS), en open source-ramme til at betjene ML-modeller, der kan installeres i containere for at give den frontend, der opfylder kravene til de nye MME container API'er. Derudover kan du bruge andre modelservere, herunder TorchServe , Triton. MMS kan installeres i din brugerdefinerede container via SageMaker Inference Toolkit. For at lære mere om, hvordan du konfigurerer din Dockerfile til at inkludere MMS og bruge den til at betjene dine modeller, se Byg din egen container til SageMaker Multi-Model Endpoints.

Følgende kodestykke viser, hvordan man opretter en MME ved hjælp af 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'en er live, kan vi påberåbe den for at generere forudsigelser. Påkald kan udføres i enhver AWS SDK såvel som med SageMaker Python SDK, som vist i følgende kodestykke:

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

Når man kalder en model, indlæses modellen i første omgang fra Amazon S3 på instansen, hvilket kan resultere i en koldstart, når man kalder en ny model. Hyppigt brugte modeller cachelagres i hukommelsen og på disken for at give slutninger med lav latens.

Konklusion

SageMaker er en kraftfuld og omkostningseffektiv platform til træning og betjening af tusindvis af ML-modeller. Dens funktioner, herunder SageMaker Processing, træningsjob og MME'er, gør det muligt for organisationer effektivt at træne og betjene tusindvis af modeller i stor skala, samtidig med at de drager fordel af de omkostningsbesparende fordele ved at bruge AWS Cloud-infrastrukturen. For at lære mere om, hvordan du bruger SageMaker til træning og servering af tusindvis af modeller, se Behandle data, Træn en model med Amazon SageMaker , Vær vært for flere modeller i én container bag ét slutpunkt.


Om forfatterne

Billede af DavideDavide Gallitelli er en Specialist Solutions Architect for AI/ML i EMEA-regionen. Han er baseret i Bruxelles og arbejder tæt sammen med kunder i hele Benelux. Han har været udvikler, siden han var meget ung, og begyndte at kode i en alder af 7. Han begyndte at lære AI/ML på universitetet, og er blevet forelsket i det siden da.

Billede af MauritsMaurits de Groot er Solutions Architect hos Amazon Web Services, baseret i Amsterdam. Han kan lide at arbejde med maskinlæringsrelaterede emner og har en forkærlighed for startups. I sin fritid holder han af at stå på ski og spille squash.

Tidsstempel:

Mere fra AWS maskinindlæring