Service à haut débit avec vLLM sur Ubuntu

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

Si vous développez une application avec plusieurs utilisateurs concurrents, Ollama et LM Studio ne suffiront pas. Vous avez besoin d'un moteur d'inférence de niveau entreprise. Vous avez besoin de vLLM.

Introduction

vLLM est un moteur de service LLM à haut débit et à mémoire optimisée. Il utilise une technique appelée PagedAttention pour gérer efficacement les clés et valeurs d'attention, offrant un débit 2 à 4 fois supérieur à celui des Transformers HuggingFace standard.

Ce guide suppose que vous exécutez un serveur Linux équipé d'au moins un GPU NVIDIA haut de gamme (par exemple, RTX 3090, 4090 ou A100).

Step 1 Prérequis

vLLM nécessite Python et CUDA. Nous recommandons vivement l'utilisation d'un environnement virtuel tel que conda ou le venv standard.

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 2 Installation de vLLM

Installez vLLM directement depuis PyPI. Cette commande téléchargera automatiquement PyTorch ainsi que les dépendances CUDA nécessaires.

Terminal
pip install vllm

Step 3 Démarrage d'un serveur compatible OpenAI

vLLM supporte nativement le protocole API d'OpenAI. Vous pouvez servir un modèle directement depuis la ligne de commande. Nous utiliserons Llama 3 8B comme exemple.

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

Explication des paramètres clés : - --model : L'identifiant du dépôt HuggingFace. vLLM le téléchargera automatiquement. - --dtype auto : Utilise automatiquement bfloat16 ou float16 pour des performances maximales. - --api-key : Sécurise votre point de terminaison afin d'éviter que des utilisateurs tiers ne saturent votre GPU.

Step 4 Connexion à l'API

Vous pouvez désormais interroger ce serveur via le SDK Python standard d'OpenAI, en remplaçant simplement la 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 5 Optimisation pour la production

Si vous disposez de plusieurs GPU (par exemple, deux RTX 3090), vous pouvez répartir un grand modèle 70B entre eux grâce au parallélisme tensoriel. Il suffit d'ajouter le flag --tensor-parallel-size :

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

Avec vLLM en cours d'exécution, votre serveur Linux est désormais capable de traiter des dizaines de requêtes concurrentes simultanément, sans aucune dégradation de la latence.