<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Lokale_KI_%E2%80%93_Technische_Grundlagen</id>
	<title>Lokale KI – Technische Grundlagen - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Lokale_KI_%E2%80%93_Technische_Grundlagen"/>
	<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Lokale_KI_%E2%80%93_Technische_Grundlagen&amp;action=history"/>
	<updated>2026-06-28T19:34:34Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=Lokale_KI_%E2%80%93_Technische_Grundlagen&amp;diff=69890&amp;oldid=prev</id>
		<title>Thomas.will: Die Seite wurde neu angelegt: „ == Transformer-Architektur im Detail ==  Die Transformer-Architektur besteht aus gestapelten '''Encoder'''- und/oder '''Decoder'''-Blöcken. Für generative S…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Lokale_KI_%E2%80%93_Technische_Grundlagen&amp;diff=69890&amp;oldid=prev"/>
		<updated>2026-05-10T16:28:26Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „ == Transformer-Architektur im Detail ==  Die Transformer-Architektur besteht aus gestapelten &amp;#039;&amp;#039;&amp;#039;Encoder&amp;#039;&amp;#039;&amp;#039;- und/oder &amp;#039;&amp;#039;&amp;#039;Decoder&amp;#039;&amp;#039;&amp;#039;-Blöcken. Für generative S…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
== Transformer-Architektur im Detail ==&lt;br /&gt;
&lt;br /&gt;
Die Transformer-Architektur besteht aus gestapelten '''Encoder'''- und/oder '''Decoder'''-Blöcken. Für generative Sprachmodelle (wie Llama, Mistral) wird ausschließlich der Decoder verwendet (''Decoder-only'').&lt;br /&gt;
&lt;br /&gt;
Jeder Decoder-Block enthält:&lt;br /&gt;
&lt;br /&gt;
# '''Multi-Head Self-Attention''': Berechnet für jedes Token, wie stark es auf alle anderen Tokens im Kontextfenster „achten&amp;quot; soll&lt;br /&gt;
# '''Feed-Forward Network (FFN)''': Zwei lineare Schichten mit nichtlinearer Aktivierungsfunktion (meist SiLU/GELU)&lt;br /&gt;
# '''Layer Normalization''': Stabilisiert das Training (RMSNorm bei neueren Modellen)&lt;br /&gt;
# '''Residual Connections''': Ermöglichen tiefe Netzwerke ohne Gradientenprobleme&lt;br /&gt;
&lt;br /&gt;
=== Self-Attention ===&lt;br /&gt;
&lt;br /&gt;
Für jedes Token werden drei Vektoren berechnet:&lt;br /&gt;
&lt;br /&gt;
* '''Q''' (Query) – Was sucht dieses Token?&lt;br /&gt;
* '''K''' (Key) – Was bietet jedes andere Token?&lt;br /&gt;
* '''V''' (Value) – Was wird weitergegeben?&lt;br /&gt;
&lt;br /&gt;
Die Attention-Gewichte berechnen sich als:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Attention(Q, K, V) = softmax(QKᵀ / √dₖ) · V&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Multi-Head''' bedeutet: Diese Berechnung wird parallel mehrfach durchgeführt (z.B. 32 Heads bei einem 7B-Modell), jeder Head lernt andere Abhängigkeiten.&lt;br /&gt;
&lt;br /&gt;
=== Positional Encoding ===&lt;br /&gt;
&lt;br /&gt;
Transformer haben keine inhärente Reihenfolge. Position wird durch '''Positional Encoding''' injiziert. Moderne Modelle nutzen '''RoPE''' (Rotary Position Embedding), das relative Positionen effizienter kodiert und längere Kontextfenster ermöglicht.&lt;br /&gt;
&lt;br /&gt;
== Tokenisierung ==&lt;br /&gt;
&lt;br /&gt;
=== Byte Pair Encoding (BPE) ===&lt;br /&gt;
&lt;br /&gt;
Das am weitesten verbreitete Tokenisierungsverfahren ist '''BPE'''. Dabei wird ein Vokabular aus häufigen Zeichenkombinationen aufgebaut:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Schritt 1: Zeichen-Vokabular: {a, b, c, ..., z}&lt;br /&gt;
Schritt 2: Häufigste Paare zusammenfassen: &amp;quot;th&amp;quot; → neues Token&lt;br /&gt;
Schritt 3: Wiederholen bis Vokabulargröße erreicht (z.B. 32.000 Tokens)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Typische Vokabulargrößen: 32.000 (Llama 2) bis 128.256 (Llama 3).&lt;br /&gt;
&lt;br /&gt;
=== Sondertokens ===&lt;br /&gt;
&lt;br /&gt;
Jedes Modell nutzt spezielle Tokens zur Strukturierung:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Token !! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;lt;s&amp;amp;gt;&amp;lt;/code&amp;gt; || Beginn der Sequenz (BOS)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;lt;/s&amp;amp;gt;&amp;lt;/code&amp;gt; || Ende der Sequenz (EOS)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;[INST]&amp;lt;/code&amp;gt; || Beginn einer Benutzeranweisung (Llama 2)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;lt;|im_start|&amp;amp;gt;&amp;lt;/code&amp;gt; || Chat-Turn-Beginn (ChatML-Format)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Das '''Chat Template''' definiert, wie Nutzereingaben und Modellantworten in Token-Sequenzen verpackt werden. Ollama übernimmt dies automatisch anhand der Modell-Metadaten.&lt;br /&gt;
&lt;br /&gt;
== Training im Detail ==&lt;br /&gt;
&lt;br /&gt;
=== Pre-Training ===&lt;br /&gt;
&lt;br /&gt;
Ziel: '''Next Token Prediction''' – gegeben eine Sequenz, sagt das Modell das nächste Token vorher.&lt;br /&gt;
&lt;br /&gt;
Verlustfunktion: Cross-Entropy Loss zwischen vorhergesagtem und tatsächlichem Token.&lt;br /&gt;
&lt;br /&gt;
Optimizer: AdamW mit Lernratenplanung (Warmup + Cosine Decay).&lt;br /&gt;
&lt;br /&gt;
Typische Größenordnungen für ein 7B-Modell:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parameter !! Wert&lt;br /&gt;
|-&lt;br /&gt;
| Trainingsdaten || 1–2 Billionen Tokens&lt;br /&gt;
|-&lt;br /&gt;
| GPU-Bedarf || 500–1.000 A100-GPUs&lt;br /&gt;
|-&lt;br /&gt;
| Trainingszeit || 3–6 Wochen&lt;br /&gt;
|-&lt;br /&gt;
| Stromverbrauch || ~1 GWh&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Supervised Fine-Tuning (SFT) ===&lt;br /&gt;
&lt;br /&gt;
Das vortrainierte Basismodell wird auf Instruktions-Datensätzen weitertrainiert. Format: Prompt-Response-Paare, kuratiert von Menschen oder synthetisch erzeugt (z.B. durch stärkere Modelle).&lt;br /&gt;
&lt;br /&gt;
=== RLHF / DPO ===&lt;br /&gt;
&lt;br /&gt;
; RLHF (Reinforcement Learning from Human Feedback)&lt;br /&gt;
: Menschen bewerten Modellantworten. Ein separates '''Reward Model''' lernt diese Präferenzen. Das Hauptmodell wird per PPO (Proximal Policy Optimization) optimiert.&lt;br /&gt;
&lt;br /&gt;
; DPO (Direct Preference Optimization)&lt;br /&gt;
: Neuere, stabilere Alternative zu RLHF. Direkte Optimierung auf bevorzugte vs. abgelehnte Antwortpaare ohne separates Reward Model.&lt;br /&gt;
&lt;br /&gt;
== Quantisierung im Detail ==&lt;br /&gt;
&lt;br /&gt;
=== Zahlenformate ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Format !! Bits !! Wertebereich !! Verwendung&lt;br /&gt;
|-&lt;br /&gt;
| FP32 || 32 || ±3.4×10³⁸ || Training&lt;br /&gt;
|-&lt;br /&gt;
| FP16 || 16 || ±65.504 || Training / Inferenz&lt;br /&gt;
|-&lt;br /&gt;
| BF16 || 16 || ±3.4×10³⁸ || Training (stabiler)&lt;br /&gt;
|-&lt;br /&gt;
| INT8 || 8 || −128 bis 127 || Quantisierte Inferenz&lt;br /&gt;
|-&lt;br /&gt;
| INT4 || 4 || −8 bis 7 || Aggressiv quantisiert&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GGUF-Format ===&lt;br /&gt;
&lt;br /&gt;
Ollama verwendet das '''GGUF'''-Format (GPT-Generated Unified Format), entwickelt von llama.cpp. Es speichert Modellgewichte, Metadaten und Chat-Templates in einer einzigen Datei.&lt;br /&gt;
&lt;br /&gt;
Quantisierungsstufen in GGUF:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Stufe !! Bits/Gewicht !! Größe (7B) !! Perplexity-Verlust&lt;br /&gt;
|-&lt;br /&gt;
| Q2_K || 2,5 || ~2,8 GB || Hoch&lt;br /&gt;
|-&lt;br /&gt;
| Q4_K_M || 4,5 || ~4,8 GB || Gering&lt;br /&gt;
|-&lt;br /&gt;
| Q5_K_M || 5,5 || ~5,7 GB || Sehr gering&lt;br /&gt;
|-&lt;br /&gt;
| Q8_0 || 8 || ~7,7 GB || Minimal&lt;br /&gt;
|-&lt;br /&gt;
| F16 || 16 || ~14 GB || Keiner&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Q4_K_M&amp;lt;/code&amp;gt; ist der Standard in Ollama – gutes Gleichgewicht zwischen Größe und Qualität.&lt;br /&gt;
&lt;br /&gt;
=== KV-Cache ===&lt;br /&gt;
&lt;br /&gt;
Während der Inferenz werden die K- und V-Matrizen aller bereits verarbeiteten Tokens im Speicher gehalten ('''KV-Cache'''). Dies verhindert redundante Berechnungen, verbraucht aber erheblich RAM/VRAM – besonders bei langen Kontexten.&lt;br /&gt;
&lt;br /&gt;
Speicherbedarf KV-Cache (approximiert):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
KV-Cache = 2 × Schichten × Heads × Kontextlänge × dₖ × Bytes/Element&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Bei einem 7B-Modell mit 32 Schichten, 32 Heads und 4.096 Tokens Kontext: ~512 MB (FP16).&lt;br /&gt;
&lt;br /&gt;
== Inferenz-Stack ==&lt;br /&gt;
&lt;br /&gt;
Ollama nutzt intern '''llama.cpp''' als Inferenz-Engine. llama.cpp ist in C++ geschrieben und optimiert für:&lt;br /&gt;
&lt;br /&gt;
* CPU: AVX2/AVX-512-Vektorinstruktionen&lt;br /&gt;
* Apple Silicon: Metal-Backend (unified memory)&lt;br /&gt;
* NVIDIA: CUDA-Backend&lt;br /&gt;
* AMD: ROCm-Backend (experimentell)&lt;br /&gt;
&lt;br /&gt;
Die Schichten des Stacks:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Open WebUI (Browser)&lt;br /&gt;
      ↓&lt;br /&gt;
Ollama API (REST, Port 11434)&lt;br /&gt;
      ↓&lt;br /&gt;
llama.cpp (Inferenz-Engine)&lt;br /&gt;
      ↓&lt;br /&gt;
GGUF-Modell (Datei auf Disk)&lt;br /&gt;
      ↓&lt;br /&gt;
CPU / GPU (Hardware)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Zusammenfassung ==&lt;br /&gt;
&lt;br /&gt;
Lokale Sprachmodelle sind Decoder-only Transformer, die per Next-Token-Prediction auf Billionen von Tokens vortrainiert und anschließend per SFT/RLHF/DPO auf Instruktionsfolge spezialisiert werden. GGUF-Quantisierung (Q4_K_M) reduziert den Speicherbedarf um ~65 % bei geringem Qualitätsverlust. Ollama abstrahiert den gesamten Stack – von der Modellverwaltung bis zur Inferenz via llama.cpp – hinter einer einfachen REST-API.&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>