Å distribuere GPT-NeoX 20B i produksjon er en utfordring, og vi lærte det på den harde måten hos NLP Cloud ... I denne artikkelen forteller vi deg mer om flere triks knyttet til bruk av GPT-NeoX 20B, og spesielt hvordan du håndterer DeepSpeed i produksjon.

GPT-NeoX 20B er i skrivende stund den største modellen for naturlig språkbehandling med åpen kildekode.
Den ble utgitt av EleutherAI for 2 uker siden. Den ble trent på 20 milliarder parametere, etter et års hardt arbeid fullt av utfordringer. En av deres største vanskeligheter så ut til å være muligheten til å sette opp en skikkelig parallell arkitektur slik at modellen kan trenes effektivt på flere GPUer.
Deres forrige modell, GPT-J, ble trent på Google TPU-er og ble designet for å brukes på TPU-er. GPT-NeoX 20Bs indre arkitektur er radikalt annerledes og er laget for å brukes på GPUer. Tanken er at det skal være den første av en serie med enda større modeller (målet her er å ta igjen GPT-3).
GPT-NeoX 20 er en tekstgenereringsmodell, noe som betyr at den kan skrive tekst for deg og faktisk oppnå nesten alle Natural Language Processing-brukstilfeller med stor nøyaktighet: generering av blogginnlegg, chatbots, tekstklassifisering, sentimentanalyse, nøkkelordutvinning, kodegenerering, entitetsekstraksjon, intensjonsklassifisering, spørsmålsbesvarelse og mer ...
Det er ingen tvil om at mange forskere og selskaper vil utnytte denne nye modellen og få gode resultater. Men det er en utfordring: hvordan distribuere GPT-NeoX 20B?
Den første utfordringen man står overfor når man prøver å distribuere GPT-NeoX 20B i produksjon, er den avanserte maskinvaren den krever.
Det var fortsatt mulig å distribuere GPT-J på forbrukermaskinvare, selv om det var veldig dyrt. For eksempel kan du distribuere den på en veldig god CPU (selv om resultatet var smertefullt tregt) eller på en avansert spill-GPU som NVIDIA RTX 3090. Men GPT-NeoX 20B er så stor at det ikke er mulig lenger.
I utgangspunktet krever GPT-NeoX minst 42 GB VRAM og 40 GB diskplass (og ja, vi snakker om den slanke fp16-versjonen her). Få GPUer samsvarer med disse kravene. De viktigste er NVIDIA A100, A40 og RTX A6000.
Ikke bare er disse GPU-ene veldig dyre, men det er også vanskelig å få tak i en av dem i disse dager på grunn av den globale halvledermangelen.
Den beste løsningen her er å gå for en multi-GPU-arkitektur.
Hvis du ikke får plass til modellen din i en enkelt GPU, kan du prøve å dele den opp i flere GPUer.
Det er et interessant alternativ av to grunner. For det første er det ofte billigere å skalere en infrastruktur horisontalt enn vertikalt. Det er sant for servere, og det er sant for GPUer også. For det andre er det lettere å få tak i flere små GPUer som NVIDIA Tesla T4 enn større GPUer som NVIDIA A40.
Dessverre er det en teknisk utfordring å dele en maskinlæringsmodell i flere GPUer. Hugging Face laget en flott artikkel om modellparallellisme og valgene du har. Les det her. Men heldigvis designet EleutherAI GPT-NeoX 20B slik at den enkelt kan parallelliseres på flere GPUer, enten det er for trening eller slutning.
GPT-NeoX-arkitekturen er basert på Deepspeed. Deepspeed er et rammeverk fra Microsoft som opprinnelig ble designet for å parallellisere treninger mellom flere GPUer, og det brukes mer og mer for inferens også. EleutherAI gjorde alt det harde arbeidet, så parallellisering av GPT-NeoX er like enkelt som å endre et tall i en konfigurasjonsfil.

Extract from the GPT-NeoX docs about parallelism
Det er imidlertid vanskelig å distribuere Deepspeed i produksjon for online inferens gjennom et API.... Deepspeed ble ikke designet for å enkelt integreres i webservere. Hos NLP Cloud lærte vi det på den harde måten, men etter litt hardt arbeid klarte vi endelig å komme opp med en effektiv måte å få Deepspeed og GPT-NeoX til å fungere bak API-en vår.
Så la oss anta at du klarte å skaffe riktig maskinvare og distribuere GPT-NeoX 20B med Deepspeed på riktig måte. Det er nå et par advarsler du bør være oppmerksom på.
For det første, sammenlignet med GPT-J, har ikke parametrene (topp k, topp p og temperatur) de samme effektene på modellen. Så hvis du klarte å finne en god konfigurasjon for GPT-J, ikke ta den for gitt: du må gjøre nye tester med GPT-NeoX.
Til slutt, selv om inngangsstørrelsen kan gå opp til 2048 tokens, vil det kreve mer minne enn de 42 GB som er nevnt ovenfor ...
GPT-modeller er ganske trege, og GPT-NeoX 20B er ikke noe unntak. Så for å forbedre gjennomstrømningen i applikasjonen din, kan det være lurt å jobbe med en batch-inferensløsning.
For øyeblikket har vi ikke kommet opp med en god løsning for det på NLP Cloud.
GPT-NeoX-koden er laget slik at man kan utføre flere slutninger samtidig innenfor en enkelt forespørsel. Men i våre tester vokste responstiden lineært med antall slutninger, noe som på en måte motvirker formålet med batch-inferens....
GPT-NeoX 20B er definitivt vanskelig å distribuere i produksjon. Kvaliteten på tekstgenerering er fantastisk, men få vil ha kapasitet til å faktisk installere denne modellen.
Mer enn noen gang ser det ut til at løsningen vil være å stole på en skytjeneste som NLP Cloud for å bruke denne modellen. Prøv GPT-NeoX 20B på NLP Cloud her!
Hvis du har tilbakemeldinger på denne artikkelen, ikke nøl med å kontakte oss, det vil være flott å høre din mening om dette!
Abhinav
Utviklingsingeniør hos NLP Cloud