Inferenza rapida su modelli di linguaggio estesi BLOOMZ su acceleratore Habana Gaudi2

'Accelerate inference on extended BLOOMZ language models using Habana Gaudi2 accelerator'

Questo articolo ti mostrerà come distribuire facilmente grandi modelli linguistici con centinaia di miliardi di parametri come BLOOM su Habana® Gaudi®2 utilizzando 🤗 Optimum Habana, che è il ponte tra Gaudi2 e la libreria 🤗 Transformers. Come dimostrato nel benchmark presentato in questo post, ciò ti consentirà di eseguire inferenze più velocemente rispetto a qualsiasi GPU attualmente disponibile sul mercato.

Man mano che i modelli diventano sempre più grandi, distribuirli in produzione per eseguire inferenze è diventato sempre più sfidante. Sia l’hardware che il software hanno visto molte innovazioni per affrontare queste sfide, quindi immergiamoci per vedere come superarle efficientemente!

BLOOMZ

BLOOM è un modello autoregressivo con 176 miliardi di parametri che è stato addestrato per completare sequenze di testo. Può gestire 46 diverse lingue e 13 linguaggi di programmazione. Progettato e addestrato nell’ambito dell’iniziativa BigScience, BLOOM è un progetto di open science che ha coinvolto un gran numero di ricercatori e ingegneri di tutto il mondo. Più recentemente, è stato rilasciato un altro modello con la stessa identica architettura: BLOOMZ, che è una versione ottimizzata di BLOOM su diversi compiti, portando a una migliore generalizzazione e capacità di zero-shot[^1].

Modelli così grandi pongono nuove sfide in termini di memoria e velocità sia per l’addestramento che per l’inferenza. Anche con una precisione a 16 bit, un’istanza richiede 352 GB per adattarsi! Probabilmente avrai difficoltà a trovare un dispositivo con così tanta memoria al momento, ma l’hardware all’avanguardia come Habana Gaudi2 rende possibile eseguire inferenze su modelli BLOOM e BLOOMZ con latenze ridotte.

Habana Gaudi2

Gaudi2 è l’acceleratore hardware per intelligenza artificiale di seconda generazione progettato da Habana Labs. Un singolo server contiene 8 dispositivi acceleratori (chiamati Habana Processing Units o HPUs) con 96 GB di memoria ciascuno, il che consente di far entrare modelli molto grandi. Tuttavia, ospitare il modello non è molto interessante se il calcolo è lento. Fortunatamente, Gaudi2 brilla su questo aspetto: a differenza delle GPU, la sua architettura consente all’acceleratore di eseguire moltiplicazioni di matrici generali (GeMM) e altre operazioni in parallelo, accelerando i flussi di lavoro di deep learning. Queste caratteristiche rendono Gaudi2 un ottimo candidato per l’addestramento e l’inferenza dei modelli LLM.

SDK di Habana, SynapseAI™, supporta PyTorch e DeepSpeed per accelerare l’addestramento e l’inferenza di LLM. Il compilatore di grafi SynapseAI ottimizzerà l’esecuzione delle operazioni accumulate nel grafo (ad esempio, fusione degli operatori, gestione del layout dei dati, parallelizzazione, pipeline e gestione della memoria e ottimizzazioni a livello di grafo).

Inoltre, il supporto per i grafi HPU e l’inferenza DeepSpeed sono stati introdotti di recente in SynapseAI, e questi sono particolarmente adatti per applicazioni sensibili alla latenza, come mostrato nel nostro benchmark di seguito.

Tutte queste funzionalità sono integrate nella libreria 🤗 Optimum Habana in modo che sia molto semplice distribuire il tuo modello su Gaudi. Dai un’occhiata alla pagina di avvio rapido qui.

Se desideri accedere a Gaudi2, vai su Intel Developer Cloud e segui questa guida.

Benchmark

In questa sezione, forniremo un benchmark preliminare di BLOOMZ su Gaudi2, Gaudi di prima generazione e Nvidia A100 80GB. Anche se questi dispositivi dispongono di molta memoria, il modello è così grande che un singolo dispositivo non è sufficiente per contenere un’istanza singola di BLOOMZ. Per risolvere questo problema, utilizzeremo DeepSpeed, una libreria di ottimizzazione del deep learning che consente numerosi miglioramenti di memoria e velocità per accelerare il modello e farlo adattare al dispositivo. In particolare, ci basiamo qui su DeepSpeed-inference: introduce diverse funzionalità come il parallelismo del modello (o pipeline) per sfruttare al massimo i dispositivi disponibili. Per Gaudi2, utilizziamo la versione modificata di DeepSpeed di Habana che aggiunge il supporto per HPUs.

Latency

Abbiamo misurato le latenze (batch di un campione) per due diverse dimensioni di BLOOMZ, entrambe con miliardi di parametri:

  • 176 miliardi di parametri
  • 7 miliardi di parametri

Le esecuzioni sono state eseguite con DeepSpeed-inference in precisione a 16 bit con 8 dispositivi e utilizzando una cache chiave-valore. Nota che mentre i grafici CUDA attualmente non sono compatibili con il parallelismo del modello in DeepSpeed (DeepSpeed v0.8.2, vedi qui), i grafici HPU sono supportati nella versione modificata di DeepSpeed di Habana. Tutti i benchmark eseguono la generazione greedy di 100 token di output. Il prompt di input è:

“DeepSpeed è un framework di apprendimento automatico”

che consiste in 7 token con il tokenizer di BLOOM.

I risultati per la latenza dell’infrazione sono mostrati nella tabella sottostante (l’unità è il secondo).

Aggiornamento: i numeri sopra sono stati aggiornati con le versioni di Optimum Habana 1.6 e SynapseAI 1.10, portando a un incremento di velocità di 1,42x su BLOOMZ con Gaudi2 rispetto ad A100.

Il team di Habana ha recentemente introdotto il supporto per l’infrazione di DeepSpeed in SynapseAI 1.8, consentendo così rapidamente l’infrazione per modelli con oltre 100 miliardi di parametri. Per il checkpoint di 176 miliardi di parametri, Gaudi2 è 1,42x più veloce di A100 80GB. Anche i checkpoint più piccoli presentano risultati interessanti. Gaudi2 è 2,89x più veloce di A100 per BLOOMZ-7B! È interessante notare che riesce a beneficiare del parallelismo del modello mentre A100 è più veloce su un singolo dispositivo.

Abbiamo anche eseguito questi modelli su Gaudi di prima generazione. Sebbene sia più lento di Gaudi2, è interessante dal punto di vista del prezzo, poiché un’istanza DL1 su AWS costa approssimativamente 13$ all’ora. La latenza per BLOOMZ-7B su Gaudi di prima generazione è di 2,387 secondi. Pertanto, Gaudi di prima generazione offre per il checkpoint da 7 miliardi un rapporto prestazioni-prezzo migliore di A100, che costa più di 30$ all’ora!

Ci aspettiamo che il team di Habana ottimizzi le prestazioni di questi modelli nelle prossime versioni di SynapseAI. Ad esempio, nel nostro ultimo benchmark, abbiamo visto che Gaudi2 esegue l’infrazione di Stable Diffusion 2,2x più velocemente di A100 e questo è stato ulteriormente migliorato a 2,37x con le ultime ottimizzazioni fornite da Habana. Aggiorneremo questi numeri man mano che verranno rilasciate nuove versioni di SynapseAI e integrate in Optimum Habana.

Esecuzione di un’infrazione su un dataset completo

Lo script che abbiamo scritto consente di utilizzare il tuo modello per completare frasi su un intero dataset. Questo è utile per provare l’infrazione di BLOOMZ su Gaudi2 con i tuoi dati.

Ecco un esempio con il dataset tldr_news. Contiene sia il titolo che il contenuto di diversi articoli (puoi visualizzarlo su Hugging Face Hub). Abbiamo mantenuto solo la colonna del contenuto e troncato ogni campione ai primi 16 token in modo che il modello generi il resto della sequenza con 50 nuovi token. I primi cinque campioni sono:

Batch n°1
Input: ['Facebook ha pubblicato un rapporto che mostra quali contenuti sono stati più visualizzati dagli americani tra']
Output: ['Facebook ha pubblicato un rapporto che mostra quali contenuti sono stati più visualizzati dagli americani tra gennaio e giugno di quest'anno. Il rapporto, basato sui dati della piattaforma di pubblicità mobile dell'azienda, mostra che i contenuti più popolari su Facebook erano notizie, seguite da sport, intrattenimento e politica. Il rapporto mostra anche che i più']
--------------------------------------------------------------------------------------------------
Batch n°2
Input: ['Un effetto quantistico chiamato superassorbimento consente a una collezione di molecole di assorbire la luce in modo più']
Output: ['Un effetto quantistico chiamato superassorbimento consente a una collezione di molecole di assorbire la luce in modo più intenso della somma delle assorbimenti individuali delle molecole. Questo effetto è dovuto all'interazione coerente delle molecole con il campo elettromagnetico. L'effetto di superassorbimento è stato osservato in diversi sistemi, tra cui cristalli liquidi, cristalli liquidi in']
--------------------------------------------------------------------------------------------------
Batch n°3
Input: ['Un prototipo di razzo SpaceX Starship è esploso durante un test di pressione. Era']
Output: ['Un prototipo di razzo SpaceX Starship è esploso durante un test di pressione. Era la prima volta che un prototipo di Starship veniva testato in aria. L'esplosione è avvenuta presso l'impianto SpaceX a Boca Chica, in Texas. Il prototipo di Starship è stato testato per la sua capacità di resistere alla pressione del volo. L'esplosione è avvenuta']
--------------------------------------------------------------------------------------------------
Batch n°4
Input: ['Scalene è un profiler CPU e di memoria ad alte prestazioni per Python.']
Output: ['Scalene è un profiler CPU e di memoria ad alte prestazioni per Python. È progettato per essere un profiler leggero, portatile ed facile da usare. Scalene è un pacchetto Python che può essere installato su qualsiasi piattaforma che supporti Python. Scalene è un profiler leggero, portatile ed facile da usare']
--------------------------------------------------------------------------------------------------
Batch n°5
Input: ['Con la diffusione dei piccoli "Cube Satellites" economici, le startup sono ora']
Output: ['Con la diffusione dei piccoli "Cube Satellites" economici, le startup sono ora in grado di lanciare i propri satelliti per una frazione del costo di un lancio tradizionale. Questo ha portato ad una proliferazione di piccoli satelliti, che vengono ora utilizzati per una vasta gamma di applicazioni. L'uso più comune dei piccoli satelliti è per le comunicazioni.']

Nella sezione successiva, spieghiamo come utilizzare lo script che abbiamo scritto per eseguire questo benchmark o per applicarlo a qualsiasi set di dati che preferisci da Hugging Face Hub!

Come riprodurre questi risultati?

Lo script utilizzato per il benchmarking di BLOOMZ su Gaudi2 e su Gaudi di prima generazione è disponibile qui . Prima di eseguirlo, assicurati di aver installato le ultime versioni di SynapseAI e dei driver Gaudi seguendo le istruzioni fornite da Habana .

Quindi, esegui quanto segue:

git clone https://github.com/huggingface/optimum-habana.git
cd optimum-habana && pip install . && cd examples/text-generation
pip install git+https://github.com/HabanaAI/[email protected]

Infine, puoi avviare lo script nel seguente modo:

python ../gaudi_spawn.py --use_deepspeed --world_size 8 run_generation.py --model_name_or_path bigscience/bloomz --use_hpu_graphs --use_kv_cache --max_new_tokens 100

Per l’inferenza multi-nodo, puoi seguire questa guida dalla documentazione di Optimum Habana.

Puoi anche caricare qualsiasi set di dati da Hugging Face Hub per ottenere prompt che verranno utilizzati per la generazione utilizzando l’argomento --dataset_name my_dataset_name .

Questo benchmark è stato eseguito con Transformers v4.28.1, SynapseAI v1.9.0 e Optimum Habana v1.5.0.

Per le GPU, ecco lo script che ha portato ai risultati che sono stati presentati in precedenza in questo post del blog (e qui ci sono le istruzioni per usarlo). Per utilizzare i grafici CUDA, sono necessarie forme statiche e ciò non è supportato in 🤗 Transformers. Puoi utilizzare questo repository scritto dal team di Habana per abilitarli.

Conclusioni

Vediamo in questo articolo che Habana Gaudi2 esegue l’inferenza di BLOOMZ più velocemente rispetto a Nvidia A100 80GB . E non c’è bisogno di scrivere uno script complicato poiché 🤗 Optimum Habana fornisce strumenti facili da usare per eseguire l’inferenza con modelli multi-miliardi di parametri su HPUs. Le future versioni dell’SDK SynapseAI di Habana si prevede che accelerino le prestazioni, quindi aggiorneremo regolarmente questo benchmark man mano che le ottimizzazioni dell’inferenza LLM su SynapseAI continuano a progredire. Aspettiamo anche i benefici delle prestazioni che arriveranno con l’inferenza FP8 su Gaudi2.

Abbiamo anche presentato i risultati ottenuti con Gaudi di prima generazione. Per modelli più piccoli, può essere all’altezza o addirittura migliore di A100 per quasi un terzo del suo prezzo. È una buona opzione alternativa all’utilizzo delle GPU per eseguire l’inferenza con un modello così grande come BLOOMZ.

Se sei interessato ad accelerare i tuoi flussi di lavoro di addestramento e inferenza di Machine Learning utilizzando gli ultimi acceleratori hardware e le librerie software AI, dai un’occhiata al nostro Expert Acceleration Program . Per saperne di più sulle soluzioni Habana, leggi della nostra partnership e contattali qui . Per saperne di più sugli sforzi di Hugging Face per rendere gli acceleratori hardware AI facili da usare, dai un’occhiata al nostro Hardware Partner Program .

  • Addestramento e inferenza più veloci: Habana Gaudi-2 vs Nvidia A100 80GB
  • Sfruttare DeepSpeed per addestrare modelli di trasformatori su larga scala in modo più rapido ed economico con Hugging Face e Habana Labs Gaudi

Grazie per la lettura! Se hai domande, non esitare a contattarmi, sia tramite Github che sul forum . Puoi anche metterti in contatto con me su LinkedIn .

[^1]: “Zero-shot” si riferisce alla capacità di un modello di completare un compito su dati di input nuovi o non visti, cioè senza aver ricevuto esempi di addestramento di questo tipo di dati. Forniamo al modello un prompt e una sequenza di testo che descrive ciò che vogliamo che il nostro modello faccia, in linguaggio naturale. La classificazione zero-shot esclude eventuali esempi del compito desiderato completati. Questo differisce dalla classificazione single o few-shot, poiché questi compiti includono un singolo o pochi esempi del compito selezionato.