Suurte närvivõrkude PlatoBlockchaini andmeintellekti treenimise tehnikad. Vertikaalne otsing. Ai.

Suurte närvivõrkude treenimise tehnikad

Suurte närvivõrkude treenimise tehnikad

Suured närvivõrgud on paljude hiljutiste tehisintellekti edusammude keskmes, kuid nende koolitamine on keeruline inseneri- ja uurimistöö, mis nõuab ühe sünkroonitud arvutuse tegemiseks GPU-de klastri korraldamist. Klastrite ja mudelite suuruse kasvades on masinõppe praktikud välja töötanud üha rohkem erinevaid tehnikaid, millega paralleelstada mudelitreening paljudes GPU-des. Esmapilgul võib nende paralleelsustehnikate mõistmine tunduda hirmutav, kuid kui arvutamise struktuuri kohta tehakse vaid mõned eeldused, muutuvad need tehnikad palju selgemaks – sel hetkel liigute lihtsalt läbipaistmatute bittide vahel punktist A punkti B nagu võrk. vahetada süstikud ümber pakettide.

Andmete paralleelsus

Suurte närvivõrkude treenimise tehnikad

Torujuhtme paralleelsus

Suurte närvivõrkude treenimise tehnikad

Tensori paralleelsus

Suurte närvivõrkude treenimise tehnikad

Ekspertide paralleelsus

Suurte närvivõrkude treenimise tehnikad

Andmete paralleelsus

Suurte närvivõrkude treenimise tehnikad

Torujuhtme paralleelsus

Suurte närvivõrkude treenimise tehnikad

Tensori paralleelsus

Suurte närvivõrkude treenimise tehnikad

Ekspertide paralleelsus

Suurte närvivõrkude treenimise tehnikad

Erinevate paralleelsusstrateegiate illustratsioon kolmekihilisel mudelil. Iga värv viitab ühele kihile ja katkendjooned eraldavad erinevaid GPU-sid.

Paralleelsust pole

Närvivõrgu treenimine on iteratiivne protsess. Igas iteratsioonis liigume edasi läbi mudeli kihid väljundi arvutamiseks andmekogus iga treeningnäite jaoks. Siis läheb veel üks pass tagasi läbi kihtide, levitades, kui palju iga parameeter mõjutab lõppväljundit, arvutades a gradient iga parameetri suhtes. Partii, parameetrite ja mõne parameetripõhise optimeerimisoleku keskmine gradient edastatakse optimeerimisalgoritmile, näiteks Adam, mis arvutab järgmise iteratsiooni parameetrid (millel peaks teie andmetel veidi parem jõudlus olema) ja uue parameetripõhise optimeerimise oleku. Kuna koolitus kordub andmepartiide kaupa, areneb mudel üha täpsemate väljunditeks.

Erinevad paralleelsustehnikad viilutavad seda koolitusprotsessi erinevates mõõtmetes, sealhulgas:

  • Andmete paralleelsus – partii erinevate alamhulkade käitamine erinevatel GPU-del;
  • Toruliini paralleelsus – mudeli erinevate kihtide käitamine erinevatel GPU-del;
  • Tensori paralleelsus – jagage matemaatika üheks toiminguks, näiteks maatrikskorrutamiseks, et jagada GPU-de vahel;
  • Ekspertide segu – töötlege iga näidet vaid murdosa igast kihist.

(Selles postituses eeldame, et kasutate oma närvivõrkude treenimiseks GPU-sid, kuid samad ideed kehtivad ka neile, kes kasutavad mõnda muud närvivõrgu kiirendi.)

Andmete paralleelsus

Andmed paralleelselt koolitus tähendab samade parameetrite kopeerimist mitmele GPU-le (mida sageli nimetatakse "töötajateks") ja igaühele erinevate näidete määramist samaaegseks töötlemiseks. Ainuüksi andmete paralleelsus eeldab siiski, et teie mudel mahub ühe GPU mällu, kuid võimaldab teil kasutada paljude GPU-de arvutusi parameetrite paljude dubleerivate koopiate salvestamise hinnaga. Sellegipoolest on strateegiaid, mis suurendavad teie GPU-le saadaolevat tõhusat RAM-i, näiteks parameetrite ajutine laadimine protsessori mällu kasutuskordade vahel.

Kuna iga andmetega paralleelne töötaja värskendab oma parameetrite koopiat, peavad nad kooskõlastama, et igal töötajal oleks jätkuvalt sarnased parameetrid. Lihtsaim lähenemine on kehtestada töötajatevahelise suhtluse blokeerimine: (1) arvutada iseseisvalt iga töötaja gradient; (2) töötajate gradientide keskmine; ja (3) arvutama sõltumatult iga töötaja kohta samad uued parameetrid. Etapp (2) on blokeeriv keskmine, mis nõuab üsna suure hulga andmete edastamist (proportsionaalselt teie parameetrite suuruse töötajate arvuga), mis võib teie koolituse läbilaskvust kahjustada. Neid on erinevaid asünkroonsed sünkroniseerimisskeemid selle üldkulude eemaldamiseks, kuid need kahjustavad õppimise tõhusust; praktikas jäävad inimesed üldiselt sünkroonse lähenemise juurde.

Torujuhtme paralleelsus

koos Torujuhe paralleelne koolitusel jagame mudeli järjestikused tükid GPU-de vahel. Iga GPU mahutab vaid murdosa parameetritest ja seega tarbib sama mudel proportsionaalselt vähem mälu ühe GPU kohta.

Suurt mudelit on lihtne jagada järjestikusteks kihtideks. Kuid kihtide sisendite ja väljundite vahel on järjestikused sõltuvused, nii et naiivne rakendamine võib põhjustada palju jõudeolekut, kui töötaja ootab eelmise masina väljundeid, mida kasutatakse selle sisenditena. Neid ooteaja tükke nimetatakse "mullideks", mis raiskavad arvutusi, mida saaksid teha tühikäigul töötavad masinad.

Suurte närvivõrkude treenimise tehnikad edasi
Suurte närvivõrkude treenimise tehnikad Tagurpidi
Suurte närvivõrkude treenimise tehnikad Gradiendi värskendus
Suurte närvivõrkude treenimise tehnikad Idle
Suurte närvivõrkude treenimise tehnikad

Illustratsioon naiivsest torujuhtme paralleelsuse seadistusest, kus mudel on vertikaalselt jagatud kihtide kaupa neljaks partitsiooniks. Töötaja 4 hostib võrgu esimese kihi mudeliparameetreid (sisendile kõige lähemal), samas kui töötaja 1 hostib 4. kihti (mis on väljundile kõige lähemal). "F", "B" ja "U" tähistavad vastavalt edasi-, tagasi- ja värskendamistoiminguid. Alamindeksid näitavad, millisel töötajal toiming töötab. Andmeid töötleb järjestikuse sõltuvuse tõttu korraga üks töötaja, mis põhjustab suuri jõudeaja "mulle".

Andmete paralleelsusest tulenevaid ideid saame mulli maksumuse vähendamiseks uuesti kasutada, kui lasta igal töötajal korraga töödelda ainult andmeelementide alamhulka, mis võimaldab meil nutikalt katta uued arvutused ooteajaga. Põhiidee on jagada üks partii mitmeks mikropartiiks; iga mikropartii töötlemine peaks olema proportsionaalselt kiirem ja iga töötaja hakkab järgmise mikropartii kallal töötama niipea, kui see on saadaval, kiirendades seega konveieri täitmist. Piisava hulga mikropartiide korral saab töötajaid kasutada suurema osa ajast, minimaalse mulliga etapi alguses ja lõpus. Gradiente keskmistatakse mikropartiide lõikes ja parameetrite värskendamine toimub alles siis, kui kõik mikropartiid on lõpetatud.

Töötajate arv, kelle vahel mudel on jagatud, on üldtuntud kui torujuhtme sügavus.

Edasiliikumise ajal peavad töötajad saatma ainult selle kihtide osa väljundi (nn aktiveerimised) järgmisele töötajale; tagurpidi liikumise ajal saadab see eelmisele töötajale ainult nende aktiveerimiste gradiendid. Nende läbimiste ajastamiseks ja mikropartiide gradientide koondamiseks on palju disainiruumi. GPipe laseb igal töötaja protsessil järjest edasi ja tagasi liikuda ning seejärel koondab lõpus sünkroonselt mitme mikropartii gradiendid. PipeDream selle asemel ajastab iga töötaja alternatiivselt edasi- ja tagasikäike töötlema.

Suurte närvivõrkude treenimise tehnikad edasi
Suurte närvivõrkude treenimise tehnikad Tagurpidi
Suurte närvivõrkude treenimise tehnikad Värskendused
Suurte närvivõrkude treenimise tehnikad Idle
GPipe

Suurte närvivõrkude treenimise tehnikad

PipeDream

Suurte närvivõrkude treenimise tehnikad

GPipe'i ja PipeDreami torujuhtmete skeemide võrdlus, kasutades 4 mikropartii partii kohta. Mikropartiid 1-8 vastavad kahele järjestikusele andmepartiile. Pildil näitab “(number)” millise mikropartiiga toiming sooritatakse ja alamindeks tähistab töötaja ID-d. Pange tähele, et PipeDream suurendab tõhusust, kui teostab aegunud parameetritega arvutusi.

Tensori paralleelsus

Torujuhtme paralleelsus jagab mudeli "vertikaalselt" kihtide kaupa. Samuti on võimalik teatud toiminguid kihi sees "horisontaalselt" poolitada, mida tavaliselt nimetatakse Tensor Paralleel koolitust. Paljude kaasaegsete mudelite jaoks (nt Transformer), on arvutuse kitsaskoht aktiveerimise partiimaatriksi korrutamine suure kaalumaatriksiga. Maatrikskorrutis võib pidada punktkorrutiseks ridade ja veergude paaride vahel; on võimalik arvutada erinevatel GPU-del sõltumatuid punktprodukte või arvutada iga punkttoote osi erinevatel GPU-del ja tulemusi kokku võtta. Kummagi strateegia korral saame kaalumaatriksi viilutada ühtlase suurusega „kildudeks“, majutada iga killu erinevas GPU-s ja kasutada seda kildu üldise maatriksitoote asjakohase osa arvutamiseks, enne kui hakkame hiljem tulemuste kombineerimiseks suhtlema.

Üheks näiteks on Megatron-LM, mis paralleeliseerib maatriksi korrutamise transformaatori enesetähelepanu ja MLP kihtides. PTD-P kasutab tensorit, andmeid ja konveieri paralleelsust; selle konveieri ajakava määrab igale seadmele mitu mittejärjestikust kihti, vähendades mullide üldkulusid suurema võrgusuhtluse hinnaga.

Mõnikord saab võrku sisendit paralleelstada üle mõõtme, millel on ristkommunikatsiooni suhtes kõrge paralleelarvutus. Järjestuste paralleelsus on üks selline idee, kus sisendjada jagatakse aja peale mitmeks alamnäiteks, vähendades proportsionaalselt tippmälu tarbimist, võimaldades arvutustel jätkata granulaarsema suurusega näidetega.

Ekspertide segu (MoE)

Koos Ekspertide segu (MoE) lähenemise korral kasutatakse ühe sisendi väljundi arvutamiseks ainult murdosa võrgust. Üks näide lähenemisviisist on paljude kaalukomplektide kasutamine ja võrk saab järelduse ajal valida, millist komplekti kasutada väravamehhanismi kaudu. See võimaldab palju rohkem parameetreid ilma suurema arvutuskuludeta. Iga kaalukomplekti nimetatakse "ekspertideks", lootuses, et võrk õpib määrama igale eksperdile spetsiaalseid arvutusi ja oskusi. Erinevatel GPU-del saab majutada erinevaid eksperte, pakkudes selget võimalust mudeli jaoks kasutatavate GPU-de arvu suurendamiseks.

Suurte närvivõrkude treenimise tehnikad

Ekspertide segu (KKM) kihi illustratsioon. Ainult 2 neist n eksperdid valib väravavõrk. (Pilt kohandatud: Shazeer jt, 2017)

GShard skaleerib MoE Transformeri kuni 600 miljardi parameetrini skeemi abil, kus ainult MoE kihid on jagatud mitme TPU seadme vahel ja muud kihid on täielikult dubleeritud. Lülitage transformer skaleerib mudeli suuruse triljoniteks parameetriteks veelgi suurema hõredusega, suunates ühe sisendi ühele eksperdile.

Muud mälu säästvad kujundused

On palju muid arvutusstrateegiaid, et muuta üha suuremate närvivõrkude treenimine paremini jälgitavaks. Näiteks:

  • Gradiendi arvutamiseks peate salvestama algsed aktiveerimised, mis võivad kulutada palju seadme RAM-i. Kontrollpunkti määramine (tuntud ka kui aktiveerimise ümberarvutamine) salvestab kõik aktiveerimiste alamhulgad ja arvutab vahepealsed ümbersuunamised õigel ajal ümber. See säästab maksimaalselt ühe täiendava täieliku edasipääsu arvutuskuludega palju mälu. Samuti saab arvutus- ja mälukulude vahel pidevalt kompromisse teha selektiivne aktiveerimise ümberarvutamine, mis kontrollib aktiveerimiste alamhulka, mille salvestamine on suhteliselt kallim, kuid mida on odavam arvutada.

  • Segatäppiskoolitus on treenida mudeleid kasutades väiksema täpsusega numbreid (kõige sagedamini FP16). Kaasaegsed kiirendid võivad väiksema täpsusega numbritega saavutada palju suurema FLOP-i arvu ja säästate ka seadme RAM-i. Nõuetekohase hoolduse korral ei kaota saadud mudel peaaegu mingit täpsust.

  • Mahalaadimine on kasutamata andmete ajutiselt CPU-sse või erinevatesse seadmetesse mahalaadimine ja hiljem vajaduse korral tagasilugemine. Naiivsed rakendused aeglustavad treenimist palju, kuid keerukad rakendused toovad andmed eeltoode, nii et seade ei pea kunagi seda ootama. Üks selle idee teostus on NULL mis jagab parameetrid, gradiendid ja optimeerija olekud kogu saadaoleva riistvara vahel ja realiseerib need vastavalt vajadusele.

  • Mälu tõhusad optimeerijad on tehtud ettepanek optimeerija poolt säilitatava tööoleku mälumahu vähendamiseksNagu Adafaktor.

  • Kokkusurumine saab kasutada ka vahetulemuste salvestamiseks võrku. Näiteks, Gist tihendab aktiveerimised, mis on salvestatud tagasikäigu jaoks; DALL E tihendab gradiente enne nende sünkroonimist.


OpenAI-s koolitame ja täiustame suuri mudeleid aluseks olevast infrastruktuurist kuni nende juurutamiseni reaalsete probleemide lahendamiseni. Kui soovite selle postituse ideid praktikas rakendada – mis on eriti oluline meie skaleerimis- ja rakendusuuringute meeskondade jaoks –, rentides!


Tunnustused
Aitäh Nikolas Tezakile, Sam Altmanile, Daniel Gackle'ile, Ilya Sutskeverile ja Steven Adlerile mustandite tagasiside eest. Tänu Justin Jay Wangile, Bianca Martinile ja Steve Dowlingule kommunikatsiooni ja disaini eest.

Ajatempel:

Veel alates OpenAI