Déployer Devstral en local avec vLLM
Sur cette page
Leçon mise à jour le 2 novembre 2026 d’après la page Using offline models de la documentation de Vibe. Devstral est retiré de l’API Mistral, mais ses poids restent publiés : Devstral Small 2 et Mistral Small 4 sont les deux modèles ouverts recommandés pour un usage local. Vibe n’embarque pas de modèle local : on le branche sur un serveur compatible OpenAI par un préréglage dans
config.toml, puis on bascule avec/model. Source : Using offline models.
Préparer le déploiement
Déployer Devstral en local revient à lancer sur votre machine un serveur d’inférence qui expose une API compatible OpenAI. Vibe s’y connecte ensuite exactement comme s’il parlait au cloud Mistral : c’est cette compatibilité d’interface qui rend la bascule indolore, votre outillage n’ayant aucune raison de savoir d’où viennent les réponses. Le framework recommandé pour ce rôle est vLLM, un moteur d’inférence haute performance développé par la communauté open-source.
Ce que votre matériel autorise
Avant toute installation, regardez votre GPU : c’est lui qui détermine la précision utilisable et, par conséquent, la taille de la fenêtre de contexte dont vous disposerez.
| Configuration | GPU | VRAM | Précision | Contexte |
|---|---|---|---|---|
| Recommandée | NVIDIA H100 / A100 | 80 Go | FP8 | ~128K tokens |
| Alternative | RTX 4090 / RTX 6000 | 24-48 Go | 4-bit (quantifié) | ~32K tokens |
| CPU-only | Aucun GPU | 64+ Go RAM | - | Lent (non recommandé) |
Note importante : la configuration CPU-only est fonctionnelle mais extrêmement lente pour un modèle 24B. Elle convient uniquement pour des tests, pas pour un usage quotidien. Autrement dit, elle vous permettra de vérifier que la chaîne fonctionne, pas de travailler avec.
Installer vLLM
Le prérequis logiciel est mince : Python 3.10 ou supérieur, puis un pip install.
# Python 3.10+ requis
python3 --version
# Installer vLLM
pip install vllm
Vérifiez ensuite que les drivers NVIDIA et CUDA sont installés et opérationnels. Cette commande est le meilleur test de bout en bout : si elle affiche votre GPU et une version de CUDA, la couche basse est saine et les erreurs ultérieures viendront d’ailleurs.
nvidia-smi
# Doit afficher votre GPU et la version CUDA
Lancer le serveur
La commande de démarrage tient en quatre arguments, dont deux sont indispensables au fonctionnement avec Vibe.
vllm serve mistralai/Devstral-Small-2-24B-Instruct-2512 \
--tool-call-parser mistral \
--enable-auto-tool-choice \
--port 8080
Décortiquons les flags :
mistralai/Devstral-Small-2-24B-Instruct-2512: le modèle Hugging Face à charger--tool-call-parser mistral: active le parsing des appels d’outils au format Mistral--enable-auto-tool-choice: permet au modèle de choisir automatiquement ses outils--port 8080: le port d’écoute du serveur
Les deux flags relatifs aux outils méritent qu’on s’y arrête. Sans eux, le serveur répondrait bien à vos questions, mais le modèle ne pourrait plus lire un fichier ni lancer une commande : Vibe deviendrait un simple chat, ce qui n’est pas l’objet.
Adapter la commande à votre machine
Si vous disposez de plusieurs GPU, le parallélisme tensoriel répartit le modèle sur l’ensemble des cartes. La VRAM combinée autorise alors une fenêtre de contexte plus large.
vllm serve mistralai/Devstral-Small-2-24B-Instruct-2512 \
--tool-call-parser mistral \
--enable-auto-tool-choice \
--tensor-parallel-size 2 \
--port 8080
Sur une configuration plus modeste, c’est la précision qu’il faut abaisser. Une H100 ou une A100 encaissent le FP8 ; une RTX 4090 passera par une quantification 4-bit avec AWQ, au prix d’une légère perte de qualité largement compensée par le fait que le modèle tienne enfin en mémoire.
# FP8 sur H100/A100
vllm serve mistralai/Devstral-Small-2-24B-Instruct-2512 \
--tool-call-parser mistral \
--enable-auto-tool-choice \
--dtype float16 \
--port 8080
# 4-bit sur RTX 4090
vllm serve mistralai/Devstral-Small-2-24B-Instruct-2512 \
--tool-call-parser mistral \
--enable-auto-tool-choice \
--quantization awq \
--port 8080
Dernier levier quand la VRAM reste insuffisante : réduire la longueur de contexte maximale. Le cache d’attention consomme de la mémoire proportionnellement au contexte, et descendre à 16 384 tokens libère souvent ce qui manquait pour démarrer.
vllm serve mistralai/Devstral-Small-2-24B-Instruct-2512 \
--tool-call-parser mistral \
--enable-auto-tool-choice \
--max-model-len 16384 \
--port 8080
Brancher Vibe et vérifier
Le serveur tourne ; il reste à dire à Vibe de l’utiliser. Vibe n’embarque pas de modèle local : déclarez un fournisseur et un préréglage de modèle dans config.toml.
# ~/.vibe/config.toml
active_model = "devstral-local"
[[providers]]
name = "local"
api_base = "http://localhost:8080/v1"
api_style = "openai"
backend = "generic"
[[models]]
name = "mistralai/Devstral-Small-2-24B-Instruct-2512"
provider = "local"
alias = "devstral-local"
Gardez active_model au-dessus du premier tableau [[...]], sinon TOML le rattache à ce tableau. Renseignez max_context_length dans le préréglage pour indiquer le contexte de votre serveur, qui doit aussi renvoyer l’usage en tokens dans les réponses en streaming (stream_options.include_usage). Variante plus courte : Vibe fournit un fournisseur prédéfini, llamacpp, qui pointe vers http://127.0.0.1:8080/v1 sans clé ; écrivez alors provider = "llamacpp" dans le préréglage, sans bloc [[providers]]. En session, /model bascule entre le modèle local et les modèles hébergés.
Testez la chaîne à deux niveaux : d’abord l’API brute, qui vous confirme que le modèle est bien chargé, puis une vraie requête dans Vibe pour valider que les appels d’outils fonctionnent.
# Test direct de l'API
curl http://localhost:8080/v1/models
# Test dans Vibe (l'agent ask demande avant chaque outil)
vibe --agent ask
> Liste les fichiers du répertoire courant
Pour un usage quotidien, relancer la commande à la main devient vite pénible. Un service systemd démarre le serveur au boot et le relance en cas de crash.
# Créer un service systemd
sudo tee /etc/systemd/system/vllm-devstral.service << EOF
[Unit]
Description=vLLM Devstral Server
After=network.target
[Service]
Type=simple
User=$USER
ExecStart=/usr/local/bin/vllm serve mistralai/Devstral-Small-2-24B-Instruct-2512 --tool-call-parser mistral --enable-auto-tool-choice --port 8080
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable --now vllm-devstral
Les trois problèmes que vous rencontrerez
Une erreur CUDA out of memory signifie que le modèle ne tient pas : réduisez --max-model-len ou passez en quantification 4-bit. Une lenteur au tout premier lancement est normale et non un symptôme — le démarrage initial télécharge et charge le modèle, environ 14 Go, et les lancements suivants profitent du cache. Enfin, si Vibe ne trouve pas le serveur local, vérifiez simplement que le port 8080 écoute avant de chercher plus loin.
curl http://localhost:8080/health
Points clés à retenir
- vLLM est le framework recommandé pour servir Devstral en local
- Les flags
--tool-call-parser mistralet--enable-auto-tool-choicesont obligatoires - Un H100/A100 offre FP8 et 128K de contexte, une RTX 4090 offre 4-bit et 32K
- Réduisez
--max-model-lensi la VRAM est insuffisante - Connectez Vibe par un fournisseur et un préréglage de modèle dans
config.toml(ou le fournisseur prédéfinillamacpp), puis/model - Lancez vLLM comme service systemd pour un usage quotidien