Kunstig intelligens
Forstå parametere for store språkmodeller og minnekrav: Et dypdykk
Publisert
6 dager sidenon
Innholdsfortegnelse
Store språkmodeller (LLMs) har sett bemerkelsesverdige fremskritt de siste årene. Modeller som GPT-4, Googles Gemini og Claude 3 setter nye standarder for funksjoner og applikasjoner. Disse modellene forbedrer ikke bare tekstgenerering og oversettelse, men bryter også ny mark innen multimodal prosessering, og kombinerer tekst-, bilde-, lyd- og videoinnganger for å gi mer omfattende AI-løsninger.
For eksempel har OpenAIs GPT-4 vist betydelige forbedringer i å forstå og generere menneskelignende tekst, mens Googles Gemini-modeller utmerker seg i å håndtere forskjellige datatyper, inkludert tekst, bilder og lyd, og muliggjør mer sømløs og kontekstuelt relevante interaksjoner. På samme måte er Anthropics Claude 3-modeller kjent for sine flerspråklige evner og forbedret ytelse i AI-oppgaver.
Etter hvert som utviklingen av LLM-er fortsetter å akselerere, blir det avgjørende å forstå vanskelighetene til disse modellene, spesielt deres parametere og minnekrav. Denne veiledningen tar sikte på å avmystifisere disse aspektene, og tilbyr en detaljert og lettfattelig forklaring.
Grunnleggende om store språkmodeller
Hva er store språkmodeller?
Store språkmodeller er nevrale nettverk som er trent på massive datasett for å forstå og generere menneskelig språk. De er avhengige av arkitekturer som Transformers, som bruker mekanismer som selvoppmerksomhet for å behandle og produsere tekst.
Viktigheten av parametere i LLM-er
Parametre er kjernekomponentene i disse modellene. De inkluderer vekter og skjevheter, som modellen justerer under trening for å minimere feil i spådommer. Antall parametere korrelerer ofte med modellens kapasitet og ytelse, men påvirker også beregnings- og minnekravene.
Forstå transformatorarkitektur
Oversikt
Transformer-arkitekturen, introdusert i papiret "Attention Is All You Need" av Vaswani et al. (2017), har blitt grunnlaget for mange LLM-er. Den består av en koder og en dekoder, som hver består av flere identiske lag.
Koder- og dekoderkomponenter
- Encoder: Behandler inndatasekvensen og lager en kontekstbevisst representasjon.
- dekoder: Genererer utgangssekvensen ved å bruke koderens representasjon og de tidligere genererte tokenene.
Nøkkel byggeklosser
- Multi-hode oppmerksomhet: Gjør det mulig for modellen å fokusere på forskjellige deler av inndatasekvensen samtidig.
- Feed-Forward nevrale nettverk: Legger til ikke-linearitet og kompleksitet til modellen.
- Lagnormalisering: Stabiliserer og akselererer treningen ved å normalisere mellomeffekter.
Beregning av antall parametere
Beregne parametere i transformatorbaserte LLM-er
La oss bryte ned parameterberegningen for hver komponent i en transformatorbasert LLM. Vi bruker notasjonen fra originaloppgaven, hvor d_model
representerer dimensjonen til modellens skjulte tilstander.
- Innebyggingslag:
- Parametere =
vocab_size
*d_model
- Parametere =
- Multi-hode oppmerksomhet:
- Til
h
hoder, medd_k = d_v = d_model / h
: - Parametere = 4 *
d_model
^2 (for Q-, K-, V- og utgangsprojeksjoner)
- Til
- Feed-Forward-nettverk:
- Parametere = 2 *
d_model
*d_ff
+d_model
+d_ff
- Hvor
d_ff
er vanligvis 4*d_model
- Parametere = 2 *
- Lagnormalisering:
- Parametere = 2 *
d_model
(for skala og skjevhet)
- Parametere = 2 *
Totale parametere for ett transformatorlag:
Parameters_layer
=Parameters_attention
+Parameters_ffn
+ 2 *Parameters_layernorm
For en modell med N
lag:
- Totale parametere =
N
*Parameters_layer
+Parameters_embedding
+Parameters_output
Eksempel på beregning
La oss vurdere en modell med følgende spesifikasjoner:
d_model
= 768h
(antall oppmerksomhetshoder) = 12N
(antall lag) = 12vocab_size
= 50,000
- Innebyggingslag:
- 50,000 * 768 = 38,400,000
- Multi-hode oppmerksomhet:
- 4 * 768^2 = 2,359,296
- Feed-Forward-nettverk:
- 2 * 768 * (4 * 768) + 768 + (4 * 768) = 4,719,616 XNUMX XNUMX
- Lagnormalisering:
- 2 * 768 = 1,536
Totale parametere per lag:
- 2,359,296 4,719,616 2 + 1,536 7,081,984 XNUMX + (XNUMX * XNUMX XNUMX) = XNUMX XNUMX XNUMX
Totale parametere for 12 lag:
- 12 * 7,081,984 = 84,983,808
Totale modellparametere:
- 84,983,808 + 38,400,000 = 123,383,808
Denne modellen vil ha omtrent 123 millioner parametere.
Typer minnebruk
Når vi jobber med LLM-er, må vi vurdere to hovedtyper minnebruk:
- Modellminne: Minnet som kreves for å lagre modellparametrene.
- Arbeidsminnet: Minnet som trengs under inferens eller trening for å lagre mellomliggende aktiveringer, gradienter og optimeringstilstander.
Beregne modellminne
Modellminnet er direkte relatert til antall parametere. Hver parameter er vanligvis lagret som et 32-bits flytende kommanummer, selv om noen modeller bruker blandet presisjonstrening med 16-bits flyter.
Modellminne (bytes) = Antall parametere * Byte per parameter
For vår eksempelmodell med 123 millioner parametere:
- Modellminne (32-bit) = 123,383,808 4 493,535,232 * 494 byte = XNUMX XNUMX XNUMX byte ≈ XNUMX MB
- Modellminne (16-bit) = 123,383,808 2 246,767,616 * 247 byte = XNUMX XNUMX XNUMX byte ≈ XNUMX MB
Beregning av arbeidsminne
Kravene til arbeidsminne kan variere betydelig basert på den spesifikke oppgaven, batchstørrelsen og sekvenslengden. Et grovt estimat for arbeidsminne under inferens er:
Arbeidsminne ≈ 2 * Modellminne
Dette tar hensyn til lagring av både modellparametrene og mellomaktiveringene. Under trening kan minnekravene være enda høyere på grunn av behovet for å lagre gradienter og optimeringstilstander:
Treningsminne ≈ 4 * Modellminne
For eksempelmodellen vår:
- Inferens arbeidsminne ≈ 2 * 494 MB = 988 MB ≈ 1 GB
- Treningsminne ≈ 4 * 494 MB = 1,976 2 MB ≈ XNUMX GB
Steady-State minnebruk og topp minnebruk
Når du trener store språkmodeller basert på Transformer-arkitekturen, er forståelse av minnebruk avgjørende for effektiv ressursallokering. La oss bryte ned minnekravene i to hovedkategorier: steady-state minnebruk og topp minnebruk.
Steady-State minnebruk
Bruken av steady-state minne består av følgende komponenter:
- Modellvekter: FP32-kopier av modellparametrene, som krever 4N byte, der N er antall parametere.
- Optimaliseringsstater: For Adam-optimalisatoren krever dette 8N byte (2 tilstander per parameter).
- gradienter: FP32-kopier av gradientene, krever 4N byte.
- Inngangsdata: Forutsatt int64-innganger, krever dette 8BD-byte, der B er batchstørrelsen og D er inngangsdimensjonen.
Den totale steady-state minnebruken kan tilnærmes ved:
- M_steady = 16N + 8BD byte
Bruk av maksimalt minne
Maksimal minnebruk oppstår under bakoverpasseringen når aktiveringer lagres for gradientberegning. De viktigste bidragsyterne til toppminne er:
- Lagnormalisering: Krever 4E byte per lag norm, der E = BSH (B: batchstørrelse, S: sekvenslengde, H: skjult størrelse).
- Oppmerksomhetsblokk:
- QKV-beregning: 2E byte
- Oppmerksomhetsmatrise: 4BSS byte (S: sekvenslengde)
- Oppmerksomhetsutgang: 2E byte
- Fremmatingsblokk:
- Første lineære lag: 2E byte
- GELU-aktivering: 8E byte
- Andre lineære lag: 2E byte
- Cross-Entropy Tap:
- Logitter: 6BSV byte (V: vokabularstørrelse)
Det totale aktiveringsminnet kan estimeres som:
- M_act = L * (14E + 4BSS) + 6BSV byte
Hvor L er antall transformatorlag.
Totalt maksimalt minnebruk
Høyeste minnebruk under trening kan tilnærmes ved å kombinere steady-state minne og aktiveringsminne:
- M_peak = M_steady + M_act + 4BSV byte
Den ekstra 4BSV-terminen står for en ekstra tildeling ved starten av bakoverpasseringen.
Ved å forstå disse komponentene kan vi optimere minnebruken under trening og slutninger, og sikre effektiv ressursallokering og forbedret ytelse for store språkmodeller.
Skaleringslover og effektivitetshensyn
Skaleringslover for LLM-er
Forskning har vist at ytelsen til LLM-er har en tendens til å følge visse skaleringslover når antallet parametere øker. Kaplan et al. (2020) observerte at modellytelsen forbedres som en kraftlov for antall parametere, beregningsbudsjett og datasettstørrelse.
Forholdet mellom modellytelse og antall parametere kan tilnærmes ved:
Ytelse ∝ N^α
Der N er antall parametere og α er en skaleringseksponent typisk rundt 0.07 for språkmodelleringsoppgaver.
Dette innebærer at for å oppnå en 10 % forbedring i ytelse, må vi øke antall parametere med en faktor på 10^(1/α) ≈ 3.7.
Effektivitetsteknikker
Etter hvert som LLM-er fortsetter å vokse, har forskere og praktikere utviklet ulike teknikker for å forbedre effektiviteten:
a) Blandet presisjonstrening: Bruk av 16-biters eller til og med 8-biters flytende kommatall for visse operasjoner for å redusere minnebruk og beregningskrav.
b) Modellparallellisme: Distribuerer modellen på tvers av flere GPUer eller TPUer for å håndtere større modeller enn det som får plass på en enkelt enhet.
c) Gradient Checkpointing: Handel med beregning for minne ved å beregne visse aktiveringer på nytt under bakoverpasseringen i stedet for å lagre dem.
d) Beskjæring og kvantisering: Fjerner mindre viktige vekter eller reduserer presisjonen etter trening for å lage mindre, mer effektive modeller.
e) destillasjon: Trening av mindre modeller for å etterligne oppførselen til større modeller, og potensielt bevare mye av ytelsen med færre parametere.
Praktisk eksempel og beregninger
GPT-3, en av de største språkmodellene, har 175 milliarder parametere. Den bruker dekoderdelen av Transformer-arkitekturen. For å forstå skalaen, la oss bryte ned parameterantallet med hypotetiske verdier:
d_model = 12288
d_ff = 4 * 12288 = 49152
- Antall lag = 96
For ett dekoderlag:
Totale parametere = 8 * 12288^2 + 8 * 12288 * 49152 + 2 * 12288 ≈ 1.1 milliarder
Totalt for 96 lag:
1.1 milliarder * 96 = 105.6 milliarder
De resterende parameterne kommer fra innbygging og andre komponenter.
konklusjonen
Å forstå parameterne og minnekravene til store språkmodeller er avgjørende for å effektivt utforme, trene og distribuere disse kraftige verktøyene. Ved å bryte ned komponentene i Transformer-arkitektur og undersøke praktiske eksempler som GPT, får vi en dypere innsikt i kompleksiteten og skalaen til disse modellene.
For ytterligere å forstå de siste fremskrittene innen store språkmodeller og deres applikasjoner, sjekk ut disse omfattende veiledningene:
- Utforsk den komplette guiden på Gemma 2: Googles nye åpne store språkmodell for innsikt i forbedret ytelse og innovative funksjoner.
- Lær om Building LLM Agents for RAG from Scratch and Beyond: En omfattende veiledning som diskuterer utfordringene og løsningene i gjenvinningsutvidet generasjon.
- Oppdag forviklingene ved Sette opp en trening, finjustering og slutning av LLM-er med NVIDIA GPUer og CUDA for å optimalisere AI-systemer.
Jeg har brukt de siste fem årene på å fordype meg i den fascinerende verdenen av maskinlæring og dyplæring. Min lidenskap og ekspertise har ført til at jeg har bidratt til over 50 ulike programvareprosjekter, med spesielt fokus på AI/ML. Min pågående nysgjerrighet har også trukket meg mot naturlig språkbehandling, et felt jeg er ivrig etter å utforske videre.
Du kan kanskje like
MARKLLM: Et åpen kildekodeverktøy for LLM-vannmerking
Utplassering av store språkmodeller på Kubernetes: En omfattende veiledning
Forstå sparsomme autokodere, GPT-4 og Claude 3: En dyptgående teknisk utforskning
Qwen2 – Alibabas siste flerspråklige språkmodell utfordrer SOTA som Llama 3
LLaVA-UHD: en LMM som oppfatter alle aspektforhold og høyoppløselige bilder
Superlading av store språkmodeller med Multi-token Prediction