Skip to the content.

Ein deutschsprachiges Tutorial, das Schritt für Schritt zeigt, wie Unternehmen mit Self-Hosted LLMs ihre Datensouveränität bewahren: Von der Installation über Fine-tuning bis zur vollständigen Unabhängigkeit – inklusive echter Debugging-Stories und transparenten Trade-offs.

📖 Status: Tutorial-Serie in aktiver Entwicklung
🎯 Zielgruppe: ML Engineers, Data Scientists, Tech Leads im DACH-Raum
⭐ GitHub: self-hosted-llms-tutorial

Warum diese Tutorial-Serie?

Unternehmen im DACH-Raum stehen vor einem Dilemma: Sie wollen generative KI nutzen, aber sensible Daten dürfen nicht an externe APIs fließen — sei es aus DSGVO-Gründen, Branchenregulierung oder zum Schutz von Betriebsgeheimnissen.

Diese Tutorial-Serie zeigt den Weg von der ersten LLM-Installation bis zur kompletten Datensouveränität — ohne externe Abhängigkeiten. Jeder Post hat ein klares, erreichbares Ziel, und wir dokumentieren echte Probleme und Debugging-Journeys statt nur den “Happy Path”. Dabei beleuchten wir drei verschiedene LLM-Anwendungsfälle, vom fine-tuned LoRA-Adapter, der in einem RAG-System eingesetzt werden kann, über die Generierung von synthetischen Trainings- und Testdaten bis hin zum Einsatz von LLM-as-Judge.

Was diese Serie auszeichnet

Schrittweiser Aufbau statt Fertiglösungen
Jeder Schritt wird erklärt und begründet. Statt YAML-Dateien zum Copy-Paste erhältst du das Verständnis, um eigene Entscheidungen zu treffen.

Design-Entscheidungen transparent gemacht
Wir zeigen nicht nur wie, sondern auch warum. Jede Architektur-Entscheidung wird mit ihren Trade-offs erklärt.

Debugging-Journeys inklusive
Echte Probleme und ihre Lösungen – wie die 20-stündige EOS-Token-Debugging-Story. Hier lernst du, was Tutorials normalerweise auslassen.

Vollständige Datensouveränität als Ziel
Der komplette Weg zur Unabhängigkeit von externen APIs – von der ersten Installation bis zur selbst gehosteten Dataset-Generierung.


Der Weg zur Datensouveränität

Die Serie folgt einem klaren didaktischen Bogen — vom ersten funktionierenden LLM bis zur vollständigen Unabhängigkeit von externen Anbietern.

Phase 1: Self-Hosting Basics

“Kann ich ein LLM überhaupt selbst betreiben?”

Post 1: Warum Self-Hosting? Der Business Case für Datensouveränität Das Problem, die Lösung und wann Self-Hosting sinnvoll ist. Entscheidungsmatrix: Cloud-API vs. Self-Hosted.

Post 2: vLLM auf Kubernetes — Dein erstes selbst gehostetes LLM Mistral-7B auf Kubernetes deployen mit vLLM. Nach diesem Post läuft ein LLM auf deiner Infrastruktur.

Phase 2: Anpassung durch Fine-tuning

“Wie mache ich es besser für meinen Use Case?”

Post 3: Warum Fine-tuning? Wenn RAG und Prompting nicht reichen Prompting vs. RAG vs. Fine-tuning — wann welcher Ansatz passt und warum wir Fine-tuning brauchen.

Post 4: Dataset Engineering — Von Dokumenten zu Trainingsdaten Die Pipeline von Rohdokumenten zu QA-Paaren: Chunking, Synthetic Data Generation, Quality Control. 80% der eigentlichen Arbeit.

Post 5: LoRA Training — 7B Model auf 24GB GPU QLoRA macht große Modelle auf Consumer-Hardware trainierbar. Mit MLflow Experiment Tracking.

Post 5.1: Experiment Tracking mit MLflow (Optional) Self-hosted MLflow für Datensouveränität. Custom Callbacks für HuggingFace Trainer. Parameters & Metrics loggen – ohne externe Cloud-Dienste.

Post 5.2: Model Evaluation (Optional) Qualitative Evaluation durch Manual Inspection & stratifiziertes Sampling. Baseline Comparison mit Mistral-Instruct. Multi-modale Bewertung.

Post 5.3: Der pad_token Bug – Eine Debugging-Geschichte (Optional) 20 Stunden Debugging dokumentiert: Warum pad_token = eos_token alles kaputt macht und wie systematisches Debugging funktioniert.

Post 6: vLLM Deployment mit LoRA – Fine-tuned Models deployen LoRA-Adapter auf dem Base Model laden mit vLLM. Multi-Adapter Serving. Performance-Vergleiche.

Phase 3: Dataset-Generierung

“Wie nutze ich self-hosted LLMs, um synthetische Trainingsdaten zu generieren?”

Post 7: Dataset-Generierung selbst gehostet Können wir Dataset-Generierung selbst hosten - und zu welchen Trade-offs?

Post 7.1: Parallele Dataset-Generierung (Optional) Dataset-Generierung parallelisiert – 9× schneller durch Batching

Post 7.2: Modell Vergleich (Optional) Quality Comparison Redux – Fairer Vergleich mit Llama-3.1-8B

Phase 4: LLM-as-Judge - Cloud versus Local

“Kann ich self-hosted LLMs als Judge einsetzen? Geht das auch lokal?”

Post 8: LLM-as-Judge Self-Hosted — Evaluation ohne externe APIs Qualität messen ohne OpenAI oder Anthropic - Self-hosted LLM-as-Judge. Nach diesem Post ist die gesamte Pipeline datensouverän: Dokumente → QA-Paare → Training → Serving → Evaluation.

Post 8.1: Llama-70B als Judge – Apple Silicon statt Cloud GPUs (Optional) Llama-70B-as-Judge auf Apple Silicon - Funktioniert das überhaupt?

Phase 5: Multi-Adapter Serving und lokales Training

“Kann ich mehrere LoRA-Adapter auf einem Server betreiben? Ist lokales Training eine Alternative?”

Post 9: Multi-LoRA A/B-Testing & Adapter Training auf Apple Silicon Wir trainieren einen zweiten LoRA-Adapter auf Apple Silicon und nutzen Multi-LoRA für das A/B-Testing der beiden Adapter.

Resümee

Post 10: Resümee – Was wir über Self-Hosted LLMs gelernt haben Der letzte Post dieser Serie. Wir ziehen Bilanz.


Datensouveränität als roter Faden

🔒 Von pragmatisch zu souverän

Die Serie geht ehrlich mit externen Abhängigkeiten um. In Post 4 nutzen wir GPT-4o-mini für die Dataset-Generierung — ein bewusster Kompromiss, der transparent gemacht wird. In Post 7 zeigen wir dann die self-hosted Alternative.

Nach Post 8 ist die gesamte Pipeline datensouverän: Kein API-Call verlässt deine Infrastruktur — weder für Training, Serving, Evaluation noch für Dataset-Generierung.

Als Bonus zeigen wir mit den Posts 8.1 und 9, wie man LLMs auch komplett lokal für Training und Inference einsetzen kann.

Für wen ist diese Serie?

Diese Tutorial-Serie richtet sich an technische Fachkräfte und Entscheider, die Self-Hosted LLMs evaluieren oder implementieren wollen:


Projekt-Struktur

self-hosted-llms-tutorial/
├── docs/                               Blog Posts (Deutsch)
│   ├── index.md                        Serien-Übersicht (diese Seite)
│   └── posts/                          Einzelne Blog Posts
├── serving/                            vLLM Deployment (Posts 2)
├── data/                               Dataset Engineering (Post 4)
├── 05-lora-training/                   LoRA Training 
├── 05.1-mlflow-tracking/               Experiment Tracking mit MLFlow
├── 05.2-model-evaluation/              Model Evaluation
├── 05.3-debugging-story/               Eine Debugging-Geschichte
├── 06-lora-serving/                    LoRA Serving and Monitoring mit Grafana
├── 07-dataset-generation-self-hosted/  Dataset Generation Self-Hosted
├── 07.1-parallelization/               Parallele Dataset-Generierung
├── 07.2-quality-comparison-redux/      Modell Vergleich für Dataset-Generierung
├── 08-llm-as-judge/                    LLM-as-Judge Self-Hosted
├── 08.1-llama-70b-judge/               Llama-70b als Self-Hosted Judge auf Apple Silicon
└── 09-multi-lora/                      Multi-LoRA A/B Testing in K8s und Adapater Training auf Apple Silicon

Sprache: Blog Posts auf Deutsch, Code und technische Dokumentation auf Englisch.


Mitmachen & Folgen

⚠️ Hinweis: Dieses Projekt ist in aktiver Entwicklung. Posts und Code werden regelmäßig ergänzt. Star das Repo, um auf dem Laufenden zu bleiben!

Lizenz