Viime vuosina luonnollisen kielen käsittelyn (NLP) alalla on tapahtunut nopeaa kehitystä. Vaikka laitteistot ovat parantuneet, kuten NVIDIA:n ja Amazonin uusimman sukupolven kiihdytin, edistyneet koneoppimisen (ML) harjoittajat kohtaavat edelleen säännöllisesti ongelmia skaalataessaan suuria kielimallejaan useille grafiikkasuorituksille.
Tässä blogikirjoituksessa teemme lyhyen yhteenvedon suurten ja pienten NLP-mallien noususta pääasiassa Hugging Facen tarjoaman abstraktion ja Amazon SageMakerin modulaarisen taustaohjelman avulla. Erityisesti korostamme neljän lisäominaisuuden julkaisua SageMaker-mallin rinnakkaiskirjastossa, jotka mahdollistavat 175 miljardin parametrin NLP-mallin esikoulutuksen ja hienosäädön asiakkaille.
Käytimme tätä kirjastoa SageMaker-koulutusalustalla ja saavutimme 32 näytettä sekunnissa suorituskyvyn 120 ml.p4d.24xlarge tapauksissa ja 175 miljardilla parametrilla. Odotamme, että jos lisäämme tämän 240 esiintymään, koko mallin harjoitteleminen kestäisi 25 päivää.
Lisätietoja mallien rinnakkaisuudesta on artikkelissa Amazon SageMaker -mallin rinnakkaisuus: yleinen ja joustava kehys suurten mallien koulutukseen.
Voit myös nähdä GPT2-kannettavan, jota käytimme näiden suorituskykylukujen luomiseen GitHub-arkisto.
Lisätietoja SageMaker-mallin uusien ominaisuuksien rinnakkaiskäytöstä on kohdassa PyTorchin SageMaker-mallin rinnakkaiskirjaston laajennetut ominaisuudetja Käytä SageMaker Python SDK:n kanssa.
NLP Amazon SageMakerissa – Halaavat kasvot ja mallin rinnakkaisuus
Jos olet uusi Hugging Facessa ja NLP:ssä, suurin kohokohta, jonka sinun on tiedettävä, on, että luonnollisen kielen käsittelyä (NLP) käyttävät sovellukset alkavat saavuttaa ihmistason suorituskykyä. Tätä ohjaa suurelta osin oppimismekanismi, ns huomio, joka synnytti syvän oppimismallin, nimeltään muuntaja, joka on paljon skaalautuvampi kuin aiemmat syvän oppimisen peräkkäiset menetelmät. Nyt kuuluisa BERT malli kehitettiin hyödyntämään muuntajaa, ja kehitti useita hyödyllisiä NLP-taktiikoita matkan varrella. Transformers ja mallisarja sekä NLP:ssä että sen ulkopuolella, jotka kaikki ovat saaneet inspiraationsa BERT:stä, ovat ensisijainen moottori Google-hakutulostesi takana, omassa Google-kääntäjän tuloksetja joukko uusia startup-yrityksiä.
SageMaker ja Hugging Face tekivät yhteistyötä tehdäkseen tästä asiakkaille helpompaa kuin koskaan ennen. Olemme julkaisseet Hugging Face -syvät oppimissäiliöt (DLC:t), joiden avulla voit kouluttaa ja isännöidä esikoulutettuja malleja suoraan Hugging Facen kautta. yli 26,000 XNUMX mallin arkisto. Olemme käynnistäneet SageMaker Training Compiler nopeuttaaksesi Hugging Face -harjoittelusilmukoidesi käyttöaikaa jopa 50 %. Olemme myös integroineet Hugging Facen lippulaiva Transformers SDK with hajautetut koulutuskirjastomme tehdäksesi NLP-malliesi skaalaamisesta helpompaa kuin koskaan ennen.
Lisätietoja Hugging Face Transformer -malleista Amazon SageMakerissa on kohdassa Tuki hugging Face Transformer -malleille.
Uusia ominaisuuksia laajamittaiseen NLP-mallikoulutukseen SageMaker-mallin rinnakkaiskirjaston avulla
AWS re:Invent 2020 -tapahtumassa SageMaker lanseerasi hajautettuja kirjastoja, jotka tarjoavat parhaan suorituskyvyn pilvessä tietokonenäkömallien, kuten esim. Naamio-RCNN ja NLP-mallit, kuten T5-3B. Tämä on mahdollista parannettujen viestintäprimitiivien avulla, jotka ovat 20–40 % nopeampia kuin NCCL AWS:ssä, ja mallinjakelutekniikoilla, jotka mahdollistavat erittäin suurten kielimallien skaalauksen kymmenistä satoihin tai tuhansiin GPU:ihin.
SageMaker-mallin rinnakkaiskirjasto (SMP) on aina antanut sinulle mahdollisuuden ottaa ennalta määritetty NLP-mallisi PyTorchissa, joko Hugging Facen kautta tai muualla, ja osioida malli useille GPU:ille klusterissasi. Toisin sanoen SMP hajottaa mallisi pienempiin osiin, jotta muisti loppuu (OOM) -virheitä ei ilmene. Olemme iloisia voidessamme lisätä muistia säästäviä lisätekniikoita, jotka ovat kriittisiä suurille malleille, nimittäin:
- Tensorin rinnakkaisuus
- Optimoijan tilan jakaminen
- Aktivoinnin tarkistuspiste
- Aktivoinnin purkaminen
Voit yhdistää nämä neljä ominaisuutta käyttääksesi muistia tehokkaammin ja kouluttaaksesi seuraavan sukupolven äärimmäisen mittakaavan NLP-malleja.
Hajautettu koulutus ja tensorin rinnakkaisuus
Tensorin rinnakkaisuuden ymmärtämiseksi on hyödyllistä tietää, että hajautettua koulutusta tai rinnakkaisuutta on monenlaista. Olet luultavasti jo tuntenut yleisimmän tyypin, tietojen rinnakkaisuus. Tietojen rinnakkaisuuden ydin toimii näin: lisäät klusteriisi ylimääräisen solmun, kuten siirryt yhdestä kahteen ml.EC2-instanssiin SageMaker-estimaattorissa. Sitten käytät tietojen rinnakkaiskehystä, kuten Horovod, PyTorch Distributed Data Parallel tai SageMaker Distributed. Tämä luo mallistasi kopiot, yksi kiihdytintä kohden, ja käsittelee tietojen jakamisen kullekin solmulle sekä tuoden yhteen kaikki tulokset hermoverkkosi taaksepäin etenemisvaiheen aikana. Ajattele hajautettua gradienttilaskua. Tietojen rinnakkaisuus on suosittua myös palvelimissa; jaat tietoja kaikkien solmujesi kaikkiin grafiikkasuorittimiin ja toisinaan suorittimiin. Seuraava kaavio havainnollistaa tietojen rinnakkaisuutta.
Malli rinnakkaisuus on hieman erilainen. Sen sijaan, että tekisimme kopioita samasta mallista, jaamme mallisi osiin. Sitten hallitsemme sen ajon, joten tietosi virtaavat edelleen hermoverkkosi läpi matemaattisesti täsmälleen samalla tavalla, mutta mallisi eri osat ovat eri GPU:illa. Jos käytät ml.p3.8xlargea, sinulla on neljä NVIDIA V100:aa, joten haluat luultavasti sirpaloida mallisi neljään osaan, yksi pala GPU:ta kohti. Jos hyppäät kahteen ml.p4d.4xlargeen, klusterissasi on yhteensä 24 A16:aa, joten saatat jakaa mallisi 100 osaan. Tätä kutsutaan joskus myös putkilinjan yhdensuuntaisuus. Tämä johtuu siitä, että verkon kerrokset on osioitu GPU:iden kesken, ja niitä ajetaan liukuhihnalla GPU-käytön maksimoimiseksi. Seuraava kaavio havainnollistaa mallin rinnakkaisuutta.
Jotta mallin rinnakkaisuus tapahtuisi mittakaavassa, tarvitsemme kolmannen jakauman tyypin: tensorin rinnakkaisuus. Tensorin rinnakkaisuus soveltaa samoja käsitteitä askeleen pidemmälle – hajotamme hermoverkkosi suurimmat kerrokset ja sijoitamme osia kerroksista eri laitteille. Tämä on olennaista, kun työskentelet 175 miljardin tai useamman parametrin kanssa ja yrität sovittaa muutaman tietueen RAM-muistiin mallisi osien ohella muuntajan kouluttamiseksi. Seuraava kaavio havainnollistaa tensorin rinnakkaisuutta.
Mahdollistaa tensorin rinnakkaisuus, aseta se smp-asetuksiin siirryt arvioijallesi.
Edellisessä koodissa pipeline_parallel_degree
kuvailee, kuinka moneen segmenttiin mallisi tulee jakaa edellä käsitellyn putkilinjan rinnakkaisuuden perusteella. Toinen sana tälle on tulokset.
Ota tensorin rinnakkaisuus käyttöön määrittämällä tensor_parallel_degree
haluamallesi tasolle. Varmista, että valitset luvun, joka on yhtä suuri tai pienempi kuin GPU:iden määrä esiintymää kohden, joten korkeintaan 8 ml.p4d.24xlarge-koneissa. Lisätietoja komentosarjamuutoksista on kohdassa Suorita SageMaker-hajautettua mallin rinnakkaista koulutustyötä tensoriparallelismilla.
Parametri ddp viittaa hajautettuun dataan rinnakkain. Otat tämän yleensä käyttöön, jos käytät tietojen rinnakkaisuutta tai tensorin rinnakkaisuutta, koska mallin rinnakkaisuuskirjasto käyttää DDP:tä näissä ominaisuuksissa.
Optimoijan tilan jakaminen, aktivoinnin purkaminen ja tarkistuspisteet
Jos sinulla on erittäin suuri malli, tarvitset myös erittäin suuren optimointitilan. Optimoijan valmisteleminen SMP:tä varten on yksinkertaista: ota se vain skriptin levyltä ja lataa se smp.DistributedOptimizer()
esine.
Varmista, että otat tämän käyttöön estimaattorissa asettamalla shard_optimizer_state
to True vuonna smp_options
käytät SMP:n määrittämiseen:
Tensori- ja liukuhihnan rinnakkaisuuden tapaan SMP profiloi mallisi ja maailmankoon (GPU:iden kokonaismäärä kaikissa harjoitussolmuissasi) löytääkseen parhaat sijoitusstrategiat.
Syväoppimisessa välikerroksen ulostuloja kutsutaan myös aktivaatioiksi, ja ne täytyy tallentaa eteenpäinsiirron aikana. Tämä johtuu siitä, että niitä on käytettävä gradienttilaskennassa taaksepäin ajossa. Suuressa mallissa kaikkien näiden aktivointien samanaikainen tallentaminen muistiin voi aiheuttaa merkittäviä muistin pullonkauloja. Voit korjata tämän pullonkaulan käyttämällä aktivoinnin tarkistuspiste, kolmas uusi ominaisuus SageMaker-mallin rinnakkaisuuskirjastossa. Aktivoinnin tarkistuspiste tai gradientin tarkistuspiste, on tekniikka, jolla vähennetään muistin käyttöä poistamalla tiettyjen kerrosten aktivaatiot ja laskemalla ne uudelleen taaksepäin siirron aikana. Tämä vaihtaa tehokkaasti ylimääräistä laskenta-aikaa muistin käytön vähenemiseen.
Lopuksi, aktivoinnin purkaminen käyttää suoraan aktivoinnin tarkistuspisteitä. Strategiana on pitää vain muutama tensoriaktivointi GPU RAMissa mallikoulutuksen aikana. Tarkemmin sanottuna siirrämme tarkistuspisteen aktivoinnit prosessorin muistiin eteenpäinsiirron aikana ja lataamme ne takaisin GPU:lle tietyn mikroerän siirtoa taaksepäin.
Mikroerät ja sijoitusstrategiat
Muita asiakkaita joskus hämmentäviä aiheita ovat mikroerät ja sijoitusstrategiat. Molemmat ovat hyperparametreja, jotka voit syöttää SageMaker-mallin rinnakkaiskirjastoon. Erityisesti mikroerät ovat merkityksellisiä toteutettaessa malleja, jotka perustuvat putkilinjan rinnakkaisuuteen, kuten vähintään 30 miljardin parametrin kokoisia malleja.
Mikroerät ovat minierien alajoukkoja. Kun mallisi on harjoitussilmukassa, määrität tietyn määrän tietueita, jotka poimitaan ja siirretään eteenpäin ja taaksepäin tasojen läpi – tätä kutsutaan minierä, tai joskus vain a erä. Tietojoukon täydellistä läpikulkua kutsutaan an aikakausi. Suorittaakseen eteenpäin- ja taaksepäin kulkemista liukuhihnan rinnakkaisuudella SageMaker-mallin rinnakkaiskirjasto sirpalee erät pienemmiksi osajouksiksi, joita kutsutaan mikroeriksi, joita ajetaan yksi kerrallaan GPU-käytön maksimoimiseksi. Tuloksena olevaa, paljon pienempiä esimerkkejä GPU-kohtaisesti kutsutaan mikroeräksi. GPT-2-esimerkissämme lisäsimme oletusarvona 1 mikroerän suoraan harjoitusskriptiin.
Kun laajennat harjoituskokoonpanoasi, sinun on erittäin suositeltavaa muuttaa eräkokoa ja mikroerän kokoa vastaavasti. Tämä on ainoa tapa varmistaa hyvä suorituskyky: sinun on harkittava eräkokoa ja mikroerien kokoa maailman kokonaiskoon funktiona, kun luotat putkilinjan rinnakkaisuuteen.
Sijoitusstrategiat ovat kuinka kertoa SageMakerille fyysisesti, minne mallin osiot sijoitetaan. Jos käytät sekä mallia rinnakkain että datan rinnakkain, aseta placement_strategy
että “cluster”
sijoittaa mallikopiot laitetunnuksiin (GPU), jotka ovat fyysisesti lähellä toisiaan. Jos kuitenkin haluat todella ohjeistaa rinnakkaisuusstrategiaasi, voit jakaa sen yhdeksi merkkijonoksi erilaisilla kolmen kirjaimen yhdistelmillä: D tietojen rinnakkaisuus, P
osoittaa putkilinjan yhdensuuntaisuuden ja T
tensoririnnakkaisuudelle. Suosittelemme yleensä säilyttämään oletussijoituksen "cluster"
, koska tämä sopii parhaiten suuren mittakaavan mallikoulutukseen. "Klusterin" sijoittelu vastaa "DPT
".
Lisätietoja sijoittelustrategioista on kohdassa Sijoitusstrategia tensoriparallelismin kanssa.
Esimerkki käyttötapauksesta
Oletetaan, että sinulla on yksi ml.p3.16xlarge koulutustyössäsi. Se antaa sinulle 8 NVIDIA V100:aa solmua kohden. Muista, että joka kerta kun lisäät ylimääräisen ilmentymän, koet ylimääräistä kaistanleveyttä, joten on aina parempi, että yhdessä solmussa on enemmän GP'U:ita. Tässä tapauksessa sinun on parempi käyttää yksi ml.p3.16xlarge kuin esimerkiksi kaksi ml.p3.8xlargea. Vaikka GPU:iden määrä on sama, ylimääräisen solmun ylimääräinen kaistanleveys hidastaa suorituskykyäsi.
Seuraava kaavio havainnollistaa nelisuuntaista mallin rinnakkaisuutta yhdistettynä kaksisuuntaiseen datan rinnakkaisuuteen. Tämä tarkoittaa, että sinulla on itse asiassa kaksi kopiota mallistasi (ajattele tietoja rinnakkain), ja jokainen niistä on osioitu neljän GPU:n kesken (mallin rinnakkainen).
Jos jokin näistä malliosioista on liian suuri mahtumaan yhteen grafiikkasuorittimeen, voit lisätä ylimääräisen jakelutyypin – tensorin rinnakkaisuuden – sylkeäksesi sen ja käyttääksesi molempia laitteita.
Yhteenveto
Tässä blogikirjoituksessa käsittelimme SageMakerin hajautettuja koulutuskirjastoja keskittyen erityisesti mallien rinnakkaisuuteen. Jaoimme suorituskyvyn vertailuarvot viimeisimmästä testistämme, jolloin saavutimme 32 näytettä sekunnissa 120 ml.p4d.24xlarge -esiintymissä ja 175 B parametrissa Amazon SageMakerissa. Odotamme, että jos lisäisimme tämän 240 p4-instanssiin, voisimme kouluttaa 175B-parametrimallin 25 päivässä.
Keskustelimme myös uusimmista ominaisuuksista, jotka mahdollistavat laajamittaisen harjoittelun, nimittäin tensorin rinnakkaisuuden, optimoijan tilan sirpaloinnin, aktivoinnin tarkistuspisteen ja aktivoinnin purkamisen. Jaoimme joitain vinkkejä ja temppuja tämän mahdollistamiseksi Amazon SageMaker -koulutuksen avulla.
Kokeile sitä itse käyttäen samaa muistikirjaa, joka loi numeromme ja joka on saatavilla GitHubista täältä. Voit myös pyytää lisää GPU:ita AWS-tilillesi kautta pyytää palvelurajan hyväksyntää täällä.
Tietoja Tekijät
Emily Webber liittyi AWS:ään heti SageMakerin julkaisun jälkeen ja on yrittänyt kertoa siitä maailmalle siitä lähtien! Asiakkaille uusien ML-elämysten rakentamisen lisäksi Emily nauttii meditoinnista ja Tiibetin buddhalaisuuden opiskelusta.
Aditya Bindal on AWS Deep Learningin vanhempi tuotepäällikkö. Hän työskentelee tuotteissa, jotka helpottavat asiakkaiden syvällisen oppimisen mallien kouluttamista AWS: llä. Vapaa-ajallaan hän viettää aikaa tyttärensä kanssa, pelaa tennistä, lukee historiallista kaunokirjallisuutta ja matkustaa.
Luis Quintela on AWS SageMaker -mallin rinnakkaiskirjaston Software Developer Manager. Vapaa-ajallaan hänet löytää Harleylla ratsastamassa SF Bayn alueella.
- Coinsmart. Euroopan paras Bitcoin- ja kryptopörssi.
- Platoblockchain. Web3 Metaverse Intelligence. Tietoa laajennettu. VAPAA PÄÄSY.
- CryptoHawk. Altcoinin tutka. Ilmainen kokeilu.
- Lähde: https://aws.amazon.com/blogs/machine-learning/train-175-billion-parameter-nlp-models-with-model-parallel-additions-and-hugging-face-on-amazon-sagemaker/
- "
- 000
- 100
- 2020
- 39
- Meistä
- kiihdytin
- Tili
- saavutettu
- poikki
- lisä-
- osoite
- kehittynyt
- Kaikki
- jo
- Amazon
- Toinen
- sovellukset
- ALUE
- saatavissa
- AWS
- Lahti
- PARAS
- Suurimmat
- Miljardi
- Uutiset ja media
- Rakentaminen
- Aiheuttaa
- muuttaa
- pilvi
- koodi
- yhdistelmät
- Yhteinen
- Viestintä
- Konfigurointi
- sekaannus
- Kontit
- Ydin
- voisi
- Asiakkaat
- tiedot
- kehitetty
- Kehittäjä
- Kehitys
- laite
- Laitteet
- eri
- jaettu
- jakelu
- alas
- ajanut
- mahdollistaa
- erityisesti
- esimerkki
- experience
- Elämykset
- äärimmäinen
- Kasvot
- nopeampi
- Ominaisuus
- Ominaisuudet
- Kaunokirjallisuus
- sovittaa
- jälkeen
- Eteenpäin
- löytyi
- Puitteet
- koko
- toiminto
- general
- tuottaa
- GitHub
- menee
- hyvä
- Google Search
- GPU
- Tarvikkeet
- hyödyllinen
- Korostaa
- historiallinen
- Miten
- Miten
- HTTPS
- Sadat
- kasvoi
- tiedot
- innoittamana
- integroitu
- kysymykset
- IT
- Job
- liittyi
- hypätä
- pito
- Kieli
- suuri
- uusin
- käynnistää
- OPPIA
- oppiminen
- Taso
- Kirjasto
- kuormitus
- kone
- koneoppiminen
- Koneet
- Tekeminen
- johtaja
- Muisti
- ML
- malli
- mallit
- modulaarinen
- eniten
- liikkua
- nimittäin
- Luonnollinen
- verkko
- Uudet ominaisuudet
- solmut
- muistikirja
- numerot
- Muut
- Paperi
- kumppanuuteen
- suorituskyky
- kappale
- foorumi
- Suosittu
- mahdollinen
- ensisijainen
- Tuotteet
- Tuotteemme
- Profiilit
- toimittaa
- RAM
- RE
- Lukeminen
- suositella
- asiakirjat
- vähentää
- tulokset
- ajaa
- juoksu
- Said
- skaalautuva
- Asteikko
- skaalaus
- sdk
- Haku
- palvelu
- setti
- asetus
- sharding
- yhteinen
- merkittävä
- Koko
- So
- Tuotteemme
- erityisesti
- nopeus
- menot
- jakaa
- Osavaltio
- strategiat
- Strategia
- toimittaa
- taktiikka
- tekniikat
- testi
- maailma
- tuhansia
- Kautta
- aika
- vinkit
- vinkkejä ja niksejä
- yhdessä
- Aiheet
- kaupat
- koulutus
- ymmärtää
- käyttää
- käyttää
- visio
- sisällä
- työskentely
- toimii
- maailman-
- vuotta