# Devstral：如何运行与微调

**Devstral-Small-2507** （Devstral 1.1）是 Mistral 面向软件工程的新型 agentic LLM。它在工具调用、代码库探索以及驱动编码代理方面表现出色。Mistral AI 于 2025 年 5 月发布了最初的 2505 版本。

经过微调自 [**Mistral-Small-3.1**](https://huggingface.co/unsloth/Mistral-Small-3.1-24B-Instruct-2503-GGUF)，Devstral 支持 128k 上下文窗口。Devstral Small 1.1 性能有所提升，在 [SWE-bench verified](https://openai.com/index/introducing-swe-bench-verified/)上取得了 53.6% 的成绩，使其在 2025 年 7 月 10 日成为该基准上的排名第一的开源模型。

Unsloth Devstral 1.1 GGUF 包含额外的 <mark style="background-color:green;">**工具调用支持**</mark> 和 <mark style="background-color:green;">**聊天模板修复**</mark>。Devstral 1.1 仍然可以很好地配合 OpenHands 使用，但现在也能更好地泛化到其他提示词和编码环境。

由于是纯文本模型，Devstral 的视觉编码器在微调前已被移除。我们已加入 [*<mark style="background-color:green;">**可选的视觉支持**</mark>*](#possible-vision-support) 到该模型中。

{% hint style="success" %}
我们还在幕后与 Mistral 合作，帮助调试、测试并修正任何可能的漏洞和问题！请务必 **下载 Mistral 的官方下载版本或 Unsloth 的 GGUF** / 动态量化版本，以获得 **正确的实现** （即正确的系统提示、正确的聊天模板等）

请在 `--jinja` 中使用 llama.cpp 来启用系统提示！
{% endhint %}

所有 Devstral 上传都使用我们的 Unsloth [Dynamic 2.0](/docs/zh/ji-chu-zhi-shi/unsloth-dynamic-2.0-ggufs.md) 方法，在 5-shot MMLU 和 KL 散度基准上提供最佳性能。这意味着，你可以以最小的精度损失运行并微调量化的 Mistral LLM！

#### **Devstral - Unsloth 动态** 量化：

| Devstral 2507（新）                                                                                                       | 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)                         |
| 4-bit BnB： [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) |

## 🖥️ **运行 Devstral**

### :gear: 官方推荐设置

根据 Mistral AI，以下是推理推荐设置：

* <mark style="background-color:blue;">**温度值从 0.0 到 0.15**</mark>
* Min\_P 设为 0.01（可选，但 0.01 效果很好，llama.cpp 默认是 0.1）
* <mark style="background-color:orange;">**使用**</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;">**来启用系统提示词。**</mark>

**推荐使用系统提示**，它源自 Open Hands 的系统提示。完整的系统提示如下所示 [这里](https://huggingface.co/unsloth/Devstral-Small-2505/blob/main/SYSTEM_PROMPT.txt).

```
你是 Devstral，一个由 Mistral AI 训练、使用 OpenHands 脚手架的有用 agentic 模型。你可以与计算机交互来解决任务。

<ROLE>
你的主要职责是通过执行命令、修改代码并有效解决技术问题来帮助用户。你应该全面、系统，并优先考虑质量而不是速度。
* 如果用户提出问题，例如“为什么 X 会发生”，不要试图修复问题。只需回答这个问题。
</ROLE>

.... 系统提示继续 ....
```

{% hint style="success" %}
我们的动态上传文件名中带有 '`UD`' 前缀。没有该前缀的不是动态版本，但仍然使用我们的校准数据集。
{% endhint %}

## :llama: 教程：如何在 Ollama 中运行 Devstral

1. 安装 `ollama` 如果你还没有的话！

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

2. 使用我们的动态量化来运行模型。注意，你可以调用 `ollama serve &`如果失败，则在另一个终端中运行！我们把所有建议参数（如 temperature 等）都包含在 `params` ！
3. 此外，Devstral 支持 128K 上下文长度，因此最好启用 [**KV 缓存量化**](https://github.com/ollama/ollama/blob/main/docs/faq.md#how-can-i-set-the-quantization-type-for-the-kv-cache)。我们使用 8bit 量化，可节省 50% 的内存占用。你也可以尝试 `"q4_0"`

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

## 📖 教程：如何在 llama.cpp 中运行 Devstral <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. 获取最新的 `llama.cpp` 在 [GitHub 这里](https://github.com/ggml-org/llama.cpp)。你也可以按照下面的构建说明操作。将 `-DGGML_CUDA=ON` 改为 `-DGGML_CUDA=OFF` 如果你没有 GPU，或者只想进行 CPU 推理。 **对于 Apple Mac / Metal 设备**，设置 `-DGGML_CUDA=OFF` 然后照常继续——Metal 支持默认开启。

```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. 如果你想使用 `llama.cpp` 直接加载模型时，你可以按下面的方法做：（:Q4\_K\_XL）是量化类型。你也可以通过 Hugging Face 下载（见第 3 点）。这与以下方式类似 `ollama run`

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

3. **或者** 在安装 `pip install huggingface_hub hf_transfer` 后，通过（下载模型）。你可以选择 Q4\_K\_M，或其他量化版本（例如 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*"], # 适用于 Q4_K_XL
)
```

4. 运行模型。
5. 编辑 `--threads -1` 用于最大化 CPU 线程数， `--ctx-size 131072` 用于上下文长度（Devstral 支持 128K 上下文长度！）， `--n-gpu-layers 99` 用于 GPU 卸载的层数。如果你的 GPU 显存不足，可尝试调整；如果你只使用 CPU 推理，也请移除它。我们还使用了 K 缓存的 8bit 量化来减少内存占用。
6. 对于对话模式：

<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. 用于测试我们的 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]你是 Devstral，一个由 Mistral AI 训练、使用 OpenHands 脚手架的有用 agentic 模型。你可以与计算机交互来解决任务。\n\n&#x3C;ROLE>\n你的主要职责是通过执行命令、修改代码并有效解决技术问题来帮助用户。你应该全面、系统，并优先考虑质量而不是速度。\n* 如果用户提出问题，例如 \"为什么 X 会发生\"，不要试图修复问题。只需回答这个问题。\n&#x3C;/ROLE>\n\n&#x3C;EFFICIENCY>\n* 你执行的每个操作都有一定成本。只要可能，就将多个操作合并为一个操作，例如将多个 bash 命令合并到一个命令中，使用 sed 和 grep 一次编辑/查看多个文件。\n* 在探索代码库时，使用 find、grep 和 git 等高效工具，并配合适当的过滤条件，以尽量减少不必要的操作。\n&#x3C;/EFFICIENCY>\n\n&#x3C;FILE_SYSTEM_GUIDELINES>\n* 当用户提供文件路径时，不要假设它相对于当前工作目录。首先探索文件系统以定位该文件，再进行操作。\n* 如果要求编辑文件，请直接编辑该文件，而不是创建一个不同文件名的新文件。\n* 对于全局搜索替换操作，考虑使用 `sed`，而不是多次打开文件编辑器。\n&#x3C;/FILE_SYSTEM_GUIDELINES>\n\n&#x3C;CODE_QUALITY>\n* 编写干净、高效的代码，尽量少写注释。避免在注释中重复那些从代码本身就能轻易推断的信息。\n* 实现解决方案时，重点放在以最少的改动解决问题。\n* 在实施任何更改之前，先通过探索彻底理解代码库。\n* 如果你要向函数或文件中添加大量代码，必要时考虑将函数或文件拆分成更小的部分。\n&#x3C;/CODE_QUALITY>\n\n&#x3C;VERSION_CONTROL>\n* 配置 git 凭据时，默认使用 \"openhands\" 作为 user.name，使用 \"openhands@all-hands.dev\" 作为 user.email，除非另有明确指示。\n* 使用 git 时要谨慎。除非明确要求，否则不要做可能有危险的更改（例如推送到 main、删除仓库）。\n* 提交更改时，使用 `git status` 查看所有已修改文件，并暂存提交所需的所有文件。尽可能使用 `git commit -a`。\n* 不要提交通常不应进入版本控制的文件（例如 node_modules/、.env 文件、构建目录、缓存文件、大型二进制文件），除非用户明确要求。\n* 如果不确定是否应该提交某些文件，请检查是否存在 .gitignore 文件，或向用户询问说明。\n&#x3C;/VERSION_CONTROL>\n\n&#x3C;PULL_REQUESTS>\n* 创建 pull request 时，除非另有明确要求，否则每个会话/问题只创建一个。\n* 处理现有 PR 时，应通过新提交进行更新，而不是为同一问题创建额外的 PR。\n* 更新 PR 时，保留原始 PR 标题和目的，仅在必要时更新描述。\n&#x3C;/PULL_REQUESTS>\n\n&#x3C;PROBLEM_SOLVING_WORKFLOW>\n1. EXPLORATION: 在提出解决方案之前，彻底探索相关文件并理解上下文\n2. ANALYSIS: 考虑多种方案并选择最有希望的一种\n3. TESTING:\n   * 对于 bug 修复：在实施修复前创建测试以验证问题\n   * 对于新功能：在适当情况下考虑测试驱动开发\n   * 如果仓库缺少测试基础设施，而实现测试需要大量准备工作，请在投入构建测试基础设施前先咨询用户\n   * 如果环境尚未配置为可运行测试，请在投入安装所有依赖之前先咨询用户\n4. IMPLEMENTATION: 进行聚焦、最小化的更改来解决问题\n5. VERIFICATION: 如果环境已配置为可运行测试，请全面测试实现，包括边缘情况。如果环境未配置为可运行测试，请在投入运行测试之前先咨询用户\n&#x3C;/PROBLEM_SOLVING_WORKFLOW>\n\n&#x3C;SECURITY>\n* 仅以用户明确请求且符合预期的方式使用 GITHUB_TOKEN 和其他凭据。\n* 使用 API 与 GitHub 或其他平台交互，除非用户另有要求或你的任务需要浏览。\n&#x3C;/SECURITY>\n\n&#x3C;ENVIRONMENT_SETUP>\n* 当用户要求你运行某个应用时，如果该应用未安装，不要停止。请安装该应用后再次运行命令。\n* 如果遇到缺失依赖：\n  1. 首先在仓库中查找现有依赖文件（requirements.txt、pyproject.toml、package.json、Gemfile 等）\n  2. 如果存在依赖文件，就用它们一次性安装所有依赖（例如 `pip install -r requirements.txt`、`npm install` 等）\n  3. 只有在找不到依赖文件或只需要特定包时，才直接安装单个包\n* 同样地，如果用户请求的必要工具缺失，在可能的情况下安装它们。\n&#x3C;/ENVIRONMENT_SETUP>\n\n&#x3C;TROUBLESHOOTING>\n* 如果你已经多次尝试解决问题，但测试仍失败或用户反馈仍未修复：\n  1. 退后一步，反思 5-7 个不同的潜在问题来源\n  2. 评估每个可能原因的可能性\n  3. 有条不紊地处理最可能的原因，从最高概率开始\n  4. 记录你的推理过程\n* 当你在执行用户计划时遇到重大问题，请不要直接绕过去。相反，请提出一个新计划并在继续之前与用户确认。\n&#x3C;/TROUBLESHOOTING>[/SYSTEM_PROMPT][INST]用 Python 创建一个 Flappy Bird 游戏。你必须包含以下内容：\n1. 你必须使用 pygame。\n2. 背景颜色应随机选择，并且是浅色。起始颜色为浅蓝色。\n3. 多次按下 SPACE 会加速小鸟。\n4. 小鸟的形状应随机选择为正方形、圆形或三角形。颜色应随机选择为深色。\n5. 在底部放置一些地面，颜色随机选择为深棕色或黄色。\n6. 在右上角显示分数。通过管道且不撞上时分数增加。\n7. 制作间距随机且留有足够空隙的管道。颜色随机为深绿色、浅棕色或深灰色。\n8. 失败时，显示最高分。文字应显示在屏幕内。按 q 或 Esc 退出游戏。按 SPACE 重新开始。\n最终游戏应放在 Python 的 markdown 区块中。检查你的代码是否有错误[/INST]"
</code></pre>

{% hint style="danger" %}
记得移除 \<bos>，因为 Devstral 会自动添加 \<bos>！另外请使用 `--jinja` 来启用系统提示！
{% endhint %}

## :eyes:实验性视觉支持

[Xuan-Son](https://x.com/ngxson) 在 Hugging Face 中显示于他们的 [GGUF 仓库](https://huggingface.co/ngxson/Devstral-Small-Vision-2505-GGUF) 展示了实际上如何将 Mistral 3.1 Instruct 的视觉编码器“嫁接”到 Devstral 2507 上。我们还上传了我们的 mmproj 文件，这使你可以使用以下内容：

```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
```

例如：

| 指令与输出代码                                                                                                       | 渲染后的代码                                                                                                        |
| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| ![](https://cdn-uploads.huggingface.co/production/uploads/63ca214abedad7e2bf1d1517/HDic53ANsCoJbiWu2eE6K.png) | ![](https://cdn-uploads.huggingface.co/production/uploads/63ca214abedad7e2bf1d1517/onV1xfJIT8gzh81RkLn8J.png) |

## 🦥 使用 Unsloth 对 Devstral 进行微调

就像包括 Mistral Small 3.1 在内的标准 Mistral 模型一样，Unsloth 支持 Devstral 微调。训练速度快 2 倍，显存占用减少 70%，并支持长 8 倍的上下文长度。Devstral 可以轻松运行在 24GB 显存的 L4 GPU 上。

不幸的是，Devstral 的内存需求略微超过了 16GB 显存的限制，因此目前无法在 Google Colab 上免费微调。不过，你 *可以* 使用我们的 [Kaggle 笔记本](https://www.kaggle.com/notebooks/welcome?src=https://github.com/unslothai/notebooks/blob/main/nb/Kaggle-Magistral_\(24B\)-Reasoning-Conversational.ipynb\&accelerator=nvidiaTeslaT4)，它提供双 GPU 访问。只需将笔记本中的 Magistral 模型名称改为 Devstral 模型即可。

如果你使用的是旧版 Unsloth 和/或正在本地微调，请安装最新版本的 Unsloth：

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

[^1]: K 量化以减少内存使用。可以是 f16、q8\_0、q4\_0

[^2]: 必须使用 --jinja 来启用系统提示


---

# 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/zh/mo-xing/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.
