# Devstral：如何运行与微调

**Devstral-Small-2507** （Devstral 1.1）是 Mistral 的新型代理式大型语言模型，面向软件工程。它擅长调用工具、探索代码库并为编码代理提供动力。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 验证](https://openai.com/index/introducing-swe-bench-verified/)上取得了 53.6% 的分数，使其（2025 年 7 月 10 日）成为该基准上的第 #1 开源模型。

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` 中使用以启用系统提示！
{% endhint %}

所有 Devstral 上传均采用我们的 Unsloth [Dynamic 2.0](https://unsloth.ai/docs/zh/ji-chu/unsloth-dynamic-2.0-ggufs) 方法论，在 5-shot MMLU 和 KL 散度基准上提供最佳性能。这意味着，你可以在精度损失最小的情况下运行并微调量化的 Mistral 大型语言模型！

#### **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 Hand 的系统提示的派生。完整系统提示已提供 [这里](https://huggingface.co/unsloth/Devstral-Small-2505/blob/main/SYSTEM_PROMPT.txt).

```
你是 Devstral，一个由 Mistral AI 训练并使用 OpenHands 框架的有代理能力的有用模型。你可以与计算机交互以解决任务。

<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 &`！我们在 `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 框架的有代理能力的有用模型。你可以与计算机交互以解决任务。\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 凭据时，默认将 user.name 设为 "openhands"，user.email 设为 "openhands@all-hands.dev"，除非另有明确指示。\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. 探索：在提出解决方案前彻底探索相关文件并理解上下文\n2. 分析：考虑多种方法并选择最有前景的方案\n3. 测试：\n   * 对于修复 bug：在实现修复前创建测试以验证问题\n   * 对于新功能：在适当情况下考虑测试驱动开发\n   * 如果仓库缺乏测试基础设施且编写测试需要大量设置，请在投入时间构建测试基础设施前与用户商议\n   * 如果环境未配置以运行测试，请在投入时间安装所有依赖前先与用户商议\n4. 实施：进行有针对性的最小改动以解决问题\n5. 验证：如果环境已配置以运行测试，彻底测试你的实现，包括边界情况。若环境未配置以运行测试，请在投入时间运行测试前先与用户商议\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. 多次按下空格键会加速小鸟。\n4. 小鸟的形状应随机选择为正方形、圆形或三角形。颜色应随机选择为深色。\n5. 在底部放置一些土地，颜色随机为深棕色或黄色。\n6. 在右上角显示分数。通过通过管道且未撞到它们时增加分数。\n7. 制作随机间隔且间距足够的管道。管道颜色随机为深绿色、浅棕色或深灰色调。\n8. 当你失败时，显示最高分。将文本显示在屏幕内。按 q 或 Esc 退出游戏。再次按空格键重新开始。\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 VRAM 的 L4 GPU。

不幸的是，Devstral 略微超过 16GB VRAM 的内存限制，因此目前无法在 Google Colab 上免费微调。然而，你可以 *可以* 使用我们的免费 [Kaggle notebook](https://www.kaggle.com/notebooks/welcome?src=https://github.com/unslothai/notebooks/blob/main/nb/Kaggle-Magistral_\(24B\)-Reasoning-Conversational.ipynb\&accelerator=nvidiaTeslaT4)，它提供对双 GPU 的访问。只需将 notebook 中的 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.
