# Kimi K2 Thinking : guide d'exécution locale

{% hint style="success" %}
Kimi-K2-Thinking a été publié. Lisez notre [guide Thinking](#kimi-k2-thinking-guide) ou accédez à [GGUFs ici](https://huggingface.co/unsloth/Kimi-K2-Thinking-GGUF).

Nous avons également collaboré avec l'équipe Kimi sur [**correction du prompt système**](#tokenizer-quirks-and-bug-fixes) pour Kimi-K2-Thinking.
{% endhint %}

Kimi-K2 et **Kimi-K2-Thinking** atteignent des performances SOTA en connaissances, raisonnement, codage et tâches agentiques. Les modèles complets de 1T de paramètres de Moonshot AI nécessitent 1,09 To d'espace disque, tandis que la version quantifiée **Unsloth Dynamic 1.8-bit** réduit cela à seulement 230 Go (-80% de taille)**:** [**Kimi-K2-GGUF**](https://huggingface.co/unsloth/Kimi-K2-Instruct-GGUF)

Vous pouvez également maintenant exécuter nos [**Kimi-K2-Thinking** GGUFs](https://huggingface.co/unsloth/Kimi-K2-Thinking-GGUF).

Tous les téléchargements utilisent Unsloth [méthodologie Dynamic 2.0](https://unsloth.ai/docs/fr/bases/unsloth-dynamic-2.0-ggufs) pour des performances SOTA [Aider Polyglot](https://unsloth.ai/docs/fr/bases/unsloth-dynamic-2.0-ggufs/unsloth-dynamic-ggufs-on-aider-polyglot) et des performances MMLU en 5-shots. Voyez comment nos GGUFs dynamiques 1–2 bits performent sur [les benchmarks de codage ici](https://unsloth.ai/docs/fr/bases/unsloth-dynamic-2.0-ggufs/unsloth-dynamic-ggufs-on-aider-polyglot).

<a href="#kimi-k2-thinking-guide" class="button primary">Exécuter Thinking</a><a href="#kimi-k2-instruct-guide" class="button primary">Exécuter Instruct</a>

### :gear: Exigences recommandées

{% hint style="info" %}
Vous avez besoin de **247 Go d'espace disque** pour exécuter la quantification 1bit !

La seule exigence est **`espace disque + RAM + VRAM ≥ 247 Go`**. Cela signifie que vous n'avez pas besoin d'avoir autant de RAM ou de VRAM (GPU) pour exécuter le modèle, mais ce sera beaucoup plus lent.
{% endhint %}

La quantification 1.8-bit (UD-TQ1\_0) tiendra dans un GPU 1x 24 Go (avec toutes les couches MoE déchargées sur la RAM système ou un disque rapide). Attendez-vous à environ \~1-2 tokens/s avec cette configuration si vous avez en plus 256 Go de RAM. La quant complète Kimi K2 Q8 fait 1,09 To et nécessitera au moins 8 x GPU H200.

Pour des performances optimales vous aurez besoin d'au moins **247 Go de mémoire unifiée ou 247 Go combinés RAM+VRAM** pour 5+ tokens/s. Si vous avez moins de 247 Go de RAM+VRAM combinés, la vitesse du modèle en pâtira définitivement.

**Si vous n'avez pas 247 Go de RAM+VRAM, pas d'inquiétude !** llama.cpp a intrinsèquement **déchargement sur disque**, donc via mmap, cela fonctionnera toujours, simplement plus lentement - par exemple auparavant vous pourriez obtenir 5 à 10 tokens/seconde, maintenant c'est moins d'1 token.

Nous suggérons d'utiliser notre **quant UD-Q2\_K\_XL (360 Go)** pour équilibrer taille et précision !

{% hint style="success" %}
Pour de meilleures performances, faites en sorte que votre VRAM + RAM combinées = la taille du quant que vous téléchargez. Sinon, cela fonctionnera toujours via le déchargement sur disque, mais ce sera plus lent !
{% endhint %}

## 💭Guide Kimi-K2-Thinking

Kimi-K2-Thinking devrait généralement suivre les mêmes instructions que le modèle Instruct, avec quelques différences clés, notamment dans les paramètres et le modèle de chat.

{% hint style="success" %}
**Pour exécuter le modèle en pleine précision, vous n'avez besoin que d'utiliser les GGUFs dynamiques 4-bit ou 5-bit (par ex. UD\_Q4\_K\_XL) car le modèle a été initialement publié au format INT4.**

Vous pouvez choisir une quantification avec plus de bits par sécurité en cas de petites différences de quantification, mais dans la plupart des cas cela est inutile.
{% endhint %}

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

Selon [Moonshot AI](https://huggingface.co/moonshotai/Kimi-K2-Thinking), voici les paramètres recommandés pour l'inférence Kimi-K2-Thinking :

* Définissez le <mark style="background-color:green;">**température 1.0**</mark> pour réduire la répétition et l'incohérence.
* Longueur de contexte suggérée = 98 304 (jusqu'à 256K)
* Remarque : l'utilisation d'outils différents peut nécessiter des paramètres différents

{% hint style="info" %}
Nous recommandons de régler <mark style="background-color:green;">**min\_p à 0,01**</mark> pour supprimer l'apparition de tokens improbables avec de faibles probabilités.
{% endhint %}

Par exemple, donné un message utilisateur « What is 1+1? », nous obtenons :

{% code overflow="wrap" %}

```
<|im_system|>system<|im_middle|>You are Kimi, an AI assistant created by Moonshot AI.<|im_end|><|im_user|>user<|im_middle|>What is 1+1?<|im_end|><|im_assistant|>assistant<|im_middle|>
```

{% endcode %}

### ✨ Exécuter Kimi K2 Thinking dans llama.cpp

{% hint style="success" %}
Vous pouvez maintenant utiliser la dernière mise à jour de [llama.cpp](https://github.com/ggml-org/llama.cpp) pour exécuter le modèle :
{% endhint %}

1. Obtenez la dernière `llama.cpp` sur [GitHub ici](https://github.com/ggml-org/llama.cpp). Vous pouvez aussi 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 voulez simplement de l'inférence CPU. **Pour les appareils Apple Mac / Metal**, définissez `-DGGML_CUDA=OFF` puis continuez comme d'habitude - le support Metal est activé 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 voulez utiliser `llama.cpp` directement pour charger des modèles, vous pouvez faire ce qui suit : (:UD-TQ1\_0) est le type de quantification. Vous pouvez aussi télécharger via Hugging Face (point 3). C'est similaire à `ollama run` . Utilisez `export LLAMA_CACHE="dossier"` pour forcer `llama.cpp` pour enregistrer à un emplacement spécifique.

```bash
export LLAMA_CACHE="unsloth/Kimi-K2-Thinking-GGUF"
./llama.cpp/llama-cli \
    -hf unsloth/Kimi-K2-Thinking-GGUF:UD-TQ1_0 \
    --n-gpu-layers 99 \
    --temp 1.0 \
    --min-p 0.01 \
    --ctx-size 16384 \
    --seed 3407 \
    -ot ".ffn_.*_exps.=CPU"
```

3. Ce qui précède utilisera environ 8 Go de mémoire GPU. Si vous avez environ 360 Go de mémoire GPU combinée, retirez `-ot ".ffn_.*_exps.=CPU"` pour obtenir la vitesse maximale !

{% hint style="info" %}
Veuillez essayer `-ot ".ffn_.*_exps.=CPU"` pour décharger toutes les couches MoE sur le CPU ! Cela vous permet effectivement de placer toutes les couches non-MoE sur 1 GPU, améliorant les vitesses de génération. Vous pouvez personnaliser l'expression regex pour décharger plus de couches si vous avez plus de capacité GPU.

Si vous avez un peu plus de mémoire GPU, essayez `-ot ".ffn_(up|down)_exps.=CPU"` Cela décharge les couches MoE de projection up et down.

Essayez `-ot ".ffn_(up)_exps.=CPU"` si vous avez encore plus de mémoire GPU. Cela ne décharge que les couches MoE de projection up.

Et enfin déchargez toutes les couches via `-ot ".ffn_.*_exps.=CPU"` Ceci utilise le moins de VRAM.

Vous pouvez aussi personnaliser la regex, par exemple `-ot "\.(6|7|8|9|[0-9][0-9]|[0-9][0-9][0-9])\.ffn_(gate|up|down)_exps.=CPU"` signifie décharger les couches MoE gate, up et down mais uniquement à partir de la 6e couche.
{% endhint %}

3. Téléchargez le modèle via (après avoir installé `pip install huggingface_hub hf_transfer` ). Nous recommandons d'utiliser notre quant dynamique 2-bit UD-Q2\_K\_XL pour équilibrer taille et précision. Toutes les versions à : [huggingface.co/unsloth/Kimi-K2-Thinking-GGUF](https://huggingface.co/unsloth/Kimi-K2-Thinking-GGUF)

{% code overflow="wrap" %}

```python
# !pip install huggingface_hub hf_transfer
import os
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "0" # Peut parfois limiter le débit, donc mettez à 0 pour désactiver
from huggingface_hub import snapshot_download
snapshot_download(
    repo_id = "unsloth/Kimi-K2-Thinking-GGUF",
    local_dir = "unsloth/Kimi-K2-Thinking-GGUF",
    allow_patterns = ["*UD-TQ1_0*"], # Utilisez "*UD-Q2_K_XL*" pour Dynamic 2bit (381GB)
)
```

{% endcode %}

{% hint style="info" %}
Si vous constatez que les téléchargements se bloquent à 90 ou 95 % environ, veuillez consulter <https://docs.unsloth.ai/basics/troubleshooting-and-faqs#downloading-gets-stuck-at-90-to-95>
{% endhint %}

4. Exécutez n'importe quel prompt.
5. Modifier `--threads -1` pour le nombre de threads CPU (par défaut c'est réglé sur le nombre maximum de threads CPU), `--ctx-size 16384` pour la longueur de contexte, `--n-gpu-layers 99` pour le déchargement GPU sur combien de couches. Réglez-le à 99 associé au déchargement MoE vers le CPU pour obtenir les meilleures performances. Essayez de l'ajuster si votre GPU manque de mémoire. Retirez-le aussi si vous exécutez uniquement sur CPU.

{% code overflow="wrap" %}

```bash
./llama.cpp/llama-cli \
    --model unsloth/Kimi-K2-Thinking-GGUF/UD-TQ1_0/Kimi-K2-Thinking-UD-TQ1_0-00001-of-00006.gguf \
    --n-gpu-layers 99 \
    --temp 1.0 \
    --min_p 0.01 \
    --ctx-size 16384 \
    --seed 3407 \
    -ot ".ffn_.*_exps.=CPU"
```

{% endcode %}

### :thinking:**Pas de balises Thinking ?**

Vous remarquerez peut-être qu'il n'y a pas de *réflexion* balises lorsque vous exécutez le modèle. C'est un comportement normal et voulu.

Dans votre `llama.cpp` script, assurez-vous d'inclure le `--special` indicateur à la toute fin de votre commande. Une fois fait, vous verrez le `<think>` token apparaître comme prévu.

Vous pourriez aussi voir chaque réponse se terminer par `<|im_end|>`. C'est normal car `<|im_end|>` est un token spécial qui apparaît lors de l'affichage des tokens spéciaux. Si vous souhaitez le cacher, vous pouvez définir `<|im_end|>` comme chaîne d'arrêt dans vos paramètres.

### ✨ Déployer avec llama-server et la bibliothèque de complétions d'OpenAI

Après avoir installé llama.cpp comme indiqué dans [#run-kimi-k2-thinking-in-llama.cpp](#run-kimi-k2-thinking-in-llama.cpp "mention"), vous pouvez utiliser ce qui suit pour lancer un serveur compatible OpenAI :

{% code overflow="wrap" %}

```bash
./llama.cpp/llama-server \
    --model unsloth/Kimi-K2-Thinking-GGUF/UD-TQ1_0/Kimi-K2-Thinking-UD-TQ1_0-00001-of-00006.gguf \
    --alias "unsloth/Kimi-K2-Thinking" \
    -fa on \
    --n-gpu-layers 999 \
    -ot ".ffn_.*_exps.=CPU" \
    --min_p 0.01 \
    --ctx-size 16384 \
    --port 8001 \
    --jinja
```

{% endcode %}

Puis utilisez la bibliothèque Python d'OpenAI après `pip install openai` :

```python
from openai import OpenAI
openai_client = OpenAI(
    base_url = "http://127.0.0.1:8001/v1",
    api_key = "sk-no-key-required",
)
completion = openai_client.chat.completions.create(
    model = "unsloth/Kimi-K2-Thinking",
    messages = [{"role": "user", "content": "What is 2+2?"},],
)
print(completion.choices[0].message.content)
```

## :mag:Particularités du tokenizer et corrections de bugs

**7 novembre 2025 : Nous avons informé l'équipe Kimi, et corrigé le prompt système par défaut de** `You are Kimi, an AI assistant created by Moonshot AI.` **n'apparaissant pas au premier message utilisateur !** Voir <https://huggingface.co/moonshotai/Kimi-K2-Thinking/discussions/12>

Un grand merci à l'équipe Moonshot Kimi pour leur temps de réponse extrêmement rapide à nos questions et pour avoir corrigé le problème au plus vite !

**16 juillet 2025 : Kimi K2 a mis à jour leur tokenizer pour permettre plusieurs appels d'outils** comme indiqué dans <https://x.com/Kimi_Moonshot/status/1945050874067476962>

**18 juillet 2025 : Nous avons corrigé un prompt système - Kimi a également tweeté sur notre correctif ici :** <https://x.com/Kimi_Moonshot/status/1946130043446690030>. Le correctif a également été décrit ici : <https://huggingface.co/moonshotai/Kimi-K2-Instruct/discussions/28>

Si vous avez téléchargé les anciens checkpoints - pas d'inquiétude - téléchargez simplement le premier split GGUF qui a été changé. OU si vous ne voulez pas télécharger de nouveaux fichiers faites :

```bash
wget https://huggingface.co/unsloth/Kimi-K2-Instruct/raw/main/chat_template.jinja
./llama.cpp ... --chat-template-file /dir/to/chat_template.jinja
```

Le tokenizer Kimi K2 était intéressant à explorer - <mark style="background-color:green;">**il est surtout similaire dans son fonctionnement au tokenizer de GPT-4o**</mark>! Nous voyons d'abord dans le [fichier tokenization\_kimi.py](https://huggingface.co/moonshotai/Kimi-K2-Instruct/blob/main/tokenization_kimi.py) la régex suivante que Kimi K2 utilise :

```python
pat_str = "|".join(
    [
        r"""[\p{Han}]+""",
        r"""[^\r\n\p{L}\p{N}]?[\p{Lu}\p{Lt}\p{Lm}\p{Lo}\p{M}&&[^\p{Han}]]*[\p{Ll}\p{Lm}\p{Lo}\p{M}&&[^\p{Han}]]+(?i:'s|'t|'re|'ve|'m|'ll|'d)?""",
        r"""[^\r\n\p{L}\p{N}]?[\p{Lu}\p{Lt}\p{Lm}\p{Lo}\p{M}&&[^\p{Han}]]+[\p{Ll}\p{Lm}\p{Lo}\p{M}&&[^\p{Han}]]*(?i:'s|'t|'re|'ve|'m|'ll|'d)?""",
        r"""\p{N}{1,3}""",
        r""" ?[^\s\p{L}\p{N}]+[\r\n]*""",
        r"""\s*[\r\n]+""",
        r"""\s+(?!\S)""",
        r"""\s+""",
    ]
)
```

Après inspection attentive, nous constatons que Kimi K2 est presque identique à la regex du tokenizer de GPT-4o que l'on trouve dans [le code source de llama.cpp](https://github.com/ggml-org/llama.cpp/blob/55c509daf51d25bfaee9c8b8ce6abff103d4473b/src/llama-vocab.cpp#L400).

{% code overflow="wrap" %}

```
[^\r\n\p{L}\p{N}]?[\p{Lu}\p{Lt}\p{Lm}\p{Lo}\p{M}]*[\p{Ll}\p{Lm}\p{Lo}\p{M}]+(?i:'s|'t|'re|'ve|'m|'ll|'d)?|[^\r\n\p{L}\p{N}]?[\p{Lu}\p{Lt}\p{Lm}\p{Lo}\p{M}]+[\p{Ll}\p{Lm}\p{Lo}\p{M}]*(?i:'s|'t|'re|'ve|'m|'ll|'d)?|\p{N}{1,3}| ?[^\s\p{L}\p{N}]+[\r\n/]*|\s*[\r\n]+|\s+(?!\S)|\s+
```

{% endcode %}

Les deux tokenisent les nombres en groupes de 1 à 3 chiffres (9, 99, 999), et utilisent des motifs similaires. La seule différence semble être la gestion de "Han" ou des caractères chinois, que le tokenizer de Kimi gère davantage. [La PR](https://github.com/ggml-org/llama.cpp/pull/14654) par <https://github.com/gabriellarson> traite bien ces différences après quelques [discussions ici](https://github.com/ggml-org/llama.cpp/issues/14642#issuecomment-3067324745).

<mark style="background-color:green;">**Nous avons également constaté que le token EOS correct ne devrait pas être \[EOS], mais plutôt <|im\_end|>, ce que nous avons aussi corrigé dans nos conversions de modèle.**</mark>

## 🌝Guide Kimi-K2-Instruct

Guide pas à pas pour exécuter les modèles Instruct Kimi K2 incluant Kimi K2 0905 - la mise à jour du 5 septembre.

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

Selon [Moonshot AI](https://huggingface.co/moonshotai/Kimi-K2-Instruct), voici les paramètres recommandés pour l'inférence Kimi K2 :

* Définissez le <mark style="background-color:green;">**température 0,6**</mark> pour réduire la répétition et l'incohérence.
* Le prompt système par défaut original est :

  ```
  You are a helpful assistant
  ```
* (Optionnel) Moonshot suggère également ce qui suit pour le prompt système :

  ```
  You are Kimi, an AI assistant created by Moonshot AI.
  ```

{% hint style="success" %}
Nous recommandons de régler <mark style="background-color:green;">**min\_p à 0,01**</mark> pour supprimer l'apparition de tokens improbables avec de faibles probabilités.
{% endhint %}

### :1234: Modèle de chat et format du prompt

Kimi Chat utilise un BOS (token de début de phrase). Les rôles system, user et assistant sont tous entourés par `<|im_middle|>` ce qui est intéressant, et chacun reçoit son propre token respectif `<|im_system|>, <|im_user|>, <|im_assistant|>`.

{% code overflow="wrap" %}

```python
<|im_system|>system<|im_middle|>You are a helpful assistant<|im_end|><|im_user|>user<|im_middle|>What is 1+1?<|im_end|><|im_assistant|>assistant<|im_middle|>2<|im_end|>
```

{% endcode %}

Pour séparer les frontières conversationnelles (vous devez enlever chaque nouvelle ligne), nous obtenons :

{% code overflow="wrap" %}

```
<|im_system|>system<|im_middle|>You are a helpful assistant<|im_end|>
<|im_user|>user<|im_middle|>What is 1+1?<|im_end|>
<|im_assistant|>assistant<|im_middle|>2<|im_end|>
```

{% endcode %}

### :floppy\_disk: Uploads de modèles

**TOUS nos uploads** - y compris ceux qui ne sont pas basés sur imatrix ou dynamiques, utilisez notre jeu de calibration, qui est spécifiquement optimisé pour les tâches conversationnelles, de codage et de raisonnement.

<table data-full-width="false"><thead><tr><th>Bits MoE</th><th>Type + Lien</th><th>Taille sur disque</th><th>Détails</th></tr></thead><tbody><tr><td>1,66 bit</td><td><a href="https://huggingface.co/unsloth/Kimi-K2-Instruct-GGUF/tree/main/UD-TQ1_0">UD-TQ1_0</a></td><td><strong>245GB</strong></td><td>1,92/1,56 bit</td></tr><tr><td>1,78 bit</td><td><a href="https://huggingface.co/unsloth/Kimi-K2-Instruct-GGUF/tree/main/UD-IQ1_S">UD-IQ1_S</a></td><td><strong>281GB</strong></td><td>2,06/1,56 bit</td></tr><tr><td>1,93 bit</td><td><a href="https://huggingface.co/unsloth/Kimi-K2-Instruct-GGUF/tree/main/UD-IQ1_M">UD-IQ1_M</a></td><td><strong>304GB</strong></td><td>2.5/2.06/1.56</td></tr><tr><td>2,42 bit</td><td><a href="https://huggingface.co/unsloth/Kimi-K2-Instruct-GGUF/tree/main/UD-IQ2_XXS">UD-IQ2_XXS</a></td><td><strong>343GB</strong></td><td>2,5/2,06 bit</td></tr><tr><td>2,71 bit</td><td><a href="https://huggingface.co/unsloth/Kimi-K2-Instruct-GGUF/tree/main/UD-Q2_K_XL">UD-Q2_K_XL</a></td><td><strong>381GB</strong></td><td>3,5/2,5 bit</td></tr><tr><td>3,12 bit</td><td><a href="https://huggingface.co/unsloth/Kimi-K2-Instruct-GGUF/tree/main/UD-IQ3_XXS">UD-IQ3_XXS</a></td><td><strong>417GB</strong></td><td>3,5/2,06 bit</td></tr><tr><td>3,5 bit</td><td><a href="https://huggingface.co/unsloth/Kimi-K2-Instruct-GGUF/tree/main/UD-Q3_K_XL">UD-Q3_K_XL</a></td><td><strong>452GB</strong></td><td>4,5/3,5 bit</td></tr><tr><td>4,5 bit</td><td><a href="https://huggingface.co/unsloth/Kimi-K2-Instruct-GGUF/tree/main/UD-Q4_K_XL">UD-Q4_K_XL</a></td><td><strong>588GB</strong></td><td>5,5/4,5 bit</td></tr><tr><td>5,5 bit</td><td><a href="https://huggingface.co/unsloth/Kimi-K2-Instruct-GGUF/tree/main/UD-Q5_K_XL">UD-Q5_K_XL</a></td><td><strong>732GB</strong></td><td>6,5/5,5 bit</td></tr></tbody></table>

Nous avons aussi mis en ligne des versions en [format BF16](https://huggingface.co/unsloth/Kimi-K2-Instruct-BF16).

### ✨ Exécuter Instruct dans llama.cpp

1. Obtenez la dernière `llama.cpp` sur [GitHub ici](https://github.com/ggml-org/llama.cpp). Vous pouvez aussi 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 voulez simplement de l'inférence CPU.

```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 voulez utiliser `llama.cpp` directement pour charger des modèles, vous pouvez faire ce qui suit : (:UD-IQ1\_S) est le type de quantification. Vous pouvez aussi télécharger via Hugging Face (point 3). C'est similaire à `ollama run` . Utilisez `export LLAMA_CACHE="dossier"` pour forcer `llama.cpp` pour enregistrer à un emplacement spécifique.\ <mark style="background-color:green;">**Pour exécuter la nouvelle mise à jour de septembre 2025 du modèle, changez le nom du modèle de 'Kimi-K2-Instruct' en 'Kimi-K2-Instruct-0905'.**</mark>

{% hint style="info" %}
Veuillez essayer `-ot ".ffn_.*_exps.=CPU"` pour décharger toutes les couches MoE sur le CPU ! Cela vous permet effectivement de placer toutes les couches non-MoE sur 1 GPU, améliorant les vitesses de génération. Vous pouvez personnaliser l'expression regex pour décharger plus de couches si vous avez plus de capacité GPU.

Si vous avez un peu plus de mémoire GPU, essayez `-ot ".ffn_(up|down)_exps.=CPU"` Cela décharge les couches MoE de projection up et down.

Essayez `-ot ".ffn_(up)_exps.=CPU"` si vous avez encore plus de mémoire GPU. Cela ne décharge que les couches MoE de projection up.

Et enfin déchargez toutes les couches via `-ot ".ffn_.*_exps.=CPU"` Ceci utilise le moins de VRAM.

Vous pouvez aussi personnaliser la regex, par exemple `-ot "\.(6|7|8|9|[0-9][0-9]|[0-9][0-9][0-9])\.ffn_(gate|up|down)_exps.=CPU"` signifie décharger les couches MoE gate, up et down mais uniquement à partir de la 6e couche.
{% endhint %}

```bash
export LLAMA_CACHE="unsloth/Kimi-K2-Instruct-GGUF"
./llama.cpp/llama-cli \
    -hf unsloth/Kimi-K2-Instruct-GGUF:TQ1_0 \
    --n-gpu-layers 99 \
    --temp 0.6 \
    --min-p 0.01 \
    --ctx-size 16384 \
    --seed 3407 \
    -ot ".ffn_.*_exps.=CPU"
```

3. Téléchargez le modèle via (après avoir installé `pip install huggingface_hub hf_transfer` ). Vous pouvez choisir `UD-TQ1_0`(quant dynamique 1.8bit) ou d'autres versions quantifiées comme `Q2_K_XL` . Nous <mark style="background-color:green;">**recommandons d'utiliser notre quant dynamique 2bit**</mark><mark style="background-color:green;">**&#x20;**</mark><mark style="background-color:green;">**`UD-Q2_K_XL`**</mark><mark style="background-color:green;">**&#x20;**</mark><mark style="background-color:green;">**pour équilibrer taille et précision**</mark>. Plus de versions sur : [huggingface.co/unsloth/Kimi-K2-Instruct-GGUF](https://huggingface.co/unsloth/Kimi-K2-Instruct-GGUF)

{% code overflow="wrap" %}

```python
# !pip install huggingface_hub hf_transfer
import os
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "0" # Peut parfois limiter le débit, donc mettez à 0 pour désactiver
from huggingface_hub import snapshot_download
snapshot_download(
    repo_id = "unsloth/Kimi-K2-Instruct-GGUF",
    local_dir = "unsloth/Kimi-K2-Instruct-GGUF",
    allow_patterns = ["*UD-TQ1_0*"], # Dynamic 1bit (281GB) Utilisez "*UD-Q2_K_XL*" pour Dynamic 2bit (381GB)
)
```

{% endcode %}

{% hint style="info" %}
Si vous constatez que les téléchargements se bloquent à 90 ou 95 % environ, veuillez consulter <https://docs.unsloth.ai/basics/troubleshooting-and-faqs#downloading-gets-stuck-at-90-to-95>
{% endhint %}

4. Exécutez n'importe quel prompt.
5. Modifier `--threads -1` pour le nombre de threads CPU (par défaut c'est réglé sur le nombre maximum de threads CPU), `--ctx-size 16384` pour la longueur de contexte, `--n-gpu-layers 99` pour le déchargement GPU sur combien de couches. Réglez-le à 99 associé au déchargement MoE vers le CPU pour obtenir les meilleures performances. Essayez de l'ajuster si votre GPU manque de mémoire. Retirez-le aussi si vous exécutez uniquement sur CPU.

{% code overflow="wrap" %}

```bash
./llama.cpp/llama-cli \
    --model unsloth/Kimi-K2-Instruct-GGUF/UD-TQ1_0/Kimi-K2-Instruct-UD-TQ1_0-00001-of-00005.gguf \
    --n-gpu-layers 99 \
    --temp 0.6 \
    --min_p 0.01 \
    --ctx-size 16384 \
    --seed 3407 \
    -ot ".ffn_.*_exps.=CPU"
```

{% endcode %}

### :bird: Flappy Bird + autres tests <a href="#heptagon-test" id="heptagon-test"></a>

Nous avons introduit le test Flappy Bird lorsque nos quants 1.58bit pour DeepSeek R1 ont été fournis. Nous avons trouvé Kimi K2 comme l'un des seuls modèles à réussir en one-shot toutes nos tâches incluant celle-ci, [Heptagon ](https://unsloth.ai/docs/fr/modeles/deepseek-r1-0528-how-to-run-locally#heptagon-test)et d'autres tests même à 2-bit. L'objectif est de demander au LLM de créer un jeu Flappy Bird mais en suivant des instructions spécifiques :

{% code overflow="wrap" %}

```
Créez un jeu Flappy Bird en Python. Vous devez inclure ces éléments :
1. Vous devez utiliser pygame.
2. La couleur de fond doit être choisie au hasard et être une teinte claire. Commencez avec un bleu clair.
3. Appuyer plusieurs fois sur ESPACE accélérera l'oiseau.
4. La forme de l'oiseau doit être choisie aléatoirement parmi carré, cercle ou triangle. La couleur doit être choisie aléatoirement et être sombre.
5. Placez en bas un morceau de terrain coloré en brun foncé ou jaune choisi au hasard.
6. Affichez un score en haut à droite. Incrémentez-le si vous passez les tuyaux sans les toucher.
7. Créez des tuyaux espacés aléatoirement avec suffisamment d'espace. Colorez-les aléatoirement en vert foncé, marron clair ou une teinte gris foncé.
8. Lorsque vous perdez, affichez le meilleur score. Faites apparaître le texte à l'intérieur de l'écran. Appuyer sur q ou Esc quittera le jeu. Redémarrer se fait en appuyant de nouveau sur ESPACE.
Le jeu final doit être à l'intérieur d'une section markdown en Python. Vérifiez votre code pour les erreurs et corrigez-les avant la section markdown finale.
```

{% endcode %}

Vous pouvez aussi tester les quants dynamiques via le test Heptagon comme indiqué dans [r/Localllama](https://www.reddit.com/r/LocalLLaMA/comments/1j7r47l/i_just_made_an_animation_of_a_ball_bouncing/) qui teste le modèle sur la création d'un moteur physique basique pour simuler des balles tournant dans une forme heptagonale fermée en mouvement.

<figure><img src="https://docs.unsloth.ai/~gitbook/image?url=https%3A%2F%2F3215535692-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252FxhOjnexMCB3dmuQFQ2Zq%252Fuploads%252F2O72oTw5yPUbcxXjDNKS%252Fsnapshot.jpg%3Falt%3Dmedia%26token%3Dce852f9f-20ee-4b93-9d7b-1a5f211b9e04&#x26;width=768&#x26;dpr=4&#x26;quality=100&#x26;sign=55d1134d&#x26;sv=2" alt="" width="563"><figcaption></figcaption></figure>

L'objectif est de faire tourner l'heptagone, et les balles à l'intérieur de l'heptagone doivent bouger. Le prompt est ci-dessous :

{% code overflow="wrap" %}

```
Écrivez un programme Python qui montre 20 balles rebondissant à l'intérieur d'un heptagone en rotation:\n- Toutes les balles ont le même rayon.\n- Toutes les balles ont un numéro dessus de 1 à 20.\n- Toutes les balles tombent du centre de l'heptagone au démarrage.\n- Les couleurs sont : #f8b862, #f6ad49, #f39800, #f08300, #ec6d51, #ee7948, #ed6d3d, #ec6800, #ec6800, #ee7800, #eb6238, #ea5506, #ea5506, #eb6101, #e49e61, #e45e32, #e17b34, #dd7a56, #db8449, #d66a35\n- Les balles doivent être affectées par la gravité et la friction, et elles doivent rebondir de manière réaliste contre les parois en rotation. Il doit aussi y avoir des collisions entre les balles.\n- Le matériau de toutes les balles fait que leur hauteur de rebond à l'impact ne dépassera pas le rayon de l'heptagone, mais sera supérieure au rayon de la balle.\n- Toutes les balles tournent avec friction, les numéros sur la balle peuvent être utilisés pour indiquer la rotation de la balle.\n- L'heptagone tourne autour de son centre, et la vitesse de rotation est de 360 degrés en 5 secondes.\n- La taille de l'heptagone doit être suffisamment grande pour contenir toutes les balles.\n- N'utilisez pas la bibliothèque pygame ; implémentez vous-même les algorithmes de détection de collision et la réponse aux collisions, etc. Les bibliothèques Python suivantes sont autorisées : tkinter, math, numpy, dataclasses, typing, sys.\n- Tous les codes doivent être mis dans un seul fichier Python.
```

{% endcode %}


---

# 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/kimi-k2-thinking-how-to-run-locally.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.
