> For the complete documentation index, see [llms.txt](https://unsloth.ai/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://unsloth.ai/docs/fr/modeles/tutorials/devstral-how-to-run-and-fine-tune.md).

# Devstral : comment l'exécuter et le fine-tuner

Exécutez et fine-tunez Mistral Devstral 1.1, y compris Small-2507 et 2505.

**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 de 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 128 k. Devstral Small 1.1 offre de meilleures performances, obtenant 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 sur le benchmark.

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

Comme il est uniquement textuel, l'encodeur visuel de Devstral a été retiré avant l'affinage. Nous avons ajouté [*<mark style="background-color:green;">**une prise en charge visuelle facultative**</mark>*](#possible-vision-support) au 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 d'Unsloth** / les quants dynamiques pour obtenir la **bonne implémentation** (c.-à-d. le bon prompt système, le bon modèle de conversation, etc.)

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

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

#### **Devstral - Dynamique Unsloth** 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 l'invite système.**</mark>

**Un prompt système est recommandé**, et dérive du prompt système d'OpenHands. 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é plutôt que la vitesse.
* 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 téléversements dynamiques ont le préfixe '`UD`' dans leur nom. Ceux qui ne l'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 ce n'est 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 lancer `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éversement Hugging Face !
3. Devstral prend aussi en charge des longueurs de contexte de 128 K, il est donc préférable d'activer [**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, ce 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

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. Modifiez `-DGGML_CUDA=ON` à `-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` pour charger directement des modèles, vous pouvez faire ce qui suit : (:Q4\_K\_XL) est le type de quantification. Vous pouvez aussi 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échargez 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 la précision complète BF16).

```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 128 K !), `--n-gpu-layers 99` pour le déchargement GPU, indiquez le nombre de couches. Essayez d'ajuster cette valeur si votre GPU manque de mémoire. Supprimez-la également si vous faites l'inférence uniquement sur CPU. Nous utilisons aussi une quantification 8 bits pour le cache K afin de réduire l'utilisation mémoire.
6. Pour le 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. Pour le mode sans conversation afin de 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é plutôt que la vitesse.\n* 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.\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 ex. combinez plusieurs commandes bash en une seule, en utilisant sed et grep pour modifier/consulter plusieurs fichiers à la fois.\n* Lorsque vous explorez la base de code, utilisez des outils efficaces comme find, grep et les commandes git avec les 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 présumez 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, modifiez-le directement, plutôt que de créer un nouveau fichier avec un nom différent.\n* Pour les opérations globales de recherche et 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 les redondances dans les commentaires : ne répétez pas des informations qui peuvent être facilement déduites du code lui-même.\n* Lorsque vous implémentez des solutions, concentrez-vous sur les modifications minimales nécessaires pour résoudre le problème.\n* Avant d'effectuer des changements, comprenez d'abord en profondeur la base de code par exploration.\n* Si vous ajoutez beaucoup de code à une fonction ou un fichier, envisagez de scinder la fonction ou le fichier en parties plus petites lorsque cela est approprié.\n&#x3C;/CODE_QUALITY>\n\n&#x3C;VERSION_CONTROL>\n* Lors de la configuration des identifiants git, utilisez \"openhands\" comme user.name et \"openhands@all-hands.dev\" comme user.email par défaut, sauf instruction explicite contraire.\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) à moins d'y être explicitement invité.\n* Lors de la validation des changements, utilisez `git status` pour voir tous les fichiers modifiés et stagez tous les fichiers nécessaires pour le commit. Utilisez `git commit -a` autant que possible.\n* Ne validez PAS les 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 la validation de certains fichiers, vérifiez la présence de fichiers .gitignore ou demandez des éclaircissements à 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* Lorsque vous travaillez 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 de la PR, en ne mettant à jour la description que si nécessaire.\n&#x3C;/PULL_REQUESTS>\n\n&#x3C;PROBLEM_SOLVING_WORKFLOW>\n1. EXPLORATION : Explorez minutieusement les fichiers pertinents et comprenez le contexte avant de proposer des solutions\n2. ANALYSE : Examinez plusieurs approches et sélectionnez la plus prometteuse\n3. TESTS :\n   * Pour les corrections de bogues : 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 cela est approprié\n   * Si le dépôt ne dispose pas d'infrastructure de test et que la mise en place de tests nécessite une configuration importante, 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 des tests, consultez d'abord l'utilisateur avant d'investir du temps à installer toutes les dépendances\n4. MISE EN ŒUVRE : Apportez des modifications ciblées et minimales pour résoudre le problème\n5. VÉRIFICATION : Si l'environnement est configuré pour exécuter des tests, testez votre implémentation de manière approfondie, y compris les cas limites. Si l'environnement n'est pas configuré pour exécuter des 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 GITHUB_TOKEN et les autres identifiants que dans les cas explicitement demandés par l'utilisateur et qu'il serait raisonnable d'attendre.\n* Utilisez des API pour interagir avec GitHub ou d'autres plateformes, sauf si l'utilisateur demande autrement ou si votre tâche nécessite de naviguer sur le web.\n&#x3C;/SECURITY>\n\n&#x3C;ENVIRONMENT_SETUP>\n* When user asks you to run an application, don't stop if the application is not installed. Instead, please install the application and run the command again.\n* If you encounter missing dependencies:\n  1. First, look around in the repository for existing dependency files (requirements.txt, pyproject.toml, package.json, Gemfile, etc.)\n  2. If dependency files exist, use them to install all dependencies at once (e.g., `pip install -r requirements.txt`, `npm install`, etc.)\n  3. Only install individual packages directly if no dependency files are found or if only specific packages are needed\n* Similarly, if you encounter missing dependencies for essential tools requested by the user, install them when possible.\n&#x3C;/ENVIRONMENT_SETUP>\n\n&#x3C;TROUBLESHOOTING>\n* If you've made repeated attempts to solve a problem but tests still fail or the user reports it's still broken:\n  1. Step back and reflect on 5-7 different possible sources of the problem\n  2. Assess the likelihood of each possible cause\n  3. Methodically address the most likely causes, starting with the highest probability\n  4. Document your reasoning process\n* When you run into any major issue while executing a plan from the user, please don't try to directly work around it. Instead, propose a new plan and confirm with the user before proceeding.\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 parmi un carré, un cercle ou un triangle. La couleur doit être choisie aléatoirement parmi une couleur sombre.\n5. Placez en bas un sol coloré en brun foncé ou en jaune, choisi aléatoirement.\n6. Affichez un score en haut à droite. Incrémentez-le si vous passez les tuyaux sans les heurter.\n7. Créez des tuyaux espacés aléatoirement avec suffisamment d'espace. La couleur doit être choisie aléatoirement parmi un vert foncé, un brun clair ou une nuance de gris foncé.\n8. Lorsque vous perdez, affichez le meilleur score. Le texte doit apparaître à l'intérieur de l'écran. Appuyer sur q ou Échap quittera le jeu. Redémarrer se fait en appuyant à nouveau sur ESPACE.\nLe jeu final doit être dans une section markdown en Python. Vérifiez votre code pour détecter les erreurs[/INST]"
</code></pre>

{% hint style="danger" %}
N'oubliez pas de supprimer \<bos> puisque Devstral ajoute automatiquement un \<bos> ! Utilisez aussi `--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 leur [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 téléversé 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 :

| Code d'instruction et 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 mémoire d'une VRAM de 16 Go, donc l'affiner gratuitement sur Google Colab n'est pas possible pour l'instant. Cependant, vous *pouvez* affiner le modèle gratuitement à l'aide de 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), ce qui offre un accès à deux GPU. Il suffit de remplacer le nom du modèle Magistral dans le notebook par le modèle Devstral.

Si vous avez une ancienne version d’Unsloth et/ou 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]: Vous devez utiliser --jinja pour activer le prompt système


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

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

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
