> ## Documentation Index
> Fetch the complete documentation index at: https://docsmlx.otterly.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Guide LoRA Fine-Tuning

> Adapter un LLM avec LoRA dans MLX sans réentraîner tous les poids

**LoRA** est souvent la première technique à essayer quand vous voulez adapter un LLM localement. L'idée est simple : vous n'entraînez pas tout le modèle. Vous ajoutez un petit nombre de paramètres entraînables qui modifient son comportement.

Pour un développeur moyen, c'est l'approche la plus réaliste pour commencer un fine-tuning sur Mac.

***

## Pourquoi LoRA est utile

LoRA permet de :

* réduire la mémoire nécessaire
* raccourcir le temps d'entraînement
* garder le modèle de base intact
* partager seulement les adaptateurs si besoin

Concrètement, vous conservez le modèle d'origine et vous ajoutez des adaptateurs que vous pouvez charger ou fusionner plus tard.

***

## Étape 1 : préparer l'environnement

```bash theme={null}
python -m venv .venv
source .venv/bin/activate
pip install -U mlx-lm pandas huggingface_hub "huggingface_hub[cli]"
```

***

## Étape 2 : préparer le dataset

Créez au minimum :

```text theme={null}
data/
├── train.jsonl
└── valid.jsonl
```

Si vous partez de zéro, lisez d'abord [Préparer vos données](/mlx/fine-tuning/dataset-preparation).

***

## Étape 3 : lancer un premier entraînement

```bash theme={null}
mlx_lm.lora \
  --model mlx-community/Phi-3.5-mini-instruct-4bit \
  --train \
  --data ./data \
  --adapter-path ./adapters \
  --iters 200 \
  --batch-size 1 \
  --lora-layers 8
```

Ce premier run sert à valider le pipeline, pas à chercher la configuration parfaite.

<Tip>
  Commencez avec un modèle compact et un petit nombre d'itérations. Vous apprendrez plus vite qu'en lançant tout de suite un entraînement long sur un gros modèle.
</Tip>

***

## Les paramètres qui comptent vraiment au début

| Paramètre        | À retenir                                                      |
| ---------------- | -------------------------------------------------------------- |
| `--model`        | Choisissez un modèle que votre machine peut charger facilement |
| `--data`         | Dossier contenant `train.jsonl` et idéalement `valid.jsonl`    |
| `--iters`        | Commencez bas, puis augmentez si les résultats le justifient   |
| `--batch-size`   | Réduisez-le si la mémoire pose problème                        |
| `--lora-layers`  | Plus il est élevé, plus le coût monte                          |
| `--adapter-path` | Dossier où seront écrits les adaptateurs                       |

***

## Étape 4 : tester les adaptateurs

Une fois l'entraînement terminé, testez le modèle avec les adaptateurs :

```bash theme={null}
mlx_lm.generate \
  --model mlx-community/Phi-3.5-mini-instruct-4bit \
  --adapter-path ./adapters \
  --prompt "Explique LoRA à un développeur Swift."
```

Comparez ensuite avec le modèle de base. La bonne question n'est pas "est-ce que la sortie est impressionnante ?", mais plutôt "est-ce que le comportement s'est rapproché de mon besoin ?"

***

## Étape 5 : fusionner si nécessaire

Si vous voulez obtenir un artefact unique plutôt qu'un modèle + des adaptateurs séparés :

```bash theme={null}
mlx_lm.fuse \
  --model mlx-community/Phi-3.5-mini-instruct-4bit \
  --adapter-path ./adapters \
  --save-path ./my-finetuned-model
```

Vous pouvez ensuite utiliser ce dossier comme un modèle local classique.

***

## Comment lire les résultats pendant l'entraînement

Surveillez surtout :

* la `train loss`
* la `val loss`
* la stabilité générale de l'entraînement

Si la perte d'entraînement baisse mais que la validation se dégrade, vous êtes probablement en train de suradapter le modèle à vos données.

***

## Bonnes pratiques simples

* commencez avec un modèle petit ou moyen
* testez votre dataset avant tout entraînement long
* gardez une validation séparée
* comparez toujours le modèle de base et le modèle adapté
* ne changez pas dix paramètres à la fois

***

## Quand passer à QLoRA

Passez à [QLoRA](/mlx/fine-tuning/qlora-guide) si :

* la mémoire devient votre contrainte principale
* vous voulez fine-tuner directement un modèle quantifié
* vous devez rester sur une machine plus limitée

***

<CardGroup cols={2}>
  <Card title="QLoRA" icon="microchip" href="/mlx/fine-tuning/qlora-guide">
    Réduire encore le coût mémoire.
  </Card>

  <Card title="Préparer vos données" icon="database" href="/mlx/fine-tuning/dataset-preparation">
    Revoir le dataset avant d'entraîner.
  </Card>
</CardGroup>
