Modele și platforme AI

Înțelegerea parametrilor și cerințelor de memorie ale modelelor de limbaj mari: O analiză detaliată

mm
Adaugă Unite.AI la sursele tale preferate pe Google

Modelele de limbaj mari (LLM) au cunoscut progrese remarcabile în ultimii ani. Modele precum GPT-4, Google’s Gemini și Claude 3 stabilesc noi standarde în ceea ce privește capacitățile și aplicațiile. Aceste modele nu numai că îmbunătățesc generarea și traducerea textului, dar deschid și noi drumuri în procesarea multimodală, combinând intrări de text, imagine, audio și video pentru a oferi soluții AI mai cuprinzătoare.

De exemplu, GPT-4 al OpenAI a arătat îmbunătățiri semnificative în înțelegerea și generarea textului similar omului, în timp ce modelele Gemini ale Google excelează în manipularea diverselor tipuri de date, inclusiv text, imagini și audio, permițând interacțiuni mai fluente și contextual relevante. Similar, modelele Claude 3 ale Anthropic sunt remarcate pentru capacitățile lor multilingve și performanța îmbunătățită în sarcinile AI.

Pe măsură ce dezvoltarea LLM continuă să accelereze, înțelegerea complexităților acestor modele, în special a parametrilor și cerințelor de memorie, devine crucială. Ghidul acesta urmărește să demistifice aceste aspecte, oferind o explicație detaliată și ușor de înțeles.

Bazele modelelor de limbaj mari

Ce sunt modelele de limbaj mari?

Modelele de limbaj mari sunt rețele neuronale antrenate pe seturi de date masive pentru a înțelege și genera limbaj uman. Ele se bazează pe arhitecturi precum Transformers, care folosesc mecanisme precum atenția pentru a procesa și produce text.

Importanța parametrilor în LLM

Parametrii sunt componentele de bază ale acestor modele. Ei includ greutăți și bias, pe care modelul le ajustează în timpul antrenamentului pentru a minimiza erorile în predicții. Numărul de parametri adesea corelează cu capacitatea și performanța modelului, dar influențează și cerințele computaționale și de memorie.

Înțelegerea arhitecturii Transformer

Transformers-architecture

Arhitectura Transformers

Prezentare generală

Arhitectura Transformer, introdusă în lucrarea “Attention Is All You Need” de Vaswani et al. (2017), a devenit baza pentru multe LLM. Ea constă dintr-un encoder și un decoder, fiecare alcătuit din mai multe straturi identice.

Componentele encoder și decoder

  • Encoder: Procesează secvența de intrare și creează o reprezentare conștientă de context.
  • Decoder: Generează secvența de ieșire folosind reprezentarea encoder și token-urile generate anterior.

Blocuri cheie

  1. Atenție multi-cap: Permite modelului să se concentreze asupra diferitelor părți ale secvenței de intrare simultan.
  2. Rețele neuronale feed-forward: Adaugă neliniaritate și complexitate modelului.
  3. Normalizare de strat: Stabilizează și accelerează antrenamentul prin normalizarea ieșirilor intermediare.

Calcularea numărului de parametri

Transformer Training

Modele preantrenate pentru antrenament eficient al Transformer

Calcularea parametrilor în LLM bazate pe Transformer

Să descompunem calculul parametrilor pentru fiecare componentă a unui LLM bazat pe Transformer. Vom folosi notația din lucrarea originală, unde d_model reprezintă dimensiunea stărilor ascunse ale modelului.

  1. Strat de încorporare:
    • Parametri = vocab_size * d_model
  2. Atenție multi-cap:
    • Pentru h capete, cu d_k = d_v = d_model / h:
    • Parametri = 4 * d_model^2 (pentru Q, K, V și proiecții de ieșire)
  3. Rețea neuronală feed-forward:
    • Parametri = 2 * d_model * d_ff + d_model + d_ff
    • Unde d_ff este de obicei 4 * d_model
  4. Normalizare de strat:
    • Parametri = 2 * d_model (pentru scară și bias)

Total parametri pentru un strat Transformer:

  • Parametri_strat = Parametri_atenție + Parametri_ffn + 2 * Parametri_layernorm

Pentru un model cu N straturi:

  • Total Parametri = N * Parametri_strat + Parametri_încorporare + Parametri_ieșire

Exemplu de calcul

Să considerăm un model cu următoarele specificații:

  • d_model = 768
  • h (număr de capete de atenție) = 12
  • N (număr de straturi) = 12
  • vocab_size = 50.000
  1. Strat de încorporare:
    • 50.000 * 768 = 38.400.000
  2. Atenție multi-cap:
    • 4 * 768^2 = 2.359.296
  3. Rețea neuronală feed-forward:
    • 2 * 768 * (4 * 768) + 768 + (4 * 768) = 4.719.616
  4. Normalizare de strat:
    • 2 * 768 = 1.536

Total parametri pe strat:

  • 2.359.296 + 4.719.616 + (2 * 1.536) = 7.081.984

Total parametri pentru 12 straturi:

  • 12 * 7.081.984 = 84.983.808

Total parametri model:

  • 84.983.808 + 38.400.000 = 123.383.808

Acest model ar avea aproximativ 123 de milioane de parametri.

Tipuri de utilizare a memoriei

Când lucrăm cu LLM, trebuie să luăm în considerare două tipuri principale de utilizare a memoriei:

  1. Memorie model: Memoria necesară pentru a stoca parametrii modelului.
  2. Memorie de lucru: Memoria necesară în timpul inferenței sau antrenamentului pentru a stoca activări intermediare, gradient și stări de optimizator.

Calcularea memoriei modelului

Memoria modelului este direct legată de numărul de parametri. Fiecare parametru este de obicei stocat ca un număr cu virgulă mobilă de 32 de biți, deși unele modele folosesc antrenament cu precizie mixtă cu numere cu virgulă mobilă de 16 biți.

Memorie model (octeți) = Număr de parametri * Octeți pe parametru

Pentru modelul nostru cu 123 de milioane de parametri:

  • Memorie model (32 de biți) = 123.383.808 * 4 octeți = 493.535.232 octeți ≈ 494 MB
  • Memorie model (16 biți) = 123.383.808 * 2 octeți = 246.767.616 octeți ≈ 247 MB

Estimarea memoriei de lucru

Cerințele de memorie de lucru pot varia semnificativ în funcție de sarcina specifică, dimensiunea batch-ului și lungimea secvenței. O estimare aproximativă pentru memoria de lucru în timpul inferenței este:

Memorie de lucru ≈ 2 * Memorie model

Acest lucru ia în considerare stocarea atât a parametrilor modelului, cât și a activărilor intermediare. În timpul antrenamentului, cerințele de memorie pot fi și mai mari din cauza necesității de a stoca gradient și stări de optimizator:

Memorie antrenament ≈ 4 * Memorie model

Pentru modelul nostru:

  • Memorie de lucru de inferență ≈ 2 * 494 MB = 988 MB ≈ 1 GB
  • Memorie antrenament ≈ 4 * 494 MB = 1.976 MB ≈ 2 GB

Utilizarea memoriei în stare stabilă și utilizarea memoriei de vârf

Când antrenăm modele de limbaj mari pe baza arhitecturii Transformer, înțelegerea utilizării memoriei este crucială pentru alocarea eficientă a resurselor. Să descompunem cerințele de memorie în două categorii principale: utilizarea memoriei în stare stabilă și utilizarea memoriei de vârf.

Utilizarea memoriei în stare stabilă

Utilizarea memoriei în stare stabilă cuprinde următoarele componente:

  1. Greutăți model: Copii FP32 ale parametrilor modelului, necesitând 4N octeți, unde N este numărul de parametri.
  2. Stări de optimizator: Pentru optimizatorul Adam, acest lucru necesită 8N octeți (2 stări pe parametru).
  3. Gradient: Copii FP32 ale gradientului, necesitând 4N octeți.
  4. Date de intrare: Presupunând intrări int64, acest lucru necesită 8BD octeți, unde B este dimensiunea batch-ului și D este dimensiunea intrării.

Utilizarea totală a memoriei în stare stabilă poate fi aproximată prin:

  • M_stabil = 16N + 8BD octeți

Utilizarea memoriei de vârf

Utilizarea memoriei de vârf apare în timpul pasului înapoi când se stochează activări pentru calculul gradientului. Principalii contribuitori la utilizarea memoriei de vârf sunt:

  1. Normalizare de strat: Necessită 4E octeți pe normalizare de strat, unde E = BSH (B: dimensiunea batch-ului, S: lungimea secvenței, H: dimensiunea ascunsă).
  2. Bloc de atenție:
    • Calcul QKV: 2E octeți
    • Matrice de atenție: 4BSS octeți (S: lungimea secvenței)
    • Ieșire de atenție: 2E octeți
  3. Bloc de rețea feed-forward:
    • Primul strat liniar: 2E octeți
    • Activare GELU: 8E octeți
    • Al doilea strat liniar: 2E octeți
  4. Pierdere de entropie cruzată:
    • Logit: 6BSV octeți (V: dimensiunea vocabularului)

Memoria totală de activare poate fi estimată ca:

  • M_act = L * (14E + 4BSS) + 6BSV octeți

Unde L este numărul de straturi Transformer.

Utilizarea totală a memoriei de vârf

Utilizarea memoriei de vârf în timpul antrenamentului poate fi aproximată prin combinarea utilizării memoriei în stare stabilă și a memoriei de activare:

  • M_vârf = M_stabil + M_act + 4BSV octeți

Termenul suplimentar de 4BSV octeți ia în considerare o alocare suplimentară la începutul pasului înapoi.

Prin înțelegerea acestor componente, putem optimiza utilizarea memoriei în timpul antrenamentului și inferenței, asigurând o alocare eficientă a resurselor și o performanță îmbunătățită a modelelor de limbaj mari.

Legi de scalare și considerații de eficiență

 Legi de scalare pentru LLM

Cercetările au arătat că performanța LLM tinde să urmeze anumite legi de scalare pe măsură ce numărul de parametri crește. Kaplan et al. (2020) au observat că performanța modelului se îmbunătățește ca o putere a numărului de parametri, bugetului de calcul și dimensiunii setului de date.

Relația dintre performanța modelului și numărul de parametri poate fi aproximată prin:

Performanță ∝ N^α

Unde N este numărul de parametri și α este un exponent de scalare, de obicei în jur de 0,07 pentru sarcinile de modelare a limbajului.

Acest lucru implică faptul că pentru a obține o îmbunătățire de 10% a performanței, trebuie să creștem numărul de parametri de un factor de 10^(1/α) ≈ 3,7.

Tehnici de eficiență

Pe măsură ce LLM continuă să crească, cercetătorii și practicienii au dezvoltat diverse tehnici pentru a îmbunătăți eficiența:

a) Antrenament cu precizie mixtă: Utilizarea numerelor cu virgulă mobilă de 16 biți sau chiar 8 biți pentru anumite operații pentru a reduce utilizarea memoriei și cerințele computaționale.

b) Paralelism de model: Distribuirea modelului pe mai multe GPU-uri sau TPU-uri pentru a gestiona modele mai mari decât pot fi stocate pe un singur dispozitiv.

c) Punct de control al gradientului: Schimbul computațional pentru memorie prin recalcularea anumitor activări în timpul pasului înapoi în loc de stocarea lor.

d) Podire și cuantificare: Eliminarea greutăților mai puțin importante sau reducerea preciziei lor după antrenament pentru a crea modele mai mici și mai eficiente.

e) Distilare: Antrenarea unor modele mai mici pentru a imita comportamentul modelelor mai mari, păstrând o mare parte din performanță cu mai puțini parametri.

Exemplu practic și calcule

GPT-3, unul dintre cele mai mari modele de limbaj, are 175 de miliarde de parametri. El utilizează partea decoder a arhitecturii Transformer. Pentru a înțelege dimensiunea sa, să descompunem numărul de parametri cu valori ipotetice:

  • d_model = 12288
  • d_ff = 4 * 12288 = 49152
  • Număr de straturi = 96

Pentru un strat decoder:

Parametri totali = 8 * 12288^2 + 8 * 12288 * 49152 + 2 * 12288 ≈ 1,1 miliarde

Total pentru 96 de straturi:

1,1 miliarde * 96 = 105,6 miliarde

Parametrii rămași provin din încorporare și alte componente.

Concluzie

Înțelegerea parametrilor și cerințelor de memorie ale modelelor de limbaj mari este crucială pentru proiectarea, antrenarea și implementarea eficientă a acestor instrumente puternice. Prin descompunerea componentelor arhitecturii Transformer și examinarea exemplelor practice precum GPT, obținem o înțelegere mai profundă a complexității și dimensiunii acestor modele.

Pentru a înțelege mai bine ultimele avansări în modelele de limbaj mari și aplicațiile lor, verificați aceste ghiduri cuprinzătoare:

Am petrecut ultimii cinci ani scufundându-mă în lumea fascinantă a Machine Learning și Deep Learning. Pasinea și expertiza mea m-au condus să contribui la peste 50 de proiecte diverse de inginerie software, cu un focus deosebit pe AI/ML. Curiozitatea mea în continuare m-a atras și spre Natural Language Processing, un domeniu pe care sunt dornic să îl explorez mai departe.