Distribuzione di LLaMA 3, Mistral e Mixtral su AWS EC2 con vLLM

Nel 2023 sono stati rilasciati molti LLM open-source avanzati, ma la distribuzione di questi modelli di intelligenza artificiale in produzione è ancora una sfida tecnica. In questo articolo mostreremo come distribuire alcuni dei migliori LLM su AWS EC2: LLaMA 3 70B, Mistral 7B e Mixtral 8x7B. Utilizzeremo un motore di inferenza avanzato che supporta l'inferenza in batch per massimizzare il throughput: vLLM.

vLLM

LLaMA 3, Mistral e Mixtral

Meta ha creato e lanciato la serie LLaMA 3 di modelli linguistici di grandi dimensioni (LLM), che comprende una serie di modelli generativi di testo pre-addestrati e messi a punto. Questi modelli hanno dimensioni diverse, con parametri compresi tra 7 e 70 miliardi.

Mistral AI, una startup co-fondata da persone con esperienza in DeepMind e Meta di Google, ha fatto un ingresso significativo nel mondo dei LLM con Mistral 7B e poi Mixtral 8x7B.

Ciò che rende Mistral 7B particolarmente impressionante sono le sue prestazioni. In vari test, ha superato Llama2-13B e persino Llama1-34B in molte metriche. Questo suggerisce che Mistral 7B offre capacità simili o migliori con un overhead computazionale significativamente inferiore. Per quanto riguarda i compiti di codifica, Mistral 7B compete con CodeLlama 7B e le sue dimensioni compatte, 13,4 GB, ne consentono l'esecuzione su macchine standard.

Mixtral 8x7B è un modello adattabile e rapido, adatto a varie applicazioni. Opera a una velocità sei volte superiore e soddisfa o supera le prestazioni di LLaMA 3 70B in tutte le metriche di test. Questo modello supporta più lingue e possiede capacità di codifica intrinseche. Può gestire sequenze lunghe fino a 32k token.

Tutti questi modelli sono open-source ed è possibile implementarli sul proprio server se si riesce ad avere accesso all'hardware giusto. Vediamo come implementarli su AWS EC2 con vLLM.

Inferenza batch e multi GPU con vLLM

vLLM è una libreria rapida e facile da usare, pensata per un'inferenza e un'implementazione efficienti di LLM. Le prestazioni di vLLM derivano da diverse tecniche avanzate, come l'attenzione paginata per un'efficace gestione della memoria delle chiavi di attenzione e dei valori, l'elaborazione batch delle query in arrivo in tempo reale e kernel CUDA personalizzati.

Inoltre, vLLM offre una buona flessibilità grazie all'inferenza distribuita (tramite parallelismo tensoriale), allo streaming dell'output e all'adattamento alle architetture di GPU NVIDIA e AMD.

In particolare, vLLM sarà molto utile per l'implementazione di LLaMA 3, Mistral e Mixtral, perché ci permetterà di distribuire i nostri modelli su istanze AWS EC2 che incorporano diverse GPU più piccole (come NVIDIA A10), invece di una singola grande GPU (come NVIDIA A100 o H100). Inoltre, vLLM ci permetterà di aumentare drasticamente il throughput del nostro modello grazie all'inferenza in batch.

Predisporre il giusto hardware su AWS EC2

L'implementazione degli LLM è una sfida per molti motivi: Utilizzo della VRAM (memoria della GPU), velocità di inferenza, throughput, utilizzo dello spazio su disco... In questo caso, dobbiamo assicurarci di fornire un'istanza GPU su AWS EC2 che abbia abbastanza VRAM per eseguire i nostri modelli.

Le istanze G5 sono una buona scelta perché consentono di accedere alle moderne GPU NVIDIA A10 e possono scalare fino a 192 GB di VRAM (si veda l'istanza g5.48xlarge), pur rimanendo abbastanza convenienti.

Mistral 7B è il modello più semplice da implementare, poiché richiede circa 14 GB di VRAM. Seguono Mixtral 8x7B con 110 GB e LaMA 2 70B con 140 GB. Qui consideriamo solo fp16, non fp32, e non applichiamo alcun tipo di quantizzazione.

Di conseguenza, Mistral 7B può essere eseguito su un'istanza g5.xlarge, ma Mixtral 8x7B e LaMA 2 70B richiedono un'istanza g5.48xlarge.

Per fornire tali istanze, accedere alla console AWS EC2 e lanciare una nuova istanza: selezionare l'AMI NVIDIA deep learning, su un'istanza g5.48xlarge. Sono necessari almeno 300 GB di spazio su disco.

AMI di apprendimento profondo su istanza G5 su AWS

Installare vLLM per l'inferenza distribuita

L'installazione di vLLM è abbastanza semplice. Apriamo una connessione SSH alla nostra istanza AWS appena creata e installiamo vLLM con pip:

pip install vllm

Poiché utilizzeremo vLLM per l'inferenza distribuita su 8 GPU A10, dobbiamo installare anche Ray:

pip install ray

In caso di problemi di compatibilità durante il processo di installazione, potrebbe essere più facile costruire vLLM dai sorgenti o usare la sua immagine Docker: Per maggiori dettagli, consultare la documentazione di installazione.

Creare lo script di inferenza

Ora è possibile creare il primo script di inferenza. Create un file Python che contenga quanto segue:

from vllm import LLM

# Replace the model name with the one you want to use:
# Mixtral simple: mistralai/Mixtral-8x7B-v0.1
# Mixtral instruct: mistralai/Mixtral-8x7B-Instruct-v0.1
# Mistral 7B simple: mistralai/Mistral-7B-v0.1
# Mistral 7B instruct: mistralai/Mistral-7B-Instruct-v0.1
# LLaMA 3 70B: meta-llama/Llama-2-70b-hf
llm = LLM("mistralai/Mixtral-8x7B-Instruct-v0.1", tensor_parallel_size=8)

print(llm.generate("What is batch inference?"))

Ora eseguite lo script con Python, che restituisce qualcosa di simile:

Batch inference is the process of applying machine learning models to a batch of data inputs all at once, rather than processing each input individually in real-time. In batch inference, a large set of inputs is collected and then processed together as a group, or "batch," by the machine learning model.

Batch inference is often used in scenarios where real-time predictions are not required, and where there is a large volume of data that needs to be processed. It can be more efficient and cost-effective than real-time inference, as it allows for the efficient use of computing resources and can reduce the latency associated with processing individual inputs.

Batch inference is commonly used in applications such as image recognition, natural language processing, and predictive analytics. For example, a company might use batch inference to analyze customer data and generate insights about purchasing patterns, or to analyze sensor data from industrial equipment to identify potential maintenance issues.

In summary, batch inference is the process of applying machine learning models to a batch of data inputs all at once, as an alternative to real-time inference. It is commonly used in scenarios where real-time predictions are not required and where there is a large volume of data that needs to be processed efficiently.

Come si può vedere, si tratta di un gioco da ragazzi. È necessario adattare tensor_parallel_size in base al numero di GPU sottostanti.

Quello descritto sopra era uno scenario unico. Ora vogliamo avviare un vero e proprio server di inferenza, in grado di gestire più richieste e di eseguire l'inferenza in batch al volo. Per prima cosa, avviare il server:

python -m vllm.entrypoints.openai.api_server \
--model mistralai/Mixtral-8x7B-Instruct-v0.1
--tensor-parallel-size 8

Dopo un po' di tempo, una volta che il modello è stato caricato correttamente nella VRAM, è possibile aprire una seconda finestra di shell ed effettuare alcune richieste:

curl http://localhost:8000/v1/completions \
-H "Content-Type: application/json" \
-d '{
    "model": "mistralai/Mixtral-8x7B-Instruct-v0.1",
    "prompt": "What is batch inference?"
}'

Il risultato è lo stesso di prima, ma questa volta è possibile eseguire più richieste contemporaneamente.

Conclusione

L'utilizzo di un server di inferenza avanzato come vLLM è vantaggioso se si desidera massimizzare l'utilizzo della GPU e distribuire facilmente il modello su più GPU in parallelo.

Come si può vedere, grazie a questa tecnica è abbastanza facile implementare i modelli di intelligenza artificiale open-source più avanzati, come LLaMA 3, Mistral e Mixtral, sul proprio server.

In questa esercitazione abbiamo utilizzato AWS EC2, ma avremmo potuto utilizzare anche altri fornitori. La sfida principale sarà il costo delle GPU e la loro disponibilità.

Se non volete implementare tali LLM da soli, vi consigliamo di utilizzare la nostra API NLP Cloud. Vi farà risparmiare molto tempo e potrebbe persino essere più economico che implementare i vostri LLM. Se non l'avete ancora fatto, provate pure!

Vincent
Consulente per gli sviluppatori presso NLP Cloud