Intelligenza Artificiale
Comprensione dei parametri del modello linguistico di grandi dimensioni e dei requisiti di memoria: un'immersione profonda
Pubblicato il
4 giorni faon
By
Ayush MittalSommario
Grandi modelli linguistici (LLM) ha visto notevoli progressi negli ultimi anni. Modelli come GPT-4, Gemini di Google e Claude 3 stanno stabilendo nuovi standard in termini di capacità e applicazioni. Questi modelli non solo migliorano la generazione e la traduzione del testo, ma stanno anche aprendo nuove strade all’elaborazione multimodale, combinando input di testo, immagini, audio e video per fornire soluzioni di intelligenza artificiale più complete.
Ad esempio, GPT-4 di OpenAI ha mostrato miglioramenti significativi nella comprensione e nella generazione di testo simile a quello umano, mentre i modelli Gemini di Google eccellono nella gestione di diversi tipi di dati, inclusi 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 le prestazioni migliorate nelle attività di intelligenza artificiale.
Poiché lo sviluppo degli LLM continua ad accelerare, diventa cruciale comprendere le complessità di questi modelli, in particolare i loro parametri e i requisiti di memoria. Questa guida mira a demistificare questi aspetti, offrendo una spiegazione dettagliata e di facile comprensione.
Le basi 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 set di dati per comprendere e generare il linguaggio umano. Si affidano ad architetture come Transformers, che utilizzano meccanismi come l'autoattenzione per elaborare e produrre testo.
Importanza dei parametri negli LLM
I parametri sono i componenti principali di questi modelli. Includono pesi e distorsioni, che il modello adatta durante l'addestramento per ridurre al minimo gli errori nelle previsioni. Il numero di parametri è spesso correlato alla capacità e alle prestazioni del modello, ma ne influenza anche i requisiti computazionali e di memoria.
Comprendere l'architettura del trasformatore
Panoramica
L'architettura Transformer, introdotta nel documento “Attention Is All You Need” di Vaswani et al. (2017), è diventato il fondamento di molti LLM. È costituito da un codificatore e un decodificatore, ciascuno composto da più strati identici.
Componenti codificatori e decodificatori
- Codificatore: elabora la sequenza di input e crea una rappresentazione sensibile al contesto.
- decoder: Genera la sequenza di output utilizzando la rappresentazione del codificatore e i token precedentemente generati.
Elementi fondamentali
- Attenzione multi-testa: consente al modello di concentrarsi simultaneamente su diverse parti della sequenza di input.
- Reti neurali feed-forward: Aggiunge non linearità e complessità al modello.
- Normalizzazione dei livelli: Stabilizza e accelera l'allenamento normalizzando i risultati intermedi.
Calcolo del numero di parametri
Calcolo dei parametri negli LLM basati su trasformatore
Analizziamo il calcolo dei parametri per ciascun componente di un LLM basato su Transformer. Utilizzeremo la notazione dell'articolo originale, dove d_model
rappresenta la dimensione degli stati nascosti del modello.
- Livello di incorporamento:
- Parametri =
vocab_size
*d_model
- Parametri =
- Attenzione multi-testa:
- Nel
h
teste, cond_k = d_v = d_model / h
: - Parametri = 4 *
d_model
^2 (per Q, K, V e proiezioni di output)
- Nel
- Rete feed-forward:
- Parametri = 2 *
d_model
*d_ff
+d_model
+d_ff
- Dove
d_ff
in genere è 4 *d_model
- Parametri = 2 *
- Normalizzazione dei livelli:
- Parametri = 2 *
d_model
(per scala e bias)
- Parametri = 2 *
Parametri totali per uno strato Transformer:
Parameters_layer
=Parameters_attention
+Parameters_ffn
+2 *Parameters_layernorm
Per un modello con N
strati:
- Parametri totali =
N
*Parameters_layer
+Parameters_embedding
+Parameters_output
Calcolo di esempio
Consideriamo un modello con le seguenti specifiche:
d_model
= 768h
(numero di teste di attenzione) = 12N
(numero di strati) = 12vocab_size
= 50,000
- Livello di incorporamento:
- 50,000 * 768 = 38,400,000
- Attenzione multi-testa:
- 4*768^2 = 2,359,296
- Rete feed-forward:
- 2 * 768 * (4 * 768) + 768 + (4 * 768) = 4,719,616
- Normalizzazione dei livelli:
- 2 * 768 = 1,536
Parametri totali per strato:
- 2,359,296 + 4,719,616 + (2 * 1,536) = 7,081,984
Parametri totali per 12 strati:
- 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 lavoriamo con gli LLM, dobbiamo considerare due tipi principali di utilizzo della memoria:
- Memoria del modello: La memoria richiesta per memorizzare i parametri del modello.
- Memoria di lavoro: la memoria necessaria durante l'inferenza o l'addestramento per archiviare attivazioni intermedie, gradienti e stati dell'ottimizzatore.
Calcolo della memoria del modello
La memoria del modello è direttamente correlata al numero di parametri. Ogni parametro viene in genere archiviato come numero a virgola mobile a 32 bit, sebbene alcuni modelli utilizzino un addestramento a precisione mista con numeri in 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
Stima della memoria di lavoro
I requisiti di memoria di lavoro possono variare in modo significativo in base all'attività specifica, alle dimensioni del batch e alla lunghezza della sequenza. Una stima approssimativa della memoria di lavoro durante l'inferenza è:
Memoria di lavoro ≈ 2 * Memoria del modello
Ciò tiene conto della memorizzazione sia dei parametri del modello che delle attivazioni intermedie. Durante l'allenamento, i requisiti di memoria possono essere ancora più elevati a causa della necessità di memorizzare gradienti e stati dell'ottimizzatore:
Memoria di allenamento ≈ 4 * Memoria del modello
Per il nostro modello di esempio:
- Memoria di lavoro per inferenza ≈ 2 * 494 MB = 988 MB ≈ 1 GB
- Memoria di allenamento ≈ 4 * 494 MB = 1,976 MB ≈ 2 GB
Utilizzo della memoria allo stato stazionario e utilizzo massimo della memoria
Quando si addestrano modelli linguistici di grandi dimensioni basati sull'architettura Transformer, comprendere l'utilizzo della memoria è fondamentale per un'allocazione efficiente delle risorse. Suddividiamo i requisiti di memoria in due categorie principali: utilizzo della memoria allo stato stazionario e utilizzo della memoria di picco.
Utilizzo della memoria allo stato stazionario
L'utilizzo della memoria allo 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).
- Sfumature: Copie FP32 dei gradienti, che richiedono 4N byte.
- Dati in ingresso: Supponendo input int64, ciò richiede 8BD byte, dove B è la dimensione del batch e D è la dimensione di input.
L'utilizzo totale della memoria allo stato stazionario può essere approssimato da:
- M_stabile = 16N + 8BD byte
Peak Memory Usage
Il picco di utilizzo della memoria si verifica durante il passaggio all'indietro quando le attivazioni vengono archiviate per il calcolo del gradiente. I principali contributori al picco di memoria sono:
- Normalizzazione dei livelli: Richiede 4E byte per norma livello, dove E = BSH (B: dimensione batch, S: lunghezza sequenza, H: dimensione nascosta).
- Blocco dell'attenzione:
- Calcolo QKV: 2E byte
- Matrice di attenzione: 4BSS byte (S: lunghezza della sequenza)
- Uscita di attenzione: 2E byte
- Blocco feed-forward:
- Primo strato lineare: 2E byte
- Attivazione GELU: 8E byte
- Secondo livello lineare: 2E byte
- Perdita di entropia incrociata:
- Logit: 6BSV byte (V: dimensione del vocabolario)
La memoria di attivazione totale può essere stimata come:
- M_act = L * (14E + 4BSS) + 6BSV byte
Dove L è il numero di strati del trasformatore.
Utilizzo massimo della memoria totale
L'utilizzo massimo della memoria durante l'allenamento può essere approssimato combinando la memoria allo stato stazionario e la memoria di attivazione:
- M_picco = M_stabile + M_atto + 4BSV byte
Il termine aggiuntivo 4BSV rappresenta un'assegnazione extra all'inizio del passaggio all'indietro.
Comprendendo questi componenti, possiamo ottimizzare l'utilizzo della memoria durante l'addestramento e l'inferenza, garantendo un'allocazione efficiente delle risorse e prestazioni migliorate di modelli linguistici di grandi dimensioni.
Leggi di scala e considerazioni sull'efficienza
Leggi di scala per LLM
La ricerca ha dimostrato che le prestazioni degli LLM tendono a seguire determinate leggi di scala all'aumentare del numero di parametri. Kaplan et al. (2020) hanno osservato che le prestazioni del modello migliorano come legge di potenza del numero di parametri, del budget di calcolo e delle dimensioni del set di dati.
La relazione tra prestazioni del modello e 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 le attività di modellazione del linguaggio.
Ciò implica che per ottenere un miglioramento delle prestazioni del 10%, dobbiamo aumentare il numero di parametri di un fattore 10^(1/α) ≈ 3.7.
Tecniche di efficienza
Man mano che gli LLM continuano a crescere, ricercatori e professionisti hanno sviluppato varie tecniche per migliorare l'efficienza:
a) Allenamento di precisione mista: utilizzo di numeri a virgola mobile a 16 bit o anche a 8 bit per determinate operazioni per ridurre l'utilizzo della memoria e i requisiti di calcolo.
b) Parallelismo del modello: distribuzione del modello su più GPU o TPU per gestire modelli più grandi di quelli che possono essere inseriti in un singolo dispositivo.
c) Checkpoint del gradiente: scambiare il calcolo con la memoria ricalcolando determinate attivazioni durante il passaggio all'indietro invece di memorizzarle.
d) Potatura e quantizzazione: Rimuovere i pesi meno importanti o ridurne la precisione dopo l'allenamento per creare modelli più piccoli ed efficienti.
e) Distillazione: Addestramento di modelli più piccoli per imitare il comportamento di quelli più grandi, preservando potenzialmente gran parte delle prestazioni con meno parametri.
Esempio pratico e calcoli
GPT-3, uno dei modelli linguistici più grandi, ha 175 miliardi di parametri. Utilizza la parte decoder dell'architettura Transformer. Per comprenderne la scala, scomponiamo il conteggio dei parametri con valori ipotetici:
d_model = 12288
d_ff = 4 * 12288 = 49152
- Numero di strati = 96
Per un livello decodificatore:
Parametri totali = 8 * 12288^2 + 8 * 12288 * 49152 + 2 * 12288 ≈ 1.1 miliardo
Totale per 96 strati:
1.1 miliardi * 96 = 105.6 miliardi
I restanti parametri provengono dall'incorporamento e da altri componenti.
Conclusione
Comprendere i parametri e i requisiti di memoria di modelli linguistici di grandi dimensioni è fondamentale per progettare, addestrare e distribuire in modo efficace questi potenti strumenti. Scomponendo i componenti dell'architettura Transformer ed esaminando esempi pratici come GPT, otteniamo una visione più approfondita della complessità e della portata di questi modelli.
Per comprendere ulteriormente gli ultimi progressi nei modelli linguistici di grandi dimensioni e le loro applicazioni, consulta queste guide complete:
- Esplora la guida completa su Gemma 2: il nuovo modello linguistico aperto di grandi dimensioni di Google per approfondimenti sulle sue prestazioni migliorate e sulle caratteristiche innovative.
- Scopri di più sulla creazione di agenti LLM per RAG da Scratch and Beyond: Una guida completa che discute le sfide e le soluzioni nella generazione aumentata con recupero.
- Scopri le complessità di Impostazione di formazione, messa a punto e inferenza di LLM con GPU NVIDIA e CUDA per ottimizzare i sistemi di intelligenza artificiale.
Ho trascorso gli ultimi cinque anni immergendomi nell'affascinante mondo del Machine Learning e del Deep Learning. La mia passione e competenza mi hanno portato a contribuire a oltre 50 diversi progetti di ingegneria del software, con un focus particolare su AI/ML. La mia continua curiosità mi ha anche attirato verso l'elaborazione del linguaggio naturale, un campo che non vedo l'ora di esplorare ulteriormente.
Ti potrebbe piacere
MARKLLM: un kit di strumenti open source per la filigrana LLM
Distribuzione di modelli linguistici di grandi dimensioni su Kubernetes: una guida completa
Comprensione degli autocodificatori sparsi, GPT-4 e Claude 3: un'esplorazione tecnica approfondita
Qwen2 – L’ultimo modello linguistico multilingue di Alibaba sfida SOTA come Llama 3
LLaVA-UHD: un LMM che percepisce qualsiasi rapporto d'aspetto e immagini ad alta risoluzione
Potenziamento di modelli linguistici di grandi dimensioni con previsione multi-token
Post Recenti
- Revisione dei contenuti su larga scala: lo scrittore di intelligenza artificiale più simile all'uomo?
- GPT-4o mini di OpenAI: la potenza dell'intelligenza artificiale incontra la convenienza
- Perché i chatbot AI hanno allucinazioni? Esplorare la scienza
- Abbracciare l'intelligenza artificiale: il percorso di Hollywood verso una nuova era
- Le 5 migliori soluzioni per il rilevamento delle allucinazioni tramite intelligenza artificiale