# Fehlerbehebung & FAQs

Falls Sie weiterhin Probleme mit Versionen oder Abhängigkeiten haben, verwenden Sie bitte unser [Docker-Image](/docs/de/loslegen/install/docker.md) das bereits alles vorinstalliert hat.

{% hint style="success" %}
**Versuchen Sie immer, Unsloth zu aktualisieren, wenn Sie Probleme feststellen.**

`pip install --upgrade --force-reinstall --no-cache-dir --no-deps unsloth unsloth_zoo`
{% endhint %}

### Ein neues Modell feinabstimmen, das von Unsloth nicht unterstützt wird?

Unsloth funktioniert mit jedem Modell, das unterstützt wird von `transformers`. Wenn ein Modell nicht in unseren Uploads enthalten ist oder nicht sofort funktioniert, wird es in der Regel dennoch unterstützt; einige neuere Modelle benötigen aufgrund unserer Optimierungen möglicherweise nur eine kleine manuelle Anpassung.

In den meisten Fällen können Sie die Kompatibilität aktivieren, indem Sie `trust_remote_code=True` in Ihrem Fine-Tuning-Skript setzen. Hier ist ein Beispiel mit [DeepSeek-OCR](/docs/de/modelle/tutorials/deepseek-ocr-how-to-run-and-fine-tune.md):

<pre class="language-python" data-expandable="true"><code class="lang-python">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 den Speicherverbrauch zu reduzieren. False für 16bit LoRA.
    auto_model = AutoModel,
    <a data-footnote-ref href="#user-content-fn-1">trust_remote_code = True</a>, # Aktivieren, um neue Modelle zu unterstützen
    unsloth_force_compile = True,
    use_gradient_checkpointing = "unsloth", # True oder "unsloth" für langen Kontext
)
</code></pre>

### Die Ausführung in Unsloth funktioniert gut, aber nach dem Export und der Ausführung auf anderen Plattformen sind die Ergebnisse schlecht

Es kann vorkommen, dass Ihr Modell in Unsloth läuft und gute Ergebnisse liefert, aber wenn Sie es auf einer anderen Plattform wie Ollama oder vLLM verwenden, sind die Ergebnisse schlecht oder Sie erhalten Kauderwelsch, endlose/unendliche Generierungen *oder* wiederholte Ausgabe&#x6E;**.**

* Die häufigste Ursache für diesen Fehler ist die Verwendung eines <mark style="background-color:blue;">**falschen Chat-Templates**</mark>**.** Es ist wichtig, dass Sie dasselbe Chat-Template verwenden, das beim Training des Modells in Unsloth und später bei der Ausführung in einem anderen Framework wie llama.cpp oder Ollama verwendet wurde. Beim Inferenzieren mit einem gespeicherten Modell ist es entscheidend, das richtige Template anzuwenden.
* Es könnte auch daran liegen, dass Ihre Inferenz-Engine ein unnötiges Token für den „Anfang der Sequenz“ hinzufügt (oder umgekehrt fehlt dieses). Prüfen Sie also beide Hypothesen!
* <mark style="background-color:green;">**Verwenden Sie unsere Konversations-Notebooks, um das Chat-Template zu erzwingen – das behebt die meisten Probleme.**</mark>
  * Qwen-3 14B Konversations-Notebook [**In Colab öffnen**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Qwen3_\(14B\)-Reasoning-Conversational.ipynb)
  * Gemma-3 4B Konversations-Notebook [**In Colab öffnen**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Gemma3_\(4B\).ipynb)
  * Llama-3.2 3B Konversations-Notebook [**In Colab öffnen**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Llama3.2_\(1B_and_3B\)-Conversational.ipynb)
  * Phi-4 14B Konversations-Notebook [**In Colab öffnen**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Phi_4-Conversational.ipynb)
  * Mistral v0.3 7B Konversations-Notebook [**In Colab öffnen**](https://colab.research.google.com/github/unslothai/notebooks/blob/main/nb/Mistral_v0.3_\(7B\)-Conversational.ipynb)
  * **Weitere Notebooks in unseren** [**Notebook-Dokumentationen**](/docs/de/loslegen/unsloth-notebooks.md)

### Speichern nach GGUF / vLLM 16bit stürzt ab

Sie können versuchen, die maximale GPU-Auslastung während des Speicherns zu verringern, indem Sie `maximum_memory_usage`.

Der Standardwert ist `model.save_pretrained(..., maximum_memory_usage = 0.75)`. Reduzieren Sie ihn beispielsweise auf 0.5, um 50 % des maximalen GPU-Speichers zu nutzen, oder noch weniger. Das kann OOM-Abstürze während des Speicherns reduzieren.

### Wie speichere ich manuell nach GGUF?

Speichern Sie Ihr Modell zunächst in 16bit über:

```python
model.save_pretrained_merged("merged_model", tokenizer, save_method = "merged_16bit",)
```

Kompilieren Sie llama.cpp aus dem Quellcode wie unten gezeigt:

```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=ON -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
```

Speichern Sie dann das Modell als F16:

```bash
python llama.cpp/convert_hf_to_gguf.py merged_model \
    --outfile model-F16.gguf --outtype f16 \
    --split-max-size 50G
```

```bash
# Für BF16:
python llama.cpp/convert_hf_to_gguf.py merged_model \
    --outfile model-BF16.gguf --outtype bf16 \
    --split-max-size 50G
    
# Für Q8_0:
python llama.cpp/convert_hf_to_gguf.py merged_model \
    --outfile model-Q8_0.gguf --outtype q8_0 \
    --split-max-size 50G
```

### Warum ist Q8\_K\_XL langsamer als Q8\_0 GGUF?

Auf Mac-Geräten scheint BF16 langsamer zu sein als F16. Q8\_K\_XL wandelt einige Schichten auf BF16 hoch, daher die Verlangsamung. Wir ändern derzeit aktiv unseren Konvertierungsprozess, um F16 als Standardwahl für Q8\_K\_XL festzulegen und Leistungseinbußen zu reduzieren.

### Wie führt man die Evaluation durch

Um die Evaluation in Ihrem Trainingslauf einzurichten, müssen Sie zuerst Ihren Datensatz in einen Trainings- und einen Test-Split aufteilen. Sie sollten <mark style="background-color:green;">**die Auswahl des Datensatzes immer mischen**</mark>, sonst ist Ihre Evaluation falsch!

```python
new_dataset = dataset.train_test_split(
    test_size = 0.01, # 1 % für die Testgröße; kann auch eine ganze Zahl für die # der Zeilen sein
    shuffle = True, # Sollte immer auf True gesetzt werden!
    seed = 3407,
)

train_dataset = new_dataset["train"] # Datensatz für das Training
eval_dataset = new_dataset["test"] # Datensatz für die Evaluation
```

Dann können wir die Trainingsargumente so setzen, dass die Evaluation aktiviert wird. Hinweis: Die Evaluation kann sehr, sehr langsam sein, besonders wenn Sie `eval_steps = 1` setzen, was bedeutet, dass Sie bei jedem einzelnen Schritt evaluieren. Falls ja, versuchen Sie, die Größe von eval\_dataset auf beispielsweise 100 Zeilen oder so zu reduzieren.

```python
from trl import SFTTrainer, SFTConfig
trainer = SFTTrainer(
    args = SFTConfig(
        fp16_full_eval = True,         # Setzen Sie dies, um die Speichernutzung zu reduzieren
        per_device_eval_batch_size = 2,# Eine Erhöhung dieses Werts verwendet mehr Speicher
        eval_accumulation_steps = 4,   # Sie können diesen Wert erhöhen, einschließlich der Batch-Größe
        eval_strategy = "steps",       # Führt die Evaluation alle paar Schritte oder Epochen aus.
        eval_steps = 1,                # Wie viele Evaluierungen pro # Trainingsschritte durchgeführt werden
    ),
    train_dataset = new_dataset["train"],
    eval_dataset = new_dataset["test"],
    ...
)
trainer.train()
```

### Evaluation Loop - Kein Speicher mehr oder Absturz.

Ein häufiges Problem bei OOM ist, dass Sie die Batch-Größe zu hoch gesetzt haben. Setzen Sie sie auf unter 2, um weniger VRAM zu verwenden. Verwenden Sie außerdem `fp16_full_eval=True` um float16 für die Evaluation zu verwenden, wodurch der Speicherbedarf um die Hälfte reduziert wird.

Teilen Sie zunächst Ihren Trainingsdatensatz in einen Train- und einen Test-Split auf. Setzen Sie dann die Trainer-Einstellungen für die Evaluation auf:

```python
new_dataset = dataset.train_test_split(test_size = 0.01)

from trl import SFTTrainer, SFTConfig
trainer = SFTTrainer(
    args = SFTConfig(
        fp16_full_eval = True,
        per_device_eval_batch_size = 2,
        eval_accumulation_steps = 4,
        eval_strategy = "steps",
        eval_steps = 1,
    ),
    train_dataset = new_dataset["train"],
    eval_dataset = new_dataset["test"],
    ...
)
```

Dies verursacht keine OOMs und macht es etwas schneller. Sie können auch `bf16_full_eval=True` für bf16-Maschinen verwenden. Standardmäßig sollte Unsloth diese Flags seit Juni 2025 standardmäßig gesetzt haben.

### Wie mache ich Early Stopping?

Wenn Sie den Fine-Tuning-/Trainingslauf beenden möchten, weil die Evaluationsverluste nicht sinken, können Sie Early Stopping verwenden, das den Trainingsprozess stoppt. Verwenden Sie `EarlyStoppingCallback`.

Wie gewohnt richten Sie Ihren Trainer und Ihren Evaluationsdatensatz ein. Das Folgende wird verwendet, um den Trainingslauf zu stoppen, wenn der `eval_loss` (der Evaluationsverlust) nach etwa 3 Schritten nicht sinkt.

```python
from trl import SFTConfig, SFTTrainer
trainer = SFTTrainer(
    args = SFTConfig(
        fp16_full_eval = True,
        per_device_eval_batch_size = 2,
        eval_accumulation_steps = 4,
        output_dir = "training_checkpoints", # Speicherort der gespeicherten Checkpoints für Early Stopping
        save_strategy = "steps",             # Modell alle N Schritte speichern
        save_steps = 10,                     # Wie viele Schritte bis zum Speichern des Modells
        save_total_limit = 3,                # Nur 3 gespeicherte Checkpoints behalten, um Speicherplatz zu sparen
        eval_strategy = "steps",             # Evaluation alle N Schritte
        eval_steps = 10,                     # Wie viele Schritte bis zur Evaluation
        load_best_model_at_end = True,       # MUSS für Early Stopping verwendet werden
        metric_for_best_model = "eval_loss", # Metrik, auf der wir Early Stopping anwenden wollen
        greater_is_better = False,           # Je niedriger der Evaluationsverlust, desto besser
    ),
    model = model,
    tokenizer = tokenizer,
    train_dataset = new_dataset["train"],
    eval_dataset = new_dataset["test"],
)
```

Dann fügen wir den Callback hinzu, der ebenfalls angepasst werden kann:

```python
from transformers import EarlyStoppingCallback
early_stopping_callback = EarlyStoppingCallback(
    early_stopping_patience = 3,     # Wie viele Schritte wir warten, wenn der Eval-Verlust nicht sinkt
                                     # Zum Beispiel könnte der Verlust steigen, aber nach 3 Schritten sinken
    early_stopping_threshold = 0.0,  # Kann höher gesetzt werden – legt fest, um wie viel der Verlust sinken muss, bis
                                     # wir Early Stopping in Betracht ziehen. Z. B. bedeutet 0.01, wenn der Verlust
                                     # 0.02 dann 0.01 war, betrachten wir den Lauf als frühzeitig zu stoppen.
)
trainer.add_callback(early_stopping_callback)
```

Dann trainieren Sie das Modell wie gewohnt über `trainer.train() .`

### Der Download bleibt bei 90 bis 95 % hängen

Wenn Ihr Modell lange bei 90, 95 % hängen bleibt, können Sie einige schnelle Download-Prozesse deaktivieren, um Downloads zu synchronisieren und mehr Fehlermeldungen auszugeben.

Verwenden Sie einfach `UNSLOTH_STABLE_DOWNLOADS=1` vor jedem Unsloth-Import.

```python
import os
os.environ["UNSLOTH_STABLE_DOWNLOADS"] = "1"

from unsloth import FastLanguageModel
```

### RuntimeError: CUDA-Fehler: device-seitiger Assert ausgelöst

Starten Sie neu und führen Sie alles erneut aus, aber setzen Sie dies ganz am Anfang vor jedem Unsloth-Import. Bitte reichen Sie außerdem umgehend einen Bug-Report ein, danke!

```python
import os
os.environ["UNSLOTH_COMPILE_DISABLE"] = "1"
os.environ["UNSLOTH_DISABLE_FAST_GENERATION"] = "1"
```

### Alle Labels in Ihrem Datensatz sind -100. Die Trainingsverluste werden alle 0 sein.

Das bedeutet, dass Ihre Verwendung von `train_on_responses_only` für dieses spezielle Modell nicht korrekt ist. train\_on\_responses\_only erlaubt es Ihnen, die Benutzerfrage zu maskieren und Ihr Modell darauf zu trainieren, die Antwort des Assistenten mit höherer Gewichtung auszugeben. Es ist bekannt, dass dies die Genauigkeit um 1 % oder mehr erhöht. Siehe unseren [**Leitfaden zu LoRA-Hyperparametern**](/docs/de/loslegen/fine-tuning-llms-guide/lora-hyperparameters-guide.md) für weitere Details.

Für Llama-3.1-, 3.2-, 3.3-Modelle verwenden Sie bitte das Folgende:

```python
from unsloth.chat_templates import train_on_responses_only
trainer = train_on_responses_only(
    trainer,
    instruction_part = "<|start_header_id|>user<|end_header_id|>\n\n",
    response_part = "<|start_header_id|>assistant<|end_header_id|>\n\n",
)
```

Für Gemma 2, 3. 3n-Modelle verwenden Sie bitte das Folgende:

```python
from unsloth.chat_templates import train_on_responses_only
trainer = train_on_responses_only(
    trainer,
    instruction_part = "<start_of_turn>user\n",
    response_part = "<start_of_turn>model\n",
)
```

### Ist Unsloth langsamer als erwartet?

Wenn Ihre Geschwindigkeit anfangs langsamer erscheint, liegt das wahrscheinlich daran, dass `torch.compile` typischerweise etwa 5 Minuten (oder länger) zum Aufwärmen und Abschließen der Kompilierung benötigt. Stellen Sie sicher, dass Sie den Durchsatz messen **nach** es vollständig geladen ist, da Unsloth bei längeren Läufen deutlich schneller sein sollte.

Zum Deaktivieren verwenden Sie:

```python
import os
os.environ["UNSLOTH_COMPILE_DISABLE"] = "1"
```

### Einige Gewichte von Gemma3nForConditionalGeneration wurden nicht aus dem Modell-Checkpoint initialisiert

Dies ist ein kritischer Fehler, da dies bedeutet, dass einige Gewichte nicht korrekt geparst wurden, was zu falschen Ausgaben führt. Dies kann normalerweise durch ein Upgrade von Unsloth behoben werden

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

Dann aktualisieren Sie transformers und timm:

`pip install --upgrade --force-reinstall --no-cache-dir --no-deps transformers timm`

Falls das Problem jedoch weiterhin besteht, reichen Sie bitte umgehend einen Bug-Report ein!

### NotImplementedError: Ein UTF-8-Locale ist erforderlich. ANSI erhalten

Siehe <https://github.com/googlecolab/colabtools/issues/3409>

Führen Sie in einer neuen Zelle das Folgende aus:

```python
import locale
locale.getpreferredencoding = lambda: "UTF-8"
```

### Unsloth zitieren

Wenn Sie die Verwendung unserer Modell-Uploads zitieren, verwenden Sie bitte die folgende BibTeX. Dies gilt für Qwen3-30B-A3B-GGUF Q8\_K\_XL:

```
@misc{unsloth_2025_qwen3_30b_a3b,
  author       = {Unsloth AI and Han-Chen, Daniel and Han-Chen, Michael},
  title        = {Qwen3-30B-A3B-GGUF:Q8\_K\_XL},
  year         = {2025},
  publisher    = {Hugging Face},
  howpublished = {\url{https://huggingface.co/unsloth/Qwen3-30B-A3B-GGUF}}
}
```

Wenn Sie die Verwendung unseres Github-Pakets oder unserer Arbeit im Allgemeinen zitieren möchten:

```
@misc{unsloth,
  author       = {Unsloth AI and Han-Chen, Daniel and Han-Chen, Michael},
  title        = {Unsloth},
  year         = {2025},
  publisher    = {Github},
  howpublished = {\url{https://github.com/unslothai/unsloth}}
}
```

[^1]: Aktivieren Sie diese Codezeile und sehen Sie, ob es funktioniert.


---

# 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/grundlagen/troubleshooting-and-faqs.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.
