Modelli e piattaforme di IA
Comprendere i parametri e le esigenze di memoria dei modelli linguistici di grandi dimensioni: un’analisi approfondita

Di
Aayush Mittal Mittal
I modelli linguistici di grandi dimensioni (LLM) hanno visto notevoli progressi negli ultimi anni. Modelli come GPT-4, Googleâs Gemini e Claude 3 stanno fissando nuovi standard in termini di capacità e applicazioni. Questi modelli non solo migliorano la generazione di testo e la traduzione, ma stanno anche aprendo nuove frontiere nellâelaborazione multimodale, combinando testo, immagini, audio e video per fornire soluzioni AI piÃđ complete.
Ad esempio, GPT-4 di OpenAI ha mostrato miglioramenti significativi nella comprensione e generazione di testo simile a quello umano, mentre i modelli Gemini di Google eccellono nel gestire tipi di dati diversi, tra cui testo, immagini e audio, consentendo interazioni piÃđ fluide e contestualmente rilevanti. Allo stesso modo, i modelli Claude 3 di Anthropic sono noti per le loro capacità multilingue e per le prestazioni migliorate nei compiti AI.
Mentre lo sviluppo dei LLM continua ad accelerare, comprendere le peculiarità di questi modelli, in particolare i loro parametri ed esigenze di memoria, diventa cruciale. Questa guida si propone di demistificare questi aspetti, offrendo una spiegazione dettagliata e facile da comprendere.
I fondamenti dei modelli linguistici di grandi dimensioni
Cosa sono i modelli linguistici di grandi dimensioni?
I modelli linguistici di grandi dimensioni sono reti neurali addestrate su enormi dataset per comprendere e generare linguaggio umano. Si basano su architetture come i Transformer, che utilizzano meccanismi come lâauto-attenzione per elaborare e produrre testo.
Importanza dei parametri nei LLM
I parametri sono i componenti fondamentali di questi modelli. Comprendono pesi e bias, che il modello regola durante lâaddestramento per minimizzare gli errori nelle previsioni. Il numero di parametri spesso correla con la capacità e le prestazioni del modello, ma influenza anche le esigenze computazionali e di memoria.
Comprendere lâarchitettura Transformer
Panoramica
Lâarchitettura Transformer, introdotta nel paper âAttention Is All You Needâ di Vaswani et al. (2017), ÃĻ diventata la base per molti LLM. Consiste in un encoder e un decoder, ciascuno composto da diversi strati identici.
Componenti encoder e decoder
- Encoder: Elabora la sequenza di input e crea una rappresentazione consapevole del contesto.
- Decoder: Genera la sequenza di output utilizzando la rappresentazione dellâencoder e i token precedentemente generati.
Blocchi chiave
- Attenzione multi-testa: Consente al modello di concentrarsi su diverse parti della sequenza di input contemporaneamente.
- Reti neurali feed-forward: Aggiungono non linearità e complessità al modello.
- Normalizzazione dei livelli: Stabilizza e accelera lâaddestramento normalizzando gli output intermedi.
Calcolare il numero di parametri
Calcolare i parametri nei LLM basati su Transformer
Vediamo di scomporre il calcolo dei parametri per ogni componente di un LLM basato su Transformer. Utilizzeremo la notazione del paper originale, dove d_model rappresenta la dimensione degli stati nascosti del modello.
- Layer di embedding:
- Parametri =
vocab_size*d_model
- Parametri =
- Attenzione multi-testa:
- Per
hteste, cond_k = d_v = d_model / h: - Parametri = 4 *
d_model^2 (per Q, K, V e proiezioni di output)
- Per
- Rete neurale feed-forward:
- Parametri = 2 *
d_model*d_ff+d_model+d_ff - Dove
d_ffÃĻ tipicamente 4 *d_model
- Parametri = 2 *
- Normalizzazione dei livelli:
- Parametri = 2 *
d_model(per scala e bias)
- Parametri = 2 *
Parametri totali per un livello Transformer:
Parametri_layer=Parametri_attenzione+Parametri_ffn+ 2 *Parametri_layernorm
Per un modello con N livelli:
- Parametri totali =
N*Parametri_layer+Parametri_embedding+Parametri_output
Esempio di calcolo
Consideriamo un modello con le seguenti specifiche:
d_model= 768h(numero di teste di attenzione) = 12N(numero di livelli) = 12vocab_size= 50.000
- Layer di embedding:
- 50.000 * 768 = 38.400.000
- Attenzione multi-testa:
- 4 * 768^2 = 2.359.296
- Rete neurale feed-forward:
- 2 * 768 * (4 * 768) + 768 + (4 * 768) = 4.719.616
- Normalizzazione dei livelli:
- 2 * 768 = 1.536
Parametri totali per livello:
- 2.359.296 + 4.719.616 + (2 * 1.536) = 7.081.984
Parametri totali per 12 livelli:
- 12 * 7.081.984 = 84.983.808
Parametri totali del modello:
- 84.983.808 + 38.400.000 = 123.383.808
Questo modello avrebbe circa 123 milioni di parametri.
Tipi di utilizzo della memoria
Quando si lavora con i LLM, ÃĻ necessario considerare due tipi principali di utilizzo della memoria:
- Memoria del modello: La memoria necessaria per archiviare i parametri del modello.
- Memoria di lavoro: La memoria necessaria durante lâinferenza o lâaddestramento per archiviare le attivazioni intermedie, i gradienti e gli stati dellâottimizzatore.
Calcolare la memoria del modello
La memoria del modello ÃĻ direttamente legata al numero di parametri. Ogni parametro ÃĻ tipicamente archiviato come un numero a virgola mobile a 32 bit, anche se alcuni modelli utilizzano lâaddestramento a precisione mista con numeri a virgola mobile a 16 bit.
Memoria del modello (byte) = Numero di parametri * Byte per parametro
Per il nostro modello di esempio con 123 milioni di parametri:
- Memoria del modello (32-bit) = 123.383.808 * 4 byte = 493.535.232 byte â 494 MB
- Memoria del modello (16-bit) = 123.383.808 * 2 byte = 246.767.616 byte â 247 MB
Stimare la memoria di lavoro
Le esigenze di memoria di lavoro possono variare notevolmente in base al compito specifico, alla dimensione del batch e alla lunghezza della sequenza. Una stima approssimativa per la memoria di lavoro durante lâinferenza ÃĻ:
Memoria di lavoro â 2 * Memoria del modello
Questo tiene conto dellâarchiviazione sia dei parametri del modello che delle attivazioni intermedie. Durante lâaddestramento, le esigenze di memoria possono essere ancora piÃđ elevate a causa della necessità di archiviare i gradienti e gli stati dellâottimizzatore:
Memoria di addestramento â 4 * Memoria del modello
Per il nostro modello di esempio:
- Memoria di lavoro di inferenza â 2 * 494 MB = 988 MB â 1 GB
- Memoria di addestramento â 4 * 494 MB = 1.976 MB â 2 GB
Utilizzo della memoria nello stato stazionario e utilizzo della memoria di picco
Quando si addestrano grandi modelli linguistici basati sullâarchitettura Transformer, comprendere lâutilizzo della memoria ÃĻ cruciale per unâallocazione efficiente delle risorse. Vediamo di scomporre le esigenze di memoria in due categorie principali: utilizzo della memoria nello stato stazionario e utilizzo della memoria di picco.
Utilizzo della memoria nello stato stazionario
Lâutilizzo della memoria nello stato stazionario comprende i seguenti componenti:
- Pesi del modello: Copie FP32 dei parametri del modello, che richiedono 4N byte, dove N ÃĻ il numero di parametri.
- Stati dellâottimizzatore: Per lâottimizzatore Adam, ciÃē richiede 8N byte (2 stati per parametro).
- Gradienti: Copie FP32 dei gradienti, che richiedono 4N byte.
- Dati di input: Supponendo input int64, ciÃē richiede 8BD byte, dove B ÃĻ la dimensione del batch e D ÃĻ la dimensione dellâinput.
Lâutilizzo totale della memoria nello stato stazionario puÃē essere approssimato da:
- M_steady = 16N + 8BD byte
Utilizzo della memoria di picco
Lâutilizzo della memoria di picco si verifica durante il passo allâindietro quando vengono archiviate le attivazioni per il calcolo dei gradienti. I principali contributori allâutilizzo della memoria di picco sono:
- Normalizzazione dei livelli: Richiede 4E byte per livello di normalizzazione, dove E = BSH (B: dimensione del batch, S: lunghezza della sequenza, H: dimensione nascosta).
- Blocco di attenzione:
- Calcolo QKV: 2E byte
- Matrice di attenzione: 4BSS byte (S: lunghezza della sequenza)
- Output di attenzione: 2E byte
- Blocco feed-forward:
- Primo livello lineare: 2E byte
- Attivazione GELU: 8E byte
- Secondo livello lineare: 2E byte
- Perdita di entropia incrociata:
- Logits: 6BSV byte (V: dimensione del vocabolario)
La memoria totale delle attivazioni puÃē essere stimata come:
- M_act = L * (14E + 4BSS) + 6BSV byte
Dove L ÃĻ il numero di livelli Transformer.
Utilizzo totale della memoria di picco
Lâutilizzo della memoria di picco durante lâaddestramento puÃē essere approssimato combinando la memoria nello stato stazionario e la memoria delle attivazioni:
- M_peak = M_steady + M_act + 4BSV byte
Il termine aggiuntivo 4BSV tiene conto di unâaltra allocazione allâinizio del passo allâindietro.
Comprendendo questi componenti, possiamo ottimizzare lâutilizzo della memoria durante lâaddestramento e lâinferenza, garantendo unâallocazione efficiente delle risorse e un miglioramento delle prestazioni dei grandi modelli linguistici.
Leggi di scala e considerazioni sullâefficienza
Leggi di scala per i LLM
La ricerca ha dimostrato che le prestazioni dei LLM tendono a seguire determinate leggi di scala man mano che il numero di parametri aumenta. Kaplan et al. (2020) hanno osservato che le prestazioni del modello migliorano come una legge di potenza del numero di parametri, del budget di calcolo e della dimensione del dataset.
La relazione tra le prestazioni del modello e il numero di parametri puÃē essere approssimata da:
Prestazioni â N^Îą
Dove N ÃĻ il numero di parametri e Îą ÃĻ un esponente di scala tipicamente intorno a 0,07 per i compiti di modellazione linguistica.
CiÃē implica che per ottenere un miglioramento del 10% delle prestazioni, dobbiamo aumentare il numero di parametri di un fattore di 10^(1/Îą) â 3,7.
Tecniche di efficienza
Mentre i LLM continuano a crescere, ricercatori e pratici hanno sviluppato varie tecniche per migliorare lâefficienza:
a) Addestramento a precisione mista: Utilizzare numeri a virgola mobile a 16 bit o anche 8 bit per determinate operazioni per ridurre lâutilizzo della memoria e le esigenze computazionali.
b) Parallelismo del modello: Distribuire il modello su piÃđ GPU o TPU per gestire modelli piÃđ grandi di quelli che possono essere gestiti da un singolo dispositivo.
c) Checkpointing dei gradienti: Scambiare calcolo per memoria ricomputando determinate attivazioni durante il passo allâindietro invece di archiviarle.
d) Potatura e quantizzazione: Rimuovere i pesi meno importanti o ridurre la loro precisione post-addestramento per creare modelli piÃđ piccoli e efficienti.
e) Distillazione: Addestrare modelli piÃđ piccoli a imitare il comportamento di modelli piÃđ grandi, potenzialmente conservando gran parte delle prestazioni con meno parametri.
Esempio pratico e calcoli
GPT-3, uno dei piÃđ grandi modelli linguistici, ha 175 miliardi di parametri. Utilizza la parte del decoder dellâarchitettura Transformer. Per comprendere la sua scala, analizziamo il conteggio dei parametri con valori ipotetici:
d_model = 12288d_ff = 4 * 12288 = 49152- Numero di livelli = 96
Per un livello decoder:
Parametri totali = 8 * 12288^2 + 8 * 12288 * 49152 + 2 * 12288 â 1,1 miliardo
Parametri totali per 96 livelli:
1,1 miliardo * 96 = 105,6 miliardi
I parametri rimanenti provengono da componenti di embedding e altri.
Conclusione
Comprendere i parametri e le esigenze di memoria dei grandi modelli linguistici ÃĻ cruciale per progettare, addestrare e distribuire efficacemente questi potenti strumenti. Analizzando i componenti dellâarchitettura Transformer e esaminando esempi pratici come GPT, otteniamo una comprensione piÃđ approfondita della complessità e della scala di questi modelli.
Per approfondire le ultime novità sui grandi modelli linguistici e le loro applicazioni, consultate queste guide complete:
- Esplorate la guida completa su Gemma 2: il nuovo modello linguistico aperto di Google per approfondire le sue prestazioni migliorate e le caratteristiche innovative.
- Imparate a costruire agenti LLM per RAG da zero e oltre: una guida completa che discute le sfide e le soluzioni nella generazione aumentata.
- Scoprite le peculiarità dellâimpostazione dellâaddestramento, del raffinamento e dellâinferenza dei LLM con NVIDIA GPU e CUDA (NVDA ) per ottimizzare i sistemi AI.
Ho trascorso gli ultimi cinque anni immergendomi nel mondo affascinante del Machine Learning e del Deep Learning. La mia passione e la mia esperienza mi hanno portato a contribuire a oltre 50 progetti di ingegneria del software diversi, con un focus particolare su AI/ML. La mia curiosità in corso mi ha anche portato verso l'elaborazione del linguaggio naturale, un campo che sono ansioso di esplorare ulteriormente.
Scopri di più


Se un Bot PuÃē Flirtare con i Bambini, Cosa Altro ÃĻ Autorizzato a Fare con i Tuoi Dati?


Come Nascondere Pagine Scientifiche Assurde ai Recensori AI


I Modelli AI Preferiscono la Scrittura Umana alla Scrittura Generata da AI


La Rivoluzione MoE: Come il Routing Avanzato e la Specializzazione Stanno Trasformando i Modelli di Linguaggio


La Fine dell’Era della Scalabilità : PerchÃĐ le Innovazioni Algoritmiche Contano di piÃđ della Dimensione del Modello


PerchÃĐ l’AI non ammette di non conoscere la risposta?

