vLLM
Servez un LLM à poids ouverts avec vLLM sur une machine Node Lodge. Installation avec uv, serveur compatible OpenAI, requêtes par tunnel SSH.
Servez un modèle à poids ouverts derrière une API compatible OpenAI.
GPU : 24 Go de VRAM ou plus pour le modèle 7B ci-dessous. Voir Inférence LLM pour le dimensionnement.
1. Vérifier le GPU
nvidia-smi
L’en-tête indique le pilote et la version CUDA la plus récente qu’il prend en charge.
2. Installer
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
uv venv --python 3.12 --seed
source .venv/bin/activate
uv pip install vllm --torch-backend=auto
--torch-backend=auto choisit la version de PyTorch adaptée au pilote installé.
3. Servir
Démarrez le serveur dans tmux pour qu’il survive aux déconnexions :
tmux new -s vllm
source .venv/bin/activate
vllm serve Qwen/Qwen2.5-7B-Instruct --max-model-len 8192
Détachez la session avec Ctrl+b d. Le premier démarrage télécharge les poids dans ~/.cache/huggingface. Le serveur est prêt quand il indique dans ses journaux qu’il écoute sur le port 8000.
Options utiles :
| Option | Usage |
|---|---|
--tensor-parallel-size 2 |
Répartit le modèle sur 2 GPU dans les offres multi-GPU |
--max-model-len 8192 |
Plafonne la longueur de contexte pour que le cache KV tienne en VRAM |
--gpu-memory-utilization 0.90 |
Part de la VRAM que vLLM peut utiliser |
--api-key <secret> |
Exige un jeton Bearer à chaque requête |
Les modèles à accès restreint (Llama, Gemma) demandent un jeton Hugging Face :
export HF_TOKEN=hf_...
4. Interroger depuis la machine
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen2.5-7B-Instruct",
"messages": [{"role": "user", "content": "Say hello in five words."}],
"max_tokens": 32
}'
5. Interroger depuis votre ordinateur
Seul SSH est ouvert en entrée. Redirigez le port 8000 :
ssh -N -L 8000:localhost:8000 ubuntu@203.0.113.42
Pointez ensuite n’importe quel client compatible OpenAI vers http://localhost:8000/v1 :
from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="unused")
reply = client.chat.completions.create(
model="Qwen/Qwen2.5-7B-Instruct",
messages=[{"role": "user", "content": "Say hello in five words."}],
)
print(reply.choices[0].message.content)
Donnez à api_key la valeur de votre secret si vous avez démarré le serveur avec --api-key.
6. Terminer
Copiez ce dont vous avez besoin, puis sélectionnez End session. Les poids téléchargés sont supprimés avec la machine.
Référence : documentation vLLM.
Fait partie d'un cas d'usage : Inférence LLM, avec ce que garantit une session.