# Devstral : comment l'exécuter et l'affiner

**Devstral-Small-2507** (Devstral 1.1) est le nouveau LLM agentique de Mistral pour l’ingénierie logicielle. Il excelle dans l’appel d’outils, l’exploration des bases de code et l’alimentation d’agents de codage. Mistral AI a publié la version originale 2505 en mai 2025.

Affiné à partir de [**Mistral-Small-3.1**](https://huggingface.co/unsloth/Mistral-Small-3.1-24B-Instruct-2503-GGUF), Devstral prend en charge une fenêtre de contexte de 128k. Devstral Small 1.1 a de meilleures performances, atteignant un score de 53,6 % sur [SWE-bench vérifié](https://openai.com/index/introducing-swe-bench-verified/), ce qui en fait (10 juillet 2025) le modèle ouvert n°1 du benchmark.

Les GGUF de Unsloth Devstral 1.1 contiennent une <mark style="background-color:green;">**prise en charge de l’appel d’outils**</mark> et <mark style="background-color:green;">**corrections du modèle de chat**</mark>. Devstral 1.1 fonctionne toujours bien avec OpenHands, mais généralise maintenant mieux à d’autres prompts et environnements de codage.

En tant que modèle texte uniquement, l’encodeur visuel de Devstral a été supprimé avant l’affinage. Nous avons ajouté [*<mark style="background-color:green;">**une prise en charge visuelle optionnelle**</mark>*](#possible-vision-support) pour le modèle.

{% hint style="success" %}
Nous avons également travaillé en coulisses avec Mistral pour aider à déboguer, tester et corriger d’éventuels bugs et problèmes ! Assurez-vous de **télécharger les téléchargements officiels de Mistral ou les GGUF de Unsloth** / les quants dynamiques pour obtenir **la bonne implémentation** (c.-à-d. le bon prompt système, le bon modèle de chat, etc.)

Veuillez utiliser `--jinja` dans llama.cpp pour activer le prompt système !
{% endhint %}

Tous les envois Devstral utilisent notre méthode Unsloth [Dynamic 2.0](/docs/fr/bases/unsloth-dynamic-2.0-ggufs.md) méthodologie, offrant les meilleures performances sur les benchmarks MMLU en 5-shot et KL Divergence. Cela signifie que vous pouvez exécuter et affiner des LLM Mistral quantifiés avec une perte de précision minimale !

#### **Devstral - Unsloth Dynamic** quants :

| Devstral 2507 (nouveau)                                                                                                  | Devstral 2505                                                                                               |
| ------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------- |
| GGUF : [Devstral-Small-2507-GGUF](https://huggingface.co/unsloth/Devstral-Small-2507-GGUF)                               | [Devstral-Small-2505-GGUF](https://huggingface.co/unsloth/Devstral-Small-2505-GGUF)                         |
| BnB 4 bits : [Devstral-Small-2507-unsloth-bnb-4bit](https://huggingface.co/unsloth/Devstral-Small-2507-unsloth-bnb-4bit) | [Devstral-Small-2505-unsloth-bnb-4bit](https://huggingface.co/unsloth/Devstral-Small-2505-unsloth-bnb-4bit) |

## 🖥️ **Exécution de Devstral**

### :gear: Paramètres recommandés officiels

Selon Mistral AI, voici les paramètres recommandés pour l’inférence :

* <mark style="background-color:blue;">**Température de 0,0 à 0,15**</mark>
* Min\_P de 0,01 (facultatif, mais 0,01 fonctionne bien ; la valeur par défaut de llama.cpp est 0,1)
* <mark style="background-color:orange;">**Utilisez**</mark><mark style="background-color:orange;">**&#x20;**</mark><mark style="background-color:orange;">**`--jinja`**</mark><mark style="background-color:orange;">**&#x20;**</mark><mark style="background-color:orange;">**pour activer le prompt système.**</mark>

**Un prompt système est recommandé**et est dérivé du prompt système de Open Hands. Le prompt système complet est fourni [ici](https://huggingface.co/unsloth/Devstral-Small-2505/blob/main/SYSTEM_PROMPT.txt).

```
Vous êtes Devstral, un modèle agentique utile entraîné par Mistral AI et utilisant l’ossature OpenHands. Vous pouvez interagir avec un ordinateur pour résoudre des tâches.

<ROLE>
Votre rôle principal est d’aider les utilisateurs en exécutant des commandes, en modifiant du code et en résolvant efficacement des problèmes techniques. Vous devez être rigoureux, méthodique et privilégier la qualité à la rapidité.
* Si l’utilisateur pose une question, comme « pourquoi X se produit-il », n’essayez pas de corriger le problème. Répondez simplement à la question.
</ROLE>

.... LE PROMPT SYSTÈME CONTINUE ....
```

{% hint style="success" %}
Nos envois dynamiques ont le préfixe '`UD`' dans leur nom. Ceux qui n’en ont pas ne sont pas dynamiques, mais utilisent tout de même notre jeu de données de calibration.
{% endhint %}

## :llama: Tutoriel : comment exécuter Devstral dans Ollama

1. Installez `ollama` si vous ne l’avez pas déjà fait !

```bash
apt-get update
apt-get install pciutils -y
curl -fsSL https://ollama.com/install.sh | sh
```

2. Exécutez le modèle avec notre quantification dynamique. Notez que vous pouvez appeler `ollama serve &`dans un autre terminal si cela échoue ! Nous incluons tous les paramètres suggérés (température, etc.) dans `params` dans notre téléchargement Hugging Face !
3. Devstral prend également en charge des longueurs de contexte de 128K, donc il est préférable d’activer [**la quantification du cache KV**](https://github.com/ollama/ollama/blob/main/docs/faq.md#how-can-i-set-the-quantization-type-for-the-kv-cache). Nous utilisons une quantification 8 bits qui économise 50 % d’utilisation mémoire. Vous pouvez aussi essayer `"q4_0"`

```bash
export OLLAMA_KV_CACHE_TYPE="q8_0"
ollama run hf.co/unsloth/Devstral-Small-2507-GGUF:UD-Q4_K_XL
```

## 📖 Tutoriel : comment exécuter Devstral dans llama.cpp <a href="#tutorial-how-to-run-llama-4-scout-in-llama.cpp" id="tutorial-how-to-run-llama-4-scout-in-llama.cpp"></a>

1. Obtenez la dernière version `llama.cpp` sur [GitHub ici](https://github.com/ggml-org/llama.cpp). Vous pouvez également suivre les instructions de compilation ci-dessous. Changez `-DGGML_CUDA=ON` en `-DGGML_CUDA=OFF` si vous n’avez pas de GPU ou si vous souhaitez simplement une inférence CPU. **Pour les appareils Apple Mac / Metal**, définissez `-DGGML_CUDA=OFF` puis continuez comme d'habitude - la prise en charge de Metal est activée par défaut.

```bash
apt-get update
apt-get install pciutils build-essential cmake curl libcurl4-openssl-dev -y
git clone https://github.com/ggml-org/llama.cpp
cmake llama.cpp -B llama.cpp/build \
    -DBUILD_SHARED_LIBS=OFF -DGGML_CUDA=ON -DLLAMA_CURL=ON
cmake --build llama.cpp/build --config Release -j --clean-first --target llama-quantize llama-cli llama-gguf-split llama-mtmd-cli
cp llama.cpp/build/bin/llama-* llama.cpp
```

2. Si vous souhaitez utiliser `llama.cpp` directement pour charger les modèles, vous pouvez faire ce qui suit : (:Q4\_K\_XL) est le type de quantification. Vous pouvez également télécharger via Hugging Face (point 3). C’est similaire à `ollama run`

```bash
./llama.cpp/llama-cli -hf unsloth/Devstral-Small-2507-GGUF:UD-Q4_K_XL --jinja
```

3. **OU** télécharger le modèle via (après avoir installé `pip install huggingface_hub hf_transfer` ). Vous pouvez choisir Q4\_K\_M ou d’autres versions quantifiées (comme BF16 en précision complète).

```python
# !pip install huggingface_hub hf_transfer
import os
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"
from huggingface_hub import snapshot_download
snapshot_download(
    repo_id = "unsloth/Devstral-Small-2507-GGUF",
    local_dir = "unsloth/Devstral-Small-2507-GGUF",
    allow_patterns = ["*Q4_K_XL*", "*mmproj-F16*"], # Pour Q4_K_XL
)
```

4. Exécutez le modèle.
5. Modifier `--threads -1` pour le nombre maximal de threads CPU, `--ctx-size 131072` pour la longueur de contexte (Devstral prend en charge une longueur de contexte de 128K !), `--n-gpu-layers 99` pour l’offload GPU selon le nombre de couches. Essayez d’ajuster ce paramètre si votre GPU manque de mémoire. Supprimez-le également si vous n’effectuez l’inférence que sur CPU. Nous utilisons aussi une quantification 8 bits pour le cache K afin de réduire l’utilisation mémoire.
6. En mode conversation :

<pre class="language-bash"><code class="lang-bash">./llama.cpp/llama-cli \
    --model unsloth/Devstral-Small-2507-GGUF/Devstral-Small-2507-UD-Q4_K_XL.gguf \
    --threads -1 \\
    --ctx-size 131072 \
    <a data-footnote-ref href="#user-content-fn-1">--cache-type-k q8_0</a> \
    --n-gpu-layers 99 \
    --seed 3407 \
    --prio 2 \
    --temp 0,15 \
    --repeat-penalty 1.0 \
    --min-p 0.01 \
    --top-k 64 \
    --top-p 0.95 \
    <a data-footnote-ref href="#user-content-fn-2">--jinja</a>
</code></pre>

7. En mode non conversationnel pour tester notre prompt Flappy Bird :

<pre class="language-bash"><code class="lang-bash">./llama.cpp/llama-cli \
    --model unsloth/Devstral-Small-2507-GGUF/Devstral-Small-2507-UD-Q4_K_XL.gguf \
    --threads -1 \\
    --ctx-size 131072 \
    <a data-footnote-ref href="#user-content-fn-1">--cache-type-k q8_0</a> \
    --n-gpu-layers 99 \
    --seed 3407 \
    --prio 2 \
    --temp 0,15 \
    --repeat-penalty 1.0 \
    --min-p 0.01 \
    --top-k 64 \
    --top-p 0.95 \
    -no-cnv \
    --prompt "[SYSTEM_PROMPT]Vous êtes Devstral, un modèle agentique utile entraîné par Mistral AI et utilisant l’ossature OpenHands. Vous pouvez interagir avec un ordinateur pour résoudre des tâches.\n\n&#x3C;ROLE>\nVotre rôle principal est d’aider les utilisateurs en exécutant des commandes, en modifiant du code et en résolvant efficacement des problèmes techniques. Vous devez être rigoureux, méthodique et privilégier la qualité à la rapidité.\n* Si l’utilisateur pose une question, comme \"why is X happening\", n\'essayez pas de corriger le problème. Répondez simplement à la question.\n&#x3C;/ROLE>\n\n&#x3C;EFFICIENCY>\n* Chaque action que vous entreprenez a un certain coût. Dans la mesure du possible, combinez plusieurs actions en une seule, par exemple en regroupant plusieurs commandes bash en une seule, en utilisant sed et grep pour modifier/afficher plusieurs fichiers à la fois.\n* Lors de l’exploration de la base de code, utilisez des outils efficaces comme find, grep et les commandes git avec des filtres appropriés afin de minimiser les opérations inutiles.\n&#x3C;/EFFICIENCY>\n\n&#x3C;FILE_SYSTEM_GUIDELINES>\n* Lorsqu’un utilisateur fournit un chemin de fichier, ne supposez PAS qu’il est relatif au répertoire de travail actuel. Explorez d’abord le système de fichiers pour localiser le fichier avant de travailler dessus.\n* Si l’on vous demande de modifier un fichier, éditez le fichier directement plutôt que d’en créer un nouveau avec un nom différent.\n* Pour les opérations globales de recherche-remplacement, envisagez d’utiliser `sed` plutôt que d’ouvrir plusieurs fois des éditeurs de fichiers.\n&#x3C;/FILE_SYSTEM_GUIDELINES>\n\n&#x3C;CODE_QUALITY>\n* Écrivez un code propre et efficace avec un minimum de commentaires. Évitez la redondance dans les commentaires : ne répétez pas des informations qui peuvent facilement être déduites du code lui-même.\n* Lors de l’implémentation de solutions, concentrez-vous sur les modifications minimales nécessaires pour résoudre le problème.\n* Avant d’implémenter tout changement, comprenez d’abord en profondeur la base de code par l’exploration.\n* Si vous ajoutez beaucoup de code à une fonction ou à un fichier, envisagez de diviser la fonction ou le fichier en plus petits éléments lorsque c’est approprié.\n&#x3C;/CODE_QUALITY>\n\n&#x3C;VERSION_CONTROL>\n* Lors de la configuration des identifiants git, utilisez par défaut \"openhands\" comme user.name et \"openhands@all-hands.dev\" comme user.email, sauf instruction contraire explicite.\n* Faites preuve de prudence avec les opérations git. NE faites PAS de changements potentiellement dangereux (par ex. pousser sur main, supprimer des dépôts) sauf demande explicite.\n* Lors de la validation de changements, utilisez `git status` pour voir tous les fichiers modifiés et ajoutez tous les fichiers nécessaires au commit. Utilisez `git commit -a` chaque fois que possible.\n* NE validez PAS de fichiers qui ne devraient généralement pas aller dans le contrôle de version (par ex. node_modules/, fichiers .env, répertoires de build, fichiers cache, gros binaires) sauf instruction explicite de l’utilisateur.\n* En cas de doute sur certains fichiers à valider, vérifiez la présence de fichiers .gitignore ou demandez des précisions à l’utilisateur.\n&#x3C;/VERSION_CONTROL>\n\n&#x3C;PULL_REQUESTS>\n* Lors de la création de pull requests, n’en créez qu’UNE seule par session/problème sauf instruction explicite contraire.\n* Lors du travail sur une PR existante, mettez-la à jour avec de nouveaux commits plutôt que de créer des PR supplémentaires pour le même problème.\n* Lors de la mise à jour d’une PR, conservez le titre et l’objectif d’origine, en ne mettant à jour la description que si nécessaire.\n&#x3C;/PULL_REQUESTS>\n\n&#x3C;PROBLEM_SOLVING_WORKFLOW>\n1. EXPLORATION : explorez en profondeur les fichiers pertinents et comprenez le contexte avant de proposer des solutions\n2. ANALYSE : considérez plusieurs approches et choisissez la plus prometteuse\n3. TESTING :\n   * Pour les corrections de bugs : créez des tests pour vérifier les problèmes avant d’implémenter les corrections\n   * Pour les nouvelles fonctionnalités : envisagez le développement piloté par les tests lorsque c’est approprié\n   * Si le dépôt ne dispose pas d’une infrastructure de tests et que la mise en place de tests nécessiterait une configuration lourde, consultez l’utilisateur avant d’investir du temps dans la construction de cette infrastructure\n   * Si l’environnement n’est pas configuré pour exécuter les tests, consultez d’abord l’utilisateur avant d’investir du temps dans l’installation de toutes les dépendances\n4. IMPLEMENTATION : apportez des modifications ciblées et minimales pour résoudre le problème\n5. VERIFICATION : si l’environnement est configuré pour exécuter les tests, testez votre implémentation de manière approfondie, y compris les cas limites. Si l’environnement n’est pas configuré pour exécuter les tests, consultez d’abord l’utilisateur avant d’investir du temps dans l’exécution des tests.\n&#x3C;/PROBLEM_SOLVING_WORKFLOW>\n\n&#x3C;SECURITY>\n* N’utilisez les GITHUB_TOKEN et autres identifiants que de la manière explicitement demandée et attendue par l’utilisateur.\n* Utilisez des API pour travailler avec GitHub ou d’autres plateformes, sauf si l’utilisateur demande autre chose ou si votre tâche nécessite la navigation.\n&#x3C;/SECURITY>\n\n&#x3C;ENVIRONMENT_SETUP>\n* Lorsque l’utilisateur vous demande d’exécuter une application, n’arrêtez pas si l’application n’est pas installée. À la place, installez l’application puis relancez la commande.\n* Si vous rencontrez des dépendances manquantes :\n  1. Commencez par chercher dans le dépôt les fichiers de dépendances existants (requirements.txt, pyproject.toml, package.json, Gemfile, etc.)\n  2. Si des fichiers de dépendances existent, utilisez-les pour installer toutes les dépendances d’un coup (par ex. `pip install -r requirements.txt`, `npm install`, etc.)\n  3. N’installez des paquets individuels directement que si aucun fichier de dépendances n’est trouvé ou si seuls certains paquets sont nécessaires\n* De même, si des dépendances manquent pour des outils essentiels demandés par l’utilisateur, installez-les lorsque cela est possible.\n&#x3C;/ENVIRONMENT_SETUP>\n\n&#x3C;TROUBLESHOOTING>\n* Si vous avez fait plusieurs tentatives pour résoudre un problème mais que les tests échouent toujours ou que l’utilisateur signale que ce n’est toujours pas corrigé :\n  1. Prenez du recul et réfléchissez à 5 à 7 sources possibles différentes du problème\n  2. Évaluez la probabilité de chacune de ces causes possibles\n  3. Traitez méthodiquement les causes les plus probables, en commençant par celle de plus forte probabilité\n  4. Documentez votre raisonnement\n* Lorsque vous rencontrez un problème majeur en exécutant un plan de l’utilisateur, n’essayez pas de le contourner directement. Proposez plutôt un nouveau plan et demandez la confirmation de l’utilisateur avant de poursuivre.\n&#x3C;/TROUBLESHOOTING>[/SYSTEM_PROMPT][INST]Créez un jeu Flappy Bird en Python. Vous devez inclure les éléments suivants :\n1. Vous devez utiliser pygame.\n2. La couleur de fond doit être choisie aléatoirement et être une teinte claire. Commencez avec une couleur bleu clair.\n3. Appuyer plusieurs fois sur ESPACE accélérera l’oiseau.\n4. La forme de l’oiseau doit être choisie aléatoirement : carré, cercle ou triangle. La couleur doit être choisie aléatoirement parmi des couleurs sombres.\n5. Placez en bas un sol coloré en marron foncé ou en jaune, choisi aléatoirement.\n6. Affichez un score en haut à droite. Incrémentez-le si vous passez les tuyaux sans les toucher.\n7. Créez des tuyaux espacés aléatoirement avec suffisamment d’espace. Leur couleur doit être choisie aléatoirement parmi du vert foncé, du marron clair ou une nuance de gris foncé.\n8. Lorsque vous perdez, affichez le meilleur score. Le texte doit rester à l’intérieur de l’écran. Appuyer sur q ou Échap quitte le jeu. Le redémarrage se fait en appuyant à nouveau sur ESPACE.\nLe jeu final doit être inclus dans une section markdown en Python. Vérifiez votre code pour les erreurs[/INST]"
</code></pre>

{% hint style="danger" %}
N’oubliez pas de supprimer \<bos> puisque Devstral ajoute automatiquement un \<bos> ! Veuillez également utiliser `--jinja` pour activer le prompt système !
{% endhint %}

## :eyes:Prise en charge expérimentale de la vision

[Xuan-Son](https://x.com/ngxson) de Hugging Face a montré dans son [dépôt GGUF](https://huggingface.co/ngxson/Devstral-Small-Vision-2505-GGUF) qu’il est en réalité possible de « greffer » l’encodeur visuel de Mistral 3.1 Instruct sur Devstral 2507. Nous avons également mis en ligne nos fichiers mmproj, ce qui vous permet d’utiliser ce qui suit :

```bash
./llama.cpp/llama-mtmd-cli \
    --model unsloth/Devstral-Small-2507-GGUF/Devstral-Small-2507-UD-Q4_K_XL.gguf \
    --mmproj unsloth/Devstral-Small-2507-GGUF/mmproj-F16.gguf \
    --threads -1 \\
    --ctx-size 131072 \
    --cache-type-k q8_0 \
    --n-gpu-layers 99 \
    --seed 3407 \
    --prio 2 \
    --temp 0,15
```

Par exemple :

| Instruction et code de sortie                                                                                 | Code rendu                                                                                                    |
| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| ![](https://cdn-uploads.huggingface.co/production/uploads/63ca214abedad7e2bf1d1517/HDic53ANsCoJbiWu2eE6K.png) | ![](https://cdn-uploads.huggingface.co/production/uploads/63ca214abedad7e2bf1d1517/onV1xfJIT8gzh81RkLn8J.png) |

## 🦥 Affinage de Devstral avec Unsloth

Tout comme les modèles Mistral standard, y compris Mistral Small 3.1, Unsloth prend en charge l’affinage de Devstral. L’entraînement est 2x plus rapide, utilise 70 % de VRAM en moins et prend en charge des longueurs de contexte 8x plus longues. Devstral tient confortablement dans un GPU L4 de 24 Go de VRAM.

Malheureusement, Devstral dépasse légèrement les limites de mémoire d’une VRAM de 16 Go, donc il n’est pas possible pour l’instant de l’affiner gratuitement sur Google Colab. Cependant, vous *pouvez* affiner le modèle gratuitement en utilisant notre [notebook Kaggle](https://www.kaggle.com/notebooks/welcome?src=https://github.com/unslothai/notebooks/blob/main/nb/Kaggle-Magistral_\(24B\)-Reasoning-Conversational.ipynb\&accelerator=nvidiaTeslaT4), qui offre l’accès à deux GPU. Il suffit de modifier le nom du modèle Magistral dans le notebook pour celui de Devstral.

Si vous avez une ancienne version d’Unsloth et/ou que vous effectuez un affinage localement, installez la dernière version d’Unsloth :

```bash
pip install --upgrade --force-reinstall --no-cache-dir unsloth unsloth_zoo
```

[^1]: Quantification K pour réduire l’utilisation mémoire. Peut être f16, q8\_0, q4\_0

[^2]: Doit utiliser --jinja pour activer le prompt système


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://unsloth.ai/docs/fr/modeles/tutorials/devstral-how-to-run-and-fine-tune.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
