Unsloth lokal nutzen: Open Models trainieren, testen und exportieren ohne Cloud-Zirkus

30.03.2026 Stefan Welsch
Tech Artificial Intelligence Machine Learning Python Hands-on DevOps Open source

Banner

TLDR

  • Unsloth ist ein Open-Source-Tooling rund um lokale LLM-Workflows: Modelle ausführen, feinjustieren und exportieren in einer gemeinsamen Umgebung.
  • Besonders spannend ist die Kombination aus No-Code-UI, lokalem Betrieb und Fokus auf effizientes Training mit wenig VRAM.
  • Relevant ist das vor allem für Entwickler, ML Engineers und DevOps-Teams, die mit Open Models experimentieren wollen, ohne sofort eine teure GPU-Infrastruktur aufzubauen.
  • Kernfeatures sind lokales Inferencing, LoRA/Fine-Tuning, Datensatz-Erzeugung aus Dokumenten, Model-Vergleich und Export nach GGUF oder Safetensors.
  • Für produktive Setups gilt trotzdem: lokale Experimente sind nur der Anfang; Deployment, Security, Governance und Reproduzierbarkeit musst du weiterhin sauber lösen.

Einleitung

Lokale AI-Workflows werden gerade ziemlich interessant. Nicht nur, weil Cloud-GPUs teuer sind, sondern auch, weil viele Teams beim Thema Datenschutz, Prototyping-Geschwindigkeit und Entwicklerproduktivität lieber zuerst auf dem eigenen Rechner oder in einer kontrollierten Umgebung arbeiten wollen. Genau in diese Lücke zielt Unsloth.

Unsloth positioniert sich als einheitliche Oberfläche, um Open Models lokal zu starten, zu trainieren und anschliessend wieder in gängige Formate zu exportieren. Statt zwischen Notebook, Python-Skripten, Inferenz-Servern und Konvertierungs-Tools hin- und herzuwechseln, bekommst du einen Workflow, der möglichst viel unter einem Dach vereint.

Für Entwickler und DevOps-Engineers ist das vor allem dann spannend, wenn du schnell evaluieren willst: Welches Modell passt für meinen Use Case? Reicht ein kleines Fine-Tuning? Kann ich aus PDFs oder JSON-Daten einen brauchbaren Trainingsdatensatz bauen? Und wie bekomme ich das Ergebnis danach in Ollama, llama.cpp oder vLLM?

Hintergrund

Der Hype um LLMs hat zwei Extreme erzeugt. Auf der einen Seite stehen API-zentrierte Setups mit proprietären Modellen, die schnell integriert sind, aber laufende Kosten, Vendor Lock-in und Datenschutzfragen mitbringen. Auf der anderen Seite gibt es Open Models, die dir mehr Kontrolle geben, dafür aber oft mehr operativen Aufwand verursachen.

Genau da setzen Tools wie Unsloth an: Sie versuchen, die Hürden für Open-Model-Workflows zu senken. Statt dass du dir alles selbst aus Hugging Face, Transformers, PEFT, llama.cpp, Quantisierungstools, Colab-Notebooks und Export-Skripten zusammenbaust, bekommst du eine Oberfläche und einen Workflow, der diese Bausteine zusammenführt.

Die Motivation dahinter ist nachvollziehbar. Viele Teams brauchen gar kein riesiges Foundation-Model-Training. Oft reicht es, ein bestehendes Modell lokal laufen zu lassen, verschiedene Modelle zu vergleichen oder per LoRA an eigene Daten anzupassen. Wenn das schneller, günstiger und mit weniger VRAM geht, wird Open-Source-AI plötzlich auch für kleinere Teams praktikabel.

Unsloth betont dabei stark Themen wie lokale Ausführung, No-Code-Training, Datensatz-Aufbereitung und effiziente Kernel für schnelleres Fine-Tuning. Das ist kein Ersatz für tiefes ML-Know-how, aber ein guter Hebel, um die Einstiegshürde massiv zu senken.

Hintergrund: Wo Unsloth im Stack sitzt

Technisch ist Unsloth nicht einfach “noch ein Chat-UI”. Es sitzt eher zwischen mehreren Welten:

  • Inference UI für lokale Modelle
  • Training-Workflow für Fine-Tuning und LoRA
  • Data Preparation Layer für strukturierte und unstrukturierte Daten
  • Export-Pipeline für verschiedene Runtime-Ökosysteme
  • Vergleichswerkzeug für Base- und Fine-Tuned-Modelle

Damit erinnert der Ansatz ein bisschen an eine lokale AI-Workbench. Gerade wenn du als Entwickler nicht nur prompten, sondern wirklich modellnah arbeiten willst, ist das deutlich wertvoller als ein reines Chatfenster.

Hauptmerkmale

Was Unsloth besonders macht, ist die Kombination aus drei Dingen: lokal-first, modellnah und workflow-orientiert. Du kannst Modelle lokal ausführen, Trainingsdaten vorbereiten, Fine-Tuning starten und das Ergebnis anschliessend in ein Format exportieren, das in anderen Tools weiterlebt.

Ein weiteres starkes Merkmal ist die Unterstützung typischer Open-Model-Formate und Zielplattformen. Laut Produktbeschreibung lassen sich Modelle unter anderem als Safetensors oder GGUF exportieren. Das ist praktisch, weil du damit später nicht an Unsloth gebunden bist, sondern die Resultate in Tools wie llama.cpp, vLLM oder Ollama weiterverwenden kannst.

Spannend ist auch die Model Arena. Statt einfach nur ein Modell in Isolation zu testen, kannst du zwei Modelle direkt vergleichen, zum Beispiel ein Basismodell gegen deine feinjustierte Variante. Das ist für Evaluation Gold wert, weil Unterschiede bei Stil, Faktentreue oder Instruktionsbefolgung sonst oft schwer greifbar sind.

Dazu kommt die Idee der Data Recipes: Dokumente wie PDF, CSV oder JSON sollen in nutzbare Trainingsdaten transformiert werden. Das löst nicht alle Data-Quality-Probleme automatisch, aber es adressiert einen sehr realen Pain Point. Denn in der Praxis scheitern Fine-Tuning-Experimente oft nicht am Modell, sondern an schlechten oder uneinheitlichen Trainingsdaten.

Hauptmerkmale: Für wen ist das relevant?

Unsloth ist besonders interessant für diese Zielgruppen:

  • Entwickler, die Open Models lokal evaluieren wollen
  • ML Engineers, die schnelle Fine-Tuning-Iterationen brauchen
  • DevOps-Teams, die lokale oder hybride AI-Workflows standardisieren möchten
  • Security-sensitive Umgebungen, in denen Daten nicht einfach in externe APIs fliessen dürfen
  • Prototyping-Teams, die erst lokal validieren und später produktiv deployen

Weniger passend ist es, wenn du bereits eine vollständig industrialisierte MLOps-Plattform mit klaren Pipelines, Registry, Experiment Tracking und GPU-Scheduling betreibst. Da ist Unsloth eher ein ergänzendes Werkzeug für schnelle Iteration als das zentrale Betriebssystem deiner AI-Plattform.

Hands-On

Im Hands-On schauen wir uns einen praxisnahen Workflow an. Da die Produktseite vor allem die Möglichkeiten beschreibt, aber nicht jede technische Implementation im Detail offenlegt, bauen wir den Ablauf so auf, wie du ihn in einem realen Evaluations-Setup nutzen würdest:

  1. Unsloth lokal starten
  2. Ein Open Model laden
  3. Modelle vergleichen
  4. Trainingsdaten vorbereiten
  5. Ein einfaches LoRA-Fine-Tuning durchführen
  6. Das Modell exportieren
  7. Das Ergebnis in einem anderen Runtime-Tool weiterverwenden

Wichtig: Die konkreten UI-Schritte können sich je nach Version ändern. Der Mehrwert hier ist deshalb nicht nur “klick hier, dann dort”, sondern vor allem das Verständnis des End-to-End-Workflows.

Voraussetzungen

Für ein sinnvolles lokales Setup brauchst du mindestens:

  • einen Mac oder Windows-Rechner laut Produktseite
  • idealerweise eine dedizierte GPU für ernsthaftes Fine-Tuning
  • genug SSD-Speicher für Modelle und Datasets
  • Python-Know-how für Debugging und fortgeschrittene Workflows
  • Grundverständnis von Quantisierung, LoRA und Modellformaten

Wenn du nur Inferenz testen willst, kommst du oft mit weniger Hardware aus. Für Fine-Tuning wird es schnell enger, besonders bei grösseren Modellen.

Eine grobe Faustregel:

  • 7B-Modell, quantisiert: oft noch gut lokal testbar
  • LoRA-Fine-Tuning kleiner bis mittlerer Modelle: mit passender NVIDIA-GPU deutlich realistischer
  • grössere Modelle oder Full Fine-Tuning: eher nichts für den normalen Laptop

Installation und Setup

Die Unsloth-Webseite verweist auf eine lokale Studio-Erfahrung sowie auf Dokumentation und Docker. Für Teams ist Docker meist der sauberste Einstieg, weil du damit reproduzierbarer arbeitest als mit einer wilden lokalen Python-Installation.

Ein typischer Startpunkt sieht so aus:

1
2
3
4
5
6
7
docker pull unsloth/unsloth:latest
docker run --rm -it \
  -p 3000:3000 \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/models:/app/models \
  -v $(pwd)/outputs:/app/outputs \
  unsloth/unsloth:latest

Falls du mit NVIDIA-GPU arbeitest, brauchst du je nach Setup zusätzlich GPU-Passthrough:

1
2
3
4
5
6
7
docker run --rm -it \
  --gpus all \
  -p 3000:3000 \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/models:/app/models \
  -v $(pwd)/outputs:/app/outputs \
  unsloth/unsloth:latest

Wenn du lieber mit Docker Compose arbeitest, ist das für lokale Team-Setups oft angenehmer:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
services:
  unsloth:
    image: unsloth/unsloth:latest
    ports:
      - "3000:3000"
    volumes:
      - ./data:/app/data
      - ./models:/app/models
      - ./outputs:/app/outputs
    deploy:
      resources:
        reservations:
          devices:
            - capabilities: ["gpu"]

Danach öffnest du die lokale UI im Browser, typischerweise unter:

1
http://localhost:3000

Falls du kein Docker nutzen willst, schau in die offizielle Dokumentation auf unsloth.ai bzw. in die verlinkten Installationsanleitungen. Für reproduzierbare Dev-Setups würde ich aber klar Container bevorzugen.

Verzeichnisstruktur für ein sauberes lokales Projekt

Bevor du loslegst, lohnt sich eine einfache Struktur:

1
2
mkdir -p unsloth-demo/{data/raw,data/processed,models,outputs,exports}
cd unsloth-demo

Das Ergebnis:

1
2
3
4
5
6
7
unsloth-demo/
├── data/
│   ├── raw/
│   └── processed/
├── models/
├── outputs/
└── exports/

Warum ist das wichtig? Weil AI-Experimente sonst sehr schnell chaotisch werden. Wenn du später nachvollziehen willst, welches Modell mit welchem Datensatz trainiert wurde, brauchst du Ordnung von Anfang an.

Schritt 1: Modell lokal laden

Der erste praktische Use Case ist simpel: ein Modell lokal laden und testen. Laut Unsloth kannst du Formate wie GGUF und Safetensors verwenden. Für schnelle Tests ist GGUF oft praktisch, weil es gut in lokale Inferenz-Stacks passt.

Typischer Ablauf in der UI:

  1. Modell auswählen oder importieren
  2. Modellformat festlegen
  3. Kontext- und Inferenzparameter konfigurieren
  4. Prompt testen

Sinnvolle Parameter für erste Tests:

  • Temperature: 0.2 bis 0.7
  • Max Tokens: abhängig vom Use Case
  • Top P: 0.9
  • System Prompt: möglichst stabil und knapp halten

Wenn du dieselben Tests reproduzierbar fahren willst, dokumentiere die Parameter in einer Datei:

1
2
3
4
5
6
7
8
9
model:
  name: mistral-7b-instruct
  format: gguf
inference:
  temperature: 0.3
  top_p: 0.9
  max_tokens: 512
  system_prompt: >
    Du bist ein technischer Assistent für interne Entwicklerdokumentation.

Auch wenn die UI viel abnimmt: Solche Konfigurationsdateien helfen dir enorm bei Teamarbeit und späterem Troubleshooting.

Schritt 2: Modelle vergleichen mit der Model Arena

Ein einzelnes Modell zu testen ist nett. Wirklich nützlich wird es, wenn du zwei Modelle direkt vergleichst. Genau dafür ist die Model Arena gedacht.

Ein guter Vergleichsaufbau ist:

  • Modell A: Basismodell
  • Modell B: Instruct-Variante oder dein Fine-Tune

Teste dann nicht einfach nur “Erzähl mir einen Witz”, sondern echte Aufgaben:

  • Zusammenfassung eines technischen Dokuments
  • Extraktion von Konfigurationswerten aus YAML
  • Generierung von Unit Tests
  • Beantwortung von Fragen auf Basis interner Guidelines

Beispiel-Prompt:

1
Analysiere die folgende Kubernetes-Ressource und erkläre die wichtigsten Risiken in Bezug auf Security und Betrieb.

Wenn du Modelle vergleichst, achte auf mehr als nur “klingt gut”:

  • Halluziniert das Modell?
  • Hält es sich an das gewünschte Ausgabeformat?
  • Ist die Antwort technisch präzise?
  • Bleibt der Stil stabil?
  • Ist die Latenz akzeptabel?

Für strukturierte Evaluation kannst du dir eine kleine Testmatrix bauen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
evaluation:
  prompts:
    - name: yaml-security-review
      expected: security_findings
    - name: log-summarization
      expected: concise_summary
    - name: api-doc-generation
      expected: markdown_output
  metrics:
    - correctness
    - format_adherence
    - latency
    - hallucination_risk

Schritt 3: Trainingsdaten vorbereiten

Das ist in der Praxis der wichtigste Schritt. Ein mittelmässiges Modell mit guten Daten ist oft nützlicher als ein starkes Modell mit schlechtem Fine-Tuning.

Unsloth bewirbt hier Data Recipes, also die Umwandlung von PDFs, CSV oder JSON in Trainingsdaten. Das ist für interne Wissensdaten oder strukturierte Dokumentbestände sehr hilfreich.

Nehmen wir an, du hast interne Architektur-Notizen als Markdown und JSON. Für ein Fine-Tuning auf Q&A oder Instruktionsverhalten willst du daraus ein standardisiertes Dataset machen.

Ein mögliches JSONL-Format sieht so aus:

1
2
3
{"instruction":"Erkläre den Zweck eines Kubernetes Ingress.","input":"","output":"Ein Kubernetes Ingress definiert HTTP- und HTTPS-Routing-Regeln für Services innerhalb eines Clusters."}
{"instruction":"Was ist der Unterschied zwischen Deployment und StatefulSet?","input":"","output":"Ein Deployment eignet sich für zustandslose Workloads, während ein StatefulSet stabile Identitäten und persistente Zuordnung für zustandsbehaftete Anwendungen bereitstellt."}
{"instruction":"Analysiere diese Konfiguration.","input":"replicas: 1\nresources:\n  limits:\n    cpu: 2\n    memory: 512Mi","output":"Die CPU-Limits sind relativ hoch im Verhältnis zum Speicherlimit. Für stabile Performance sollte geprüft werden, ob das Memory-Limit zu OOMKills führen kann."}

Wenn du Rohdaten erst transformieren musst, kannst du das mit Python vorbereiten:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import json
from pathlib import Path

raw_examples = [
    {
        "question": "Was ist ein Service Mesh?",
        "answer": "Ein Service Mesh ist eine Infrastruktur-Schicht für Service-zu-Service-Kommunikation, Security, Observability und Traffic Management."
    },
    {
        "question": "Wofür wird GGUF verwendet?",
        "answer": "GGUF ist ein Modellformat, das häufig für effiziente lokale Inferenz mit Tools wie llama.cpp genutzt wird."
    }
]

output_path = Path("data/processed/train.jsonl")
output_path.parent.mkdir(parents=True, exist_ok=True)

with output_path.open("w", encoding="utf-8") as f:
    for item in raw_examples:
        record = {
            "instruction": item["question"],
            "input": "",
            "output": item["answer"]
        }
        f.write(json.dumps(record, ensure_ascii=False) + "\n")

print(f"Dataset written to {output_path}")

Starten kannst du das so:

1
python prepare_dataset.py

Worauf du bei Daten achten solltest

Bevor du trainierst, prüfe diese Punkte:

  • keine Duplikate
  • keine widersprüchlichen Antworten
  • konsistenter Stil
  • keine sensitiven Daten
  • keine kaputten OCR-Texte aus PDFs
  • klare Zielstruktur für Antworten

Gerade bei automatisch erzeugten Datensätzen aus Dokumenten ist Qualitätskontrolle Pflicht. Eine hübsche UI ersetzt keine Datenhygiene.

Schritt 4: Fine-Tuning mit LoRA

Für lokale Setups ist LoRA meistens der vernünftige Weg. Statt das komplette Modell neu zu trainieren, lernst du nur zusätzliche Adapter-Gewichte. Das spart Speicher und Rechenzeit.

In Unsloth läuft das laut Produktbeschreibung No-Code-orientiert. Trotzdem solltest du die wichtigsten Parameter verstehen:

  • Base Model
  • Learning Rate
  • Batch Size
  • Epochs
  • Sequence Length
  • LoRA Rank
  • Quantisierung
  • Gradient Accumulation

Eine beispielhafte Trainingskonfiguration könnte so aussehen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
training:
  base_model: mistral-7b
  dataset: data/processed/train.jsonl
  output_dir: outputs/mistral-7b-lora
  epochs: 3
  learning_rate: 0.0002
  batch_size: 2
  gradient_accumulation_steps: 8
  max_seq_length: 2048
  lora:
    rank: 16
    alpha: 16
    dropout: 0.05
  quantization: 4bit

Wenn du lieber skriptbasiert dokumentierst, kannst du einen Startbefehl wie diesen festhalten:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
unsloth train \
  --model mistral-7b \
  --dataset data/processed/train.jsonl \
  --output outputs/mistral-7b-lora \
  --epochs 3 \
  --learning-rate 2e-4 \
  --batch-size 2 \
  --gradient-accumulation 8 \
  --max-seq-length 2048 \
  --lora-rank 16 \
  --quantization 4bit

Ob der exakte CLI-Aufruf in deiner Version so aussieht, hängt vom Release ab. Das Muster bleibt aber gleich: Modell, Datensatz, Ausgabe, Hyperparameter.

Training beobachten

Ein gutes Tool zeigt dir nicht nur “läuft”, sondern Metriken in Echtzeit. Achte im Training vor allem auf:

  • Loss-Entwicklung
  • VRAM-Auslastung
  • Durchsatz
  • geschätzte Trainingszeit
  • Validierungsbeispiele

Wenn der Loss sofort explodiert oder gar nicht sinkt, sind meist diese Dinge schuld:

  • Learning Rate zu hoch
  • Datenformat falsch
  • Dataset zu klein oder inkonsistent
  • Sequence Length unpassend
  • Prompt/Response-Struktur schlecht

Ein typisches Log könnte ungefähr so aussehen:

1
2
3
4
step=50   loss=1.92   lr=0.0002   vram=11.4GB
step=100  loss=1.61   lr=0.0002   vram=11.6GB
step=150  loss=1.43   lr=0.0002   vram=11.5GB
step=200  loss=1.39   lr=0.0002   vram=11.6GB

Wichtig: Ein niedrigerer Loss ist nicht automatisch ein besseres Modell. Entscheidend ist, wie sich das Modell bei echten Aufgaben verhält.

Schritt 5: Fine-Tuned-Modell evaluieren

Nach dem Training solltest du nicht direkt exportieren und feiern. Erst testen.

Ein sinnvoller Evaluationssatz enthält Prompts, die nicht im Trainingsdatensatz vorkommen. Sonst misst du nur, wie gut das Modell auswendig gelernt hat.

Beispiel für eine kleine Evaluationsdatei:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
tests:
  - prompt: "Erkläre den Unterschied zwischen Horizontal Pod Autoscaler und Vertical Pod Autoscaler."
    expected_traits:
      - technically_correct
      - concise
      - no_hallucinations

  - prompt: "Fasse die Risiken eines öffentlich erreichbaren Kubernetes Dashboards zusammen."
    expected_traits:
      - security_focused
      - actionable
      - structured

Wenn du Base Model und Fine-Tune direkt in der Model Arena gegeneinander laufen lässt, erkennst du schnell:

  • Ist der Fine-Tune wirklich besser?
  • Oder nur spezifischer formuliert?
  • Hat er unerwünschte Nebenwirkungen?
  • Ist das Modell zu eng auf deinen Datensatz overfitted?

Ein klassischer Fehler: Das Fine-Tuning verbessert einen eng definierten Spezialfall, verschlechtert aber allgemeine Antwortqualität. Genau deshalb ist der Direktvergleich so wertvoll.

Schritt 6: Export nach GGUF oder Safetensors

Einer der praktischsten Teile von Unsloth ist der Export. Wenn dein Fine-Tune brauchbar ist, willst du ihn oft ausserhalb der Trainingsumgebung weiterverwenden.

Typische Exportziele:

  • GGUF für lokale Inferenz mit llama.cpp-basierten Tools
  • Safetensors für weitere Nutzung in Python-Stacks oder Hosting-Umgebungen

Ein möglicher Export-Workflow:

1
2
3
4
unsloth export \
  --input outputs/mistral-7b-lora \
  --format gguf \
  --output exports/mistral-7b-lora.gguf

Oder als Safetensors:

1
2
3
4
unsloth export \
  --input outputs/mistral-7b-lora \
  --format safetensors \
  --output exports/mistral-7b-lora

Wenn du das Modell in Ollama testen willst, brauchst du anschliessend typischerweise ein passendes Modelfile.

Beispiel:

1
2
3
FROM ./mistral-7b-lora.gguf
PARAMETER temperature 0.2
SYSTEM Du bist ein präziser Assistent für technische Infrastrukturfragen.

Dann:

1
2
ollama create infra-assistant -f Modelfile
ollama run infra-assistant

Das ist ein starker Punkt im Workflow: Unsloth muss nicht dein Endpunkt sein. Es kann auch einfach dein lokales Trainings- und Export-Werkzeug sein.

Schritt 7: OpenAI-kompatible API lokal nutzen

Die Produktseite erwähnt auch eine OpenAI-kompatible API. Das ist für Entwickler super, weil du bestehende Anwendungen oft fast ohne Codeänderung gegen ein lokales Modell laufen lassen kannst.

Ein Beispiel mit Python:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:3000/v1",
    api_key="dummy"
)

response = client.chat.completions.create(
    model="local-model",
    messages=[
        {"role": "system", "content": "Du bist ein technischer Assistent."},
        {"role": "user", "content": "Erkläre mir kurz, was LoRA beim Fine-Tuning macht."}
    ],
    temperature=0.2
)

print(response.choices[0].message.content)

Das ist besonders praktisch für lokale Integrationstests. Du kannst eine Anwendung gegen ein lokales Modell entwickeln und später entscheiden, ob du bei lokalem Hosting bleibst oder auf einen anderen Inferenz-Stack wechselst.

Integration in einen DevOps-Workflow

Für Teams wird es spannend, wenn aus dem lokalen Experiment ein reproduzierbarer Workflow wird. Ein einfacher Ansatz:

  1. Datensätze versionieren
  2. Trainingskonfiguration als Code ablegen
  3. Exporte artefaktisieren
  4. Evaluation automatisieren
  5. Deployment-Ziele standardisieren

Ein minimales Makefile dafür:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
prepare:
	python prepare_dataset.py

train:
	unsloth train --config training.yaml

eval:
	python evaluate.py

export:
	unsloth export --input outputs/mistral-7b-lora --format gguf --output exports/model.gguf

Und ein CI-Skelett könnte so aussehen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
name: model-workflow

on:
  workflow_dispatch:

jobs:
  validate-data:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Validate dataset
        run: python scripts/validate_dataset.py

  export-metadata:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Store training config
        run: cp training.yaml artifacts/training.yaml

Komplettes GPU-Training in Standard-CI ist oft teuer oder unpraktisch. Aber Data Validation, Config Checks und Metadaten-Management kannst du sehr wohl automatisieren.

Typische Stolpersteine

Bei lokalen AI-Workflows tauchen fast immer dieselben Probleme auf:

Zu wenig VRAM

Die häufigste Ursache für Frust. Mögliche Gegenmassnahmen:

  • kleineres Basismodell
  • 4-bit-Quantisierung
  • kleinere Batch Size
  • mehr Gradient Accumulation
  • kürzere Sequence Length

Schlechte Trainingsdaten

Wenn dein Fine-Tune schlechter ist als das Basismodell, liegt das oft nicht am Tool, sondern an den Daten. Garbage in, garbage out gilt hier brutal direkt.

Falsche Erwartungen an Fine-Tuning

Fine-Tuning macht aus einem kleinen Modell kein Wunderwerk. Es kann Stil, Domänenwissen und Formatverhalten verbessern, aber keine fundamentalen Modellgrenzen wegzaubern.

Unklare Evaluation

“Oh, klingt irgendwie besser” ist keine Evaluationsstrategie. Definiere Tests, Metriken und Vergleichsprompts.

Fehlende Reproduzierbarkeit

Wenn du nicht dokumentierst, welches Modell, welcher Datensatz und welche Parameter verwendet wurden, kannst du Ergebnisse später kaum nachbauen.

Hands-On: Ein realistisches Mini-Projekt

Nehmen wir einen konkreten Use Case: Du willst einen lokalen Assistenten für interne Plattform-Dokumentation bauen.

Ziel

Das Modell soll Fragen beantworten wie:

  • Wie deployen wir Services?
  • Welche Labels sind Pflicht?
  • Welche Security-Baselines gelten?
  • Wie sieht ein Standard-Helm-Chart aus?

Datenquellen

  • Markdown-Dokumentation
  • Beispiel-YAMLs
  • interne Runbooks als PDF
  • JSON-Exports aus einem Wiki

Workflow

  1. Dokumente in data/raw/ ablegen
  2. Mit Data Recipes oder eigenem Skript in Trainingsbeispiele umwandeln
  3. Ein kleines Instruct-Modell als Basis wählen
  4. LoRA-Fine-Tuning lokal starten
  5. Modell gegen Standardprompts testen
  6. Nach GGUF exportieren
  7. In Ollama oder einem lokalen API-Server bereitstellen

Eine mögliche Datensatztransformation in Python:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import json
from pathlib import Path

docs = [
    {
        "title": "Deployment Standard",
        "content": "Jeder Service braucht livenessProbe, readinessProbe und resource limits."
    },
    {
        "title": "Security Baseline",
        "content": "Container sollen nicht als root laufen und ein readOnlyRootFilesystem verwenden."
    }
]

output = Path("data/processed/platform_assistant.jsonl")
output.parent.mkdir(parents=True, exist_ok=True)

with output.open("w", encoding="utf-8") as f:
    for doc in docs:
        record = {
            "instruction": f"Fasse die Richtlinie '{doc['title']}' kurz zusammen.",
            "input": "",
            "output": doc["content"]
        }
        f.write(json.dumps(record, ensure_ascii=False) + "\n")

Danach trainierst du und prüfst mit Testprompts wie:

1
Welche Mindestanforderungen gelten für Container Security in unserer Plattform?

Oder:

1
Welche Health Checks erwarten wir standardmässig für Deployments?

Wenn das Modell danach konsistent, knapp und technisch korrekt antwortet, hast du einen brauchbaren lokalen Wissensassistenten als Prototyp.

Einordnung: Wo Unsloth stark ist und wo nicht

Unsloth ist stark, wenn du schnell von “ich habe Daten und ein Open Model” zu “ich habe einen testbaren Fine-Tune” kommen willst. Die lokale Oberfläche, der End-to-End-Gedanke und der Export in andere Ökosysteme sind dafür sehr attraktiv.

Besonders gut passt es für:

  • schnelle Prototypen
  • Modellvergleiche
  • lokale Experimente
  • datensensitive Umgebungen
  • kleine bis mittlere Fine-Tuning-Setups

Weniger stark oder zumindest nicht allein ausreichend ist es bei:

  • umfassender MLOps-Orchestrierung
  • Governance auf Enterprise-Niveau
  • grossen verteilten Trainingsjobs
  • komplexem Experiment Tracking
  • standardisierten Produktions-Rollouts über viele Teams

Das ist keine Schwäche des Tools, sondern eher eine realistische Einordnung. Nicht jedes Werkzeug muss gleich die komplette Plattform sein.

Fazit

Unsloth trifft einen echten Nerv: Open Models lokal nutzen, trainieren und exportieren, ohne dass du dir sofort einen halben ML-Stack selbst zusammenschrauben musst. Gerade die Kombination aus lokaler Inferenz, No-Code-Training, Datensatz-Aufbereitung und Export macht das Tool für Entwicklerteams sehr interessant.

Mein Eindruck: Für Evaluierung, Prototyping und kleinere Fine-Tuning-Workflows ist Unsloth ein sehr spannender Kandidat. Wenn du Open Models praxisnah testen willst, ohne direkt in schwergewichtige MLOps-Infrastruktur zu investieren, lohnt sich ein Blick definitiv. Du solltest aber nicht vergessen, dass gute Daten, saubere Evaluation und reproduzierbare Workflows weiterhin entscheidend sind. Das Tool macht den Einstieg einfacher, aber das Denken nimmt es dir nicht ab.

Wenn du also mit lokalen AI-Workflows experimentierst, interne Wissensassistenten bauen willst oder Fine-Tuning ohne Cloud-Zirkus ausprobieren möchtest, ist Unsloth ein ziemlich guter Startpunkt.

Stefan Welsch

Stefan Welsch – Manitu, Pionier, Stuntman, Mentor. Als Gründer von b-nova ist Stefan immer auf der Suche nach neuen und vielversprechenden Entwicklungsfeldern. Er ist durch und durch Pragmatiker und schreibt daher auch am liebsten Beiträge die sich möglichst nahe an 'real-world' Szenarien anlehnen.