Kuidas Amazon Search M5 säästis LLM-i koolituskuludelt 30%, kasutades AWS Trainium | Amazoni veebiteenused

Kuidas Amazon Search M5 säästis LLM-i koolituskuludelt 30%, kasutades AWS Trainium | Amazoni veebiteenused

Aastakümneid on Amazon olnud masinõppe (ML) pioneer ja uuendus, pakkudes oma klientidele meeldivaid kogemusi. Alates esimestest päevadest on Amazon kasutanud ML-i erinevatel kasutusjuhtudel, nagu raamatusoovitused, otsing ja pettuste tuvastamine. Sarnaselt ülejäänud tööstusharuga on kiirendatud riistvara edusammud võimaldanud Amazoni meeskondadel arendada mudelarhitektuure, kasutades närvivõrke ja sügavat õppimist (DL).

M5 programm Amazon Searchis omab Amazoni avastamisõppe strateegiat ja loob suuremahulisi mudeleid mitmekeelse, mitme lokaalse, mitme üksuse, mitme ülesandega ja mitmeliigilise (nt teksti, pildi ja video) jaoks. M5 programm on teenindanud universaalseid manuseid ja suuremahulisi vundamendimudeleid sadadele ML-i meeskondadele üle Amazon, säilitades samal ajal range kontrolli kulude optimeerimise üle. Selle saavutamiseks hindab M5 meeskond regulaarselt uusi tehnikaid kulude vähendamiseks.

Nagu paljud ML-organisatsioonid, kasutatakse kiirendeid suures osas DL-koolituse ja järelduste kiirendamiseks. Kui AWS tõi turule spetsiaalselt ehitatud kiirendid koos esimese väljalaskega AWS Inferentia 2020. aastal hakkas M5 meeskond kiiresti kasutada neid tootmiskoormuste tõhusamaks juurutamiseks, mis säästab nii kulusid kui vähendab latentsust. Eelmisel aastal käivitas AWS oma AWS Trainium kiirendid, mis optimeerivad jõudlust kulu kohta järgmise põlvkonna DL-mudelite arendamiseks ja ehitamiseks. Selles postituses arutleme, kuidas M5 suutis oma mudelite koolitamise kulusid 30% võrra vähendada, ja jagame mõningaid parimaid praktikaid, mida selle käigus õppisime.

Trainiumi juhtumid

Tänu sihtotstarbeliste kiirendite edusammudele pakub Amazon ka mõjuvaid kiirendeid AWS Inferentia ja Trainiumi kujul. Nagu nende nimed viitavad, on need kiibid optimeeritud nii, et need ületaksid vastavalt järeldamis- ja koolituskoormuse vajadusi. Miljardite parameetriteni ulatuvate vundamendimudelite suuremahuliseks koolituseks Trainium Trn1 ja Trn1n eksemplarid on oma omaduste tõttu ideaalsed valikud. Trn1 eksemplare toidab tipptasemel tehnika NeuronCore-v2ning neil on palju kiirendi arvutamist ja mälu. Trn1n eksemplare saab valida ka suurema võrgu ribalaiuse jaoks (1,600 Gbs), seega sobivad need ideaalselt tulemuslikuks treeninguks, pidades silmas kulude optimeerimist.

Kiirendite kasutamiseks vajate nende toetamiseks tarkvarakihti. Trn ja Inf kiipidega, AWS Neuron SDK avab PyTorch XLA abil Amazoni spetsiaalselt ehitatud kiirendid. PyTorch XLA teisendab PyTorchi innuka režiimi laisa režiimi graafikupõhiseks teostuseks. Seejärel kasutatakse neid graafikuid ja koostatakse need koos kiirendiga kasutamiseks. PyTorch Neuron (osa Neuron SDK-st) võimaldab PyTorchi kasutajatel treenida oma mudeleid mõne koodirea abil Trainium NeuronCoresil.

Mudel ja töökoormus

M5 meeskond koolitab ja juurutab alusmudeleid ja universaalseid esindusi, et aidata erinevatel meeskondadel üle Amazoni rõõmu tunda. Amazon.com klientidele. Üks selline mudel on tekstikodeerija mudel, millele järgneb mitmekihiline perceptron (MLP), millel on selgesõnalised või kaudsed funktsioonide interaktsioonid, mille määrab närvivõrgu arhitektuur sadade miljonite treenitavate parameetritega. Seda mudelit on õpetatud kasutama miljardeid žetoone ja seda kasutatakse miljonite manustuste loomiseks võrguühenduseta partii järeldamisseades. Need manused on sisendid klientidele suunatud 1. astme Amazoni teenusesse.

Kasutatakse tootmistorustiku infrastruktuuri AWS partii koos õiglase jagamise järjekorrastrateegiad, kasutades mudelitreeningu arvutamiseks EFA-toega mitme sõlmega trn1.32xlarge klastrit. Funktsionaalselt teostab tootmiskonveier mudeli järkjärgulist koolitust, koolitatud mudeli hindamist ja võrguühenduseta partii järeldusi koolitatud mudeli kohta, kasutades PyTorchi aluseks oleva DL-i teegina.

Eesmärgid

Meie klientide rõõmustamine on peamine põhimõte. Arvestades torujuhtme kliendile suunatud olemust, on ülioluline, et kõik teenusetaseme lepingud (SLA-d) täidetakse ilma taandarengeta. Tuvastasime kaks kriitilist aktsepteerimiskriteeriumit, et kohandada meie olemasolevat GPU tootmisprotsessi ja viia see üle Trainiumile:

  • Mudeli kvaliteet – Meie mudelite kvaliteet mõjutab otseselt kliendikogemust. Nõuame, et GPU ja Trainiumi mudeli kvaliteedi erinevus oleks väiksem kui 0.1%.
  • Treeningu läbilaskevõime – Koolitame oma mudeleid perioodiliselt välja, et pakkuda klientidele värskeimat kogemust. Nõuame, et meie tootmise SLA-de täitmiseks tuleb mudeli ühtlustamine saavutada etteantud aja jooksul (nt 1 nädal).

Järgmistes jaotistes jagame oma teekonda sellest kriteeriumist tagasi töötamisel ja oma teadmisi Amazoni mastaabis tootmiskoormuse toetamiseks.

Treeningu skript

Enne mudelikoolitusega alustamist peame tegema koolitusskriptis muudatusi, et see oleks XLA-ga ühilduv. Arvestades mudeli suurust, kasutame mudeli treenimiseks hajutatud paralleelandmeid (DDP). DDP võimaldab meil suurendada mudelitreeningu läbilaskevõimet, suurendades mudelitreeningu läbiviimiseks kasutatavate masinate arvu ilma koodi muutmata. Järgisime dokumendis toodud juhiseid Neuron PyTorchi MLP koolituse õpetus et lisada meie koolitusskriptidesse XLA-spetsiifilisi konstruktsioone. Neid koodimuudatusi on lihtne rakendada. Järgmised on mõned olulised harjutuse käigus saadud tehnilised teadmised, mis meie mudeli läbilaskevõimet oluliselt parandasid.

  • Xm.mark_step() paigutus - xm.mark_step() koostab ja käivitab laisalt kogutud arvutusgraafikud. Kutsumine mark_step liiga palju kordi toob kaasa suurema arvu väikseid graafikuid, samas kui liiga vähe kordi käivitamine toob kaasa vähesed, kuid suured graafikud. Sõltuvalt teie rakendusest varieerub teie mudelikoolituse läbilaskevõime ja rakendamine olenevalt teie paigutusest xm.mark_step(). Meie rakendamine asetab ühe xm.mark_step() pärast edasi- ja tagasisõitu ning üks pärast optimeerija sammu.
  • Andmelaaduri mähkimine XLA multiprotsessorseadme laadijaga – See on kriitiline samm, millest võib kergesti mööda minna. Mitmetöötlusseadme laadija torch_xla.distributed.parallel_loader.MpDeviceLoader laadib treeningandmed igasse XLA-seadmesse koos valikutega eellaadimiseks ja andmete laadimise kattumiseks seadme töödega, et parandada läbilaskevõimet. Samuti kutsub välja seadme laadija xm.mark_step() ja on seetõttu võimeline koostama graafikuid andmete laadimiseks hostist seadmesse.

Trainiumi kogumik

Traditsiooniliselt hõlmab GPU-dega mudeliarendustsükkel mudelis või koolitusskriptis muudatuste tegemist ja selle otse GPU-seadmes käitamist. Kiirendid, nagu Trainium, mis kasutavad XLA-d, nõuavad täiendavat sammu, enne kui mudelitreeningut saab gaasipedaalil joosta. XLA arvutusgraafikuid saab käivitada alles pärast nende koostamist. Üldiselt on selle kompileerimise tegemiseks kaks võimalust: enne aega (AOT), kus kõigepealt jälgite ja kompileerite kõik graafikud ning seejärel käivitate need, või Just In Time (JIT), kus graafikuid jälgitakse, kompileeritakse ja käitatakse nii nagu need on. kokku puututakse. Neuron SDK pakub neid mõlemaid karbist välja. Tavaliselt tehakse esmalt AOT kompileerimine. Pärast seda koostamist käivitatakse graafikud. Kui avastatakse uusi graafikuid, kutsub Neuroni käitusaeg enne nende käivitamist JIT-i kompilatsiooni. AOT-kompileerimise teostamiseks pakub Neuron SDK neuron_parallel_comile, kompileerimisutiliit, mis eraldab graafikud treeningskripti proovikäitusest ja teostab paralleelset AOT-kompileerimist.

AOT-i koostamise oluline aspekt on tagada, et koolituse käigus ei tekiks uusi arvutusgraafikuid. Uute arvutusgraafikute (ja seega ka ümberkompilatsioonide) üheks allikaks on treeningpartiide dünaamilised kujundid mudelkoolituse ajal. Leidsime, et staatiliste kujundite ja fikseeritud suurusega partiide kasutamine välistab treeningaja kompileerimise ja parandab oluliselt treeningu läbilaskevõimet, ilma et see mõjutaks mudeli täpsust. Treeningule selliseid piiranguid kehtestades täheldasime, et kõigi graafikute jälgimiseks AOT kompileerimise ajal on vaja ainult 4–5 mudelitreeningu sammu, mudeli valideerimise ühte etappi ja mudeli ühekordset kontrollpunkti. Oluline on märkida, et Neuron SDK areneb pidevalt ja toetab tulevikus ka dünaamilisi kujundeid.

Lisaks salvestatakse koostatud graafikud kausta Neuronide püsiv vahemälu kettale või an Amazoni lihtne salvestusteenus (Amazon S3) kopp. See on eriti kasulik tootmiskoormuse puhul, kus mudeli arhitektuur ja koolituse konfiguratsioon ei muutu. Seetõttu tekivad koostamise üldkulud vaid ühe korra. Vahemälu kasutamine on sama lihtne kui keskkonna lipu määramine:

export NEURON_COMPILE_CACHE_URL="s3://BUCKET/KEY"

Neuroni kompilaator pakub ka kolme kompilaatori tasemel optimeerimise valikud (O1, O2, O3), et tasakaalustada kompileerimisaega ja mudeli läbilaskevõimet. O1 võimaldab arvutusgraafikul põhilisi optimeerimisi ja minimeerib kompileerimisaega, O3 pakub parema mudeli töövõimet pikema kompileerimisaja hinnaga ja O2 (vaikevalik) on nende kahe vaheline tasakaal. Oma kasutusjuhtumi puhul kasutasime O1 optimeerimist ja täheldasime kompileerimisaja lühenemist 86% võrra, ilma et mudeli täpsusmõõdikud muutusid, samas jälgisime läbilaskevõime vähenemist ligikaudu 5–7% võrreldes vaikeoptimeerimisega (O2). Olenevalt kasutusjuhtumist saate valida erinevaid optimeerimise tasemeid.

Kokkuvõtteks kasutasime koostamiseks järgmisi lippe:

NEURON_CC_FLAGS="--target trn1 --auto-cast all --auto-cast-type bf16 --model-type transformer --optlevel O1"

Kontrollpunktide ühilduvus

Kui kompileerimine on edukalt lõpule viidud, saame jätkata oma modellide koolitamist Trainiumil. Nagu varem mainitud, koolitame oma mudeleid järk-järgult, mis tähendab, et laadime eelnevalt koolitatud mudeli kontrollpunkti ja jätkame treenimist uute andmetega. PyTorch ja PyTorch XLA võimaldavad kontrollpunktide koostalitlusvõime kaudu sujuvat üleminekut kiirendite vahel. GPU ja Trainiumi vahel liikumise paindlikkus võimaldas meil eelmist GPU mudelit sujuvalt laadida ja Trainiumi masinatel treenida. See oli ülioluline tagamaks, et saame oma mudeli lähtestada parima varem koolitatud mudeliga ilma tootmisseisakute või mudeli täpsuse vähenemiseta.

Kuna GPU mudel salvestati standardsete PyTorchi mudeli salvestamise utiliitide abil, saime kasutada PyTorchi kontrollpunkti laadimisutiliiti, et laadida GPU mudel Trainiumi seadmetesse.

Näiteks GPU/CPU puhul saate mudeli salvestada järgmise koodiga:

torch.save(model.state_dict(), PATH)

Seejärel laadite mudeli Trainiumi tagasi:

import torch_xla.core.xla_model as xm
xla_device = xm.xla_device()
model = MyModel(*args, **kwargs)
model.load_state_dict(torch.load(PATH))
model.to(xla_device)

Samamoodi saate mudeli Trainiumi salvestada järgmise koodiga:

import torch_xla.core.xla_model as xm
# automatically moves the data to CPU for the master device
xm.save(model.state_dict(), PATH) 

Ja laadige mudel uuesti GPU-le/CPU-le:

model = MyModel(*args, **kwargs)
model.load_state_dict(torch.load(PATH))
model.to(device) # can be any device

Tegelikult, kuna me kasutame mudelitreeninguks DDP-d, on mudeli laadimine agnostiline eelmise kontrollpunkti treenimiseks kasutatud masinate arvu suhtes. See võimaldab meil Trn1 lennukiparki horisontaalselt skaleerida, ilma koodimuutusteta ega mudelikoolitusele kahjulikke mõjusid. Neid PyTorchil põhinevaid kontrollpunkte saab AWS Inferentia2 või muude kiirendite järelduste tegemiseks otse kasutada või isegi taskulambiga skriptida.

Töö stabiilsus

Ei saa piisavalt rõhutada, et töökoormuste käitamine tootmises nõuab mitme SLA täitmist. Meie kasutusjuhtumi puhul on peale mudeli kvaliteedi ja koolituse läbilaskevõime SLA-de hädavajalik, et tootmiskonveier oleks stabiilne, mis tähendab minimaalset seisakut ja häireid mudeli väljaõppe, hindamise ja järelduste tegemisel.

Nagu olemasoleva GPU-põhise konveieri puhul, lisasime ka arvukalt mehhanisme, et muuta konveier stabiilseks. Enne mudelitreeningu alustamist teeme masinate tervise hindamiseks mitu terve mõistuse testi. Need testid hõlmavad tavaliselt lihtsaid tensoroperatsioone, et kontrollida kiirendi seadmete töövõimet. Oleme täheldanud, et hajutatud koolituse puhul on oluline läbi viia teste, et kontrollida ka kollektiivset suhtlust eksemplaride vahel. Me kasutasime NCCOM testikomplekt Neuron SDK-st, et seda saavutada, käivitades mitmesuguseid toiminguid, nagu kogu kogumine, kogu vähendamine ja hajutamise vähendamine.

Isegi pärast meie mainitud soovituste järgimist oleme täheldanud, et mööduvad probleemid on vältimatud igas torujuhtmes, olenemata nende aluseks olevast kiirendist. Mis tahes koolitustorustiku vastupidavuse suurendamiseks soovitame nende võimalike probleemide lahendamiseks luua korduskatsemehhanismid. Me kasutame AWS Batch automatiseeritud korduskatsed et proovida uuesti töid, mille puhul ilmneb mudelikoolituse ajal mööduv rike. Need taaskäivitused võivad olla kulukad, kui treeningu lõpus ilmneb rike. Selle probleemi lahendamiseks oleme kohandanud oma koolitusskripte, et laadida varem koolitatud mudeli kontrollpunkt ja jätkata koolitust sellest punktist. Selle funktsiooni abil suudame ebaõnnestunud koolitustööd agressiivselt taaskäivitada minimaalse üldkuluga.

Kui need vastupidavusmehhanismid olid paigas, suutsime saavutada Trn98.5 töökoormuse osas 1% edukuse, mis on võrreldav meie olemasoleva GPU-konveieri edukuse määraga.

Tulemused

Mudelite täpsuse kinnitamiseks lähtestasime kaks mudelit samast GPU kontrollpunktist ja koolitasime ühte Trainiumi ja teist võrreldaval GPU-l. Mõlemat mudelit treeniti samade treeninguhüperparameetritega. Mõõdikute arvutamiseks kasutatav andmestik on hoidmisandmekogum ja me hindame mudeli täpsust selles andmekogumis iga N globaalse sammu järel. X-telg on globaalne samm ja Y-telg on mudeli täpsus. Me täheldasime järgmise graafiku igas punktis mudeli täpsuse erinevust alla 0.1, XNUMX%.

Kuidas Amazon Search M5 säästis LLM-i koolituskuludelt 30%, kasutades AWS Trainium | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.

Lisaks eelistame mudelikoolituse kulutõhususe hindamiseks võrrelda mudeli konvergentsi saavutamiseks kuluvat seinakella aega. Usume, et see annab praktilisema ülevaate kulude kokkuhoiust võrreldes selliste meetmetega nagu hind märgi kohta, saavutatud FLOPS/dollar ja muud tegurid. Arvestades treeninguaega trn1.32xl ja võrreldav Amazon Elastic Compute Cloud (Amazon EC2) juhtumite puhul oleme täheldanud, et Trainium pakub kuni 30% odavamaid kulusid mudeli lähenemiseks.

Järeldus

DL-i töökoormuse erinevate kiirendite hindamisel tuleb arvestada paljude teguritega. Mõned kõige olulisemad on mudeli kvaliteet, läbilaskevõime, maksumus ja saadavus. On ülimalt oluline tagada, et teie mudeli kvaliteeti ja läbilaskevõimet ei ohverdataks valitud kiirendi tõttu.

Tänu meie partnerlusele ja koostööle Annapurna Neuroni meeskonnaga on Amazon Search M5 meeskond suutnud Trainiumi kolides kulusid säästa kuni 30%. Meeskond on võimeline kasutama Trainiumit ja saavutama mudeli kvaliteedi ja läbilaskevõime pariteedi turul olevate võrreldavate kiirenditega. Kontrollpunkti koostalitlusvõime ja minimaalsed koodimuudatused koos XLA toega on võimaldanud M5-l valida oma töökoormuse jaoks mitme kiirendi vahel. See on võimaldanud M5 meeskonnal ära kasutada Trainiumi suurt arvutusvõimsust ja luua Amazon.com-i klientide rõõmustamiseks kiirendi agnostilisi lahendusi. Toimimise seisukohast on Trainium suuteline toetama Amazoni mastaabis esimese astme teenuseid. M1 meeskond jätkab suurema töökoormuse üleviimist Trainiumile, et pakkuda Amazonile parimaid mudeleid madalaimate kuludega.

Kokkuvõttes on M5 meeskond suutnud läbi viia kuluefektiivseid tootmistasemel ML koolitusi, lisades kiirendite autoparki Trainium. Soovitame teil heita pilk Trainiumile ja teistele Neuroni seadmetele, nagu AWS Inferentia, et saada kasu ML-töökoormuste jaoks spetsiaalselt loodud Amazoni ränist. Alustage hõlpsalt ühe paljudest juhenditest, mis hõlmavad erinevaid mudeleid, nt Llama 2, saadaval Trainiumis.


Autoritest

Kuidas Amazon Search M5 säästis LLM-i koolituskuludelt 30%, kasutades AWS Trainium | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.Abhinandan Patni on Amazon Searchi vanemtarkvarainsener. Ta keskendub süsteemide ja tööriistade loomisele skaleeritava hajutatud süvaõppe koolituse ja reaalajas järelduste tegemiseks.

Kuidas Amazon Search M5 säästis LLM-i koolituskuludelt 30%, kasutades AWS Trainium | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.Jamesi park on Amazon Web Servicesi lahenduste arhitekt. Ta teeb koostööd Amazon.com-iga, et kavandada, ehitada ja juurutada AWS-is tehnoloogilised lahendused ning ta on eriti huvitatud AI-st ja masinõppest. Vabal ajal meeldib talle otsida uusi kultuure, uusi kogemusi ja olla kursis uusimate tehnoloogiatrendidega. Leiad ta siit LinkedIn.

Kuidas Amazon Search M5 säästis LLM-i koolituskuludelt 30%, kasutades AWS Trainium | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.Jerry Mannil on Amazon Searchi tarkvarainsener. Ta töötab hajutatud koolitusinfrastruktuuri tõhususe, vastupidavuse ja skaleeritavuse parandamise nimel.

Kuidas Amazon Search M5 säästis LLM-i koolituskuludelt 30%, kasutades AWS Trainium | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.Ken Su on Amazon Searchi tarkvarainsener. Ta tegeleb treeningute tõhususe ja skaleeritava hajutatud treeningu töövoo parandamisega. Väljaspool tööd meeldivad talle matkamine ja tennis.

Kuidas Amazon Search M5 säästis LLM-i koolituskuludelt 30%, kasutades AWS Trainium | Amazon Web Services PlatoBlockchain Data Intelligence. Vertikaalne otsing. Ai.RJ on Amazoni insener. Ta loob ja optimeerib süsteeme koolituse jaoks mõeldud hajutatud süsteemide jaoks ning tegeleb süsteemide optimeerimisega, et vähendada ML-i järelduse latentsust. Töövälisel ajal uurib ta Generative AI kasutamist toiduretseptide koostamiseks.

Ajatempel:

Veel alates AWS-i masinõpe