Det er en udfordring at implementere GPT-NeoX 20B i produktion, og vi lærte det på den hårde måde i NLP Cloud... I denne artikel fortæller vi dig mere om flere tricks i forbindelse med brugen af GPT-NeoX 20B, og især hvordan du håndterer DeepSpeed i produktion.

GPT-NeoX 20B er den største open source-model til behandling af naturlige sprog i skrivende stund.
Den blev udgivet af EleutherAI for 2 uger siden. Den blev trænet på 20 milliarder parametre efter et års hårdt arbejde med mange udfordringer. En af deres største vanskeligheder syntes at være evnen til at opstille en ordentlig parallel arkitektur, så modellen effektivt kan trænes på flere GPU'er.
Deres tidligere model, GPT-J, blev trænet på Google TPU'er og var designet til at blive brugt på TPU'er. GPT-NeoX 20B's indre arkitektur er radikalt anderledes og er lavet til at blive brugt på GPU'er. Ideen er, at den skal være den første i en serie af endnu større modeller (målet her er at indhente GPT-3).
GPT-NeoX 20 er en tekstgenereringsmodel, hvilket betyder, at den kan skrive tekst for dig og faktisk opnå næsten enhver Natural Language Processing-anvendelse med stor nøjagtighed: generering af blogindlæg, chatbots, tekstklassificering, følelsesanalyse, udtræk af nøgleord, kodegenerering, udtræk af enheder, klassifikation af hensigter, besvarelse af spørgsmål og meget mere...
Der er ingen tvivl om, at mange forskere og virksomheder vil udnytte denne nye model og opnå gode resultater. Men der er en udfordring: hvordan skal GPT-NeoX 20B anvendes?
Den første udfordring, man står over for, når man forsøger at implementere GPT-NeoX 20B i produktionen, er den avancerede hardware, som det kræver.
Det var stadig muligt at implementere GPT-J på forbrugerhardware, selv om det var meget dyrt. Du kunne f.eks. anvende det på en meget god CPU (selv om resultatet var smerteligt langsomt) eller på en avanceret gaming-GPU som NVIDIA RTX 3090. Men GPT-NeoX 20B er så stor, at det ikke længere er muligt.
Grundlæggende kræver GPT-NeoX mindst 42 GB VRAM og 40 GB diskplads (og ja, vi taler om den slanke fp16-version her). Kun få GPU'er matcher disse krav. De vigtigste er NVIDIA A100, A40 og RTX A6000.
Ikke alene er disse GPU'er meget dyre, men det er også svært at få fat i en af dem i disse dage på grund af den globale mangel på halvledere.
Den bedste løsning her er at vælge en arkitektur med flere GPU'er.
Hvis du ikke kan få plads til din model på en enkelt GPU, kan du prøve at dele den op på flere GPU'er.
Det er en interessant mulighed af to grunde. For det første er det ofte billigere at skalere en infrastruktur horisontalt end at skalere vertikalt. Det gælder for servere, og det gælder også for GPU'er. For det andet er det lettere at få fat i flere små GPU'er som NVIDIA Tesla T4 end større GPU'er som NVIDIA A40.
Desværre er det en teknisk udfordring at opdele en maskinlæringsmodel på flere GPU'er. Hugging Face har lavet en god artikel om modelparallelisme og de valgmuligheder, du har. Læs den her. Men heldigvis har EleutherAI designet GPT-NeoX 20B, så den nemt kan paralleliseres på flere GPU'er, uanset om det er til træning eller inferens.
GPT-NeoX-arkitekturen er baseret på Deepspeed. Deepspeed er en ramme fra Microsoft, der oprindeligt blev designet til at parallelisere træning på flere GPU'er, og den bruges mere og mere til inferens også. EleutherAI har gjort alt det hårde arbejde, så parallelisering af GPT-NeoX er lige så simpelt som at ændre et tal i en konfigurationsfil.

Extract from the GPT-NeoX docs about parallelism
Men det er svært at implementere Deepspeed i produktion til online-inferens via et API... Deepspeed er ikke designet til at blive let integreret i webservere. Hos NLP Cloud lærte vi det på den hårde måde, men efter hårdt arbejde lykkedes det os endelig at finde en effektiv måde at få Deepspeed og GPT-NeoX til at fungere bag vores API.
Lad os antage, at det er lykkedes dig at tilvejebringe den rette hardware og implementere GPT-NeoX 20B korrekt med Deepspeed. Der er nu et par forbehold, som du skal være opmærksom på.
For det første har parametrene (top k, top p og temperatur) ikke den samme effekt på modellen som i GPT-J. Så hvis det er lykkedes dig at finde en god konfiguration for GPT-J, skal du ikke tage det for givet: du skal foretage nye forsøg med GPT-NeoX.
Sidst af alt, selv om inputstørrelsen kan gå op til 2048 tokens, vil det kræve mere hukommelse end de 42 GB, der er nævnt ovenfor...
GPT-modeller er ret langsomme, og GPT-NeoX 20B er ingen undtagelse. Så for at forbedre gennemstrømningen af din applikation kan du måske arbejde på en batch-inferensløsning.
I øjeblikket har vi ikke fundet en god løsning på det i NLP Cloud.
GPT-NeoX-koden er udformet således, at man kan foretage flere slutninger på samme tid inden for en enkelt forespørgsel. Men i vores test voksede svartiden lineært med antallet af inferencer, hvilket på en måde modvirker formålet med batch-inferens...
GPT-NeoX 20B er helt sikkert svært at implementere i produktion. Kvaliteten af tekstgenerering er fantastisk, men kun få vil have kapacitet til rent faktisk at installere denne model.
Mere end nogensinde før ser det ud til, at løsningen bliver at benytte en cloud-tjeneste som NLP Cloud for at kunne bruge denne model.
Hvis du har feedback på denne artikel, så tøv ikke med at kontakte os, det vil være dejligt at høre din mening om dette!
Julien Salinas
Teknisk direktør hos NLP Cloud