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.
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.
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.
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.
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!
- a
- MEIST
- kiirendid
- täpne
- üle
- Täiendavad lisad
- ettemaksed
- AI
- algoritm
- Materjal: BPA ja flataatide vaba plastik
- Lubades
- hulgas
- summa
- Teine
- rakendatud
- kehtima
- lähenemine
- ümber
- saadaval
- keskmine
- Baseline
- muutuma
- enne
- Algus
- on
- vahel
- Valge
- Miljard
- mull
- mis
- kindel
- väljakutse
- odavam
- Vali
- suhtlemine
- KOMMUNIKATSIOON
- Side
- arvutamine
- arvutused
- Arvutama
- arvutustehnika
- järjestikune
- tarbima
- tarbimine
- jätkuvalt
- pidev
- koordineerima
- kopeerimine
- tuum
- võiks
- andmed
- juurutamine
- Disain
- arenenud
- seade
- seadmed
- erinev
- raske
- mõõde
- mõõdud
- alla
- ajal
- Tõhus
- efektiivsus
- tõhus
- elemendid
- võimaldab
- Inseneriteadus
- eriti
- näide
- näited
- täitmine
- ekspert
- ekspertide
- kiiremini
- tagasiside
- esimene
- Jalajälg
- edasi
- Alates
- täis
- üldiselt
- GitHub
- Pilk
- GPU
- GPU
- juhtuda
- riistvara
- võttes
- Suur
- rohkem
- omab
- võõrustas
- Kuidas
- Kuidas
- aga
- HTTPS
- idee
- ideid
- pilt
- täitmine
- Paranemist
- Kaasa arvatud
- Suurendama
- kasvanud
- kasvav
- üha rohkem
- iseseisvalt
- näitama
- Infrastruktuur
- sisend
- IT
- teatud
- suur
- kiht
- viima
- juhtivate
- Õppida
- õppimine
- liinid
- masin
- masinõpe
- masinad
- tegema
- matemaatika
- maatriks
- vahendid
- Mälu
- Microsoft
- mudel
- mudelid
- rohkem
- kõige
- mitmekordne
- korrutades
- vajadustele
- võrk
- võrgustikud
- number
- numbrid
- Nvidia
- töö
- Operations
- optimeerimine
- Muu
- üldine
- osa
- Inimesed
- jõudlus
- esitades
- Punkt
- võimalik
- tava
- eelmine
- probleeme
- tulu
- protsess
- tootma
- Toode
- Toodet
- pakutud
- pakkudes
- RAM
- RE
- jõudma
- hiljuti
- vähendama
- vähendamine
- viitab
- asjakohane
- esindama
- Vajab
- teadustöö
- tulemuseks
- Tulemused
- jooks
- jooksmine
- Ütlesin
- sama
- säästmine
- Skaala
- ketendamine
- kava
- skeemid
- väljavalitud
- komplekt
- seade
- sarnane
- ühekordne
- SUURUS
- oskused
- So
- mõned
- keeruline
- Ruum
- spetsialiseeritud
- jagada
- Poolitab
- riik
- Ühendriigid
- Veel
- salvestada
- kauplustes
- strateegiad
- Strateegia
- Lüliti
- tehnikat
- .
- Läbi
- läbilaskevõime
- aeg
- korda
- kaubelda
- koolitus
- Ülekanne
- triljoneid
- mõistmine
- Värskendused
- Uudised
- us
- kasutama
- tavaliselt
- ära kasutama
- sort
- eri
- ootama
- kuigi
- Wikipedia
- jooksul
- ilma
- töötaja
- töötajate
- töö
- Sinu