Modele de proiectare pentru inferența în serie pe Amazon SageMaker PlatoBlockchain Data Intelligence. Căutare verticală. Ai.

Modele de proiectare pentru inferența în serie pe Amazon SageMaker

Pe măsură ce învățarea automată (ML) se generalizează și câștigă o adoptare mai largă, aplicațiile bazate pe ML devin din ce în ce mai frecvente pentru a rezolva o serie de probleme complexe de afaceri. Soluția la aceste probleme complexe de afaceri necesită adesea utilizarea mai multor modele ML. Aceste modele pot fi combinate secvenţial pentru a efectua diverse sarcini, cum ar fi preprocesarea, transformarea datelor, selectarea modelului, generarea inferenţei, consolidarea inferenţei şi post-procesarea. Organizațiile au nevoie de opțiuni flexibile pentru a orchestra aceste fluxuri de lucru complexe de ML. Conductele de inferență în serie sunt un astfel de model de proiectare pentru a aranja aceste fluxuri de lucru într-o serie de pași, fiecare pas îmbogățind sau procesând în continuare rezultatul generat de pașii anteriori și trecând rezultatul la pasul următor din conductă.

În plus, aceste conducte de inferență în serie ar trebui să ofere următoarele:

  • Implementare flexibilă și personalizată (dependențe, algoritmi, logica de afaceri și așa mai departe)
  • Repetabil și consecvent pentru implementarea producției
  • Ridicare nediferențiată de grele prin minimizarea managementului infrastructurii

În această postare, analizăm câteva cazuri de utilizare obișnuite pentru conductele de inferență în serie și parcurgem câteva opțiuni de implementare pentru fiecare dintre aceste cazuri de utilizare folosind Amazon SageMaker. De asemenea, discutăm considerații pentru fiecare dintre aceste opțiuni de implementare.

Următorul tabel rezumă diferitele cazuri de utilizare pentru inferența în serie, considerente de implementare și opțiuni. Acestea sunt discutate în această postare.

Utilizare caz Descrierea cazului de utilizare Considerații primare Complexitatea generală a implementării Opțiuni de implementare recomandate Exemplu de artefacte de cod și caiete
Conducta de inferență în serie (cu pași de preprocesare și postprocesare incluși) Conducta de inferențe trebuie să preproceseze datele primite înainte de a invoca un model antrenat pentru generarea de inferențe și apoi să postproceseze inferențe generate, astfel încât acestea să poată fi consumate cu ușurință de aplicațiile din aval. Ușor de implementat Jos Containerul de inferență folosind SageMaker Inference Toolkit Implementați un model PyTorch instruit
Conducta de inferență în serie (cu pași de preprocesare și postprocesare incluși) Conducta de inferențe trebuie să preproceseze datele primite înainte de a invoca un model antrenat pentru generarea de inferențe și apoi să postproceseze inferențe generate, astfel încât acestea să poată fi consumate cu ușurință de aplicațiile din aval. Decuplare, implementare simplificată și upgrade-uri Mediu Conducta de inferență SageMaker Conductă de inferență cu containere personalizate și xgBoost
Ansamblu model de serie Conducta de inferență trebuie să găzduiască și să aranjeze mai multe modele secvențial, astfel încât fiecare model să îmbunătățească inferența generată de cel anterior, înainte de a genera inferența finală. Decuplare, implementare simplificată și upgrade, flexibilitate în selecția cadrului de model Mediu Conducta de inferență SageMaker Inference Pipeline cu Scikit-learn și Linear Learner
Conductă de inferență în serie (cu invocarea modelului vizat de la un grup) Conducta de inferență trebuie să invoce un anumit model personalizat dintr-un grup de modele implementate, pe baza caracteristicilor cererii sau pentru optimizarea costurilor, în plus față de sarcinile de preprocesare și postprocesare Optimizarea costurilor și personalizarea Înalt Conductă de inferență SageMaker cu puncte finale multimodel (MME) Puncte finale cu mai multe modele Amazon SageMaker folosind Linear Learner

În secțiunile următoare, discutăm mai detaliat fiecare caz de utilizare.

Conductă de inferență în serie folosind containere de inferență

Cazurile de utilizare a conductei de inferență în serie au cerințe pentru a preprocesa datele primite înainte de a invoca un model ML pre-antrenat pentru generarea de inferențe. În plus, în unele cazuri, deducțiile generate ar putea fi nevoie să fie procesate în continuare, astfel încât să poată fi consumate cu ușurință de aplicațiile din aval. Acesta este un scenariu comun pentru cazurile de utilizare în care o sursă de date în flux trebuie procesată în timp real înainte ca un model să poată fi montat pe ea. Cu toate acestea, acest caz de utilizare se poate manifesta și pentru inferența pe lot.

SageMaker oferă o opțiune de personalizare a containerelor de inferență și de a le utiliza pentru a construi o conductă de inferență în serie. Containerele de inferență folosesc SageMaker Inference Toolkit și sunt construite pe SageMaker Multi Model Server (MMS), care oferă un mecanism flexibil pentru a servi modelele ML. Următoarea diagramă ilustrează un model de referință despre cum să implementați o conductă de inferență serială folosind containere de inferență.

SageMaker MMS se așteaptă la un script Python care implementează următoarele funcții pentru a încărca modelul, a preprocesa datele de intrare, a obține predicții din model și a postprocesa datele de ieșire:

  • input_fn() – Responsabil pentru deserializarea și preprocesarea datelor de intrare
  • model_fn() – Responsabil pentru încărcarea modelului antrenat din artefacte în Serviciul Amazon de stocare simplă (Amazon S3)
  • predict_fn() – Responsabil pentru generarea de inferențe din model
  • output_fn() – Responsabil pentru serializarea și postprocesarea datelor de ieșire (inferențe)

Pentru pași detaliați pentru personalizarea unui container de inferență, consultați Adaptarea propriului container de inferență.

Containerele de inferență sunt un model de design ideal pentru cazurile de utilizare a conductelor de inferență în serie, cu următoarele considerente principale:

  • Coeziune ridicată – Logica de procesare și modelul corespunzător conduc la funcționalitatea unică a afacerii și trebuie să fie colocate
  • Latență generală scăzută – Timpul scurs între momentul în care se face o cerere de inferență și se primește răspunsul

Într-o conductă de inferență în serie, logica și modelul de procesare sunt încapsulate în același container unic, astfel încât multe dintre apelurile de invocare rămân în container. Acest lucru ajută la reducerea numărului total de hopuri, rezultând o latență generală și o capacitate de răspuns mai bună a conductei.

De asemenea, pentru cazurile de utilizare în care ușurința de implementare este un criteriu important, containerele de inferență pot ajuta, cu diverse etape de procesare a conductei să fie amplasate în același container.

Conductă de inferență în serie folosind o conductă de inferență SageMaker

O altă variantă a cazului de utilizare a conductei de inferență în serie necesită o decuplare mai clară între diferiții pași din conductă (cum ar fi preprocesarea datelor, generarea de inferențe, postprocesarea datelor și formatarea și serializarea). Acest lucru se poate datora mai multor motive:

  • Decuplare – Diferiți pași ai conductei au un scop clar definit și trebuie să fie rulați pe containere separate din cauza dependențelor implicate. Acest lucru ajută, de asemenea, să mențină conducta bine structurată.
  • cadrele – Diverse etape ale conductei utilizează cadre specifice potrivite pentru scop (cum ar fi scikit sau Spark ML) și, prin urmare, trebuie să fie rulate pe containere separate.
  • Izolarea resurselor – Diverse etape ale conductei au cerințe diferite de consum de resurse și, prin urmare, trebuie să fie rulate pe containere separate pentru mai multă flexibilitate și control.

În plus, pentru conductele de inferență în serie puțin mai complexe, pot fi implicați mai mulți pași pentru a procesa o cerere și a genera o inferență. Prin urmare, din punct de vedere operațional, ar putea fi benefic să găzduiți acești pași pe containere separate pentru o mai bună izolare funcțională și pentru a facilita upgrade-uri și îmbunătățiri mai ușoare (schimbați un pas fără a afecta alte modele sau pași de procesare).

Dacă cazul dvs. de utilizare se aliniază cu unele dintre aceste considerații, a Conducta de inferență SageMaker oferă o opțiune ușoară și flexibilă pentru a construi o conductă de inferență în serie. Următoarea diagramă ilustrează un model de referință despre cum să implementați o conductă de inferență serială folosind mai mulți pași găzduiți pe containere dedicate folosind o conductă de inferență SageMaker.

ml9154-inference-pipeline

O conductă de inferență SageMaker constă dintr-o secvență liniară de 2-15 containere care procesează cererile de inferențe asupra datelor. Conducta de inferență oferă opțiunea de a utiliza algoritmi încorporați SageMaker pre-antrenați sau algoritmi personalizați ambalate în containere Docker. Containerele sunt găzduite pe aceeași instanță de bază, ceea ce ajută la reducerea latenței generale și la minimizarea costurilor.

Următorul fragment de cod arată cum pot fi combinate mai multe etape și modele de procesare pentru a crea o conductă de inferență în serie.

Începem prin a construi și specifica modele bazate pe Spark ML și XGBoost pe care intenționăm să le folosim ca parte a conductei:

from sagemaker.model import Model
from sagemaker.pipeline_model import PipelineModel
from sagemaker.sparkml.model import SparkMLModel
sparkml_data = 's3://{}/{}/{}'.format(s3_model_bucket, s3_model_key_prefix, 'model.tar.gz')
sparkml_model = SparkMLModel(model_data=sparkml_data)
xgb_model = Model(model_data=xgb_model.model_data, image=training_image)

Modelele sunt apoi aranjate secvenţial în definiţia modelului conductei:

model_name = 'serial-inference-' + timestamp_prefix
endpoint_name = 'serial-inference-ep-' + timestamp_prefix
sm_model = PipelineModel(name=model_name, role=role, models=[sparkml_model, xgb_model])

Conducta de inferență este apoi implementată în spatele unui punct final pentru inferență în timp real prin specificarea tipului și numărului de instanțe ML gazdă:

sm_model.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge', endpoint_name=endpoint_name)

Întreaga conductă de inferență asamblată poate fi considerată un model SageMaker pe care îl puteți utiliza fie pentru a face predicții în timp real, fie pentru a procesa direct transformări în lot, fără nicio preprocesare externă. În cadrul unui model pipeline de inferență, SageMaker tratează invocările ca o secvență de solicitări HTTP care provin dintr-o aplicație externă. Primul container din conductă se ocupă de cererea inițială, efectuează o procesare și apoi trimite răspunsul intermediar ca cerere către al doilea container din conductă. Acest lucru se întâmplă pentru fiecare container din conductă și în cele din urmă returnează răspunsul final la aplicația client care apelează.

Conductele de inferență SageMaker sunt complet gestionate. Când conducta este implementată, SageMaker instalează și rulează toate containerele definite pe fiecare dintre Cloud Elastic de calcul Amazon Instanțele (Amazon EC2) furnizate ca parte a sarcinii de transformare a punctului final sau a lotului. În plus, deoarece containerele sunt amplasate și găzduite pe aceeași instanță EC2, latența generală a conductei este redusă.

Ansamblu de modele în serie folosind o conductă de inferență SageMaker

Un model de ansamblu este o abordare în ML în care mai multe modele ML sunt combinate și utilizate ca parte a procesului de inferență pentru a genera inferențe finale. Motivațiile pentru modelele de ansamblu ar putea include îmbunătățirea acurateței, reducerea sensibilității modelului la caracteristici specifice de intrare și reducerea părtinirii unui singur model, printre altele. În această postare, ne concentrăm asupra cazurilor de utilizare legate de un ansamblu de modele în serie, în care mai multe modele ML sunt combinate secvenţial ca parte a unei conducte de inferenţă serială.

Să luăm în considerare un exemplu specific legat de un ansamblu de modele în serie în care trebuie să grupăm imaginile încărcate de un utilizator pe baza anumitor teme sau subiecte. Această conductă ar putea consta din trei modele ML:

  • Modelul 1 – Acceptă o imagine ca intrare și evaluează calitatea imaginii pe baza rezoluției imaginii, orientării și altele. Acest model încearcă apoi să crească calitatea imaginii și trimite imaginile procesate care îndeplinesc un anumit prag de calitate către modelul următor (Modelul 2).
  • Modelul 2 – Acceptă imagini validate prin Model 1 și performează recunoașterea imaginii pentru a identifica obiecte, locuri, oameni, text și alte acțiuni și concepte personalizate în imagini. Ieșirea din Modelul 2 care conține obiecte identificate este trimisă către Modelul 3.
  • Modelul 3 – Acceptă rezultatul din Modelul 2 și efectuează sarcini de procesare a limbajului natural (NLP), cum ar fi modelarea subiectelor pentru gruparea imaginilor împreună pe teme. De exemplu, imaginile ar putea fi grupate în funcție de locație sau de persoane identificate. Ieșirea (grupările) este trimisă înapoi la aplicația client.

Următoarea diagramă ilustrează un model de referință cu privire la modul de implementare a mai multor modele ML găzduite pe un ansamblu de modele în serie folosind o conductă de inferență SageMaker.

ml9154-model-ansamblu

După cum sa discutat mai devreme, conducta de inferență SageMaker este gestionată, ceea ce vă permite să vă concentrați pe selecția și dezvoltarea modelului ML, reducând în același timp sarcinile grele nediferențiate asociate cu construirea conductei ansamblului serial.

În plus, unele dintre considerentele discutate mai devreme cu privire la decuplare, alegerea algoritmului și a cadrului pentru dezvoltarea modelului și implementarea sunt relevante și aici. De exemplu, deoarece fiecare model este găzduit într-un container separat, aveți flexibilitate în selectarea cadrului ML care se potrivește cel mai bine fiecărui model și cazului dvs. general de utilizare. În plus, din punct de vedere al decuplării și operațional, puteți continua să actualizați sau să modificați pașii individuali mult mai ușor, fără a afecta alte modele.

Conducta de inferență SageMaker este, de asemenea, integrată cu Registrul modelului SageMaker pentru catalogarea modelelor, versiunea, gestionarea metadatelor și implementarea guvernată în medii de producție pentru a sprijini cele mai bune practici operaționale consecvente. Conducta de inferență SageMaker este, de asemenea, integrată Amazon CloudWatch pentru a permite monitorizarea modelelor cu mai multe containere în conductele de inferență. De asemenea, puteți obține vizibilitate metrici în timp real pentru a înțelege mai bine invocările și latența pentru fiecare container din conductă, ceea ce ajută la depanarea și optimizarea resurselor.

Conductă de inferență în serie (cu invocarea modelului vizat de la un grup) folosind o conductă de inferență SageMaker

Puncte finale cu mai multe modele SageMaker (MME) oferă o soluție rentabilă pentru a implementa un număr mare de modele ML în spatele unui singur punct final. Motivațiile pentru utilizarea punctelor finale cu mai multe modele ar putea include invocarea unui model personalizat specific bazat pe caracteristicile cererii (cum ar fi originea, locația geografică, personalizarea utilizatorului și așa mai departe) sau pur și simplu găzduirea mai multor modele în spatele aceluiași punct final pentru a obține optimizarea costurilor.

Când implementați mai multe modele pe un singur punct final activat pentru mai multe modele, toate modelele partajează resursele de calcul și containerul de servire a modelului. Conducta de inferență SageMaker poate fi implementată pe un MME, unde unul dintre containerele din conductă poate servi în mod dinamic cererile pe baza modelului specific invocat. Din perspectiva pipelinei, modelele au cerințe identice de preprocesare și se așteaptă la același set de caracteristici, dar sunt antrenate să se alinieze la un anumit comportament. Următoarea diagramă ilustrează un model de referință despre modul în care ar funcționa această conductă integrată.

ml9154-mme

Cu MME, cererea de inferență care provine din aplicația client ar trebui să specifice modelul țintă care trebuie invocat. Primul container din conductă gestionează cererea inițială, efectuează o procesare și apoi trimite răspunsul intermediar ca cerere către cel de-al doilea container din conductă, care găzduiește mai multe modele. Pe baza modelului țintă specificat în cererea de inferență, modelul este invocat pentru a genera o inferență. Inferența generată este trimisă la următorul container din conductă pentru procesare ulterioară. Acest lucru se întâmplă pentru fiecare container ulterior din conductă și, în cele din urmă, SageMaker returnează răspunsul final către aplicația client care apelează.

Mai multe artefacte de model sunt păstrate într-o găleată S3. Când este invocat un anumit model, SageMaker îl încarcă dinamic în containerul care găzduiește punctul final. Dacă modelul este deja încărcat în memoria containerului, invocarea este mai rapidă deoarece SageMaker nu trebuie să descarce modelul de pe Amazon S3. Dacă utilizarea memoriei de instanță este mare și este invocat un nou model și, prin urmare, trebuie încărcat, modelele neutilizate sunt descărcate din memorie. Modelele descărcate rămân totuși în volumul de stocare al instanței și pot fi încărcate ulterior în memoria containerului din nou, fără a fi descărcate din nou din bucket-ul S3.

Unul dintre considerentele cheie în timpul utilizării MME-urilor este înțelegerea comportamentului latenței de invocare a modelului. După cum sa discutat mai devreme, modelele sunt încărcate dinamic în memoria containerului a instanței care găzduiește punctul final atunci când sunt invocate. Prin urmare, invocarea modelului poate dura mai mult atunci când este invocată pentru prima dată. Când modelul este deja în memoria containerului de instanță, invocările ulterioare sunt mai rapide. Dacă utilizarea memoriei unei instanțe este mare și trebuie încărcat un model nou, modelele neutilizate sunt descărcate. Dacă volumul de stocare al instanței este plin, modelele neutilizate sunt șterse din volumul de stocare. SageMaker gestionează pe deplin încărcarea și descărcarea modelelor, fără a fi nevoie să întreprindeți acțiuni specifice. Cu toate acestea, este important să înțelegeți acest comportament, deoarece are implicații asupra latenței de invocare a modelului și, prin urmare, a latenței globale end-to-end.

Opțiuni de găzduire pipeline

SageMaker oferă mai multe tipul instanței opțiuni din care să selectați pentru implementarea modelelor ML și construirea conductelor de inferență, în funcție de cazul dvs. de utilizare, debitul și cerințele de cost. De exemplu, puteți alege instanțe optimizate pentru CPU sau GPU pentru a construi conducte de inferență seriale, pe un singur container sau pe mai multe containere. Cu toate acestea, există uneori cerințe în care se dorește să existe flexibilitate și suport pentru a rula modele pe instanțele bazate pe CPU sau GPU în cadrul aceleiași conducte pentru flexibilitate suplimentară.

Acum puteți utiliza NVIDIA Triton Inference Server pentru a servi modele de inferență pe SageMaker pentru cerințe de calcul eterogene. Verifică Implementați AI rapid și scalabil cu NVIDIA Triton Inference Server în Amazon SageMaker pentru detalii suplimentare.

Concluzie

Pe măsură ce organizațiile descoperă și construiesc noi soluții bazate pe ML, instrumentele necesare pentru orchestrarea acestor conducte ar trebui să fie suficient de flexibile pentru a fi suportate pe baza unui anumit caz de utilizare, simplificând și reducând în același timp cheltuielile operaționale în curs. SageMaker oferă mai multe opțiuni pentru a proiecta și a construi aceste fluxuri de lucru de inferență în serie, în funcție de cerințele dumneavoastră.

Așteptăm cu nerăbdare să aflăm de la dvs. despre ce cazuri de utilizare construiți folosind conducte de inferență în serie. Dacă aveți întrebări sau feedback, vă rugăm să le împărtășiți în comentarii.


Despre autori

Modele de proiectare pentru inferența în serie pe Amazon SageMaker PlatoBlockchain Data Intelligence. Căutare verticală. Ai. Rahul Sharma este arhitect senior de soluții la AWS Data Lab, ajutând clienții AWS să proiecteze și să construiască soluții AI/ML. Înainte de a se alătura AWS, Rahul a petrecut câțiva ani în sectorul finanțelor și asigurărilor, ajutând clienții să construiască platforme de date și analitice.

Modele de proiectare pentru inferența în serie pe Amazon SageMaker PlatoBlockchain Data Intelligence. Căutare verticală. Ai. Anand Prakash este arhitect senior de soluții la AWS Data Lab. Anand se concentrează pe a ajuta clienții să proiecteze și să construiască soluții de AI/ML, analiză de date și baze de date pentru a-și accelera calea către producție.

Modele de proiectare pentru inferența în serie pe Amazon SageMaker PlatoBlockchain Data Intelligence. Căutare verticală. Ai. Dhawal Patel este arhitect principal de învățare automată la AWS. El a lucrat cu organizații, de la întreprinderi mari până la startup-uri mijlocii, pe probleme legate de calculul distribuit și inteligența artificială. El se concentrează pe învățarea profundă, inclusiv pe domeniile NLP și Computer Vision. El îi ajută pe clienți să obțină inferențe de model de înaltă performanță pe SageMaker.

Modele de proiectare pentru inferența în serie pe Amazon SageMaker PlatoBlockchain Data Intelligence. Căutare verticală. Ai. Saurabh Trikande este Senior Product Manager pentru Amazon SageMaker Inference. Este pasionat de lucrul cu clienții și de a face învățarea automată mai accesibilă. În timpul liber, lui Saurabh îi place să facă drumeții, să învețe despre tehnologii inovatoare, să urmărească TechCrunch și să petreacă timpul cu familia sa.

Timestamp-ul:

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