Presentiamo Adam-mini: un ottimizzatore più snello per modelli grandi
Adam-mini riduce l'uso della memoria per l'allenamento di grandi modelli di linguaggio mantenendo le prestazioni.
― 6 leggere min
Indice
- Il Problema con l'Ottimizzatore Adam
- La Necessità di Ottimizzatori Efficaci
- Introduzione di Adam-mini
- Come Funziona Adam-mini
- Vantaggi di Adam-mini
- Riduzione della Memoria
- Maggiore Velocità di Elaborazione
- Performance sui Modelli Linguistici
- Come Usare Adam-mini
- Sfide e Direzioni Future
- Conclusione
- Impatti Più Ampi
- Fonte originale
- Link di riferimento
Nel mondo del machine learning, soprattutto nella formazione di grandi modelli linguistici, la scelta dell'ottimizzatore è fondamentale. Un ottimizzatore è uno strumento che aggiorna i parametri del modello per minimizzare la funzione di perdita durante l'addestramento. La funzione di perdita misura quanto bene il modello sta performando; una perdita più bassa indica un modello migliore. Esistono vari Ottimizzatori, ognuno con i suoi punti di forza e debolezza. Uno degli ottimizzatori più popolari è ADAM, ma ha costi di memoria elevati. Questo articolo presenta un nuovo ottimizzatore chiamato Adam-mini, che mira a ridurre questi requisiti di memoria mantenendo o migliorando le performance.
Il Problema con l'Ottimizzatore Adam
L'ottimizzatore Adam è diventato la scelta preferita per addestrare modelli grandi grazie alla sua efficienza e performance. Tuttavia, richiede una quantità significativa di memoria perché tiene traccia di due set di informazioni per ogni parametro: momento di primo ordine e momento di secondo ordine. Questo può essere particolarmente gravoso quando si addestrano modelli molto grandi, come quelli con miliardi di parametri. Ad esempio, addestrare un modello con circa 7 miliardi di parametri potrebbe richiedere fino a 86 GB di memoria, il che è piuttosto impegnativo anche per schede grafiche avanzate.
Questo uso intensivo di memoria può portare a tempi di addestramento più lenti e a una maggiore latenza. Inoltre, può richiedere tecniche come il caricamento su CPU e la suddivisione dei parametri del modello per gestire la memoria, il che può ulteriormente complicare il processo di addestramento.
La Necessità di Ottimizzatori Efficaci
C'è bisogno di ottimizzatori più efficienti che richiedano meno memoria. Ridurre l'impronta di memoria consente un addestramento più fluido poiché allevia la necessità di scaricare su CPU e riduce la comunicazione tra GPU e CPU. Questo può portare a tempi di addestramento più rapidi e costi inferiori, rendendolo più accessibile per i ricercatori con risorse limitate.
Gli ottimizzatori efficienti non solo riducono i requisiti di memoria, ma consentono anche di addestrare modelli più grandi utilizzando meno GPU. Questa riduzione nella richiesta di risorse può cambiare le regole del gioco, permettendo a più ricercatori di partecipare allo sviluppo di grandi modelli linguistici.
Introduzione di Adam-mini
Adam-mini è un nuovo ottimizzatore progettato per affrontare le carenze degli ottimizzatori standard Adam e AdamW. L'idea principale dietro Adam-mini è ridurre significativamente il numero di tassi di apprendimento utilizzati nel processo di ottimizzazione. Invece di assegnare un Tasso di apprendimento diverso a ogni parametro del modello, Adam-mini raggruppa i parametri in blocchi e assegna un singolo tasso di apprendimento a ciascun blocco.
Questo metodo si basa sull'osservazione che la matrice Hessiana, che cattura le informazioni di secondo ordine sulla funzione di perdita, ha una struttura a blocchi diagonale. Partitionando i parametri secondo questa struttura, Adam-mini riduce il numero di tassi di apprendimento e, di conseguenza, la memoria necessaria per l'ottimizzatore.
Come Funziona Adam-mini
Il processo di Adam-mini consiste in due passaggi principali. Primo, i parametri del modello vengono divisi in blocchi basati sulla struttura Hessiana. Ad esempio, in un'architettura Transformer, i parametri vengono raggruppati in blocchi corrispondenti a diversi componenti come i layer di query e chiave. Ciascuno di questi blocchi riceve un singolo tasso di apprendimento invece di averne uno individuale per ogni parametro.
Il secondo passaggio prevede il calcolo dei tassi di apprendimento per ogni blocco. Adam-mini sostituisce i valori dei tassi di apprendimento con le medie dei rispettivi blocchi. Questo riduce significativamente la quantità di memoria necessaria, poiché il numero totale di tassi di apprendimento può essere ridotto da miliardi a solo una manciata o qualche centinaio.
Vantaggi di Adam-mini
Riduzione della Memoria
Uno dei vantaggi più significativi di Adam-mini è la riduzione dell'uso della memoria. Usando meno tassi di apprendimento, Adam-mini può risparmiare circa il 45% al 50% della memoria necessaria rispetto ad Adam. Questo notevole risparmio di memoria consente un addestramento più accessibile di modelli grandi.
Maggiore Velocità di Elaborazione
Oltre ai requisiti di memoria inferiori, Adam-mini dimostra un miglior Throughput. Durante l'addestramento, Adam-mini può elaborare token più velocemente di AdamW grazie a un minore overhead e a un uso efficiente della memoria. Ad esempio, durante l'addestramento del modello Llama2-7B, Adam-mini ha raggiunto una riduzione del 33% nel tempo totale rispetto ad AdamW.
Performance sui Modelli Linguistici
Adam-mini è stato testato insieme ad altri ottimizzatori in vari compiti, inclusi pre-addestramento e fine-tuning di modelli linguistici. I risultati mostrano che Adam-mini performa in modo comparabile o addirittura migliore rispetto ad AdamW in molti casi, il tutto utilizzando meno memoria. Adam-mini si è dimostrato efficace anche in compiti non linguistici come l'addestramento di reti neurali per visione e grafo.
Come Usare Adam-mini
Implementare Adam-mini in una pipeline di addestramento è semplice. Una volta impostato il modello, i parametri possono essere suddivisi in blocchi basati sul principio stabilito attorno alla struttura Hessiana. I tassi di apprendimento possono poi essere calcolati e applicati durante l'addestramento.
È essenziale mantenere i tassi di apprendimento originali per i layer di embedding e i layer di output. Questi layer necessitano spesso di attenzione speciale quando si determinano i loro tassi di apprendimento per evitare instabilità nell'addestramento.
Sfide e Direzioni Future
Sebbene Adam-mini abbia dato contributi significativi all'ottimizzazione dell'uso della memoria e del tempo di addestramento, c'è ancora spazio per miglioramenti. Il metodo di mediazione dei tassi di apprendimento potrebbe non essere l'approccio migliore possibile. È necessario ulteriore ricerca per esplorare strategie più avanzate per impostare i tassi di apprendimento per diversi blocchi di parametri.
Inoltre, Adam-mini può essere combinato con altri metodi esistenti per migliorare ulteriormente le sue capacità. Applicazioni potenziali includono l'integrazione con tecniche come LoRA per il fine-tuning supervisionato o l'uso in combinazione con modelli progettati per ridurre l'overhead di memoria.
Conclusione
Adam-mini è uno sviluppo promettente nel campo degli ottimizzatori per il machine learning, in particolare per l'addestramento di grandi modelli linguistici. Riducendo significativamente i requisiti di memoria e migliorando il throughput di addestramento, Adam-mini può contribuire a democratizzare l'accesso a potenti modelli di intelligenza artificiale.
Man mano che il machine learning continua a evolversi e crescere, trovare modi per rendere l'addestramento più efficiente e accessibile sarà essenziale. Adam-mini rappresenta un passo verso il raggiungimento di questo obiettivo. Con la sua implementazione semplice e performance efficaci, potrebbe diventare uno strumento prezioso per ricercatori e praticanti.
Impatti Più Ampi
Lo sviluppo di metodi di addestramento più efficienti, come Adam-mini, può portare a un minor consumo energetico durante l'addestramento dei modelli di intelligenza artificiale. Questo spostamento verso l'efficienza non solo aiuta l'ambiente, ma consente anche una partecipazione più ampia nella ricerca sull'IA. Tuttavia, è necessario prestare attenzione per garantire che questi modelli avanzati vengano utilizzati in modo responsabile ed etico, poiché c'è sempre il potenziale di abuso.
In generale, Adam-mini offre una nuova prospettiva su come gli ottimizzatori possono essere progettati e utilizzati nel machine learning, e il suo impatto potrebbe risuonare in tutto il campo per gli anni a venire.
Titolo: Adam-mini: Use Fewer Learning Rates To Gain More
Estratto: We propose Adam-mini, an optimizer that achieves on par or better performance than AdamW with 50% less memory footprint. Adam-mini reduces memory by cutting down the learning rate resources in Adam (i.e., $1/\sqrt{v}$). By investigating the Hessian structure of neural nets, we find Adam's $v$ might not function at its full potential as effectively as we expected. We find that $\geq$ 99.9% of these learning rates in $v$ could be harmlessly removed if we (1) carefully partition the parameters into blocks following our new principle on Hessian structure; (2) assign a single but good learning rate to each parameter block. We then provide one simple way to find good learning rates and propose Adam-mini. Empirically, we verify that Adam-mini performs on par or better than AdamW on various language models sized from 39M to 13B for pre-training, supervised fine-tuning, and RLHF. The reduced memory footprint of Adam-mini also alleviates communication overheads among GPUs, thereby increasing throughput. For instance, Adam-mini achieves 49.6% higher throughput than AdamW when pre-training Llama 2-7B on $2\times$ A800-80GB GPUs, which saves 33% wall-clock time for pre-training.
Autori: Yushun Zhang, Congliang Chen, Ziniu Li, Tian Ding, Chenwei Wu, Diederik P. Kingma, Yinyu Ye, Zhi-Quan Luo, Ruoyu Sun
Ultimo aggiornamento: 2024-11-11 00:00:00
Lingua: English
URL di origine: https://arxiv.org/abs/2406.16793
Fonte PDF: https://arxiv.org/pdf/2406.16793
Licenza: https://creativecommons.org/licenses/by/4.0/
Modifiche: Questa sintesi è stata creata con l'assistenza di AI e potrebbe presentare delle imprecisioni. Per informazioni accurate, consultare i documenti originali collegati qui.
Si ringrazia arxiv per l'utilizzo della sua interoperabilità ad accesso aperto.
Link di riferimento
- https://github.com/yangluo7/CAME
- https://github.com/karpathy/nanoGPT/tree/master
- https://github.com/stanford-crfm/levanter/blob/e183ec80ec5971b12d4a3fb08a160268de342670/config/gpt2_xl.yaml
- https://github.com/jzhang38/TinyLlama
- https://commoncrawl.org/
- https://github.com/liziniu/ReMax
- https://github.com/lm-sys/FastChat/tree/main/fastchat/llm_judge
- https://github.com/hiyouga/LLaMA-Factory
- https://github.com/pytorch/examples/blob/main/imagenet/main.py
- https://github.com/lucidrains/denoising-diffusion-pytorch
- https://cseweb.ucsd.edu/~weijian/static/datasets/celeba/
- https://github.com/dmlc/dgl/tree/master/examples/pytorch/ogb/ogbn-arxiv
- https://ogb.stanford.edu/docs/nodeprop/
- https://colab.research.google.com/drive/1SiF0KZJp75rUeetKOWqpsA8clmHP6jMg?usp=sharing
- https://github.com/zyushun/Adam-mini
- https://huggingface.co/datasets/argilla/ultrafeedback-binarized-preferences-cleaned