Inférence haute performance avec vLLM

Introduction

vLLM est un moteur de service LLM à haut débit conçu pour les déploiements en production. Alors qu'Ollama et llama.cpp sont excellents pour une utilisation individuelle, vLLM brille lorsque vous devez servir des LLMs en tant que backend API avec un haut débit et une gestion efficace de la mémoire.

Considérez la différence ainsi :

  • Ollama/llama.cpp = outils de développement personnel (utilisateur unique)
  • vLLM = serveur de production (plusieurs utilisateurs, haut débit)

vllm

Installation

NVIDIA Jetson AI Lab fournit des images Docker officiellement optimisées et des recettes de modèles sélectionnées pour vLLM sur Jetson Orin — toutes les dépendances sont pré-construites et testées, aucun conflit de version.

Étape 1 : Télécharger l'image Docker vLLM

bash
sudo docker pull ghcr.io/nvidia-ai-iot/vllm:latest-jetson-orin

Étape 2 : Démarrer un serveur de modèles

bash
sudo docker run -it --rm --pull always \
  --runtime=nvidia --network host \
  -e HF_ENDPOINT=https://hf-mirror.com \
  -v $HOME/.cache/huggingface:/root/.cache/huggingface \
  ghcr.io/nvidia-ai-iot/vllm:latest-jetson-orin \
  vllm serve cyankiwi/Qwen3.5-4B-AWQ-4bit \
  --gpu-memory-utilization 0.8 \
  --enable-prefix-caching \
  --reasoning-parser qwen3 \
  --enable-auto-tool-choice \
  --tool-call-parser qwen3_coder

Étape 3 : Tester l'API

Une fois le serveur démarré (vous verrez Uvicorn running on http://0.0.0.0:8000), ouvrez un nouveau terminal et testez :

bash
# Lister les modèles disponibles
curl http://localhost:8000/v1/models

# Envoyer une requête de chat
curl -s http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "cyankiwi/Qwen3.5-4B-AWQ-4bit",
    "messages": [{"role": "user", "content": "What is edge computing?"}]
  }'

vllm-test

Essayer plus de modèles

Tous les suivants sont vérifiés et prêts à exécuter sur Jetson Orin avec la même image Docker. Il suffit de remplacer le nom du modèle dans la commande ci-dessus :

ModèleCommande
Qwen3.5 2Bvllm serve Qwen/Qwen3.5-2B
Qwen3.5 9Bvllm serve Qwen/Qwen3.5-9B
Qwen3 8Bvllm serve Qwen/Qwen3-8B
Gemma 4 E4Bvllm serve google/gemma-4-E4B-it
Gemma 4 E2Bvllm serve google/gemma-4-E2B-it
Gemma 3 4Bvllm serve google/gemma-3-4b-it
Gemma 4 26B-A4B (AWQ)vllm serve cyankiwi/gemma-4-26B-A4B-it-AWQ-4bit
Nemotron Nano 9B v2vllm serve nvidia/Nemotron-Nano-9B-v2
Nemotron3 Nano 30B-A3Bvllm serve nvidia/Nemotron3-Nano-30B-A3B

Les modèles plus grands (Qwen3.5 9B+) ou les modèles quantifiés AWQ ont besoin de plus de VRAM. Sur Orin Nano 8GB,sticks à des modèles 2B–4B. Sur Orin NX 16GB ou AGX Orin 32GB/64GB, vous pouvez exécuter confortablement des modèles 8B–30B (MoE).

Parcourez la liste complète et copiez les commandes prêtes à exécuter sur : jetson-ai-lab.com/models

Exemples Python

Chat basique

python
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="not-needed"
)

response = client.chat.completions.create(
    model="Qwen/Qwen3.5-2B",
    messages=[
        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Explain edge computing in 3 sentences."}
    ],
    temperature=0.7,
    max_tokens=150
)

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

Réponses en streaming

python
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="not-needed"
)

stream = client.chat.completions.create(
    model="Qwen/Qwen3.5-2B",
    messages=[{"role": "user", "content": "Write a haiku about robots."}],
    stream=True,
    max_tokens=100
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
print()

vllm-stream

Références


Suivant : Continuez vers Module 5.5 : Démarrage rapide des exemples Jetson pour déployer des LLMs avec une seule commande !