LLaMA 3.1 405b è un modello linguistico di grandi dimensioni sviluppato da Meta AI, che rappresenta uno dei più grandi modelli di intelligenza artificiale disponibili in termini di dimensioni dei parametri, con 405 miliardi di parametri. Fa parte della famiglia Llama 3.1, che comprende modelli di diverse dimensioni (8B, 70B e 405B parametri).
La versione 405B si distingue in particolare per la sua portata, con l'obiettivo di eguagliare o addirittura superare le prestazioni di alcuni dei migliori modelli closed-source come GPT-4 in vari benchmark, indicando le sue capacità all'avanguardia nella comprensione del linguaggio, nella generazione e in altri compiti. I modelli Llama 3.1 sono progettati con un supporto multilingue migliorato, in grado di comprendere e generare testi in più lingue, il che ne amplia l'applicabilità in diverse regioni e basi di utenti.
In questo articolo mostriamo come installare e distribuire LLaMA 3.1 405B in produzione su Google Cloud Platform (GCP) Compute Engine. Parliamo innanzitutto dei requisiti hardware, quindi del provisioning delle istanze su GCP e della distribuzione e quantizzazione con vLLM.
I requisiti hardware per l'esecuzione di Llama 3.1 405B sono piuttosto ampi a causa delle sue dimensioni e della sua complessità. Come di consueto quando si distribuiscono LLM, la parte più complessa è la GPU. È necessario disporre di molta VRAM (cioè la memoria della GPU) per distribuire questo modello:
In base a queste esigenze, in genere si considerano configurazioni come:
Come al solito, bisogna fare attenzione alla quantizzazione e assicurarsi che la qualità del modello non ne risenta troppo. Nel nostro test, la quantizzazione fp8 non sembra danneggiare la qualità del modello, quindi la utilizzeremo in questo articolo.
Google Cloud Platform (GCP) è un provider interessante per la distribuzione e la scalabilità dei carichi di lavoro AI. Sono relativamente economici e hanno una buona offerta di GPU (NVIDIA H100 80GB, NVIDIA A100 80GB, NVIDIA V100, NVIDIA L4, NVIDIA T4...).
Sono anche abbastanza flessibili in termini di scelta delle istanze. Ad esempio, è possibile fornire istanze con una o più GPU H100: 1xH100, 2xH100, 4xH100 o 8xH100.
Tuttavia, se il vostro account è nuovo, potreste non essere autorizzati a fornire istanze GPU e, in tal caso, dovrete rivolgervi al supporto per richiedere un aumento della quota.
Come primo passo, si dovrà creare un nuovo progetto su GCP. Quindi si dovrà abilitare l'API di Compute Engine per il progetto. Per fare ciò, andare alla Libreria API nella Console di GCP e cercare "Compute Engine". Fate clic su di esso e poi su "Enable" per attivare l'API.
Una volta abilitata l'API, sarà possibile creare una nuova istanza. È possibile farlo andando nella sezione "Istanze VM" della Console GCP e facendo clic su "Crea istanza".
Verrà quindi richiesto di scegliere un tipo di macchina. Per LaMA 3.1 405B in modalità fp8, si dovrà scegliere una macchina a3-highgpu-1g con 8xH100 GPU.
Istanza GCP per LLaMA 3.1 405B
Sarà quindi necessario impostare molti dettagli per la macchina virtuale, come la rete, lo storage e così via. In questo articolo non esamineremo tutte queste impostazioni, ma ci concentreremo sul tipo di immagine e sullo storage.
Per scaricare i pesi del modello LaMA 3.1 405B in formato fp8, sono necessari almeno 500 GB di spazio su disco. Si consiglia inoltre di utilizzare un'immagine Linux Deep Learning con CUDA 12 già installato, in quanto può far risparmiare un po' di lavoro in seguito. È possibile ottenere questo risultato nella sezione "Sistema operativo e archiviazione":
Immagine GCP e spazio su disco per LLaMA 3.1 405B
vLLM, acronimo di Virtual Large Language Model, rappresenta un progresso significativo nel campo dell'IA, in particolare per quanto riguarda il modo in cui i modelli linguistici di grandi dimensioni (LLM) vengono serviti e utilizzati per l'inferenza.
vLLM è stato progettato per ottenere inferenze ad alto rendimento e a bassa latenza, il che lo rende ideale per le applicazioni in cui è fondamentale un'elaborazione rapida ed efficiente del linguaggio. Questo risultato è ottenuto grazie a tecniche innovative come PagedAttention, che ottimizza l'uso della memoria gestendo in modo più efficiente le chiavi di attenzione e la memoria dei valori, consentendo un throughput fino a 24 volte superiore rispetto ai metodi tradizionali come HuggingFace Transformers.
Il cuore dell'efficienza di vLLM risiede nella gestione della memoria. Utilizzando PagedAttention, vLLM divide la cache key-value (KV) in blocchi, il che consente un migliore utilizzo della memoria e riduce la frammentazione, un collo di bottiglia comune nell'uso della memoria delle GPU per gli LLM. Questo approccio non solo accelera l'elaborazione, ma permette anche di gestire più richieste contemporaneamente senza significativi cali di prestazioni.
Come motore di inferenza e di servizio, vLLM non si limita a eseguire LLM, ma lo fa in modo da massimizzare l'utilizzo delle risorse. Utilizza tecniche come il batching continuo delle richieste in arrivo, che garantisce il pieno utilizzo della GPU, riducendo così i tempi di inattività e aumentando l'efficienza complessiva.
vLLM supporta diverse tecniche di quantizzazione (come GPTQ, AWQ, INT4, INT8, FP8) che riducono la precisione dei pesi del modello, diminuendo così l'uso della memoria e potenzialmente accelerando l'inferenza.
L'installazione di vLLM è relativamente semplice. Colleghiamoci alla nostra istanza di GCP VM e installiamo vLLM usando pip:
pip install vllm
Eseguiremo l'inferenza distribuita su 8 GPU H100, quindi dobbiamo installare anche Ray:
pip install ray
Se si verificano problemi di compatibilità durante l'installazione di vLLM, potrebbe essere più semplice compilare vLLM dai sorgenti o utilizzare la sua immagine Docker: consultare le istruzioni per l'installazione di vLLM.
Cominciamo con un esempio Python di base per testare il nostro modello:
from vllm import LLM
# Load LLaMA 3.1 405B on 8 GPUs
llm = LLM("neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic", tensor_parallel_size=8)
print(llm.generate("What is the difference between fp8 quantization and int8 quantization?"))
È possibile eseguire lo script Python. Se è la prima volta che lo si esegue, è necessario attendere che il modello venga scaricato e caricato sulla GPU, quindi si riceverà una risposta simile a questa:
FP8 (Floating-Point 8) and INT8 (Integer 8) are both quantization techniques used to reduce the precision of numerical values in deep learning models, but they differ in their representation and behavior.
**INT8 Quantization**
INT8 quantization represents numbers as 8-bit integers, which can take on values between -128 and 127 (or 0 and 255 for unsigned integers). This means that the precision of the numbers is limited to 8 bits, and any values outside this range are clipped or saturated.
INT8 quantization is a simple and widely used technique, especially for integer-based architectures like ARM and x86. Most deep learning frameworks, including TensorFlow and PyTorch, support INT8 quantization.
**FP8 Quantization**
FP8 quantization, on the other hand, represents numbers as 8-bit floating-point numbers, with 1 sign bit, 2 exponent bits, and 5 mantissa bits. This allows for a much larger dynamic range than INT8, with values that can be as small as 2^-14 or as large as 2^15.
FP8 quantization is a more recent development, and its main advantage is that it can provide better accuracy than INT8 quantization, especially for models that require a large dynamic range, such as those with batch normalization or depthwise separable convolutions. FP8 is also more suitable for models that are sensitive to quantization noise, like those with recurrent neural networks (RNNs) or long short-term memory (LSTM) networks.
**Key differences**
Here are the key differences between FP8 and INT8 quantization:
1. **Dynamic range**: FP8 has a much larger dynamic range than INT8, which means it can represent a wider range of values.
2. **Precision**: FP8 has a lower precision than INT8, with 5 mantissa bits compared to 8 bits for INT8.
3. **Behavior**: FP8 is more suitable for models that require a large dynamic range, while INT8 is better suited for models with smaller weights and activations.
4. **Hardware support**: INT8 is widely supported by most hardware platforms, while FP8 is still an emerging standard, with limited hardware support.
In summary, FP8 quantization offers better accuracy and a larger dynamic range than INT8 quantization, but it requires more sophisticated hardware support and may not be suitable for all models or applications.
Il modello LaMA 3.1 405B è già stato quantizzato in fp8 per vLLM da Neural Magic, quindi non è necessario eseguire nuovamente la quantizzazione. È sufficiente caricare il modello quantizzato dall'hub HuggingFace.
Il parametro tensor_parallel_size viene impostato in base al numero di GPU presenti sulla nostra macchina.
Questo semplice script Python non è però un vero e proprio server di produzione. Avvieremo ora il server di inferenza per consumare molte richieste in parallelo e massimizzare il throughput:
python -m vllm.entrypoints.openai.api_server \
--model neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic \
--tensor-parallel-size 8
Una volta caricato il modello, è possibile avviare un secondo terminale ed effettuare alcune richieste:
curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "neuralmagic/Meta-Llama-3.1-405B-Instruct-FP8-dynamic",
"prompt": "Who are you?"
}'
I'm an artificial intelligence model known as Llama. Llama stands for "Large Language Model Meta AI."
LLaMA 3.1 405B è un modello di intelligenza artificiale generativa all'avanguardia, ma non è facile implementarlo in produzione.
La sfida più grande è trovare l'hardware giusto. Le GPU sono molto costose e c'è una carenza globale. Ma una volta che si riesce a fornire le GPU giuste, l'implementazione del modello con un server di inferenza come vLLM è abbastanza facile.
Per modelli così grandi, si potrebbe sfruttare la quantizzazione per ridurre l'utilizzo della VRAM e migliorare la latenza, come abbiamo fatto noi. Ma attenzione: la quantizzazione non è sempre una soluzione efficace, in quanto può ridurre l'accuratezza del modello.
Se non potete o non volete implementare LLaMA 3.1 405B da soli, potete facilmente utilizzarlo su NLP Cloud e sfruttare questo grande modello in scala nella produzione. Provate subito LLaMA 3.1 405B su NLP Cloud!
Se avete domande su LaMA 3.1 405B e sull'IA in generale, non esitate a chiedere a noi, è sempre un piacere consigliarvi!
Julien
CTO di NLP Cloud