# Enregistrement au format GGUF

Sauvegarde des modèles en 16 bits pour GGUF afin que vous puissiez l’utiliser pour [Unsloth Studio](/docs/fr/nouveau/studio.md), Ollama, llama.cpp et plus encore !

{% tabs %}
{% tab title="En local" %}
Pour sauvegarder au format GGUF, utilisez ce qui suit pour enregistrer en local :

```python
model.save_pretrained_gguf("directory", tokenizer, quantization_method = "q4_k_m")
model.save_pretrained_gguf("directory", tokenizer, quantization_method = "q8_0")
model.save_pretrained_gguf("directory", tokenizer, quantization_method = "f16")
```

Pour publier sur le hub Hugging Face :

```python
model.push_to_hub_gguf("hf_username/directory", tokenizer, quantization_method = "q4_k_m")
model.push_to_hub_gguf("hf_username/directory", tokenizer, quantization_method = "q8_0")
```

Toutes les options de quantification prises en charge pour `quantization_method` sont listées ci-dessous :

```python
# https://github.com/ggml-org/llama.cpp/blob/master/examples/quantize/quantize.cpp#L19
ALLOWED_QUANTS = \
{
    "not_quantized"  : "Recommandé. Conversion rapide. Inférence lente, fichiers volumineux.",
    "fast_quantized" : "Recommandé. Conversion rapide. Inférence correcte, taille de fichier correcte.",
    "quantized"      : "Recommandé. Conversion lente. Inférence rapide, fichiers petits.",
    "f32"     : "Déconseillé. Conserve une précision de 100 %, mais extrêmement lent et gourmand en mémoire.",
    "f16"     : "Conversion la plus rapide + conserve une précision de 100 %. Lent et gourmand en mémoire.",
    "q8_0"    : "Conversion rapide. Utilisation élevée des ressources, mais généralement acceptable.",
    "q4_k_m"  : "Recommandé. Utilise Q6_K pour la moitié des tenseurs attention.wv et feed_forward.w2, sinon Q4_K",
    "q5_k_m"  : "Recommandé. Utilise Q6_K pour la moitié des tenseurs attention.wv et feed_forward.w2, sinon Q5_K",
    "q2_k"    : "Utilise Q4_K pour les tenseurs attention.vw et feed_forward.w2, Q2_K pour les autres tenseurs.",
    "q3_k_l"  : "Utilise Q5_K pour les tenseurs attention.wv, attention.wo et feed_forward.w2, sinon Q3_K",
    "q3_k_m"  : "Utilise Q4_K pour les tenseurs attention.wv, attention.wo et feed_forward.w2, sinon Q3_K",
    "q3_k_s"  : "Utilise Q3_K pour tous les tenseurs",
    "q4_0"    : "Méthode de quantification d’origine, 4 bits.",
    "q4_1"    : "Précision plus élevée que q4_0 mais pas aussi élevée que q5_0. Cependant, inférence plus rapide que les modèles q5.",
    "q4_k_s"  : "Utilise Q4_K pour tous les tenseurs",
    "q4_k"    : "alias de q4_k_m",
    "q5_k"    : "alias de q5_k_m",
    "q5_0"    : "Précision plus élevée, utilisation des ressources plus élevée et inférence plus lente.",
    "q5_1"    : "Précision encore plus élevée, utilisation des ressources et inférence plus lentes.",
    "q5_k_s"  : "Utilise Q5_K pour tous les tenseurs",
    "q6_k"    : "Utilise Q8_K pour tous les tenseurs",
    "iq2_xxs" : "Quantification à 2,06 bpw",
    "iq2_xs"  : "Quantification à 2,31 bpw",
    "iq3_xxs" : "Quantification à 3,06 bpw",
    "q3_k_xs" : "Quantification extra-petite à 3 bits",
}
```

{% endtab %}

{% tab title="Sauvegarde manuelle" %}
Commencez par enregistrer votre modèle en 16 bits :

```python
model.save_pretrained_merged("merged_model", tokenizer, save_method = "merged_16bit",)
```

Ensuite, utilisez le terminal et exécutez :

{% code overflow="wrap" %}

```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-cli llama-mtmd-cli llama-server llama-gguf-split
cp llama.cpp/build/bin/llama-* llama.cpp

python llama.cpp/convert-hf-to-gguf.py FOLDER --outfile OUTPUT --outtype f16
```

{% endcode %}

Ou suivez les étapes à <https://rentry.org/llama-cpp-conversions#merging-loras-into-a-model> en utilisant le nom de modèle "merged\_model" pour fusionner en GGUF.
{% endtab %}
{% endtabs %}

### L’exécution dans Unsloth fonctionne bien, mais après l’exportation et l’exécution sur d’autres plateformes, les résultats sont médiocres

Il peut arriver que votre modèle s’exécute et produise de bons résultats dans Unsloth, mais que, lorsque vous l’utilisez sur une autre plateforme comme Ollama ou vLLM, les résultats soient médiocres ou que vous obteniez du charabia, des générations infinies/sans fin *soit* sorties répétée&#x73;**.**

* La cause la plus courante de cette erreur est l’utilisation d’un <mark style="background-color:blue;">**mauvais modèle de chat**</mark>**.** Il est essentiel d’utiliser le MÊME modèle de chat que celui utilisé lors de l’entraînement du modèle dans Unsloth, puis lorsque vous l’exécutez dans un autre framework, tel que llama.cpp ou Ollama. Lors de l’inférence à partir d’un modèle enregistré, il est crucial d’appliquer le bon modèle.
* Vous devez utiliser le `token eos`. Si ce n’est pas le cas, vous risquez d’obtenir du charabia lors des générations longues.
* Cela peut aussi venir du fait que votre moteur d’inférence ajoute un jeton inutile de « début de séquence » (ou, au contraire, en omet un) ; assurez-vous donc de vérifier les deux hypothèses !
* <mark style="background-color:green;">**Utilisez nos notebooks conversationnels pour forcer le modèle de chat - cela résoudra la plupart des problèmes.**</mark>
  * Notebook conversationnel Qwen-3 14B [**Ouvrir dans Colab**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_\(14B\)-Reasoning-Conversational.ipynb)
  * Notebook conversationnel Gemma-3 4B [**Ouvrir dans Colab**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Gemma3_\(4B\).ipynb)
  * Notebook conversationnel Llama-3.2 3B [**Ouvrir dans Colab**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Llama3.2_\(1B_and_3B\)-Conversational.ipynb)
  * Notebook conversationnel Phi-4 14B [**Ouvrir dans Colab**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Phi_4-Conversational.ipynb)
  * Notebook conversationnel Mistral v0.3 7B [**Ouvrir dans Colab**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Mistral_v0.3_\(7B\)-Conversational.ipynb)
  * **Plus de notebooks dans nos** [**docs des notebooks**](/docs/fr/commencer/unsloth-notebooks.md)

### La sauvegarde en GGUF / vLLM 16 bits plante

Vous pouvez essayer de réduire l’utilisation maximale du GPU pendant la sauvegarde en modifiant `maximum_memory_usage`.

La valeur par défaut est `model.save_pretrained(..., maximum_memory_usage = 0.75)`. Réduisez-la par exemple à 0.5 pour utiliser 50 % de la mémoire de crête du GPU ou moins. Cela peut réduire les plantages OOM pendant la sauvegarde.

### Comment sauvegarder manuellement en GGUF ?

Commencez par sauvegarder votre modèle en 16 bits via :

```python
model.save_pretrained_merged("merged_model", tokenizer, save_method = "merged_16bit",)
```

Compilez llama.cpp à partir des sources comme ci-dessous :

{% code overflow="wrap" %}

```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-cli llama-mtmd-cli llama-server llama-gguf-split
cp llama.cpp/build/bin/llama-* llama.cpp
```

{% endcode %}

Ensuite, enregistrez le modèle en F16 :

```bash
python llama.cpp/convert_hf_to_gguf.py merged_model \
    --outfile model-F16.gguf --outtype f16 \
    --split-max-size 50G
```

```bash
# Pour BF16 :
python llama.cpp/convert_hf_to_gguf.py merged_model \
    --outfile model-BF16.gguf --outtype bf16 \
    --split-max-size 50G
    
# Pour Q8_0 :
python llama.cpp/convert_hf_to_gguf.py merged_model \
    --outfile model-Q8_0.gguf --outtype q8_0 \
    --split-max-size 50G
```


---

# 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 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/notions-de-base/inference-and-deployment/saving-to-gguf.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.
