# Kenne die Fluegel deines Drachen: M3 Ultra 96 GB vs RTX 4090

Die Groesse eines Drachen wird von seiner Spannweite begrenzt; die Groesse deines Modells wird vom Speicher begrenzt. Diese Lektion gibt dir die exakte Speicher-Mathematik fuers Training und vergleicht dann unsere zwei Kursmaschinen — das **Mac Studio M3 Ultra mit 96 GB Unified Memory** und den **i9-PC mit einer RTX 4090 (24 GB VRAM)** — damit du genau weisst, welche Modelle jede trainieren kann und welche wobei gewinnt.

## Die Speicher-Mathematik, die alles entscheidet

Der Trainingsspeicher wird von vier Dingen dominiert: den **Gewichten** des Modells, den **Gradienten**, dem **Optimizer-State** und den **Aktivierungen**. Wie viel du brauchst, haengt komplett von der Trainingsmethode ab:

<div class="concept-box">
<h4>Konzept</h4>
Faustregeln pro Milliarde Parameter:<br>
<strong>Volles Fine-Tuning (16-bit + AdamW):</strong> ~16–20 GB pro 1B Parameter — Gewichte (2) + Gradienten (2) + Optimizer (8–12) + Aktivierungen.<br>
<strong>LoRA (16-bit eingefrorene Basis):</strong> ~2–2,5 GB pro 1B Parameter — die Basis sitzt nur im Speicher; nur winzige Adapter trainieren.<br>
<strong>QLoRA (4-bit eingefrorene Basis):</strong> ~0,6–0,8 GB pro 1B Parameter — die Basis ist auf 4 Bit komprimiert, die Adapter trainieren weiter in 16-bit.
</div>

Rechne die Zahlen durch und das Bild ist sofort klar:

| Modellgroesse | Volles Fine-Tuning | LoRA (16-bit) | QLoRA (4-bit) |
|---|---|---|---|
| 1B | ~18 GB | ~3 GB | ~1,5 GB |
| 4B | ~70 GB | ~10 GB | ~4 GB |
| 8B | ~140 GB | ~18 GB | ~7 GB |
| 14B | ~250 GB | ~32 GB | ~12 GB |
| 32B | ~550 GB | ~70 GB | ~24 GB |
| 70B | ~1,2 TB | ~150 GB | ~48 GB |

Jetzt legen wir die Speicher-Obergrenzen unserer zwei Maschinen darueber:

<svg viewBox="0 0 720 400" width="100%" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="QLoRA-Speicherbedarf nach Modellgroesse vs die Obergrenzen der 24-GB-RTX-4090 und des 96-GB-M3-Ultra">
    <text x="360" y="24" text-anchor="middle" fill="#e6e9f0" font-family="-apple-system, sans-serif" font-size="14px">QLoRA-Trainingsspeicher nach Modellgroesse (GB)</text>
  <line x1="70" y1="330" x2="690" y2="330" stroke="#3a4356" stroke-width="1"/>
  <!-- scale: 3px per GB, baseline y=330 -->
  <rect x="100" y="325.5" width="70" height="4.5" fill="rgba(123,140,255,0.55)"/>
  <text x="135" y="350" text-anchor="middle" fill="#e6e9f0" font-family="-apple-system, sans-serif" font-size="14px">1B</text>
  <text x="135" y="318" text-anchor="middle" fill="#9aa3b5" font-family="-apple-system, sans-serif" font-size="12px">1.5</text>
  <rect x="200" y="318" width="70" height="12" fill="rgba(123,140,255,0.55)"/>
  <text x="235" y="350" text-anchor="middle" fill="#e6e9f0" font-family="-apple-system, sans-serif" font-size="14px">4B</text>
  <text x="235" y="310" text-anchor="middle" fill="#9aa3b5" font-family="-apple-system, sans-serif" font-size="12px">4</text>
  <rect x="300" y="309" width="70" height="21" fill="rgba(123,140,255,0.55)"/>
  <text x="335" y="350" text-anchor="middle" fill="#e6e9f0" font-family="-apple-system, sans-serif" font-size="14px">8B</text>
  <text x="335" y="301" text-anchor="middle" fill="#9aa3b5" font-family="-apple-system, sans-serif" font-size="12px">7</text>
  <rect x="400" y="294" width="70" height="36" fill="rgba(123,140,255,0.55)"/>
  <text x="435" y="350" text-anchor="middle" fill="#e6e9f0" font-family="-apple-system, sans-serif" font-size="14px">14B</text>
  <text x="435" y="286" text-anchor="middle" fill="#9aa3b5" font-family="-apple-system, sans-serif" font-size="12px">12</text>
  <rect x="500" y="258" width="70" height="72" fill="rgba(251,191,36,0.6)"/>
  <text x="535" y="350" text-anchor="middle" fill="#e6e9f0" font-family="-apple-system, sans-serif" font-size="14px">32B</text>
  <text x="535" y="250" text-anchor="middle" fill="#9aa3b5" font-family="-apple-system, sans-serif" font-size="12px">24</text>
  <rect x="600" y="186" width="70" height="144" fill="rgba(239,68,68,0.55)"/>
  <text x="635" y="350" text-anchor="middle" fill="#e6e9f0" font-family="-apple-system, sans-serif" font-size="14px">70B</text>
  <text x="635" y="178" text-anchor="middle" fill="#9aa3b5" font-family="-apple-system, sans-serif" font-size="12px">48</text>
  <line x1="70" y1="258" x2="690" y2="258" stroke="#4fffb0" stroke-width="2" stroke-dasharray="6 4"/>
  <text x="76" y="250" fill="#4fffb0" font-family="monospace" font-size="12px">RTX-4090-Obergrenze — 24 GB</text>
  <line x1="70" y1="42" x2="690" y2="42" stroke="#7b8cff" stroke-width="2" stroke-dasharray="6 4"/>
  <text x="76" y="60" fill="#7b8cff" font-family="monospace" font-size="12px">M3-Ultra-Obergrenze — 96 GB (~75 GB nutzbar fuers Training)</text>
  <text x="360" y="382" text-anchor="middle" fill="#9aa3b5" font-family="-apple-system, sans-serif" font-size="12px">Lila = passt auf beide · Bernstein = grenzwertig auf der 4090 · Rot = Mac-only-Territorium</text>
</svg>

## Maschine 1: Mac Studio M3 Ultra, 96 GB Unified Memory

Apples Trick ist **Unified Memory**: CPU und GPU teilen sich einen riesigen Pool. Es gibt kein "Kopieren ins VRAM" — die GPU sieht alle 96 GB (macOS laesst dich standardmaessig etwa 75% davon an die GPU geben, mehr mit Tuning). Das Training laeuft auf **MLX**, Apples ML-Framework, mit dem Paket `mlx-lm`.

**Staerken:**
- **Kapazitaet ist Koenig.** QLoRA auf einem 32B-Modell ist komfortabel. LoRA auf 14B funktioniert. Sogar ein 70B-QLoRA ist *moeglich* — langsam, aber moeglich. Auf einer 24-GB-Karte sind diese schlicht ausser Reichweite.
- Leise, winziger Stromverbrauch (~160 W unter Last), passt auf einen Schreibtisch.
- Dieselbe Maschine *serviert* danach grosse Modelle schnell fuer Inferenz — ~800 GB/s Speicherbandbreite sind exzellent fuer Token-Generierung.

**Schwaechen:**
- **Reine Trainings-Rechenleistung.** Die M3-Ultra-GPU ist stark, aber das CUDA-Oekosystem ist bei Trainings-Optimierungen ein Jahrzehnt voraus. Rechne mit Trainingslaeufen, die 2–4× langsamer sind als eine 4090 — *bei Modellen, die auf beide passen*.
- Manche Cutting-Edge-Trainingstricks (fancy Kernels, einige Quantisierungsschemata) landen zuerst auf CUDA, auf MLX spaeter oder nie.

## Maschine 2: i9-PC + RTX 4090, 24 GB VRAM

Die 4090 ist ein Monster: ~1000 GB/s Speicherbandbreite, dedizierte Tensor Cores und der volle CUDA-Stack — **Unsloth**, Hugging Face `transformers` + `peft` + `trl`, Flash Attention, `bitsandbytes`. Der i9 und der System-RAM zaehlen hauptsaechlich fuers Daten-Preprocessing; die echte Arbeit macht die GPU.

**Staerken:**
- **Geschwindigkeit ist Koenig.** Fuer alles ≤ 8B rast die 4090 durchs Training. Ein LoRA-Lauf, der auf dem Mac eine Stunde dauert, ist in ~15–20 Minuten fertig.
- Unsloths Kernels verdoppeln grob die Trainingsgeschwindigkeit und halbieren den Speicher vs Vanilla Hugging Face — ein kostenloses 2× auf genau dieser Karte.
- Jedes Tutorial, jede neue Technik, jede Optimierung erscheint CUDA-first.

**Schwaechen:**
- **24 GB sind eine harte Wand.** 14B-LoRA in 16-bit passt nicht; 32B-QLoRA quetscht sich gerade so rein, mit kleiner Batch Size und kurzem Kontext. Wenn es nicht passt, crasht es einfach — es gibt kein "langsam, aber laeuft" wie bei Unified Memory.
- Strom und Laerm: 450 W allein auf der GPU unter Last.

## Also: Welche Maschine sollte was trainieren?

| Szenario | Gewinner | Warum |
|---|---|---|
| LoRA/QLoRA auf 1B–8B (unser Kursprojekt) | **RTX 4090** | 2–4× schneller, alles passt sowieso |
| QLoRA auf 14B–32B | **M3 Ultra** | Passt mit Luft nach oben; die 4090 wuergt |
| Alles Richtung 70B | **M3 Ultra** | Einzige Maschine mit dem Speicher, Geduld erforderlich |
| Das trainierte Modell danach servieren | **Unentschieden** | 4090 schneller bei kleinen Modellen, der Mac stemmt groessere |
| Mit brandneuen Techniken experimentieren | **RTX 4090** | CUDA-first-Oekosystem |

<div class="honest-note">
<h4>Ehrlicher Hinweis</h4>
Das Internet liebt es, eine Maschine zum "Sieger" zu erklaeren. Die Wahrheit ist langweilig und nuetzlich: <strong>die 4090 ist ein Rennwagen, das M3 Ultra ist ein Lastwagen.</strong> Unser Kursprojekt — ein 4B-Modell mit QLoRA — passt auf beide mit Luft nach oben, und genau deshalb haben wir es gewaehlt.
</div>

<div class="pro-tip">
<h4>Profi-Tipp</h4>
Egal welche Maschine: lass dir Spielraum. Wenn die Rechnung 22 GB sagt und du 24 GB hast, kann ein einziges langes Trainingsbeispiel die Aktivierungen hochjagen und den Lauf bei Schritt 900 von 1000 killen. Kuerzere maximale Sequenzlaenge und Gradient Checkpointing sind die zwei Regler, die dich retten — Lektion 5 zeigt, wo sie sitzen.
</div>

<div class="try-it">
<h4>Probier es aus</h4>
Berechne deine eigene Obergrenze. Nimm deinen GPU-/Unified-Memory-Speicher, multipliziere zur Sicherheit mit 0,8 und schau in die Tabelle: Was ist das groesste Modell, das <em>du</em> mit QLoRA trainieren kannst? Schreib es neben deine Ziel-Karte. Diese Zahl waehlt in Lektion 5 dein Basismodell.
</div>

<div class="checkpoint">
<h4>Checkpoint</h4>
Du kannst den Trainingsspeicher fuer jedes Modell im Kopf schaetzen (voll ≈ 18×, LoRA ≈ 2,5×, QLoRA ≈ 0,7× GB pro Milliarde Parameter), und du kennst die realistische Obergrenze deiner Maschine. Als Naechstes: der Teil, den alle ueberspringen und dann bereuen — der Datensatz.
</div>
