Viime vuosina syväoppimisen alalla on tapahtunut nopeaa kehitystä. Vaikka laitteisto on parantunut, kuten NVIDIA:n ja Amazonin uusimman sukupolven kiihdytin, edistyneet koneoppimisen (ML) harjoittajat kohtaavat edelleen säännöllisesti ongelmia ottaa käyttöön laajoja syväoppimismallejaan sovelluksiin, kuten luonnollisen kielen käsittelyyn (NLP).
Aiemmassa viestissä keskustelimme ominaisuuksia ja konfiguroitavia asetuksia in Amazon SageMaker -mallin käyttöönotto Tämä voi tehdä johtopäätökset näistä suurista malleista helpommin. Tänään julkistamme uuden Amazon Sage Maker Deep Learning Container (DLC), jonka avulla voit aloittaa suuren mallipäätelmän muutamassa minuutissa. Tämä DLC pakkaa joitakin suosituimmista avoimen lähdekoodin kirjastoista mallien rinnakkaispäättelyyn, kuten DeepSpeed ja Hugging Face Accelerate.
Tässä viestissä käytämme uutta SageMakerin suuren mallin päättelyn DLC:tä kahden suosituimman suuren NLP-mallin käyttöönottamiseksi: BigSciencen BLOOM-176B ja Metan OPT-30B Hugging Face -arkistosta. Käytämme erityisesti DeepSpeedin Deep Java Library (DJL) -palvelu- ja tensorin rinnakkaisuustekniikoita saavuttaaksemme 0.1 sekunnin viiveen per merkki tekstin luomisen käyttötapauksessa.
Löydät täydelliset esimerkkimuistikirjamme osoitteestamme GitHub-arkisto.
Laajat mallien päättelytekniikat
Kielimallit ovat viime aikoina kasvaneet räjähdysmäisesti sekä kooltaan että suosioltaan. Helppo pääsy mallieläintarhoista, kuten Hugging Facesta, ja parannettu tarkkuus ja suorituskyky NLP-tehtävissä, kuten luokittelu ja tekstin luominen, harjoittavat yhä useammin näitä suuria malleja. Suuret mallit ovat kuitenkin usein liian suuria mahtumaan yhden kaasupolkimen muistiin. Esimerkiksi BLOOM-176B-malli voi vaatia yli 350 gigatavua kiihdytinmuistia, mikä ylittää huomattavasti nykyisten laitteistokiihdyttimien kapasiteetin. Tämä edellyttää mallin rinnakkaisten tekniikoiden käyttöä kirjastoista, kuten DeepSpeed ja Hugging Face Accelerate, jotta malli voidaan jakaa useille kiihdyttimille johtopäätösten tekemiseksi. Tässä viestissä käytämme SageMaker iso mallin päättelysäiliö luoda ja vertailla latenssia ja suoritustehoa käyttämällä näitä kahta avoimen lähdekoodin kirjastoa.
DeepSpeed ja Accelerate käyttävät erilaisia tekniikoita optimoidakseen suuria kielimalleja päätelmiä varten. Tärkein ero on DeepSpeedissä optimoitujen ytimien käyttö. Nämä ytimet voivat parantaa dramaattisesti päättelyviivettä vähentämällä pullonkauloja mallin laskentakaaviossa. Optimoituja ytimiä voi olla vaikea kehittää, ja ne ovat tyypillisesti erityisiä tietylle malliarkkitehtuurille; DeepSpeed tukee suosittuja suuria malleja, kuten OPT ja BLOOM näillä optimoiduilla ytimillä. Sitä vastoin Hugging Facen Accelerate-kirjasto ei sisällä optimoituja ytimiä kirjoitushetkellä. Kuten käymme läpi tulososiossa, tämä ero on vastuussa suuresta osasta DeepSpeedin suorituskyvystä Accelerateen verrattuna.
Toinen ero DeepSpeedin ja Acceleraten välillä on mallin rinnakkaisuuden tyyppi. Accelerate käyttää liukuhihnan yhdensuuntaisuutta osioidakseen mallin mallin piilotettujen kerrosten väliin, kun taas DeepSpeed käyttää tensorisuuntaisuutta osioidakseen itse tasot. Putkilinjan yhdensuuntaisuus on joustava lähestymistapa, joka tukee useampia mallityyppejä ja voi parantaa suorituskykyä, kun käytetään suurempia eräkokoja. Tensorin rinnakkaisuus vaatii enemmän viestintää GPU:iden välillä, koska mallikerrokset voidaan jakaa useiden laitteiden kesken, mutta ne voivat parantaa päättelyviivettä kytkemällä useita GPU:ita samanaikaisesti. Voit oppia lisää rinnakkaistekniikoista osoitteessa Johdatus malliparallelismiin ja Mallin rinnakkaisuus.
Ratkaisun yleiskatsaus
Jotta voimme isännöidä tehokkaasti suuria kielimalleja, tarvitsemme ominaisuuksia ja tukea seuraavilla avainalueilla:
- Ratkaisujen rakentaminen ja testaus – ML-kehityksen iteratiivisuuden vuoksi tarvitsemme kyvyn rakentaa, iteroida nopeasti ja testata, miten päätepäätepiste käyttäytyy, kun näitä malleja isännöidään, mukaan lukien kyky epäonnistua nopeasti. Näitä malleja voidaan tyypillisesti isännöidä vain suuremmissa ilmentymissä, kuten p4dn tai g5, ja mallien koon vuoksi johtopäätösilmentymän pyörittäminen ja minkä tahansa testiiteroinnin suorittaminen voi kestää hetken. Paikallisessa testauksessa on yleensä rajoituksia, koska tarvitset samankokoisen esiintymän testaamiseen, eikä näitä malleja ole helppo hankkia.
- Käyttöönotto ja käynnissä mittakaavassa – Mallitiedostot on ladattava päättelyinstanssiin, mikä on jo itsessään haaste kokoon nähden. Tar / Un-Tar esimerkkinä Bloom-176B:lle kestää noin tunnin luomiseen ja toisen tunnin lataamiseen. Tarvitsemme vaihtoehtoisen mekanismin mahdollistaaksemme helpon pääsyn mallitiedostoihin.
- Ladataan mallia singletonina – Monen työntekijän prosessissa meidän on varmistettava, että malli latautuu vain kerran, jotta emme törmää kilpailuolosuhteisiin emmekä kuluta turhia resursseja. Tässä viestissä näytämme tavan ladata suoraan Amazonin yksinkertainen tallennuspalvelu (Amazon S3). Tämä toimii kuitenkin vain, jos käytämme DJL:n oletusasetuksia. Lisäksi minkä tahansa päätepisteiden skaalauksen on kyettävä pyörimään muutamassa minuutissa, mikä vaatii uudelleen harkitsemista, kuinka mallit voidaan ladata ja jakaa.
- Kehysten jakaminen – Näiden mallien on yleensä oltava tyypillisiä tensorin rinnakkaismekanismilla tai liukuhihnan sirpaloinnilla tyypillisinä sharding-tekniikoina, ja meillä on edistyksellisiä konsepteja, kuten ZeRO-sharding, joka on rakennettu tensorihakauksen päälle. Lisätietoja sirpalointitekniikoista on kohdassa Mallin rinnakkaisuus. Tämän saavuttamiseksi meillä voi olla erilaisia yhdistelmiä ja käyttää kehyksiä NIVIDIAsta, DeepSpeedistä ja muista. Tämä edellyttää kykyä testata BYOC:ta tai käyttää 1P-säiliöitä ja iteroida ratkaisuja ja suorittaa vertailutestejä. Saatat myös haluta testata erilaisia isännöintivaihtoehtoja, kuten asynkroninen, palvelimeton ja muut.
- Laitteiston valinta – Laitteistovalintasi määräävät kaikki edellä mainitut kohdat ja muut liikennemallit, käyttötarpeet ja mallikoot.
Tässä viestissä käytämme DeepSpeedin optimoituja ytimiä ja tensorin rinnakkaistekniikoita BLOOM-176B:n ja OPT-30B:n isännöimiseen SageMakerissa. Vertailemme myös Acceleraten tuloksia osoittaaksemme optimoitujen ytimien ja tensorin rinnakkaisuuden suorituskykyedut. Lisätietoja DeepSpeedistä ja Acceleratesta on kohdassa DeepSpeed Inference: mahdollistaa muuntajamallien tehokkaan päättelyn ennennäkemättömässä mittakaavassa ja Uskomattoman nopea BLOOM-päätelmä DeepSpeed- ja Accelerate-toiminnolla.
Käytämme tässä esimerkissä mallinkäyttöratkaisuna DJLServingiä. DJLServing on korkean suorituskyvyn universaali mallin palveluratkaisu, joka perustuu Deep Java Library (DJL) -kirjastoon, joka on ohjelmointikieltä agnostikko. Lisätietoja DJL:stä ja DJLServingistä on osoitteessa Ota suuria malleja käyttöön Amazon SageMakerissa käyttämällä DJLServing- ja DeepSpeed-mallin rinnakkaisjohtopäätöstä.
On syytä huomata, että optimoidut ytimet voivat johtaa tarkkuuteen ja modifioituun laskentakaavioon, mikä voi teoriassa johtaa muuttuneeseen mallin käyttäytymiseen. Vaikka tämä saattaa toisinaan muuttaa päättelyn lopputulosta, emme odota näiden erojen vaikuttavan olennaisesti mallin perusarviointimittareihin. Siitä huolimatta harjoittajia kehotetaan varmistamaan, että mallin tulokset ovat odotettavissa näitä ytimiä käytettäessä.
Seuraavat vaiheet osoittavat, kuinka BLOOM-176B-malli otetaan käyttöön SageMakerissa DJLServingin ja SageMaker-suuren mallin päättelysäilin avulla. Täydellinen esimerkki löytyy myös sivuiltamme GitHub-arkisto.
DJLServing SageMaker DLC -kuvan käyttäminen
Käytä seuraavaa koodia käyttääksesi DJLServing SageMaker DLC -kuvaa sen jälkeen, kun olet korvannut alueen omalla alueellasi, jossa käytät kannettavaa:
Luo mallitiedostomme
Ensin luomme tiedoston nimeltä serving.properties
joka sisältää vain yhden rivin koodia. Tämä käskee DJL-mallipalvelimen käyttämään DeepSpeed-moottoria. Tiedosto sisältää seuraavan koodin:
serving.properties
on DJLServingin määrittelemä tiedosto, jota käytetään mallikohtaisten määritysten määrittämiseen.
Seuraavaksi luomme omamme model.py
tiedosto, joka määrittää koodin, joka tarvitaan mallin lataamiseen ja palvelemiseen. Koodissamme luemme TENSOR_PARALLEL_DEGREE
ympäristömuuttuja (oletusarvo on 1). Tämä asettaa laitteiden määrän, joille tensorin rinnakkaismoduulit on jaettu. Huomaa, että DeepSpeed tarjoaa muutaman sisäänrakennetun osion määritelmän, mukaan lukien yhden BLOOM-malleille. Käytämme sitä määrittämällä replace_method
ja relpace_with_kernel_inject
. Jos sinulla on mukautettu malli ja tarvitset DeepSpeediä osioiden tehokkaaseen osiointiin, sinun on vaihdettava relpace_with_kernel_inject
että false
ja lisää injection_policy
jotta ajonaikainen osio toimisi. Lisätietoja on kohdassa Alustus päättelyä varten. Esimerkissämme käytimme valmiiksi osioitua BLOOM-mallia DeepSpeedissä.
Toiseksi, vuonna model.py
tiedosto, lataamme mallin myös Amazon S3:sta, kun päätepiste on käännetty ylös. Malli ladataan /tmp
tilaa säilössä, koska SageMaker kartoittaa /tmp
että Amazonin elastisten lohkojen myymälä (Amazon EBS) -taltio, joka asennetaan, kun määritämme päätepisteen luontiparametrin VolumeSizeInGB
. Tapauksissa, kuten p4dn, jotka tulevat valmiiksi volyymiesiintymän mukana, voimme edelleen hyödyntää /tmp
säiliön päällä. Katso seuraava koodi:
DJLServing hallitsee ajonaikaista asennusta missä tahansa kohdassa määriteltyihin pip-paketteihin requirement.txt
. Tässä tiedostossa on:
Olemme luoneet hakemiston nimeltä code
ja model.py
, serving.properties
ja requirements.txt
tiedostot on jo luotu tähän hakemistoon. Voit tarkastella tiedostoja suorittamalla seuraavan koodin päätteestä:
Seuraavassa kuvassa näkyy sen rakenne model.tar.gz
.
Lopuksi luomme mallitiedoston ja lataamme sen Amazon S3:een:
Lataa ja tallenna malli Hugging Facesta (valinnainen)
Olemme toimittaneet tämän osan vaiheet siltä varalta, että haluat ladata mallin Amazon S3:een ja käyttää sitä sieltä. Vaiheet ovat GitHubin Jupyter-tiedostossa. Seuraava kuvakaappaus näyttää tilannekuvan vaiheista.
Luo SageMaker-malli
Luomme nyt a SageMaker malli. Käytämme Amazonin elastisten säiliörekisteri (Amazon ECR) -kuvan ja malliartefaktin edellisestä SageMaker-mallin luomisvaiheesta. Mallin asetuksissa määritämme TENSOR_PARALLEL_DEGREE=8
, mikä tarkoittaa, että malli on osioitu 8 GPU:lle. Katso seuraava koodi:
Kun suoritat Jupyter-tiedoston edellisen solun, näet seuraavanlaisen tulosteen:
Luo SageMaker-päätepiste
Voit käyttää testaukseen mitä tahansa esiintymää, jossa on useita GPU:ita. Tässä esittelyssä käytämme p4d.24xlarge-instanssia. Huomaa seuraavassa koodissa, kuinka asetamme ModelDataDownloadTimeoutInSeconds
, ContainerStartupHealthCheckTimeoutInSeconds
ja VolumeSizeInGB
parametrit suuren mallikoon mukaan. The VolumeSizeInGB
-parametria voidaan soveltaa GPU-esiintymiin, jotka tukevat EBS-taltioliitäntää.
Lopuksi luomme SageMaker-päätepisteen:
Näet sen tulostettuna seuraavassa koodissa:
Päätepisteen aloittaminen voi kestää hetken. Voit yrittää vielä muutaman kerran, jos törmäät siihen InsufficientInstanceCapacity
tai voit pyytää AWS:ltä tilisi rajan nostamista.
Suorituskyvyn viritys
Jos aiot käyttää tätä viestiä ja siihen liittyvää muistikirjaa eri mallin kanssa, kannattaa ehkä tutustua joihinkin SageMakerin, DeepSpeedin ja DJL:n tarjoamiin säädettäviin parametreihin. Näiden parametrien iteratiivisella kokeilulla voi olla merkittävä vaikutus isännöidyn suuren mallisi viiveeseen, suorituskykyyn ja kustannuksiin. Lisätietoja viritysparametreista, kuten työntekijöiden lukumäärästä, tensorin rinnakkaisuuden asteesta, työjonon koosta ja muista, on kohdassa DJL-palvelukokoonpanot ja Ota suuria malleja käyttöön Amazon SageMakerissa käyttämällä DJLServing- ja DeepSpeed-mallin rinnakkaisjohtopäätöstä.
tulokset
Tässä viestissä käytimme DeepSpeediä BLOOM-176B:n ja OPT-30B:n isännöimiseen SageMaker ML -esiintymissä. Seuraavassa taulukossa on yhteenveto suorituskykytuloksistamme, mukaan lukien vertailu Hugging Facen Acceleraten kanssa. Latenssi heijastaa millisekuntien määrää, joka kuluu 256-merkkisen merkkijonon tuottamiseen neljä kertaa (batch_size=4
) mallista. Suorituskyky heijastaa kunkin testin sekunnissa tuotettujen merkkien määrää. Hugging Face Acceleratessa käytimme kirjaston oletuslatausta GPU-muistikartoituksen kanssa. DeepSpeedissä käytimme sen nopeampaa tarkistuspisteiden latausmekanismia.
Malli | Kirjasto | Mallin tarkkuus | Erän koko | Rinnakkais tutkinto | Ilmentymä | Aika ladata (S) |
Latenssi (4 x 256 tunnuksen lähtö) | . | ||
. | . | . | . | . | . | . | P50 (neiti) |
P90 (neiti) |
P99 (neiti) |
suoritusteho (tokens/s) |
BLOOM-176B | Syvä nopeus | INT8 | 4 | 8 | p4d.24xlarge | 74.9 | 27,564 | 27,580 | 32,179 | 37.1 |
BLOOM-176B | Kiihdyttää | INT8 | 4 | 8 | p4d.24xlarge | 669.4 | 92,694 | 92,735 | 103,292 | 11.0 |
OPT-30B | Syvä nopeus | FP16 | 4 | 4 | g5.24xsuuri | 239.4 | 11,299 | 11,302 | 11,576 | 90.6 |
OPT-30B | Kiihdyttää | FP16 | 4 | 4 | g5.24xsuuri | 533.8 | 63,734 | 63,737 | 67,605 | 16.1 |
Latenssin näkökulmasta DeepSpeed on noin 3.4 kertaa nopeampi BLOOM-176B:lle ja 5.6 kertaa nopeampi OPT-30B:lle kuin Accelerate. DeepSpeedin optimoidut ytimet ovat vastuussa suuresta osasta tästä latenssierosta. Näiden tulosten perusteella suosittelemme käyttämään DeepSpeed over Acceleratea, jos valitsemaasi mallia tuetaan.
On myös syytä huomata, että mallin latausajat DeepSpeedillä olivat paljon lyhyemmät, mikä tekee siitä paremman vaihtoehdon, jos odotat tarvitsevasi nopeasti suurentaa päätepisteiden määrää. Acceleraten joustavampi liukuhihnan yhdensuuntaisuustekniikka voi olla parempi vaihtoehto, jos sinulla on malleja tai mallien tarkkuutta, jota DeepSpeed ei tue.
Nämä tulokset osoittavat myös eron eri mallikokojen latenssissa ja suorituskyvyssä. Testeissämme OPT-30B tuottaa 2.4 kertaa enemmän tokeneita aikayksikköä kohti kuin BLOOM-176B ilmentymätyypillä, joka on yli kolme kertaa halvempi. Yksikköhintaan laskettuna G30xl-esiintymän OPT-5.24B on 8.9 kertaa parempi kuin p176d.4xl-esiintymän BLOOM-24B. Jos sinulla on tiukat viive-, suorituskyky- tai kustannusrajoitukset, harkitse pienimmän mahdollisen mallin käyttöä, joka silti täyttää toiminnalliset vaatimukset.
Puhdistaa
Osana parhaita käytäntöjä on aina suositeltavaa poistaa käyttämättömät esiintymät. Alla oleva koodi näyttää, kuinka esiintymät poistetaan.
Vaihtoehtoisesti voit poistaa mallin tarkistuspisteen S3:sta
Yhteenveto
Tässä viestissä osoitimme kuinka käyttää SageMakerin suuria mallien päättelysäilöjä kahden suuren kielimallin, BLOOM-176B ja OPT-30B, isännöimiseen. Käytimme DeepSpeedin mallin rinnakkaistekniikoita useiden GPU:iden kanssa yhdessä SageMaker ML -esiintymässä.
Lisätietoja Amazon SageMakerista ja sen suurista mallien päättelyominaisuuksista on osoitteessa Amazon SageMaker tukee nyt suurten mallien käyttöönottoa konfiguroitavan volyymin koon ja aikakatkaisukiintiöiden avulla ja Reaaliaikainen päätelmä.
Tietoja kirjoittajista
Simon Zamarin on tekoäly / ML-ratkaisuarkkitehti, jonka pääpaino on asiakkaiden auttamisessa hyödyntämään arvoa tietovaroistaan. Vapaa-ajallaan Simon nauttii viettää aikaa perheen kanssa, lukea sci-fiä ja työskennellä erilaisissa DIY-taloprojekteissa.
Rupinder Grewal on AWS:n Sr Ai/ML Specialist Solutions -arkkitehti. Tällä hetkellä hän keskittyy mallien ja MLO:iden tarjoamiseen SageMakerissa. Ennen tätä roolia hän on työskennellyt koneoppimisinsinöörinä mallien rakentamisessa ja isännöinnissa. Työn ulkopuolella hän pelaa tennistä ja pyöräilee vuoristopoluilla.
Frank Liu on AWS Deep Learning -ohjelmiston insinööri. Hän keskittyy rakentamaan innovatiivisia syvällisiä oppimisvälineitä ohjelmistoinsinööreille ja tutkijoille. Vapaa-ajallaan hän nauttii patikoinnista ystävien ja perheen kanssa.
Alan Tan on vanhempi tuotepäällikkö SageMakerin kanssa, joka johtaa suuria mallipäätelmiä. Hän on intohimoinen koneoppimisen soveltamisesta Analyticsin alueella. Työn ulkopuolella hän viihtyy ulkona.
Dhawal Patel on AWS:n koneoppimisarkkitehti. Hän on työskennellyt organisaatioiden kanssa suurista yrityksistä keskikokoisiin startup-yrityksiin hajautettuun tietojenkäsittelyyn ja tekoälyyn liittyvien ongelmien parissa. Hän keskittyy syväoppimiseen, mukaan lukien NLP- ja Computer Vision -alueet. Hän auttaa asiakkaita tekemään korkean suorituskyvyn mallipäätelmiä SageMakerissa.
Qing Lan on ohjelmistokehitysinsinööri AWS:ssä. Hän on työskennellyt useiden haastavien tuotteiden parissa Amazonissa, mukaan lukien korkean suorituskyvyn ML-johtopäätösratkaisut ja korkean suorituskyvyn lokijärjestelmä. Qingin tiimi lanseerasi onnistuneesti ensimmäisen Billion-parametrin mallin Amazon Advertisingissä erittäin alhaisella latenssilla. Qingillä on syvällinen tietämys infrastruktuurin optimoinnista ja Deep Learning -kiihdytyksestä.
Qingwei Li on koneoppimisen asiantuntija Amazon Web Services -palvelussa. Hän sai tohtorin tutkinnon operatiivisessa tutkimuksessa sen jälkeen, kun hän rikkoi neuvonantajan tutkimusapurahatilin ja ei toimittanut lupaamaansa Nobelin palkintoa. Tällä hetkellä hän auttaa finanssi- ja vakuutusalan asiakkaita rakentamaan koneoppimisratkaisuja AWS: lle. Vapaa-ajallaan hän pitää lukemisesta ja opettamisesta.
Robert Van Dusen on vanhempi tuotepäällikkö Amazon SageMakerissa. Hän johtaa syväoppimismallien optimointia sovelluksille, kuten suurille mallipäätelmille.
Siddharth Venkatesan on AWS Deep Learningin ohjelmistosuunnittelija. Tällä hetkellä hän keskittyy rakentamaan ratkaisuja suuriin mallipäätelmiin. Ennen AWS:ää hän työskenteli Amazon Grocery -organisaatiossa uusien maksuominaisuuksien rakentamisessa asiakkaille maailmanlaajuisesti. Työn ulkopuolella hän pitää hiihtämisestä, ulkoilusta ja urheilun katsomisesta.
- Lisäasetukset (300)
- AI
- ai taide
- ai taiteen generaattori
- ai robotti
- Amazon Sage Maker
- tekoäly
- tekoälyn sertifiointi
- tekoäly pankkitoiminnassa
- tekoäly robotti
- tekoälyrobotit
- tekoälyohjelmisto
- AWS-koneoppiminen
- blockchain
- blockchain-konferenssi ai
- coingenius
- keskustelullinen tekoäly
- kryptokonferenssi ai
- dall's
- syvä oppiminen
- google ai
- koneoppiminen
- Platon
- plato ai
- Platonin tietotieto
- Platon peli
- PlatonData
- platopeliä
- mittakaava ai
- syntaksi
- zephyrnet