Servizio ad Alto Throughput con vLLM su Ubuntu

laptop_mac macOS Sonoma Intermediate schedule 8 min read
Author by Alex Rivera • May 14, 2024

Se stai sviluppando un'applicazione con più utenti simultanei, Ollama e LM Studio non sono sufficienti. Hai bisogno di un motore di inferenza di livello enterprise. Hai bisogno di vLLM.

Step 1 Introduzione

vLLM è un motore di serving per LLM ad alto throughput e memoria efficiente. Utilizza una tecnica chiamata PagedAttention per gestire efficacemente le chiavi e i valori di attenzione, ottenendo un throughput da 2 a 4 volte superiore rispetto ai transformer standard di HuggingFace.

Questa guida presuppone che tu stia utilizzando un server Linux con almeno una GPU NVIDIA di fascia alta (ad esempio RTX 3090, 4090 o A100).

Step 2 Prerequisiti

vLLM richiede Python e CUDA. Consigliamo vivamente di utilizzare un ambiente virtuale come conda o il classico venv.

Terminal
sudo apt update
sudo apt install python3-pip python3-venv

# Create and activate environment
python3 -m venv vllm-env
source vllm-env/bin/activate

Step 3 Installazione di vLLM

Installa vLLM direttamente da PyPI. Questo scaricherà automaticamente PyTorch e le dipendenze CUDA necessarie.

Terminal
pip install vllm

Step 4 Avviare un Server Compatibile con OpenAI

vLLM supporta nativamente il protocollo API di OpenAI. Puoi servire un modello direttamente dalla riga di comando. Useremo Llama 3 8B come esempio.

Terminal
python3 -m vllm.entrypoints.openai.api_server   --model meta-llama/Meta-Llama-3-8B-Instruct   --dtype auto   --api-key your-secret-key   --port 8000

Spiegazione dei Parametri Principali: - --model: L'ID del repository HuggingFace. vLLM lo scaricherà automaticamente. - --dtype auto: Utilizza automaticamente bfloat16 o float16 per le massime prestazioni. - --api-key: Protegge il tuo endpoint in modo che utenti casuali di Internet non possano sovraccaricare la tua GPU.

Step 5 Connessione all'API

Ora puoi accedere a questo server utilizzando l'SDK Python standard di OpenAI, semplicemente sostituendo il base_url.

Terminal
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="your-secret-key"
)

response = client.chat.completions.create(
    model="meta-llama/Meta-Llama-3-8B-Instruct",
    messages=[
        {"role": "user", "content": "Explain PagedAttention."}
    ],
)

print(response.choices[0].message.content)

Step 6 Ottimizzazione per la Produzione

Se disponi di più GPU (ad esempio due RTX 3090), puoi distribuire un modello grande da 70B su di esse utilizzando il parallelismo tensoriale. Aggiungi semplicemente il flag --tensor-parallel-size:

Terminal
python3 -m vllm.entrypoints.openai.api_server   --model meta-llama/Meta-Llama-3-70B-Instruct   --tensor-parallel-size 2

Con vLLM in esecuzione, il tuo server Linux è ora in grado di gestire decine di richieste simultanee con zero degradazione della latenza.