Scalați antrenamentul și deducerea a mii de modele ML cu Amazon SageMaker | Amazon Web Services

Scalați antrenamentul și deducerea a mii de modele ML cu Amazon SageMaker | Amazon Web Services

Pe măsură ce învățarea automată (ML) devine din ce în ce mai răspândită într-o gamă largă de industrii, organizațiile descoperă nevoia de a instrui și de a servi un număr mare de modele ML pentru a satisface nevoile diverse ale clienților lor. În special pentru furnizorii de software ca serviciu (SaaS), capacitatea de a instrui și de a servi mii de modele în mod eficient și rentabil este crucială pentru a rămâne competitiv pe o piață în evoluție rapidă.

Antrenarea și deservirea a mii de modele necesită o infrastructură robustă și scalabilă, care este locul unde Amazon SageMaker poate ajuta. SageMaker este o platformă complet gestionată care permite dezvoltatorilor și cercetătorilor de date să construiască, să antreneze și să implementeze rapid modele ML, oferind în același timp beneficiile de economisire a costurilor de utilizare a infrastructurii AWS Cloud.

În această postare, explorăm cum puteți utiliza funcțiile SageMaker, inclusiv Procesare Amazon SageMaker, joburi de instruire SageMaker și puncte finale multimodel (MME) SageMaker pentru a instrui și a servi mii de modele într-un mod rentabil. Pentru a începe cu soluția descrisă, puteți consulta caietul însoțitor pe GitHub.

Caz de utilizare: previziunea energiei

Pentru această postare, ne asumăm rolul unei companii ISV care își ajută clienții să devină mai sustenabili prin urmărirea consumului lor de energie și furnizarea de prognoze. Compania noastră are 1,000 de clienți care doresc să își înțeleagă mai bine utilizarea energiei și să ia decizii informate cu privire la modul de reducere a impactului lor asupra mediului. Pentru a face acest lucru, folosim un set de date sintetice și antrenăm un model ML bazat pe profet pentru ca fiecare client să facă prognoze de consum de energie. Cu SageMaker, putem antrena și servi eficient aceste 1,000 de modele, oferind clienților noștri informații precise și acționabile asupra consumului lor de energie.

Există trei caracteristici în setul de date generat:

  • Număr de înregistrare client – Acesta este un identificator întreg pentru fiecare client, variind de la 0 la 999.
  • timestamp-ul – Aceasta este o valoare de dată/ora care indică ora la care a fost măsurat consumul de energie. Marcajele temporale sunt generate aleatoriu între datele de început și de sfârșit specificate în cod.
  • consum – Aceasta este o valoare flotantă care indică consumul de energie, măsurat într-o unitate arbitrară. Valorile de consum sunt generate aleator între 0–1,000 cu sezonalitate sinusoidală.

Prezentare generală a soluțiilor

Pentru a antrena și a servi eficient mii de modele ML, putem folosi următoarele caracteristici SageMaker:

  • Procesare SageMaker – SageMaker Processing este un serviciu de pregătire a datelor complet gestionat, care vă permite să efectuați procesarea datelor și sarcini de evaluare a modelului pe datele dvs. de intrare. Puteți utiliza SageMaker Processing pentru a transforma datele brute în formatul necesar pentru instruire și inferență, precum și pentru a rula evaluări în lot și online ale modelelor dvs.
  • Joburi de formare SageMaker – Puteți utiliza lucrări de instruire SageMaker pentru a instrui modele pe o varietate de algoritmi și tipuri de date de intrare și pentru a specifica resursele de calcul necesare pentru antrenament.
  • MME-uri SageMaker – Punctele finale cu mai multe modele vă permit să găzduiți mai multe modele pe un singur punct final, ceea ce facilitează difuzarea predicțiilor din mai multe modele folosind un singur API. SageMaker MME poate economisi timp și resurse prin reducerea numărului de puncte finale necesare pentru a servi predicții din mai multe modele. MME-urile acceptă găzduirea atât a modelelor suportate de CPU, cât și de GPU. Rețineți că în scenariul nostru, folosim 1,000 de modele, dar aceasta nu este o limitare a serviciului în sine.

Următoarea diagramă ilustrează arhitectura soluției.

arhitectura care afiseaza procesul descris

Fluxul de lucru include următorii pași:

  1. Folosim SageMaker Processing pentru a preprocesa datele și pentru a crea un singur fișier CSV per client și pentru a-l stoca Serviciul Amazon de stocare simplă (Amazon S3).
  2. Jobul de instruire SageMaker este configurat să citească rezultatul jobului de procesare SageMaker și să o distribuie într-un mod round-robin la instanțele de instruire. Rețineți că acest lucru poate fi realizat și cu Pipelines Amazon SageMaker.
  3. Artefactele modelului sunt stocate în Amazon S3 de către jobul de instruire și sunt servite direct din SageMaker MME.

Scala antrenamentul la mii de modele

Scalarea antrenamentului a mii de modele este posibilă prin intermediul distribution parametrul parametrului TrainingInput clasă din SageMaker Python SDK, care vă permite să specificați modul în care datele sunt distribuite în mai multe instanțe de antrenament pentru un job de instruire. Există trei opțiuni pentru distribution parametru: FullyReplicated, ShardedByS3Key, și ShardedByRecord. ShardedByS3Key opțiunea înseamnă că datele de antrenament sunt fragmentate de cheia obiectului S3, fiecare instanță de antrenament primind un subset unic de date, evitând duplicarea. După ce datele sunt copiate de SageMaker în containerele de instruire, putem citi folderul și structura fișierelor pentru a antrena un model unic pentru fiecare fișier client. Următorul este un exemplu de fragment de cod:

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

Fiecare job de formare SageMaker stochează modelul salvat în /opt/ml/model folderul containerului de instruire înainte de a-l arhiva într-un model.tar.gz fișier și apoi îl încarcă în Amazon S3 la finalizarea lucrării de instruire. Utilizatorii puternici pot, de asemenea, automatiza acest proces cu SageMaker Pipelines. Când stochează mai multe modele prin aceeași sarcină de instruire, SageMaker creează unul singur model.tar.gz fișier care conține toate modelele antrenate. Acest lucru ar însemna că, pentru a servi modelul, ar trebui să despachetăm mai întâi arhiva. Pentru a evita acest lucru, folosim puncte de control pentru a salva starea modelelor individuale. SageMaker oferă funcționalitatea de a copia punctele de control create în timpul sarcinii de instruire pe Amazon S3. Aici, punctele de control trebuie să fie salvate într-o locație prespecificată, cu cea implicită /opt/ml/checkpoints. Aceste puncte de control pot fi folosite pentru a relua antrenamentul la un moment ulterior sau ca model de implementat pe un punct final. Pentru un rezumat la nivel înalt al modului în care platforma de instruire SageMaker gestionează căile de stocare pentru seturile de date de antrenament, artefactele modelului, punctele de control și ieșirile între stocarea AWS Cloud și lucrările de instruire în SageMaker, consultați Foldere de stocare Amazon SageMaker Training pentru seturi de date de instruire, puncte de control, artefacte de model și ieșiri.

Următorul cod folosește un fictiv model.save() funcționează în interiorul train.py scriptul care conține logica antrenamentului:

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

Scalați inferența la mii de modele cu SageMaker MME

MME-urile SageMaker vă permit să serviți mai multe modele în același timp prin crearea unei configurații de punct final care include o listă cu toate modelele de servit și apoi creând un punct final utilizând configurația punctului final. Nu este nevoie să reinstalați punctul final de fiecare dată când adăugați un model nou, deoarece punctul final va servi automat toate modelele stocate în căile S3 specificate. Acest lucru se realizează cu Server multimodel (MMS), un cadru open-source pentru servirea modelelor ML care poate fi instalat în containere pentru a oferi front-end-ul care îndeplinește cerințele pentru noile API-uri pentru containere MME. În plus, puteți utiliza alte servere model, inclusiv TorchServe și Triton. MMS poate fi instalat în containerul dvs. personalizat prin intermediul SageMaker Inference Toolkit. Pentru a afla mai multe despre cum să configurați fișierul Dockerfile să includă MMS și să îl utilizați pentru a vă servi modelele, consultați Construiți-vă propriul container pentru punctele finale cu mai multe modele SageMaker.

Următorul fragment de cod arată cum să creați un MME utilizând SDK-ul SageMaker Python:

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

Când MME este live, îl putem invoca pentru a genera predicții. Invocările pot fi făcute în orice SDK AWS, precum și cu SDK-ul SageMaker Python, așa cum se arată în următorul fragment de cod:

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

Când apelați un model, modelul este inițial încărcat de pe Amazon S3 pe instanță, ceea ce poate duce la o pornire la rece atunci când apelați un model nou. Modelele utilizate frecvent sunt stocate în cache în memorie și pe disc pentru a oferi o inferență cu latență scăzută.

Concluzie

SageMaker este o platformă puternică și rentabilă pentru instruirea și deservirea a mii de modele ML. Caracteristicile sale, inclusiv SageMaker Processing, joburi de instruire și MME, permit organizațiilor să antreneze și să servească eficient mii de modele la scară, beneficiind în același timp de avantajele de economisire a costurilor pe care le are utilizarea infrastructurii AWS Cloud. Pentru a afla mai multe despre cum să utilizați SageMaker pentru instruire și deservire a mii de modele, consultați Procesarea datelor, Antrenați un model cu Amazon SageMaker și Găzduiește mai multe modele într-un singur container în spatele unui punct final.


Despre Autori

Poza cu DavideDavide Gallitelli este arhitect specializat în soluții pentru AI/ML în regiunea EMEA. Are sediul la Bruxelles și lucrează îndeaproape cu clienții din Benelux. Este dezvoltator încă de când era foarte mic, începând să codeze la vârsta de 7 ani. A început să învețe AI/ML la universitate și de atunci s-a îndrăgostit de el.

Poza cu MauritsMaurits de Groot este arhitect de soluții la Amazon Web Services, cu sediul în Amsterdam. Îi place să lucreze pe subiecte legate de învățarea automată și are o predilecție pentru startup-uri. În timpul liber, îi place să schieze și să joace squash.

Timestamp-ul:

Mai mult de la Învățare automată AWS