Cum Amazon Search a redus costurile inferenței ML cu 85% cu AWS Inferentia

Motorul de căutare a produselor Amazon indexează miliarde de produse, deservește sute de milioane de clienți din întreaga lume și este unul dintre cele mai utilizate servicii din lume. Echipa Amazon Search dezvoltă tehnologia de învățare automată (ML) care alimentează Amazon.com motor de căutare și îi ajută pe clienți să caute fără efort. Pentru a oferi o experiență excelentă pentru clienți și pentru a opera la scara masivă cerută de Amazon.com motor de căutare, această echipă caută mereu modalități de a construi sisteme mai rentabile, cu cerințe de latență și debit în timp real. Echipa explorează în mod constant hardware și compilatoare optimizate pentru învățarea profundă pentru a accelera instruirea și inferența modelului, reducând în același timp costurile operaționale la nivel general.

În această postare, descriem cum folosește Amazon Search Inferentia AWS, un accelerator de înaltă performanță creat de AWS pentru a accelera încărcăturile de lucru pentru deducerea învățării profunde. Echipa rulează inferențe ML cu latență scăzută cu modele NLP bazate pe Transformer pe baza AWS Inferentia Cloud Elastic de calcul Amazon (Amazon EC2) Instanțe Inf1 și economisește până la 85% din costurile de infrastructură, menținând în același timp o performanță puternică de debit și latență.

Învățare profundă pentru dublarea și predicția intenției de interogare

Căutarea în Amazon Marketplace este o problemă multi-sarcină, multimodală, care se ocupă de mai multe intrări, cum ar fi ASIN-urile (Numărul de identificare standard Amazon, un număr alfanumeric de 10 cifre care identifică în mod unic produsele), imaginile produselor, descrierile textuale și interogările. Pentru a crea o experiență de utilizator personalizată, predicțiile din multe modele sunt utilizate pentru diferite aspecte ale căutării. Aceasta este o provocare deoarece sistemul de căutare are mii de modele cu zeci de mii de tranzacții pe secundă (TPS) la sarcină de vârf. Ne concentrăm pe două componente ale acelei experiențe:

  • Previziuni duplicat percepute de client – Pentru a afișa cea mai relevantă listă de produse care se potrivesc cu interogarea unui utilizator, este important să identificați produsele pe care clienții le diferențiază cu greu
  • Predicția intenției de interogare – Pentru a adapta pagina de căutare și aspectul produsului pentru a se potrivi mai bine cu ceea ce caută clientul, este important să preziceți intenția și tipul interogării utilizatorului (de exemplu, o interogare legată de media, o interogare de ajutor și alte tipuri de interogare)

Ambele predicții sunt făcute folosind arhitecturi de modele Transformer, și anume modele bazate pe BERT. De fapt, ambele împărtășesc același model bazat pe BERT ca bază, și fiecare stivuiește un cap de clasificare/regresie deasupra acestei coloane vertebrale.

Predicția duplicat include diferite caracteristici textuale pentru o pereche de produse evaluate ca intrări (cum ar fi tipul produsului, titlul, descrierea și așa mai departe) și este calculată periodic pentru seturi de date mari. Acest model este antrenat cap la cap într-un mod multi-task. Amazon SageMaker Procesare locuri de muncă sunt utilizate pentru a rula aceste încărcături de lucru în loturi periodic pentru a automatiza lansarea lor și pentru a plăti doar pentru timpul de procesare utilizat. Pentru acest caz de utilizare a sarcinii de lucru în lot, cerința pentru debitul de inferență a fost de 8,800 TPS total.

Predicția intenției ia interogarea textuală a utilizatorului ca intrare și este necesară în timp real pentru a servi dinamic traficul de zi cu zi și pentru a îmbunătăți experiența utilizatorului pe Amazon Marketplace. Modelul este antrenat pe un obiectiv de clasificare cu mai multe clase. Acest model este apoi implementat Serviciul Amazon de containere elastice (Amazon ECS), care permite scalarea automată rapidă și definirea și gestionarea simplă a implementării. Deoarece acesta este un caz de utilizare în timp real, a necesitat ca latența P99 să fie sub 10 milisecunde pentru a asigura o experiență de utilizator încântătoare.

AWS Inferentia și AWS Neuron SDK

Instanțele EC2 Inf1 sunt alimentate de AWS Inferentia, primul accelerator ML creat de AWS pentru a accelera încărcăturile de lucru de inferență de învățare profundă. Instanțele Inf1 oferă un randament de până la 2.3 ori mai mare și un cost pe inferență cu până la 70% mai mic decât instanțe EC2 comparabile bazate pe GPU. Puteți continua să vă antrenați modelele folosind cadrul pe care îl alegeți (PyTorch, TensorFlow, MXNet) și apoi să le implementați cu ușurință pe AWS Inferentia pentru a beneficia de optimizările de performanță încorporate. Puteți implementa o gamă largă de tipuri de model folosind instanțe Inf1, de la recunoașterea imaginilor, detectarea obiectelor, procesarea limbajului natural (NLP) și modele moderne de recomandare.

AWS Neuron este un kit de dezvoltare software (SDK) format dintr-un compilator, runtime și instrumente de profilare care optimizează performanța inferenței ML a instanțelor EC2 Inf1. Neuron este integrat nativ cu cadre ML populare, cum ar fi TensorFlow și PyTorch. Prin urmare, puteți implementa modele de învățare profundă pe AWS Inferentia cu aceleași API-uri familiare furnizate de cadrul ales de dvs. și puteți beneficia de creșterea performanței și de cel mai mic cost-pe-inferență din cloud.

De la lansare, Neuron SDK a continuat să mărească gama de modele pe care le acceptă, continuând să îmbunătățească performanța și să reducă costurile de inferență. Acestea includ modele NLP (BERTs), modele de clasificare a imaginilor (ResNet, VGG) și modele de detectare a obiectelor (OpenPose și SSD).

Implementați pe instanțe Inf1 pentru o latență scăzută, un randament ridicat și economii de costuri

Echipa de căutare Amazon a dorit să economisească costurile, îndeplinind în același timp cerința de debit mare privind predicția de duplicare și cerința de latență scăzută pentru predicția intenției de interogare. Au ales să implementeze pe instanțe Inf1 bazate pe AWS Inferentia și nu numai că au îndeplinit cerințele de înaltă performanță, dar au și economisit până la 85% din costurile de inferență.

Previziuni duplicat percepute de client

Înainte de a utiliza Inf1, un program dedicat Amazon EMR clusterul rula folosind instanțe bazate pe CPU. Fără a ne baza pe accelerarea hardware, a fost necesar un număr mare de instanțe pentru a îndeplini cerința de debit mare de 8,800 de tranzacții totale pe secundă. Echipa a trecut la instanțe inf1.6xlarge, fiecare cu 4 acceleratoare AWS Inferentia și 16 NeuronCores (4 nuclee per cip AWS Inferentia). Ei au urmărit modelul bazat pe transformator pentru un singur NeuronCore și au încărcat un mod per NeuronCore pentru a maximiza debitul. Profitând de cele 16 NeuronCores disponibile, au scăzut costurile de inferență cu 85% (pe baza prețului public la cerere Amazon EC2 actual).

Predicția intenției de interogare

Având în vedere cerința de latență P99 de 10 milisecunde sau mai puțin, echipa a încărcat modelul în fiecare NeuronCore disponibil pe instanțe inf1.6xlarge. Puteți face acest lucru cu ușurință cu PyTorch Neuron folosind torță.neuron.DataParallel API. Odată cu implementarea Inf1, latența modelului a fost de 3 milisecunde, latența de la capăt la capăt a fost de aproximativ 10 milisecunde, iar debitul maxim la sarcina de vârf a ajuns la 16,000 TPS.

Începeți cu exemplu de compilare și cod de implementare

Mai jos este un exemplu de cod pentru a vă ajuta să începeți cu instanțele Inf1 și să realizați beneficiile de performanță și costuri precum echipa Amazon Search. Arătăm cum să compilați și să efectuați inferențe cu un model PyTorch, folosind Neuronul PyTorch.

În primul rând, modelul este compilat cu torch.neuron.trace():

m = torch.jit.load(f="./cpu_model.pt", map_location=torch.device('cpu'))
m.eval()
model_neuron = torch.neuron.trace(
    m,
    inputs,
    compiler_workdir="work_" + str(cores) + "_" + str(batch_size),
    compiler_args=[
        '--fp32-cast=all', '--neuroncore-pipeline-cores=' + str(cores)
    ])
model_neuron.save("m5_batch" + str(batch_size) + "_cores" + str(cores) +
                  "_with_extra_op_and_fp32cast.pt")

Pentru lista completă a posibilelor argumente la trace metoda, consultați PyTorch-Neuron trace Python API. După cum puteți vedea, argumentele compilatorului poate fi transmis la torch.neuron API direct. Toți operatorii FP32 sunt turnați către BF16 with --fp32-cast=all, oferind cea mai înaltă performanță, păstrând în același timp intervalul dinamic. Sunt disponibile mai multe opțiuni de turnare pentru a vă permite să controlați performanța pentru a modela un compromis de precizie. Modelele utilizate pentru ambele cazuri de utilizare au fost compilate pentru un singur NeuronCore (nr conducte).

Apoi încărcăm modelul pe Inferentia cu torch.jit.loadși folosiți-l pentru predicție. The Timpul de rulare al neuronului încarcă automat modelul în NeuronCores.

cm_cpd_preprocessing_jit = torch.jit.load(f=CM_CPD_PROC,
                                          map_location=torch.device('cpu'))
cm_cpd_preprocessing_jit.eval()
m5_model = torch.jit.load(f=CM_CPD_M5)
m5_model.eval()

input = get_input()
with torch.no_grad():
    batch_cm_cpd = cm_cpd_preprocessing_jit(input)
    input_ids, attention_mask, position_ids, valid_length, token_type_ids = (
        batch_cm_cpd['input_ids'].type(torch.IntTensor),
        batch_cm_cpd['attention_mask'].type(torch.HalfTensor),
        batch_cm_cpd['position_ids'].type(torch.IntTensor),
        batch_cm_cpd['valid_length'].type(torch.IntTensor),
        batch_cm_cpd['token_type_ids'].type(torch.IntTensor))
    model_res = m5_model(input_ids, attention_mask, position_ids, valid_length,
                         token_type_ids)

Concluzie

Echipa Amazon Search a reușit să-și reducă costurile de inferență cu 85% folosind instanțe Inf1 bazate pe AWS Inferentia, în condiții de trafic intens și cerințe de performanță exigente. AWS Inferentia și Neuron SDK au oferit echipei flexibilitatea de a optimiza procesul de implementare separat de instruire și au creat o curbă de învățare superficială prin instrumente bine rotunjite și API-uri cadru familiare.

Puteți debloca beneficii de performanță și costuri pornind de la exemplul de cod furnizat în această postare. De asemenea, verificați de la capăt la capăt tutoriale pentru a rula modele ML pe Inferentia cu PyTorch și TensorFlow.


Despre autori

How Amazon Search reduced ML inference costs by 85% with AWS Inferentia PlatoBlockchain Data Intelligence. Vertical Search. Ai.João Moura este arhitect specializat în soluții AI/ML la Amazon Web Services. El se concentrează în principal pe cazuri de utilizare a NLP și ajută clienții să optimizeze instruirea și implementarea modelului de deep learning. El este, de asemenea, un susținător activ al hardware-ului specializat în ML și al soluțiilor ML low-code.

How Amazon Search reduced ML inference costs by 85% with AWS Inferentia PlatoBlockchain Data Intelligence. Vertical Search. Ai.Weiqi Zhang este manager de inginerie software la Search M5, unde lucrează la producerea de modele la scară mare pentru aplicațiile de învățare automată Amazon. Interesele sale includ regăsirea informațiilor și infrastructura de învățare automată.

How Amazon Search reduced ML inference costs by 85% with AWS Inferentia PlatoBlockchain Data Intelligence. Vertical Search. Ai.Jason Carlson este inginer software pentru dezvoltarea conductelor de învățare automată pentru a ajuta la reducerea numărului de afișări de căutare furate din cauza duplicaturilor percepute de clienți. El lucrează în principal cu Apache Spark, AWS și PyTorch pentru a ajuta la implementarea și alimentarea/procesarea datelor pentru modelele ML. În timpul liber, îi place să citească și să alerge.

How Amazon Search reduced ML inference costs by 85% with AWS Inferentia PlatoBlockchain Data Intelligence. Vertical Search. Ai.Shaohui Xi este un SDE la echipa Search Query Understanding Infra. El conduce efortul de construire a serviciilor de inferență online de deep learning la scară largă, cu latență scăzută și disponibilitate ridicată. În afara serviciului, îi place să schieze și să exploreze mâncăruri bune.

How Amazon Search reduced ML inference costs by 85% with AWS Inferentia PlatoBlockchain Data Intelligence. Vertical Search. Ai.Zhuoqi Zhang este inginer de dezvoltare software la echipa Search Query Understanding Infra. El lucrează la construirea de cadre de servire a modelelor pentru a îmbunătăți latența și debitul pentru serviciile de inferență online de deep learning. În afara serviciului, îi place să joace baschet, să facă snowboard și să conducă.

How Amazon Search reduced ML inference costs by 85% with AWS Inferentia PlatoBlockchain Data Intelligence. Vertical Search. Ai.Haowei Sun este un inginer software în echipa de căutare a interogărilor de înțelegere a infrastructurii. Lucrează la proiectarea API-urilor și a infrastructurii care sprijină serviciile de inferență online de deep learning. Interesele ei includ proiectarea API de servicii, configurarea infrastructurii și întreținerea. În afara serviciului, îi place să alerge, să facă drumeții și să călătorească.

How Amazon Search reduced ML inference costs by 85% with AWS Inferentia PlatoBlockchain Data Intelligence. Vertical Search. Ai.Jaspreet Singh este un om de știință aplicat în echipa M5, unde lucrează la modele de fundație la scară largă pentru a îmbunătăți experiența de cumpărare a clienților. Interesele sale de cercetare includ învățarea multi-task, regăsirea informațiilor și învățarea reprezentării.

How Amazon Search reduced ML inference costs by 85% with AWS Inferentia PlatoBlockchain Data Intelligence. Vertical Search. Ai.Shruti Koparkar este Senior Product Marketing Manager la AWS. Ea îi ajută pe clienți să exploreze, să evalueze și să adopte infrastructura de calcul accelerată EC2 pentru nevoile lor de învățare automată.

Timestamp-ul:

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