# DeepSeek-OCR: Wie man ausführt und feinabstimmt

**DeepSeek-OCR** ist ein 3B-Parameter-Vision-Modell für OCR und Dokumentenverständnis. Es verwendet *kontextuelle optische Kompression* um 2D-Layouts in Vision-Token zu konvertieren und so eine effiziente Verarbeitung langer Kontexte zu ermöglichen.

DeepSeek-OCR kann Tabellen, wissenschaftliche Arbeiten und Handschrift verarbeiten und erreicht 97% Präzision, während es 10× weniger Vision-Token als Text-Token verwendet – wodurch es 10× effizienter ist als textbasierte LLMs.

Sie können DeepSeek-OCR feinabstimmen, um seine visuellen oder sprachlichen Leistungen zu verbessern. In unserem Unsloth [**kostenloses Fine‑Tuning‑Notebook**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Deepseek_OCR_\(3B\).ipynb), haben wir ein [88,26%ige Verbesserung](#fine-tuning-deepseek-ocr) für Sprachverständnis.

<a href="#running-deepseek-ocr" class="button primary">DeepSeek-OCR ausführen</a><a href="#fine-tuning-deepseek-ocr" class="button primary">DeepSeek-OCR feinabstimmen</a>

> **Unser Modell-Upload, der Feinabstimmung + erweiterte Inferenzunterstützung ermöglicht:** [**DeepSeek-OCR**](https://huggingface.co/unsloth/DeepSeek-OCR)

## 🖥️ **DeepSeek-OCR ausführen**

Um das Modell in [vLLM](#vllm-run-deepseek-ocr-tutorial) oder [Unsloth](#unsloth-run-deepseek-ocr-tutorial)auszuführen, hier die empfohlenen Einstellungen:

### :gear: Empfohlene Einstellungen

DeepSeek empfiehlt diese Einstellungen:

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

### 📖 vLLM: DeepSeek-OCR Tutorial ausführen

1. Holen Sie sich die neueste `vLLM` via:

```bash
uv venv
source .venv/bin/activate
# Bis zur Version v0.11.1 müssen Sie vLLM aus dem Nightly-Build installieren
uv pip install -U vllm --pre --extra-index-url https://wheels.vllm.ai/nightly
```

2. Führen Sie dann den folgenden Code aus:

{% code overflow="wrap" %}

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

# Modellinstanz erstellen
llm = LLM(
    model="unsloth/DeepSeek-OCR",
    enable_prefix_caching=False,
    mm_processor_cache_gb=0,
    logits_processors=[NGramPerReqLogitsProcessor],
)

# Gepackte Eingabe mit Ihrer Bilddatei vorbereiten
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>\nKostenlose OCR."

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,
    # ngram-logit-processor-Argumente
    extra_args=dict(
        ngram_size=30,
        window_size=90,
        whitelist_token_ids={128821, 128822},  # Whitelist: <td>, </td>
    ),
    skip_special_tokens=False,
)
# Ausgabe generieren
model_outputs = llm.generate(model_input, sampling_param)

# Ausgabe drucken
for output in model_outputs:
    print(output.outputs[0].text)
```

{% endcode %}

### 🦥 Unsloth: DeepSeek-OCR Tutorial ausführen

1. Holen Sie sich die neueste `unsloth` über `pip install --upgrade unsloth` . Wenn Sie Unsloth bereits installiert haben, aktualisieren Sie es über `pip install --upgrade --force-reinstall --no-deps --no-cache-dir unsloth unsloth_zoo`
2. Verwenden Sie dann den untenstehenden Code, um DeepSeek-OCR auszuführen:

{% 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, # Verwenden Sie 4bit, um Speicher zu reduzieren. False für 16bit LoRA.
    auto_model = AutoModel,
    trust_remote_code = True,
    unsloth_force_compile = True,
    use_gradient_checkpointing = "unsloth", # True oder "unsloth" für langen Kontext
)

prompt = "<image>\nFreie 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 %}

## 🦥 **DeepSeek-OCR feinabstimmen**

Unsloth unterstützt die Feinabstimmung von DeepSeek-OCR. Da das Standardmodell in der neuesten `transformers` Version nicht lauffähig ist, haben wir Änderungen vom [Stranger Vision HF](https://huggingface.co/strangervisionhf) Team hinzugefügt, um dann Inferenz zu ermöglichen. Wie üblich trainiert Unsloth DeepSeek-OCR 1,4× schneller mit 40% weniger VRAM und 5× längeren Kontextlängen – ohne Genauigkeitsverlust.\
\
Wir haben zwei kostenlose DeepSeek-OCR Colab-Notebooks erstellt (mit und ohne Evaluation):

* DeepSeek-OCR: [Nur Fine‑Tuning‑Notebook](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Deepseek_OCR_\(3B\).ipynb)
* DeepSeek-OCR: [Feinabstimmung + Evaluations-Notebook](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Deepseek_OCR_\(3B\)-Eval.ipynb) (A100)

Die Feinabstimmung von DeepSeek-OCR auf einem persischen Datensatz mit 200K Beispielen führte zu erheblichen Verbesserungen bei der Erkennung und dem Verständnis persischer Texte. Wir haben das Basismodell gegen unsere feinabgestimmte Version an 200 persischen Transkriptproben bewertet und eine **88,26% absolute Verbesserung** im Character Error Rate (CER). Nach nur 60 Trainingsschritten (Batchgröße = 8) sank der mittlere CER von **149.07%** auf einen Mittelwert von **60.81%**. Das bedeutet, dass das feinabgestimmte Modell **57%** genauer im Verständnis des Persischen ist.

Sie können den persischen Datensatz durch Ihren eigenen ersetzen, um DeepSeek-OCR für andere Anwendungsfälle zu verbessern.\
\
Für replica-table Eval-Ergebnisse verwenden Sie unser oben genanntes Eval-Notebook. Für detaillierte Eval-Ergebnisse siehe unten:

### Ergebnisse der feinabgestimmten Evaluation:

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

Durchschnittliche Basismodell-Leistung: 149,07% CER für diesen Eval-Datensatz!

```
============================================================
Leistung des Basismodells
============================================================
Anzahl der Proben: 200
Mittlerer CER: 149,07%
Median CER: 80,00%
Std. Abweichung: 310,39%
Min. CER: 0,00%
Max. CER: 3500,00%
============================================================

 Beste Vorhersagen (niedrigster CER):

Probe 5024 (CER: 0,00%)
Referenz:  چون هستی خیلی زیاد...
Vorhersage: چون هستی خیلی زیاد...

Probe 3517 (CER: 0,00%)
Referenz:  تو ایران هیچوقت از اینها وجود نخواهد داشت...
Vorhersage: تو ایران هیچوقت از اینها وجود نخواهد داشت...

Probe 9949 (CER: 0,00%)
Referenz:  کاش میدونستم هیچی بیخیال...
Vorhersage: کاش میدونستم هیچی بیخیال...

 Schlechteste Vorhersagen (höchster CER):

Probe 11155 (CER: 3500,00%)
Referenz:  خسو...
Vorhersage: \[ \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}...

Probe 13366 (CER: 1900,00%)
Referenz:  مشو...
Vorhersage: \[\begin{align*}\underline{\mathfrak{su}}_0\end{align*}\]...

Probe 10552 (CER: 1014,29%)
Referenz:  هیییییچ...
Vorhersage: e
```

{% endcolumn %}

{% column %}
**DeepSeek-OCR feinabgestimmt**

Mit 60 Schritten haben wir den CER von 149,07% auf 60,43% reduziert (89% CER-Verbesserung)

<pre><code><strong>============================================================
</strong>Leistung des feinabgestimmten Modells
============================================================
Anzahl der Proben: 200
Mittlerer CER: 60,43%
Median CER: 50,00%
Std. Abweichung: 80,63%
Min. CER: 0,00%
Max. CER: 916,67%
============================================================

 Beste Vorhersagen (niedrigster CER):

Probe 301 (CER: 0,00%)
Referenz:  باشه بابا تو لاکچری، تو خاص، تو خفن...
Vorhersage: باشه بابا تو لاکچری، تو خاص، تو خفن...

Probe 2512 (CER: 0,00%)
Referenz:  از شخص حاج عبدالله زنجبیلی میگیرنش...
Vorhersage: از شخص حاج عبدالله زنجبیلی میگیرنش...

Probe 2713 (CER: 0,00%)
Referenz:  نمی دونم والا تحمل نقد ندارن ظاهرا...
Vorhersage: نمی دونم والا تحمل نقد ندارن ظاهرا...

 Schlechteste Vorhersagen (höchster CER):

Probe 14270 (CER: 916,67%)
Referenz:  ۴۳۵۹۴۷۴۷۳۸۹۰...
Vorhersage: پروپریپریپریپریپریپریپریپریپریپریپریپریپریپریپریپریپریپیپریپریپریپریپریپریپریپریپریپریپریپریپریپریپر...

Probe 3919 (CER: 380,00%)
Referenz:  ۷۵۵۰۷۱۰۶۵۹...
Vorhersage: وادووووووووووووووووووووووووووووووووووو...

Probe 3718 (CER: 333,33%)
Referenz:  ۳۲۶۷۲۲۶۵۵۸۴۶...
Vorhersage: پُپُسوپُسوپُسوپُسوپُسوپُسوپُسوپُسوپُسوپُ...
</code></pre>

{% endcolumn %}
{% endcolumns %}

Ein Beispiel aus dem persischen Datensatz mit 200K Beispielen, den wir verwendet haben (Sie können Ihren eigenen verwenden), das das Bild links und den entsprechenden Text rechts zeigt.

<figure><img src="/files/af5881fa36921a500f7d56e3042c6ed5019cf568" 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/de/modelle/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.
