Tekniikat suurten hermoverkkojen PlatoBlockchain-tietoälyn kouluttamiseen. Pystysuuntainen haku. Ai.

Tekniikat suurten hermoverkkojen kouluttamiseen

Tekniikat suurten hermoverkkojen kouluttamiseen

Suuret hermoverkot ovat monien viimeaikaisten tekoälyn edistysten ytimessä, mutta niiden kouluttaminen on vaikea suunnittelu- ja tutkimushaaste, joka edellyttää GPU-klusterin järjestämistä yhden synkronoidun laskelman suorittamiseksi. Kun klusteri- ja mallikoot ovat kasvaneet, koneoppimisen harjoittajat ovat kehittäneet yhä enemmän tekniikoita mallikoulutuksen rinnakkaiseksi monien GPU:iden kautta. Ensi silmäyksellä näiden rinnakkaisuustekniikoiden ymmärtäminen saattaa tuntua pelottavalta, mutta vain muutamalla laskennan rakenteesta tehdyllä oletuksella nämä tekniikat tulevat paljon selvemmiksi – siinä vaiheessa kuljet vain läpinäkymättömiä bittejä A:sta B:hen verkon tavoin. vaihtaa sukkulat pakettien ympärille.

Datan rinnakkaisuus

Tekniikat suurten hermoverkkojen kouluttamiseen

Putkilinjan rinnakkaisuus

Tekniikat suurten hermoverkkojen kouluttamiseen

Tensorin rinnakkaisuus

Tekniikat suurten hermoverkkojen kouluttamiseen

Asiantunteva rinnakkaisuus

Tekniikat suurten hermoverkkojen kouluttamiseen

Datan rinnakkaisuus

Tekniikat suurten hermoverkkojen kouluttamiseen

Putkilinjan rinnakkaisuus

Tekniikat suurten hermoverkkojen kouluttamiseen

Tensorin rinnakkaisuus

Tekniikat suurten hermoverkkojen kouluttamiseen

Asiantunteva rinnakkaisuus

Tekniikat suurten hermoverkkojen kouluttamiseen

Esimerkki erilaisista rinnakkaisuusstrategioista kolmikerroksisessa mallissa. Jokainen väri viittaa yhteen kerrokseen ja katkoviivat erottavat eri GPU:t.

Ei rinnakkaisuutta

Neuroverkon kouluttaminen on iteratiivinen prosessi. Jokaisessa iteraatiossa siirrymme mallin läpi kerrokset laskea tulos jokaiselle harjoitusesimerkille tietoerässä. Sitten toinen passi etenee taaksepäin kerrosten läpi, levittäen kuinka paljon kukin parametri vaikuttaa lopulliseen tuottoon laskemalla a kaltevuus kunkin parametrin suhteen. Erän, parametrien ja jonkin parametrikohtaisen optimointitilan keskimääräinen gradientti välitetään optimointialgoritmille, kuten esim. Aatami, joka laskee seuraavan iteraation parametrit (jonka pitäisi toimia hieman paremmin tiedoissasi) ja uuden parametrikohtaisen optimointitilan. Kun koulutus toistuu tietoerien yli, malli kehittyy tuottamaan entistä tarkempia tuloksia.

Erilaiset rinnakkaisuustekniikat jakavat tämän koulutusprosessin eri ulottuvuuksille, mukaan lukien:

  • Tietojen rinnakkaisuus – suorita erän eri osajoukkoja eri grafiikkasuorittimilla;
  • Liukulinjan rinnakkaisuus — käytä mallin eri kerroksia eri grafiikkasuorittimilla;
  • Tensorin rinnakkaisuus – hajota matematiikka yhdelle operaatiolle, kuten matriisikertolasku, joka jaetaan GPU:iden kesken;
  • Asiantuntijoiden sekoitus – käsittele jokainen esimerkki vain osalla jokaisesta kerroksesta.

(Tässä viestissä oletetaan, että käytät GPU:ita neuroverkkojesi harjoittamiseen, mutta samat ideat pätevät myös niihin, jotka käyttävät muita hermoverkkokiihdytin.)

Datan rinnakkaisuus

Data Parallel koulutus tarkoittaa samojen parametrien kopioimista useille GPU:ille (joita kutsutaan usein "työntekijöiksi") ja eri esimerkkien osoittamista kullekin käsiteltäväksi samanaikaisesti. Pelkästään tietojen rinnakkaisuus edellyttää silti, että mallisi mahtuu yhden grafiikkasuorittimen muistiin, mutta voit käyttää useiden grafiikkasuorittimien laskentaa useiden parametrien kopioiden tallentamisen kustannuksella. Tästä huolimatta on olemassa strategioita GPU:n käytettävissä olevan tehokkaan RAM-muistin lisäämiseksi, kuten parametrien tilapäinen purkaminen suorittimen muistiin käyttökertojen välillä.

Kun jokainen datan rinnakkaistyöntekijä päivittää parametrikopionsa, heidän on koordinoitava varmistaakseen, että jokaisella työntekijällä on edelleen samanlaiset parametrit. Yksinkertaisin tapa on ottaa käyttöön estävä viestintä työntekijöiden välillä: (1) laskea itsenäisesti kunkin työntekijän gradientti; (2) laskea työntekijöiden gradientien keskiarvo; ja (3) laskea itsenäisesti samat uudet parametrit jokaiselle työntekijälle. Vaihe (2) on estokeskiarvo, joka vaatii melko suuren tiedon siirtämistä (suhteessa työntekijöiden lukumäärään kertaa parametrisi koko), mikä voi heikentää harjoittelun suorituskykyä. Niitä on erilaisia asynkroniset synkronointimallit poistaa nämä yleiskustannukset, mutta ne vahingoittavat oppimisen tehokkuutta; käytännössä ihmiset yleensä pitävät kiinni synkronisesta lähestymistavasta.

Putkilinjan rinnakkaisuus

Kanssa Putkilinja yhdensuuntainen koulutuksessa jaamme mallin peräkkäiset osat GPU:iden kesken. Kukin GPU sisältää vain murto-osan parametreista, joten sama malli kuluttaa suhteellisesti vähemmän muistia GPU:ta kohti.

On yksinkertaista jakaa suuri malli peräkkäisten kerrosten paloiksi. Kerrosten tulojen ja tulosten välillä on kuitenkin peräkkäinen riippuvuus, joten naiivi toteutus voi johtaa suureen määrään joutoaikaa, kun työntekijä odottaa edellisen koneen lähtöjä käytettäväksi sen syötteinä. Nämä odotusajan palaset tunnetaan "kuplina", mikä hukkaa tyhjäkäynnillä olevien koneiden suorittaman laskennan.

Tekniikat suurten hermoverkkojen kouluttamiseen Eteenpäin
Tekniikat suurten hermoverkkojen kouluttamiseen Taaksepäin
Tekniikat suurten hermoverkkojen kouluttamiseen Gradienttipäivitys
Tekniikat suurten hermoverkkojen kouluttamiseen Idle
Tekniikat suurten hermoverkkojen kouluttamiseen

Kuva naiivista putkilinjan yhdensuuntaisuusasetuksesta, jossa malli on jaettu pystysuunnassa 4 osioon kerroksittain. Työntekijä 1 isännöi verkon ensimmäisen kerroksen malliparametreja (lähinnä tuloa), kun taas työntekijä 4 isännöi kerrosta 4 (joka on lähinnä lähtöä). "F", "B" ja "U" edustavat vastaavasti eteenpäin-, taaksepäin- ja päivitystoimintoja. Alaindeksit osoittavat, millä työntekijällä toiminto suoritetaan. Yksi työntekijä käsittelee tietoja kerrallaan peräkkäisen riippuvuuden vuoksi, mikä johtaa suuriin joutoajan "kupoihin".

Voimme käyttää uudelleen datan rinnakkaisuuden ideoita vähentääksemme kuplan kustannuksia antamalla jokaisen työntekijän käsitellä vain osajoukkoa tietoelementtejä kerralla, jolloin voimme fiksusti limittää uuden laskennan odotusajan kanssa. Ydinideana on jakaa yksi erä useiksi mikroeriksi; jokaisen mikroerän tulee olla suhteellisesti nopeampi käsitellä ja jokainen työntekijä alkaa työstää seuraavaa mikroerää heti, kun se on saatavilla, mikä nopeuttaa liukuhihnan suorittamista. Riittävällä mikroerillä työntekijöitä voidaan hyödyntää suurimman osan ajasta minimaalisella kuplalla vaiheen alussa ja lopussa. Gradienteista lasketaan keskiarvo mikroerien välillä, ja parametrien päivitykset tapahtuvat vasta, kun kaikki mikroerät on suoritettu.

Työntekijöiden lukumäärä, jolle malli on jaettu, tunnetaan yleisesti nimellä putkilinjan syvyys.

Eteenpäin siirron aikana työntekijöiden tarvitsee vain lähettää tulos (kutsutaan aktivaatioiksi) sen kerrospalasta seuraavalle työntekijälle; taaksepäin siirron aikana se lähettää vain näiden aktivointien gradientit edelliselle työntekijälle. Suunnittelussa on paljon tilaa näiden kulkujen ajoittamiseen ja gradientien yhdistämiseen mikroerien välillä. GPipe on jokaisen työntekijän prosessi eteenpäin ja taaksepäin kulkee peräkkäin ja kokoaa sitten gradientit useista mikroeristä synkronisesti lopussa. PipeDream sen sijaan ajastaa jokaisen työntekijän vaihtoehtoisesti prosessoimaan eteenpäin- ja taaksepäin-siirrot.

Tekniikat suurten hermoverkkojen kouluttamiseen Eteenpäin
Tekniikat suurten hermoverkkojen kouluttamiseen Taaksepäin
Tekniikat suurten hermoverkkojen kouluttamiseen Päivitykset
Tekniikat suurten hermoverkkojen kouluttamiseen Idle
GPipe

Tekniikat suurten hermoverkkojen kouluttamiseen

PipeDream

Tekniikat suurten hermoverkkojen kouluttamiseen

GPipe- ja PipeDream-liukuhihnajärjestelmien vertailu käyttämällä 4 mikroerää erää kohden. Mikroerät 1-8 vastaavat kahta peräkkäistä tietoerää. Kuvassa "(numero)" osoittaa mille mikroerälle toiminto suoritetaan ja alaindeksi merkitsee työntekijän tunnuksen. Huomaa, että PipeDream saa enemmän tehokkuutta suorittamalla joitain laskelmia vanhentuneilla parametreilla.

Tensorin rinnakkaisuus

Putkilinjan yhdensuuntaisuus jakaa mallin "pystysuoraan" kerroksittain. On myös mahdollista "vaakasuoraan" jakaa tietyt toiminnot kerroksen sisällä, jota yleensä kutsutaan Tensorin rinnakkais koulutusta. Monille nykyaikaisille malleille (esim Muuntaja), laskennan pullonkaula moninkertaistaa aktivointierämatriisin suurella painomatriisilla. Matriisin kertolasku voidaan ajatella pistetuloina rivi- ja sarakeparien välillä; on mahdollista laskea itsenäisiä pistetuotteita eri GPU:illa tai laskea kunkin pistetuotteen osia eri GPU:illa ja laskea tulokset yhteen. Kummallakin strategialla voimme viipaloida painomatriisin tasakokoisiksi "sirpaleiksi", isännöidä jokaisen sirpaleen eri grafiikkasuorittimessa ja käyttää tätä sirpaletta laskeaksemme asiaankuuluvan osan kokonaismatriisituotteesta ennen kuin kommunikoimme myöhemmin tulosten yhdistämiseksi.

Yksi esimerkki on Megatron-LM, joka rinnastaa matriisin kertolaskuja Transformerin itsetarkkailu- ja MLP-kerroksissa. PTD-P käyttää tensoria, dataa ja liukuhihnan rinnakkaisuutta; sen putkiaikataulu määrittää kullekin laitteelle useita ei-peräkkäisiä kerroksia, mikä vähentää kuplan ylimääräisiä kustannuksia verkkoviestinnän lisäämisen kustannuksella.

Joskus syöte verkkoon voidaan rinnakkaista ulottuvuuden poikki, jolloin rinnakkainen laskenta on korkealla suhteessa ristiin. Sarjan rinnakkaisuus on yksi tällainen idea, jossa syöttösekvenssi jaetaan ajassa useisiin osaesimerkkeihin, mikä vähentää suhteellisesti huippumuistin kulutusta sallimalla laskennan edetä rakeisempien esimerkkien kanssa.

Asiantuntijoiden sekoitus (MoE)

Kanssa Asiantuntijoiden sekoitus (MoE) Lähestymistavassa vain murto-osaa verkosta käytetään yhden tulon lähdön laskemiseen. Eräs esimerkkitapa on käyttää useita painosarjoja, ja verkko voi valita, mitä joukkoa käyttää avainnusmekanismin kautta päättelyhetkellä. Tämä mahdollistaa paljon enemmän parametreja ilman kasvaneita laskentakustannuksia. Kutakin painosarjaa kutsutaan "asiantuntijoiksi" siinä toivossa, että verkosto oppii osoittamaan jokaiselle asiantuntijalle erityisiä laskelmia ja taitoja. Eri asiantuntijoita voidaan isännöidä eri GPU:illa, mikä tarjoaa selkeän tavan skaalata mallissa käytettyjen GPU:iden määrää.

Tekniikat suurten hermoverkkojen kouluttamiseen

Kuva asiantuntijoiden yhdistelmätasosta (MoE). Vain 2 niistä n asiantuntijat valitsee porttiverkosto. (Kuva mukautettu täältä: Shazeer ym., 2017)

GShard skaalaa MoE-muuntajan jopa 600 miljardiin parametriin menetelmällä, jossa vain MoE-kerrokset jaetaan useiden TPU-laitteiden kesken ja muut kerrokset kopioidaan täysin. Vaihda muuntaja skaalaa mallin koon biljooniin parametreihin vieläkin harvakseltaan reitittämällä yhden syötteen yhdelle asiantuntijalle.

Muut muistia säästävät mallit

On olemassa monia muita laskennallisia strategioita, joiden avulla yhä suurempien hermoverkkojen harjoittelusta voidaan tehdä helpommin seurattavia. Esimerkiksi:

  • Gradientin laskeminen edellyttää alkuperäisten aktivointien tallentamista, mikä voi kuluttaa paljon laitteen RAM-muistia. Checkpointing (tunnetaan myös nimellä aktivoinnin uudelleenlaskenta) tallentaa kaikki aktivaatioiden osajoukot ja laskee välivaiheet uudelleen juuri-in-time aikana taaksepäin siirtymisen aikana. Tämä säästää paljon muistia korkeintaan yhden täyden eteenpäin heiton laskentakustannuksilla. Voidaan myös jatkuvasti tehdä kompromisseja laskennan ja muistin kustannusten välillä valikoiva aktivointi uudelleenlaskenta, joka tarkistaa aktivointien osajoukot, jotka ovat suhteellisen kalliimpia tallentaa, mutta halvempia laskea.

  • Mixed Precision Training on kouluttaa malleja käyttämällä pienemmän tarkkuuden numeroita (yleisimmin FP16). Nykyaikaiset kiihdyttimet voivat saavuttaa paljon suurempia FLOP-lukuja pienemmillä tarkkuudella, ja säästät myös laitteen RAM-muistia. Asianmukaisella hoidolla tuloksena oleva malli voi menettää melkein mitään tarkkuutta.

  • purkamista on siirtää väliaikaisesti käyttämätöntä dataa CPU:lle tai eri laitteille ja lukea ne myöhemmin takaisin tarvittaessa. Naiivit toteutukset hidastavat harjoittelua paljon, mutta kehittyneet toteutukset esihakevat tiedot, jotta laitteen ei koskaan tarvitse odottaa sitä. Yksi tämän idean toteutus on Nolla joka jakaa parametrit, gradientit ja optimointitilat kaikille saatavilla oleville laitteille ja materialisoi ne tarpeen mukaan.

  • Muistitehokkaat optimoijat on ehdotettu vähentämään optimoijan ylläpitämän ajotilan muistijalanjälkeä, Kuten Adafactor.

  • Puristus voidaan käyttää myös välitulosten tallentamiseen verkkoon. Esimerkiksi, Ydin pakkaa taaksepäin siirtymistä varten tallennetut aktivaatiot; DALL · E pakkaa liukuvärit ennen niiden synkronointia.


OpenAI:ssa koulutamme ja parannamme suuria malleja taustalla olevasta infrastruktuurista aina niiden käyttöönottoon todellisiin ongelmiin asti. Jos haluat toteuttaa tämän postauksen ideat käytännössä – erityisesti skaalaus- ja soveltava tutkimustiimimme kannalta – olemme vuokraamalla!


Kiitokset
Kiitos Nikolas Tezakille, Sam Altmanille, Daniel Gacklelle, Ilya Sutskeverille ja Steven Adlerille luonnoksista antamasta palautteesta. Kiitos Justin Jay Wangille, Bianca Martinille ja Steve Dowlingille viestinnästä ja suunnittelusta.

Aikaleima:

Lisää aiheesta OpenAI