V zadnjih nekaj letih je prišlo do hitrega razvoja na področju globokega učenja. Čeprav se je strojna oprema izboljšala, na primer z najnovejšo generacijo pospeševalnikov NVIDIA in Amazon, se izvajalci naprednega strojnega učenja (ML) še vedno redno srečujejo s težavami pri uvajanju svojih velikih modelov globokega učenja za aplikacije, kot je obdelava naravnega jezika (NLP).
V prejšnji objavi smo razpravljali zmogljivosti in nastavljive nastavitve in Uvedba modela Amazon SageMaker ki lahko olajša sklepanje s temi velikimi modeli. Danes objavljamo novo Amazon SageMaker Deep Learning Container (DLC), ki ga lahko uporabite za začetek sklepanja velikih modelov v nekaj minutah. to DLC paketi nekaterih najbolj priljubljenih odprtokodnih knjižnic za vzporedno sklepanje modelov, kot sta DeepSpeed in Hugging Face Accelerate.
V tej objavi uporabljamo nov DLC za sklepanje velikih modelov SageMaker za uvedbo dveh najbolj priljubljenih velikih modelov NLP: BigScience's BLOOM-176B in Meta OPT-30B iz skladišča Hugging Face. Zlasti uporabljamo storitve strežbe Deep Java Library (DJL) in tehnike paralelizma tenzorjev podjetja DeepSpeed, da dosežemo 0.1 sekundno zakasnitev na žeton v primeru uporabe generiranja besedila.
Naše celotne primere zvezkov najdete v našem GitHub repozitorij.
Tehnike sklepanja velikih modelov
Jezikovni modeli so nedavno eksplodirali tako v velikosti kot v priljubljenosti. Z enostavnim dostopom iz živalskih vrtov modelov, kot je Hugging Face, ter izboljšano natančnostjo in zmogljivostjo pri nalogah NLP, kot sta klasifikacija in ustvarjanje besedila, praktiki vedno bolj posegajo po teh velikih modelih. Vendar so veliki modeli pogosto preveliki, da bi jih lahko spravili v pomnilnik enega pospeševalnika. Na primer, model BLOOM-176B lahko zahteva več kot 350 gigabajtov pomnilnika pospeševalnika, kar daleč presega zmogljivost strojnih pospeševalnikov, ki so danes na voljo. To zahteva uporabo modelnih vzporednih tehnik iz knjižnic, kot sta DeepSpeed in Hugging Face Accelerate, za distribucijo modela med več pospeševalniki za sklepanje. V tej objavi uporabljamo SageMaker velik vsebnik sklepanja modela za ustvarjanje in primerjavo zakasnitve in zmogljivosti prepustnosti z uporabo teh dveh odprtokodnih knjižnic.
DeepSpeed in Accelerate uporabljata različne tehnike za optimizacijo velikih jezikovnih modelov za sklepanje. Ključna razlika je pri DeepSpeedu uporaba optimiziranih jeder. Ta jedra lahko dramatično izboljšajo zakasnitev sklepanja z zmanjšanjem ozkih grl v računskem grafu modela. Optimizirana jedra je lahko težko razviti in so običajno specifična za določeno arhitekturo modela; DeepSpeed podpira priljubljene velike modele, kot sta OPT in BLOOM s temi optimiziranimi jedri. V nasprotju s tem knjižnica Accelerate Hugging Face v času pisanja ne vključuje optimiziranih jeder. Kot razpravljamo v razdelku o rezultatih, je ta razlika odgovorna za velik del zmogljivosti, ki jo ima DeepSpeed pred Accelerate.
Druga razlika med DeepSpeed in Accelerate je vrsta vzporednosti modela. Accelerate uporablja paralelizem cevovoda za razdelitev modela med skrite plasti modela, medtem ko DeepSpeed uporablja tenzorski paralelizem za razdelitev samih plasti. Paralelizem cevovoda je prilagodljiv pristop, ki podpira več vrst modelov in lahko izboljša prepustnost, ko se uporabljajo večje velikosti paketov. Paralelizem tenzorjev zahteva več komunikacije med grafičnimi procesorji, ker se sloji modela lahko razširijo na več naprav, vendar lahko izboljšajo zakasnitev sklepanja s hkratnim vključevanjem več grafičnih procesorjev. Več o tehnikah paralelizma lahko izveste v Uvod v modelni paralelizem in Paralelizem modela.
Pregled rešitev
Za učinkovito gostovanje velikih jezikovnih modelov potrebujemo funkcije in podporo na naslednjih ključnih področjih:
- Gradnja in testiranje rešitev – Glede na iterativno naravo razvoja strojnega jezika potrebujemo zmožnost gradnje, hitrega ponavljanja in testiranja, kako se bo končna točka sklepanja obnašala, ko bodo ti modeli gostovani, vključno z zmožnostjo hitre odpovedi. Te modele je običajno mogoče gostiti le na večjih primerkih, kot sta p4dn ali g5, in glede na velikost modelov lahko traja nekaj časa, da zavrtimo primerek sklepanja in izvedemo morebitno ponovitev preizkusa. Lokalno testiranje ima običajno omejitve, ker za testiranje potrebujete primerek podobne velikosti, teh modelov pa ni enostavno dobiti.
- Uvajanje in izvajanje v velikem obsegu – Datoteke modela je treba naložiti v primerke sklepanja, kar je samo po sebi izziv glede na velikost. Tar / Un-Tar kot primer za Bloom-176B traja približno 1 uro za ustvarjanje in še eno uro za nalaganje. Potrebujemo nadomestni mehanizem, ki omogoča enostaven dostop do datotek modela.
- Nalaganje modela kot singleton – Za proces z več delavci moramo zagotoviti, da se model naloži samo enkrat, da ne naletimo na tekmovalne pogoje in dodatno porabimo nepotrebne vire. V tej objavi prikazujemo način nalaganja neposredno iz Preprosta storitev shranjevanja Amazon (Amazon S3). Vendar to deluje le, če uporabimo privzete nastavitve DJL. Poleg tega mora imeti možnost, da se vsako skaliranje končnih točk zavrti v nekaj minutah, kar zahteva ponovni premislek o tem, kako bi se lahko modeli naložili in porazdelili.
- Ogrodja za razčlenjevanje – Ti modeli morajo biti običajno , običajno z mehanizmom vzporednosti tenzorjev ali s cevovodnim drobljenjem kot tipičnimi tehnikami drobljenja, in imamo napredne koncepte, kot je drobljenje ZeRO, zgrajeno na vrhu tenzorskega drobljenja. Za več informacij o tehnikah razrezovanja glejte Paralelizem modela. Da bi to dosegli, lahko imamo različne kombinacije in uporabljamo okvire NIVIDIA, DeepSpeed in drugih. Za to je potrebna možnost testiranja BYOC ali uporabe vsebnikov 1P ter ponavljanja rešitev in izvajanja primerjalnih testov. Morda boste želeli preizkusiti tudi različne možnosti gostovanja, kot so asinhrono, brez strežnika in druge.
- Izbira strojne opreme – Vašo izbiro strojne opreme določajo vse prej omenjene točke in nadaljnji vzorci prometa, potrebe primerov uporabe in velikosti modelov.
V tej objavi uporabljamo optimizirana jedra DeepSpeed in tehnike paralelizma tenzorjev za gostovanje BLOOM-176B in OPT-30B na SageMakerju. Primerjamo tudi rezultate iz programa Accelerate, da pokažemo prednosti delovanja optimiziranih jeder in paralelizma tenzorjev. Za več informacij o DeepSpeed in Accelerate glejte DeepSpeed Inference: omogočanje učinkovitega sklepanja transformatorskih modelov v neverjetnem obsegu in Neverjetno hitro sklepanje BLOOM z DeepSpeed in Accelerate.
V tem primeru kot modelno rešitev za serviranje uporabljamo DJLServing. DJLServing je visoko zmogljiva univerzalna rešitev za streženje modelov, ki jo poganja Deep Java Library (DJL), ki je agnostična za programski jezik. Če želite izvedeti več o DJL in DJLServing, glejte Razmestite velike modele v Amazon SageMaker z vzporednim sklepanjem modelov DJLServing in DeepSpeed.
Omeniti velja, da lahko optimizirana jedra povzročijo spremembe natančnosti in spremenjen računski graf, kar bi lahko teoretično povzročilo spremenjeno vedenje modela. Čeprav bi to lahko občasno spremenilo izid sklepanja, ne pričakujemo, da bodo te razlike bistveno vplivale na osnovne meritve vrednotenja modela. Kljub temu strokovnjakom svetujemo, da pri uporabi teh jeder potrdijo, da so rezultati modela pričakovani.
Naslednji koraki prikazujejo, kako razmestiti model BLOOM-176B v SageMaker z uporabo DJLServing in velikega vsebnika sklepanja modela SageMaker. Celoten primer je na voljo tudi v naši GitHub repozitorij.
Uporaba slike DJLServing SageMaker DLC
Uporabite naslednjo kodo za uporabo slike DJLServing SageMaker DLC po zamenjavi regije z vašo specifično regijo, v kateri uporabljate prenosni računalnik:
Ustvarite datoteko našega modela
Najprej ustvarimo datoteko z imenom serving.properties
ki vsebuje samo eno vrstico kode. To strežniku modela DJL sporoči, naj uporablja mehanizem DeepSpeed. Datoteka vsebuje naslednjo kodo:
serving.properties
je datoteka, ki jo definira DJLServing in se uporablja za konfiguracijo konfiguracije po modelu.
Nato ustvarimo svoje model.py
datoteko, ki definira kodo, potrebno za nalaganje in nato serviranje modela. V naši kodi beremo v TENSOR_PARALLEL_DEGREE
spremenljivka okolja (privzeta vrednost je 1). To nastavi število naprav, po katerih so porazdeljeni tenzorski paralelni moduli. Upoštevajte, da DeepSpeed ponuja nekaj vgrajenih definicij particij, vključno z eno za modele BLOOM. Uporabljamo ga tako, da navedemo replace_method
in relpace_with_kernel_inject
. Če imate model po meri in potrebujete DeepSpeed za učinkovito particioniranje, ga morate spremeniti relpace_with_kernel_inject
do false
in dodaj injection_policy
da bo izvajalna particija delovala. Za več informacij glejte Inicializacija za sklepanje. Za naš primer smo uporabili vnaprej particioniran model BLOOM na DeepSpeed.
Drugič, v model.py
datoteko, naložimo tudi model iz Amazon S3, potem ko se končna točka zavrti. Model je naložen v /tmp
prostora na vsebniku, ker SageMaker preslika /tmp
k Trgovina z elastičnimi bloki Amazon (Amazon EBS), ki je nameščen, ko podamo parameter za ustvarjanje končne točke VolumeSizeInGB
. Za primere, kot je p4dn, ki so vnaprej zgrajeni s primerkom glasnosti, lahko še naprej izkoriščamo /tmp
na posodi. Oglejte si naslednjo kodo:
DJLServing upravlja namestitev med izvajanjem na vseh paketih pip, definiranih v requirement.txt
. Ta datoteka bo imela:
Ustvarili smo imenik z imenom code
in model.py
, serving.properties
in requirements.txt
v tem imeniku je že ustvarjenih . Za ogled datotek lahko s terminala zaženete naslednjo kodo:
Naslednja slika prikazuje strukturo model.tar.gz
.
Na koncu ustvarimo datoteko modela in jo naložimo v Amazon S3:
Prenesite in shranite model iz Hugging Face (izbirno)
V tem razdelku smo zagotovili korake, če želite prenesti model v Amazon S3 in ga uporabljati od tam. Koraki so na voljo v datoteki Jupyter na GitHubu. Naslednji posnetek zaslona prikazuje posnetek korakov.
Ustvarite model SageMaker
Zdaj ustvarjamo a Model SageMaker. Uporabljamo Registar elastičnih zabojnikov Amazon Slika (Amazon ECR) in artefakt modela iz prejšnjega koraka za ustvarjanje modela SageMaker. V nastavitvi modela konfiguriramo TENSOR_PARALLEL_DEGREE=8
, kar pomeni, da je model razdeljen na 8 GPE. Oglejte si naslednjo kodo:
Ko zaženete prejšnjo celico v datoteki Jupyter, vidite rezultat, podoben naslednjemu:
Ustvarite končno točko SageMaker
Za testiranje lahko uporabite poljubne primerke z več grafičnimi procesorji. V tej predstavitvi uporabljamo primerek p4d.24xlarge. V naslednji kodi si oglejte, kako smo nastavili ModelDataDownloadTimeoutInSeconds
, ContainerStartupHealthCheckTimeoutInSeconds
in VolumeSizeInGB
parametri za prilagoditev velike velikosti modela. The VolumeSizeInGB
parameter velja za primerke GPE, ki podpirajo priponko nosilca EBS.
Nazadnje ustvarimo končno točko SageMaker:
Vidite ga natisnjenega v naslednji kodi:
Zagon končne točke lahko traja nekaj časa. Lahko poskusite še nekajkrat, če naletite na InsufficientInstanceCapacity
napako ali pa pri AWS vložite zahtevo za povečanje omejitve v vašem računu.
Nastavitev zmogljivosti
Če nameravate to objavo in spremljajoči prenosni računalnik uporabiti z drugim modelom, boste morda želeli raziskati nekatere nastavljive parametre, ki jih ponujajo SageMaker, DeepSpeed in DJL. Ponavljajoče eksperimentiranje s temi parametri lahko pomembno vpliva na zakasnitev, prepustnost in stroške vašega gostujočega velikega modela. Če želite izvedeti več o nastavitvah parametrov, kot so število delavcev, stopnja vzporednosti tenzorjev, velikost čakalne vrste opravil in drugi, glejte DJL Serving konfiguracije in Razmestite velike modele v Amazon SageMaker z vzporednim sklepanjem modelov DJLServing in DeepSpeed.
Rezultati
V tej objavi smo uporabili DeepSpeed za gostovanje BLOOM-176B in OPT-30B na instancah SageMaker ML. Naslednja tabela povzema naše rezultate uspešnosti, vključno s primerjavo s Hugging Face's Accelerate. Zakasnitev odraža število milisekund, ki so potrebne, da se štirikrat ustvari niz s 256 žetoni (batch_size=4
) od modela. Prepustnost odraža število žetonov, proizvedenih na sekundo za vsak test. Za Hugging Face Accelerate smo uporabili privzeto nalaganje knjižnice s preslikavo pomnilnika GPU. Za DeepSpeed smo uporabili hitrejši mehanizem nalaganja kontrolnih točk.
Model | Knjižnica | Natančnost modela | Velikost serije | Vzporedna diploma | Primerek | Čas za nalaganje (I) |
Zakasnitev (4 x 256 izhodnih žetonov) | . | ||
. | . | . | . | . | . | . | P50 (gospa) |
P90 (gospa) |
P99 (gospa) |
Pretočnost (žetoni/s) |
BLOOM-176B | DeepSpeed | INT8 | 4 | 8 | p4d.24xvelika | 74.9 | 27,564 | 27,580 | 32,179 | 37.1 |
BLOOM-176B | Pospešite | INT8 | 4 | 8 | p4d.24xvelika | 669.4 | 92,694 | 92,735 | 103,292 | 11.0 |
OPT-30B | DeepSpeed | FP16 | 4 | 4 | g5.24xvelika | 239.4 | 11,299 | 11,302 | 11,576 | 90.6 |
OPT-30B | Pospešite | FP16 | 4 | 4 | g5.24xvelika | 533.8 | 63,734 | 63,737 | 67,605 | 16.1 |
Z vidika zakasnitve je DeepSpeed približno 3.4-krat hitrejši za BLOOM-176B in 5.6-krat hitrejši za OPT-30B kot Accelerate. Optimizirana jedra DeepSpeed so odgovorna za velik del te razlike v zakasnitvi. Glede na te rezultate priporočamo uporabo DeepSpeed namesto Accelerate, če je vaš izbrani model podprt.
Omeniti velja tudi, da so bili časi nalaganja modela z DeepSpeed veliko krajši, zaradi česar je boljša možnost, če predvidevate, da boste morali hitro povečati število končnih točk. Prilagodljivejša tehnika paralelizma cevovoda Accelerate je morda boljša možnost, če imate modele ali natančnosti modelov, ki jih DeepSpeed ne podpira.
Ti rezultati prav tako prikazujejo razliko v zakasnitvi in prepustnosti različnih velikosti modelov. V naših testih OPT-30B ustvari 2.4-kratno število žetonov na časovno enoto kot BLOOM-176B na vrsti primerka, ki je več kot trikrat cenejši. Na podlagi cene na enoto prepustnosti je OPT-30B na instanci g5.24xl 8.9-krat boljši od BLOOM-176B na instanci p4d.24xl. Če imate stroge omejitve zakasnitve, prepustnosti ali stroškov, razmislite o uporabi najmanjšega možnega modela, ki bo še vedno dosegal funkcionalne zahteve.
Čiščenje
Kot del najboljših praks je vedno priporočljivo izbrisati nedejavne primerke. Spodnja koda prikazuje, kako izbrišete primerke.
Po želji izbrišite kontrolno točko modela iz vašega S3
zaključek
V tej objavi smo pokazali, kako uporabiti vsebnike sklepanja velikih modelov SageMaker za gostovanje dveh velikih jezikovnih modelov, BLOOM-176B in OPT-30B. Uporabili smo vzporedne tehnike modela DeepSpeed z več grafičnimi procesorji na enem primerku SageMaker ML.
Za več podrobnosti o Amazon SageMaker in njegovih zmožnostih sklepanja velikih modelov glejte Amazon SageMaker zdaj podpira uvajanje velikih modelov prek nastavljive velikosti nosilca in časovnih omejitev in Sklepanje v realnem času.
O avtorjih
Simon Zamarin je arhitekt rešitev AI / ML, katerega glavni poudarek je pomagati strankam izvleči vrednost iz njihovih podatkovnih sredstev. V prostem času Simon rad preživlja čas z družino, bere znanstvene fantastike in dela na različnih hišnih projektih.
Rupinder Grewal je Sr Ai/ML Specialist Solutions Architect pri AWS. Trenutno se osredotoča na streženje modelov in MLO na SageMakerju. Pred to vlogo je delal kot inženir strojnega učenja za gradnjo in gostovanje modelov. Izven službe rad igra tenis in kolesari po gorskih poteh.
Frank Liu je programski inženir za globoko učenje AWS. Osredotoča se na izdelavo inovativnih orodij za globoko učenje za programske inženirje in znanstvenike. V prostem času uživa na pohodništvu s prijatelji in družino.
Alan Tan je višji produktni vodja pri podjetju SageMaker, ki vodi prizadevanja za sklepanje velikih modelov. Navdušen je nad uporabo strojnega učenja na področju analitike. Izven dela uživa na prostem.
Dhawal Patel je glavni arhitekt strojnega učenja pri AWS. Sodeloval je z organizacijami, od velikih podjetij do srednje velikih zagonskih podjetij, pri problemih, povezanih s porazdeljenim računalništvom in umetno inteligenco. Osredotoča se na poglobljeno učenje, vključno s področja NLP in računalniškega vida. Strankam pomaga doseči visoko zmogljivo sklepanje o modelih na SageMakerju.
Qing Lan je inženir za razvoj programske opreme v AWS. Delal je na več zahtevnih izdelkih v Amazonu, vključno z visoko zmogljivimi rešitvami sklepanja ML in visoko zmogljivim sistemom beleženja. Qingova ekipa je uspešno lansirala prvi model z milijardami parametrov v Amazon Advertising z zelo nizko zahtevano zakasnitvijo. Qing ima poglobljeno znanje o optimizaciji infrastrukture in pospeševanju globokega učenja.
Qingwei Li je strokovnjak za strojno učenje pri Amazon Web Services. Doktoriral je v operacijskem raziskovanju, potem ko je zlomil račun svojega svetovalca za raziskovalno pomoč in mu ni uspel izročiti Nobelove nagrade, ki jo je obljubil. Trenutno strankam v finančni in zavarovalniški industriji pomaga pri izdelavi rešitev strojnega učenja na AWS. V prostem času rad bere in poučuje.
Robert Van Dusen je višji produktni vodja pri Amazon SageMaker. Vodi optimizacijo modela globokega učenja za aplikacije, kot je sklepanje velikih modelov.
Siddharth Venkatesan je programski inženir v AWS Deep Learning. Trenutno se osredotoča na gradnjo rešitev za sklepanje velikih modelov. Pred AWS je delal v organizaciji Amazon Grocery in gradil nove plačilne funkcije za stranke po vsem svetu. Izven službe uživa v smučanju, na prostem in spremlja šport.
- Napredno (300)
- AI
- ai art
- ai art generator
- imajo robota
- Amazon SageMaker
- Umetna inteligenca
- certificiranje umetne inteligence
- umetna inteligenca v bančništvu
- robot z umetno inteligenco
- roboti z umetno inteligenco
- programska oprema za umetno inteligenco
- Strojno učenje AWS
- blockchain
- blockchain konferenca ai
- coingenius
- pogovorna umetna inteligenca
- kripto konferenca ai
- dall's
- globoko učenje
- strojno učenje
- platon
- platon ai
- Platonova podatkovna inteligenca
- Igra Platon
- PlatoData
- platogaming
- lestvica ai
- sintaksa
- zefirnet