# DeepSeek-OCR : comment l'exécuter et le fine-tuner

**DeepSeek-OCR** est un modèle de vision de 3 milliards de paramètres pour la reconnaissance optique de caractères (OCR) et la compréhension de documents. Il utilise *compression optique contextuelle* pour convertir des mises en page 2D en tokens visuels, permettant un traitement efficace des contextes longs.

Capable de gérer les tableaux, les articles et l'écriture manuscrite, DeepSeek-OCR atteint 97 % de précision tout en utilisant 10× moins de tokens visuels que de tokens textuels - ce qui le rend 10× plus efficace que les LLM basés sur du texte.

Vous pouvez affiner DeepSeek-OCR pour améliorer ses performances visuelles ou linguistiques. Dans notre Unsloth [**carnet d'affinage gratuit**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Deepseek_OCR_\(3B\).ipynb), nous avons démontré une [amélioration de 88,26 %](#fine-tuning-deepseek-ocr) pour la compréhension du langage.

<a href="#running-deepseek-ocr" class="button primary">Exécution de DeepSeek-OCR</a><a href="#fine-tuning-deepseek-ocr" class="button primary">Affinage de DeepSeek-OCR</a>

> **Notre upload de modèle qui permet l'affinage + plus de support d'inférence :** [**DeepSeek-OCR**](https://huggingface.co/unsloth/DeepSeek-OCR)

## 🖥️ **Exécution de DeepSeek-OCR**

Pour exécuter le modèle dans [vLLM](#vllm-run-deepseek-ocr-tutorial) ou [Unsloth](#unsloth-run-deepseek-ocr-tutorial), voici les paramètres recommandés :

### :gear: Paramètres recommandés

DeepSeek recommande ces paramètres :

* <mark style="background-color:blue;">**Température = 0.0**</mark>
* `max_tokens = 8192`
* `ngram_size = 30`
* `window_size = 90`

### 📖 vLLM : Tutoriel d'exécution de DeepSeek-OCR

1. Obtenez le dernier `vLLM` via :

```bash
uv venv
source .venv/bin/activate
# Jusqu'à la version v0.11.1, vous devez installer vLLM depuis la build nightly
uv pip install -U vllm --pre --extra-index-url https://wheels.vllm.ai/nightly
```

2. Ensuite, exécutez le code suivant :

{% code overflow="wrap" %}

```python
from vllm import LLM, SamplingParams
from vllm.model_executor.models.deepseek_ocr import NGramPerReqLogitsProcessor
from PIL import Image

# Créer une instance du modèle
llm = LLM(
    model="unsloth/DeepSeek-OCR",
    enable_prefix_caching=False,
    mm_processor_cache_gb=0,
    logits_processors=[NGramPerReqLogitsProcessor],
)

# Préparer une entrée par lot avec votre fichier image
image_1 = Image.open("path/to/your/image_1.png").convert("RGB")
image_2 = Image.open("path/to/your/image_2.png").convert("RGB")
prompt = "<image>\nOCR libre."

model_input = [
    {
        "prompt": prompt,
        "multi_modal_data": {"image": image_1}
    },
    {
        "prompt": prompt,
        "multi_modal_data": {"image": image_2}
    }
]

sampling_param = SamplingParams(
    temperature=0.0,
    max_tokens=8192,
    # arguments du processeur de logits ngram
    extra_args=dict(
        ngram_size=30,
        window_size=90,
        whitelist_token_ids={128821, 128822},  # liste blanche : <td>, </td>
    ),
    skip_special_tokens=False,
)
# Générer la sortie
model_outputs = llm.generate(model_input, sampling_param)

# Imprimer la sortie
for output in model_outputs:
    print(output.outputs[0].text)
```

{% endcode %}

### 🦥 Unsloth : Tutoriel d'exécution de DeepSeek-OCR

1. Obtenez le dernier `unsloth` via `pip install --upgrade unsloth` . Si vous avez déjà Unsloth, mettez-le à jour via `pip install --upgrade --force-reinstall --no-deps --no-cache-dir unsloth unsloth_zoo`
2. Ensuite, utilisez le code ci-dessous pour exécuter DeepSeek-OCR :

{% code overflow="wrap" %}

```python
from unsloth import FastVisionModel
import torch
from transformers import AutoModel
import os
os.environ["UNSLOTH_WARN_UNINITIALIZED"] = '0'

from huggingface_hub import snapshot_download
snapshot_download("unsloth/DeepSeek-OCR", local_dir = "deepseek_ocr")
model, tokenizer = FastVisionModel.from_pretrained(
    "./deepseek_ocr",
    load_in_4bit = False, # Use 4bit to reduce memory use. False for 16bit LoRA.
    auto_model = AutoModel,
    trust_remote_code = True,
    unsloth_force_compile = True,
    use_gradient_checkpointing = "unsloth", # True or "unsloth" for long context
)

prompt = "<image>\nFree OCR. "
image_file = 'your_image.jpg'
output_path = 'your/output/dir'
res = model.infer(tokenizer, prompt=prompt, image_file=image_file, output_path = output_path, base_size = 1024, image_size = 640, crop_mode=True, save_results = True, test_compress = False)
```

{% endcode %}

## 🦥 **Affinage de DeepSeek-OCR**

Unsloth prend en charge l'affinage de DeepSeek-OCR. Étant donné que le modèle par défaut n'est pas exécutable sur la dernière `transformers` version, nous avons ajouté les modifications de l'équipe [Stranger Vision HF](https://huggingface.co/strangervisionhf) pour ensuite permettre l'inférence. Comme d'habitude, Unsloth entraîne DeepSeek-OCR 1,4× plus vite avec 40 % de VRAM en moins et des longueurs de contexte 5× plus grandes - sans dégradation de la précision.\
\
Nous avons créé deux notebooks Colab DeepSeek-OCR gratuits (avec et sans évaluation) :

* DeepSeek-OCR : [Carnet uniquement pour l'affinage](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Deepseek_OCR_\(3B\).ipynb)
* DeepSeek-OCR : [Notebook d'affinage + évaluation](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Deepseek_OCR_\(3B\)-Eval.ipynb) (A100)

L'affinage de DeepSeek-OCR sur un échantillon de 200K en persan a entraîné des gains substantiels dans la détection et la compréhension du texte persan. Nous avons évalué le modèle de base par rapport à notre version affinée sur 200 échantillons de transcriptions persanes, observant une **amélioration absolue de 88,26 %** dans le taux d'erreur de caractères (CER). Après seulement 60 étapes d'entraînement (taille de lot = 8), le CER moyen a diminué de **149.07%** pour atteindre une moyenne de **60.81%**. Cela signifie que le modèle affiné est **57%** plus précis pour comprendre le persan.

Vous pouvez remplacer le jeu de données persan par le vôtre pour améliorer DeepSeek-OCR pour d'autres cas d'utilisation.\
\
Pour les résultats d'éval replica-table, utilisez notre notebook d'éval ci-dessus. Pour des résultats d'éval détaillés, voir ci-dessous :

### Résultats de l'évaluation du modèle affiné :

{% columns fullWidth="true" %}
{% column %}
**DeepSeek-OCR Baseline**

Performance moyenne du modèle de base : 149,07 % de CER pour cet ensemble d'évaluation !

```
============================================================
Performance du modèle de base
============================================================
Nombre d'échantillons : 200
CER moyen : 149,07 %
CER médian : 80,00 %
Écart-type : 310,39 %
CER min : 0,00 %
CER max : 3500,00 %
============================================================

 Meilleures prédictions (CER le plus bas) :

Échantillon 5024 (CER : 0,00 %)
Référence :  چون هستی خیلی زیاد...
Prédiction : چون هستی خیلی زیاد...

Échantillon 3517 (CER : 0,00 %)
Référence :  تو ایران هیچوقت از اینها وجود نخواهد داشت...
Prédiction : تو ایران هیچوقت از اینها وجود نخواهد داشت...

Échantillon 9949 (CER : 0,00 %)
Référence :  کاش میدونستم هیچی بیخیال...
Prédiction : کاش میدونستم هیچی بیخیال...

 Pires prédictions (CER le plus élevé) :

Échantillon 11155 (CER : 3500,00 %)
Référence :  خسو...
Prédiction : \[ \text{CH}_3\text{CH}_2\text{CH}_2\text{CH}_2\text{CH}_2\text{CH}_2\text{CH}_2\text{CH}_2\text{CH}...

Échantillon 13366 (CER : 1900,00 %)
Référence :  مشو...
Prédiction : \[\begin{align*}\underline{\mathfrak{su}}_0\end{align*}\]...

Échantillon 10552 (CER : 1014,29 %)
Référence :  هیییییچ...
Prédiction : e
```

{% endcolumn %}

{% column %}
**DeepSeek-OCR Affiné**

En 60 étapes, nous avons réduit le CER de 149,07 % à 60,43 % (amélioration du CER de 89 %)

<pre><code><strong>============================================================
</strong>Performance du modèle affiné
============================================================
Nombre d'échantillons : 200
CER moyen : 60,43 %
CER médian : 50,00 %
Écart-type : 80,63 %
CER min : 0,00 %
CER max : 916,67 %
============================================================

 Meilleures prédictions (CER le plus bas) :

Échantillon 301 (CER : 0,00 %)
Référence :  باشه بابا تو لاکچری، تو خاص، تو خفن...
Prédiction : باشه بابا تو لاکچری، تو خاص، تو خفن...

Échantillon 2512 (CER : 0,00 %)
Référence :  از شخص حاج عبدالله زنجبیلی میگیرنش...
Prédiction : از شخص حاج عبدالله زنجبیلی میگیرنش...

Échantillon 2713 (CER : 0,00 %)
Référence :  نمی دونم والا تحمل نقد ندارن ظاهرا...
Prédiction : نمی دونم والا تحمل نقد ندارن ظاهرا...

 Pires prédictions (CER le plus élevé) :

Échantillon 14270 (CER : 916,67 %)
Référence :  ۴۳۵۹۴۷۴۷۳۸۹۰...
Prédiction : پروپریپریپریپریپریپریپریپریپریپریپریپریپریپریپریپریپریپیپریپریپریپریپریپریپریپریپریپریپریپر...

Échantillon 3919 (CER : 380,00 %)
Référence :  ۷۵۵۰۷۱۰۶۵۹...
Prédiction : وادووووووووووووووووووووووووووووووووووو...

Échantillon 3718 (CER : 333,33 %)
Référence :  ۳۲۶۷۲۲۶۵۵۸۴۶...
Prédiction : پُپُسوپُسوپُسوپُسوپُسوپُسوپُسوپُسوپُسوپُ...
</code></pre>

{% endcolumn %}
{% endcolumns %}

Un exemple tiré du jeu de données persan de 200K que nous avons utilisé (vous pouvez utiliser le vôtre), montrant l'image à gauche et le texte correspondant à droite.

<figure><img src="https://550366147-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FxhOjnexMCB3dmuQFQ2Zq%2Fuploads%2Fgit-blob-2afa75f90055db094d5cae1c635b200c05e97aac%2FScreenshot%202025-11-04%20at%206.10.16%E2%80%AFAM.png?alt=media" alt="" width="563"><figcaption></figcaption></figure>


---

# 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/deepseek-ocr-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.
