# Guide de fine-tuning de Qwen3.5

Vous pouvez maintenant affiner [Qwen3.5](https://unsloth.ai/docs/fr/modeles/qwen3.5) la famille de modèles (0,8B, 2B, 4B, 9B, 27B, 35B‑A3B, 122B‑A10B) avec [**Unsloth**](https://github.com/unslothai/unsloth). La prise en charge inclut à la fois [vision](#vision-fine-tuning), le texte et [RL](#reinforcement-learning-rl) l’affinage. **Qwen3.5‑35B‑A3B** - le LoRA bf16 fonctionne sur **74 Go de VRAM.**

* Unsloth permet d’entraîner Qwen3.5 **1,5× plus vite** et utilise **50 % de VRAM en moins** que les configurations FA2.
* Utilisation de la VRAM pour le LoRA bf16 de Qwen3.5 : **0.8B**: 3 Go • **2B**: 5 Go • **4B**: 10 Go • **9B**: 22 Go • **27B**: 56 Go
* Affiner **0.8B**, **2B** et **4B** LoRA bf16 via notre **gratuits** **notebooks Google Colab**:

| [Qwen3.5-**0.8B**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_5_\(0_8B\)_Vision.ipynb) | [Qwen3.5-**2B**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_5_\(2B\)_Vision.ipynb) | [Qwen3.5-**4B**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_5_\(4B\)_Vision.ipynb) | [Qwen3.5-4B **GRPO**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_5_\(4B\)_Vision_GRPO.ipynb) |
| --------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |

* Si vous voulez **préserver la capacité de raisonnement** vous pouvez mélanger des exemples de type raisonnement avec des réponses directes (conservez au minimum 75 % de raisonnement). Sinon, vous pouvez l’émettre entièrement.
* **L’affinage complet (FFT)** fonctionne aussi. Notez que cela utilisera 4 fois plus de VRAM.
* Qwen3.5 est puissant pour l’affinage multilingue, car il prend en charge 201 langues.
* Après l’affinage, vous pouvez exporter vers [GGUF](#saving-export-your-fine-tuned-model) (pour llama.cpp/Ollama/etc.) ou [vLLM](#saving-export-your-fine-tuned-model)
* [Apprentissage par renforcement](https://unsloth.ai/docs/fr/commencer/reinforcement-learning-rl-guide) (RL) pour Qwen3.5 [RL VLM](https://unsloth.ai/docs/fr/commencer/reinforcement-learning-rl-guide/vision-reinforcement-learning-vlm-rl) fonctionne aussi via l’inférence Unsloth.
* Nous avons **A100** des notebooks Colab pour [Qwen3.5‑27B](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen_3_5_27B_A100\(80GB\).ipynb) et [Qwen3.5‑35B‑A3B](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_5_MoE.ipynb).

Si vous utilisez une version plus ancienne (ou si vous affinez localement), mettez d’abord à jour :

{% columns %}
{% column %}
Unsloth Studio :

{% code expandable="true" %}

```bash
unsloth studio update
```

{% endcode %}
{% endcolumn %}

{% column %}
Unsloth basé sur le code :

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

{% endcolumn %}
{% endcolumns %}

{% hint style="warning" %}
**Veuillez utiliser `transformers v5` pour Qwen3.5. Les versions plus anciennes ne fonctionneront pas. Unsloth utilise désormais automatiquement transformers v5 par défaut (sauf pour les environnements Colab).**

Si l’entraînement semble **plus lent que d’habitude**, c’est parce que Qwen3.5 utilise des noyaux Triton Mamba personnalisés. La compilation de ces noyaux peut prendre plus de temps que la normale, en particulier sur les GPU T4.

Il n’est pas recommandé d’effectuer un entraînement QLoRA (4 bits) sur les modèles Qwen3.5, qu’il s’agisse de MoE ou de dense, en raison de différences de quantification supérieures à la normale.
{% endhint %}

### Affinage MoE (35B, 122B)

Pour les modèles MoE comme **Qwen3.5‑35B‑A3B / 122B‑A10B / 397B‑A17B**:

* Vous pouvez utiliser notre [Qwen3.5‑35B‑A3B (A100)](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_5_MoE.ipynb) notebook d’affinage
* Prend en charge notre récente mise à jour de l’entraînement MoE [\~12× plus rapide](https://unsloth.ai/docs/fr/bases/faster-moe) avec >35 % de VRAM en moins et un contexte \~6× plus long
* **Mieux vaut utiliser des configurations bf16 (par ex. LoRA ou affinage complet)** (le MoE QLoRA 4 bits n’est pas recommandé en raison des limitations de BitsandBytes).
* Les noyaux MoE d’Unsloth sont activés par défaut et peuvent utiliser différents backends ; vous pouvez basculer avec `UNSLOTH_MOE_BACKEND`.
* L’affinage de la couche routeur est désactivé par défaut pour des raisons de stabilité.
* Qwen3.5‑122B‑A10B - le LoRA bf16 fonctionne sur 256 Go de VRAM. Si vous utilisez plusieurs GPU, ajoutez     `device_map = "balanced"` ou suivez notre [guide multiGPU](https://unsloth.ai/docs/fr/bases/multi-gpu-training-with-unsloth).

### Démarrage rapide

#### 🦥 Guide d’Unsloth Studio

Qwen3.5 peut être exécuté et affiné dans [Unsloth Studio](https://unsloth.ai/docs/fr/nouveau/studio), notre nouvelle interface web open source pour l’IA locale. Avec Unsloth Studio, vous pouvez exécuter des modèles localement sur **MacOS, Windows**, Linux et :

{% columns %}
{% column %}

* [Entraîner des LLM](https://unsloth.ai/docs/fr/nouveau/studio#no-code-training) 2x plus vite avec 70 % de VRAM en moins
* Rechercher, télécharger, [exécuter des GGUF](https://unsloth.ai/docs/fr/nouveau/studio#run-models-locally) et des modèles safetensor
* [**Auto-réparation** appel d’outils](https://unsloth.ai/docs/fr/nouveau/studio#execute-code--heal-tool-calling) + **recherche web**
* [**Exécution de code**](https://unsloth.ai/docs/fr/nouveau/studio#run-models-locally) (Python, Bash)
* [Inférence automatique](https://unsloth.ai/docs/fr/nouveau/studio#model-arena) réglage des paramètres (temp, top-p, etc.)
* Inférence CPU + GPU rapide via llama.cpp
  {% endcolumn %}

{% column %}

<div data-with-frame="true"><figure><img src="https://550366147-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2F6HTkhiz3DUtrtcqASpTy%2Fobserve%20skinny.png?alt=media&#x26;token=1981fe89-eccf-4c3d-ba92-d76f3123b05f" alt=""><figcaption></figcaption></figure></div>
{% endcolumn %}
{% endcolumns %}

{% stepper %}
{% step %}

#### Installer Unsloth

Exécutez dans votre terminal :

**MacOS, Linux, WSL :**

```bash
curl -fsSL https://unsloth.ai/install.sh | sh
```

**Windows PowerShell :**

```bash
irm https://unsloth.ai/install.ps1 | iex
```

{% hint style="success" %}
**L’installation sera rapide et prendra environ 1 à 2 minutes.**
{% endhint %}
{% endstep %}

{% step %}

#### Lancer Unsloth

**MacOS, Linux, WSL et Windows :**

```bash
unsloth studio -H 0.0.0.0 -p 8888
```

**Puis ouvrez `http://localhost:8888` dans votre navigateur.**
{% endstep %}

{% step %}

#### Entraîner Qwen3.5

Au premier lancement, vous devrez créer un mot de passe pour sécuriser votre compte et vous reconnecter plus tard. Vous verrez ensuite un bref assistant d’intégration pour choisir un modèle, un jeu de données et des paramètres de base. Vous pouvez le passer à tout moment.

Recherchez Qwen3.5 dans la barre de recherche et sélectionnez le modèle et le jeu de données souhaités. Ensuite, ajustez vos hyperparamètres et la longueur du contexte selon vos besoins.

<div data-with-frame="true"><figure><img src="https://550366147-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FKljuGLmIAlo7s8J4LLOc%2FScreenshot%202026-04-02%20at%202.08.54%E2%80%AFAM.png?alt=media&#x26;token=8cb779f7-fbd3-49e5-95e7-cc615558d854" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Surveiller la progression de l’entraînement

Après avoir cliqué sur démarrer l’entraînement, vous pourrez surveiller et observer la progression de l’entraînement du modèle. La perte d’entraînement devrait diminuer régulièrement.\
Une fois terminé, le modèle sera automatiquement enregistré.

<div data-with-frame="true"><figure><img src="https://550366147-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fhm21EMxnAiLJBgP3Tvtq%2FScreenshot%202026-04-02%20at%202.13.21%E2%80%AFAM.png?alt=media&#x26;token=babaecda-2b28-47d8-818b-4a74f4595325" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

#### Exporter votre modèle affiné

Une fois terminé, Unsloth Studio vous permet d’exporter le modèle vers GGUF, safetensor, etc.

<div data-with-frame="true"><figure><img src="https://550366147-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2FZvedfVVAmectHAEHHlGg%2FScreenshot%202026-04-02%20at%202.14.40%E2%80%AFAM.png?alt=media&#x26;token=4ddefe19-657b-4861-86da-cbfd983f75ba" alt="" width="563"><figcaption></figcaption></figure></div>
{% endstep %}
{% endstepper %}

#### Guide Unsloth Core (basé sur le code) :

Ci-dessous se trouve une recette SFT minimale (fonctionne pour l’affinage « texte uniquement »). Voir aussi notre section [d’affinage vision](https://unsloth.ai/docs/fr/bases/vision-fine-tuning) .

{% hint style="info" %}
Qwen3.5 est « Causal Language Model with Vision Encoder » (c’est un VLM unifié), donc assurez-vous d’avoir les dépendances vision habituelles installées (`torchvision`, `pillow`) si nécessaire, et gardez Transformers à jour. Utilisez la dernière version de Transformers pour Qwen3.5.

**Si vous souhaitez faire** [**GRPO**](https://unsloth.ai/docs/fr/commencer/reinforcement-learning-rl-guide)**, cela fonctionne dans Unsloth si vous désactivez l’inférence rapide vLLM et utilisez à la place l’inférence Unsloth. Suivez nos exemples de notebooks** [**Vision RL**](https://unsloth.ai/docs/fr/commencer/reinforcement-learning-rl-guide/vision-reinforcement-learning-vlm-rl) **.**
{% endhint %}

{% code expandable="true" %}

```python
from unsloth import FastLanguageModel
import torch
from datasets import load_dataset
from trl import SFTTrainer, SFTConfig

max_seq_length = 2048  # commencez petit ; augmentez après que cela fonctionne

# Jeu de données d’exemple (remplacez-le par le vôtre). Nécessite une colonne "text".
url = "https://huggingface.co/datasets/laion/OIG/resolve/main/unified_chip2.jsonl"
dataset = load_dataset("json", data_files={"train": url}, split="train")

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "Qwen/Qwen3.5-27B",
    max_seq_length = max_seq_length,
    load_in_4bit = False,     # QLoRA MoE non recommandé, le 27B dense convient
    load_in_16bit = True,     # LoRA bf16/16 bits
    full_finetuning = False,
)

model = FastLanguageModel.get_peft_model(
    model,
    r = 16,
    target_modules = [
        "q_proj", "k_proj", "v_proj", "o_proj",
        "gate_proj", "up_proj", "down_proj",
    ],
    lora_alpha = 16,
    lora_dropout = 0,
    bias = "none",
    # Le checkpointing « unsloth » est destiné aux contextes très longs + VRAM réduite
    use_gradient_checkpointing = "unsloth",
    random_state = 3407,
    max_seq_length = max_seq_length,
)

trainer = SFTTrainer(
    model = model,
    train_dataset = dataset,
    tokenizer = tokenizer,
    args = SFTConfig(
        max_seq_length = max_seq_length,
        per_device_train_batch_size = 1,
        gradient_accumulation_steps = 4,
        warmup_steps = 10,
        max_steps = 100,
        logging_steps = 1,
        output_dir = "outputs_qwen35",
        optim = "adamw_8bit",
        seed = 3407,
        dataset_num_proc = 1,
    ),
)

trainer.train()
```

{% endcode %}

{% hint style="info" %}
Si vous manquez de mémoire (OOM) :

* Réduisez `per_device_train_batch_size` à **1** et/ou réduisez `max_seq_length`.&#x20;
* Conservez `use_`[`gradient_checkpointing`](https://unsloth.ai/docs/fr/blog/500k-context-length-fine-tuning#unsloth-gradient-checkpointing-enhancements)`="unsloth"` activé (il est conçu pour réduire l’utilisation de VRAM et étendre la longueur du contexte).
  {% endhint %}

**Exemple de chargeur pour MoE (LoRA bf16) :**

```python
import os
import torch
from unsloth import FastModel

model, tokenizer = FastModel.from_pretrained(
    model_name = "unsloth/Qwen3.5-35B-A3B",
    max_seq_length = 2048,
    load_in_4bit = False,     # QLoRA MoE non recommandé, le 27B dense convient
    load_in_16bit = True,     # LoRA bf16/16 bits
    full_finetuning = False,
)
```

Une fois chargé, vous ajouterez des adaptateurs LoRA et entraînerez le modèle de manière similaire à l’exemple SFT ci-dessus.

### Affinage visuel

Unsloth prend en charge [d’affinage vision](https://unsloth.ai/docs/fr/bases/vision-fine-tuning) pour les modèles multimodaux Qwen3.5. Utilisez les notebooks Qwen3.5 ci-dessous et remplacez les noms de modèles respectifs par le modèle Qwen3.5 souhaité.

| [Qwen3.5-**0.8B**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_5_\(0_8B\)_Vision.ipynb) | [Qwen3.5-**2B**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_5_\(2B\)_Vision.ipynb) | [Qwen3.5-**4B**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_5_\(4B\)_Vision.ipynb) | Qwen3.5-**9B** |
| --------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------- | -------------- |

* [Notebook RL GRPO/GSPO Qwen3-VL](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_VL_\(8B\)-Vision-GRPO.ipynb) (changez le nom du modèle en Qwen3.5-4B, etc.)

**Désactivation de la vision / affinage texte seul :**

Pour affiner des modèles de vision, nous vous permettons désormais de sélectionner quelles parties du mode affiner. Vous pouvez choisir de n’affiner que les couches de vision, ou les couches de langage, ou les couches d’attention / MLP ! Nous les activons toutes par défaut !

{% code expandable="true" %}

```python
model = FastVisionModel.get_peft_model(
    model,
    finetune_vision_layers     = True, # False si les couches de vision ne sont pas affinées
    finetune_language_layers   = True, # False si les couches de langage ne sont pas affinées
    finetune_attention_modules = True, # False si les couches d’attention ne sont pas affinées
    finetune_mlp_modules       = True, # False si les couches MLP ne sont pas affinées

    r = 16,                           # Plus la valeur est grande, plus la précision est élevée, mais cela peut surapprendre
    lora_alpha = 16,                  # alpha recommandé = r au moins
    lora_dropout = 0,
    bias = "none",
    random_state = 3407,
    use_rslora = False,               # Nous prenons en charge le LoRA à rang stabilisé
    loftq_config = None,               # Et LoftQ
    target_modules = "all-linear",    # Optionnel maintenant ! Peut spécifier une liste si nécessaire
    modules_to_save=[
        "lm_head",
        "embed_tokens",
    ],
)
```

{% endcode %}

Afin d’affiner ou d’entraîner Qwen3.5 avec plusieurs images, consultez notre [**guide vision multi-images**](https://unsloth.ai/docs/fr/bases/vision-fine-tuning#multi-image-training)**.**

### Apprentissage par renforcement (RL)

Vous pouvez désormais entraîner Qwen3.5 avec RL, GSPO, GRPO, etc. avec [notre notebook gratuit](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_5_\(4B\)_Vision_GRPO.ipynb):

{% embed url="<https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_5_(4B)_Vision_GRPO.ipynb>" %}

Vous pouvez exécuter Qwen3.5 RL avec Unsloth même s’il n’est pas pris en charge par vLLM, en définissant `fast_inference=False` lors du chargement du modèle :

```python
from unsloth import FastLanguageModel

model, tokenizer = FastLanguageModel.from_pretrained(
    model_name="unsloth/Qwen3.5-4B",
    fast_inference=False,
)
```

### Enregistrement / export du modèle affiné

Vous pouvez consulter nos guides spécifiques d’inférence / déploiement pour [Unsloth Studio](https://unsloth.ai/docs/fr/nouveau/studio/export), [llama.cpp](https://unsloth.ai/docs/fr/bases/inference-and-deployment/saving-to-gguf), [vLLM](https://unsloth.ai/docs/fr/bases/inference-and-deployment/vllm-guide), [llama-server](https://unsloth.ai/docs/fr/bases/inference-and-deployment/llama-server-and-openai-endpoint), [Ollama](https://unsloth.ai/docs/fr/bases/inference-and-deployment/saving-to-ollama).

#### Enregistrer en GGUF

Unsloth prend en charge l’enregistrement direct en GGUF :

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

Ou poussez les GGUF vers 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")
```

Si le modèle exporté se comporte moins bien dans un autre environnement d’exécution, Unsloth signale la cause la plus fréquente : **mauvais modèle de conversation / jeton EOS au moment de l’inférence** (vous devez utiliser le même modèle de conversation que celui avec lequel vous avez entraîné).

#### Enregistrer vers vLLM

{% hint style="warning" %}
version de vLLM `0.16.0` ne prend pas en charge Qwen3.5. Attendez jusqu’à `0.170` ou essayez la version Nightly.
{% endhint %}

Pour enregistrer en 16 bits pour vLLM, utilisez :

{% code overflow="wrap" %}

```python
model.save_pretrained_merged("finetuned_model", tokenizer, save_method = "merged_16bit")
## OU pour téléverser vers HuggingFace :
model.push_to_hub_merged("hf/model", tokenizer, save_method = "merged_16bit", token = "")
```

{% endcode %}

Pour enregistrer uniquement les adaptateurs LoRA, utilisez soit :

```python
model.save_pretrained("finetuned_lora")
tokenizer.save_pretrained("finetuned_lora")
```

Ou utilisez notre fonction intégrée :

{% code overflow="wrap" %}

```python
model.save_pretrained_merged("finetuned_model", tokenizer, save_method = "lora")
## OU pour téléverser vers HuggingFace
model.push_to_hub_merged("hf/model", tokenizer, save_method = "lora", token = "")
```

{% endcode %}

Pour plus de détails, lisez nos guides d’inférence :

{% columns %}
{% column width="50%" %}
{% content-ref url="../../bases/inference-and-deployment" %}
[inference-and-deployment](https://unsloth.ai/docs/fr/bases/inference-and-deployment)
{% endcontent-ref %}

{% content-ref url="../../bases/inference-and-deployment/saving-to-gguf" %}
[saving-to-gguf](https://unsloth.ai/docs/fr/bases/inference-and-deployment/saving-to-gguf)
{% endcontent-ref %}
{% endcolumn %}

{% column width="50%" %}
{% content-ref url="../../nouveau/studio/export" %}
[export](https://unsloth.ai/docs/fr/nouveau/studio/export)
{% endcontent-ref %}

{% content-ref url="../../bases/inference-and-deployment/vllm-guide" %}
[vllm-guide](https://unsloth.ai/docs/fr/bases/inference-and-deployment/vllm-guide)
{% endcontent-ref %}
{% endcolumn %}
{% endcolumns %}
