A GPT-NeoX 20B telepítése a termelésben kihívást jelent, és ezt a nehezebb úton tanultuk meg az NLP Cloudnál... Ebben a cikkben a GPT-NeoX 20B használatával kapcsolatos számos trükkről mesélünk, és különösen arról, hogyan kezeljük a DeepSpeedet a termelésben.
A GPT-NeoX 20B a legnagyobb nyílt forráskódú természetes nyelvfeldolgozó modell e sorok írásakor.
Az EleutherAI 2 héttel ezelőtt adta ki. 20 milliárd paraméteren képezték ki, 1 év kemény, kihívásokkal teli munka után. Az egyik fő nehézségüknek az tűnt, hogy képesek legyenek megfelelő párhuzamos architektúrát létrehozni, hogy a modellt több GPU-n is hatékonyan lehessen képezni.
Korábbi modelljüket, a GPT-J-t a Google TPU-kon képezték ki, és TPU-kon való használatra tervezték. A GPT-NeoX 20B belső architektúrája gyökeresen más, és GPU-kon való használatra készült. Az elképzelés az, hogy ez legyen az első egy még nagyobb modellekből álló sorozat első darabja (a cél itt a GPT-3 utolérése).
A GPT-NeoX 20 egy szöveggeneráló modell, ami azt jelenti, hogy képes szöveget írni Ön helyett, és valójában szinte bármilyen természetes nyelvi feldolgozási felhasználási esetet nagy pontossággal megvalósítani: blogbejegyzés generálás, chatbotok, szövegosztályozás, hangulatelemzés, kulcsszavak kinyerése, kódgenerálás, entitás-kivonatolás, szándékosztályozás, kérdésválaszolás és még sok más....
Nem kétséges, hogy sok kutató és vállalat fogja kihasználni ezt az új modellt, és nagyszerű eredményeket fog elérni. De van egy kihívás: hogyan lehet a GPT-NeoX 20B-t alkalmazni?
Az első kihívás, amellyel a GPT-NeoX 20B termelésben történő telepítése során szembesülni kell, a szükséges fejlett hardver.
A GPT-J-t még mindig be lehetett vetni fogyasztói hardveren, még ha nagyon drága is volt. Például egy nagyon jó CPU-n (még ha az eredmény fájdalmasan lassú is volt) vagy egy fejlett játék GPU-n, mint például az NVIDIA RTX 3090. A GPT-NeoX 20B azonban olyan nagy, hogy ez már nem lehetséges.
Alapvetően a GPT-NeoX legalább 42 GB VRAM-ot és 40 GB lemezterületet igényel (és igen, itt a vékony fp16-os verzióról beszélünk). Kevés GPU felel meg ezeknek a követelményeknek. A legfontosabbak az NVIDIA A100, A40 és az RTX A6000.
Ezek a GPU-k nem csak nagyon drágák, de a globális félvezetőhiány miatt manapság nehéz is hozzájutni.
A legjobb megoldás itt a több GPU-s architektúra.
Ha a modell nem fér el egyetlen GPU-n, akkor megpróbálhatja több GPU-ra felosztani.
Ez egy érdekes lehetőség 2 okból. Először is, az infrastruktúra horizontális skálázása gyakran olcsóbb, mint a vertikális skálázás. Ez igaz a szerverekre és igaz a GPU-kra is. Másodszor, könnyebb több kis GPU-t, például az NVIDIA Tesla T4-et beszerezni, mint a nagyobb GPU-kat, például az NVIDIA A40-et.
Sajnos egy gépi tanulási modell több GPU-ra való felosztása technikai kihívást jelent. Hugging Face készített egy remek cikket a modellpárhuzamosításról és a választási lehetőségekről. Itt olvasd el. De szerencsére az EleutherAI úgy tervezte meg a GPT-NeoX 20B-t, hogy az könnyen párhuzamosítható legyen több GPU-n, akár a képzésre, akár a következtetésre.
A GPT-NeoX architektúra alapja a Deepspeed. A Deepspeed a Microsoft egyik keretrendszere, amelyet eredetileg arra terveztek, hogy a tréningeket több GPU között párhuzamosítsa, és egyre inkább használják következtetésre is. Az EleutherAI elvégezte az összes nehéz munkát, így a GPT-NeoX párhuzamosítása olyan egyszerű, mint egy szám megváltoztatása egy konfigurációs fájlban.
Extract from the GPT-NeoX docs about parallelism
Azonban a Deepspeed telepítése a termelésben az API-n keresztül történő online következtetésekhez nehéz... A Deepspeedet nem úgy tervezték, hogy könnyen integrálható legyen webszerverekbe. Az NLP Cloudnál a nehezebb úton tanultuk meg, de némi kemény munka után végül sikerült kitalálnunk egy hatékony módszert arra, hogy a Deepspeed és a GPT-NeoX működjön az API-nk mögött.
Tegyük fel, hogy sikerült a megfelelő hardvert biztosítani és helyesen telepíteni a GPT-NeoX 20B-t a Deepspeeddel. Most van néhány figyelmeztetés, amivel tisztában kell lennie.
Először is, a GPT-J-hez képest a paraméterek (top k, top p és hőmérséklet) nem ugyanolyan hatással vannak a modellre. Ha tehát sikerült jó konfigurációt találnia a GPT-J-hez, ne vegye biztosra: a GPT-NeoX-szel új teszteket kell végeznie.
Végül, még ha a bemeneti méret 2048 tokenig is mehet, akkor is több memóriát igényel, mint a fent említett 42GB alap...
A GPT modellek meglehetősen lassúak, és ez alól a GPT-NeoX 20B sem kivétel. Így az alkalmazás átviteli sebességének javítása érdekében érdemes lehet egy kötegelt következtetési megoldáson dolgozni.
Erre egyelőre nem találtunk jó megoldást az NLP Cloudnál.
A GPT-NeoX kódja úgy készült, hogy egyetlen kérésen belül egyszerre több következtetést is el lehet végezni. De a tesztjeink során a válaszidő lineárisan nőtt a következtetések számával, ami egyfajta vereséget okoz a kötegelt következtetés céljának...
A GPT-NeoX 20B határozottan nehezen alkalmazható a termelésben. A szöveggenerálás minősége elképesztő, de keveseknek lesz kapacitása arra, hogy ténylegesen telepítsék ezt a modellt.
Minden eddiginél inkább úgy tűnik, hogy a megoldás az lesz, hogy egy olyan felhőszolgáltatásra támaszkodjunk, mint az NLP Cloud, hogy ezt a modellt használhassuk.
Ha van visszajelzése ezzel a cikkel kapcsolatban, kérjük, ne habozzon kapcsolatba lépni velünk, jó lenne hallani a véleményét erről!
Julien Salinas
CTO az NLP Cloud-nál