Zurück zum Blog

Warum ich Gemma 3n nicht lokal trainieren konnte (und warum ich stattdessen Vertex AI verwende)

2025-10-165 min read

Ich habe an einer Aussprache-Coaching-App gearbeitet, die eine multimodale KI benötigt, die sowohl Text als auch Audio verstehen kann. Die App verwendet derzeit Googles native Audiomodelle von Gemini, aber ich wollte ein dediziertes Modell für das Aussprache-Coaching feinabstimmen. Googles Gemma 3n schien mit seiner nativen Audiounterstützung über den Universal Speech Model Encoder perfekt zu sein. Ich habe ein MacBook Pro M4 Pro mit 48 GB RAM. Das sollte doch wohl ausreichen, um ein Modell mit 5 Milliarden Parametern lokal zu trainieren, oder?

Spoiler: Das tut es nicht. Hier ist, was ich aus dem Scheitern gelernt habe.

Warum ich lokales Training versucht habe

Der Reiz lag auf der Hand:

  • Keine Kosten: Cloud-GPU-Training kostet 2–5 $ pro Versuch auf Diensten wie RunPod oder Vast.ai
  • Datenschutz: Meine Trainingsdaten bleiben lokal
  • Schnelle Iteration: Kein Hochladen von Datensätzen oder Konfigurieren von Cloud-Umgebungen
  • Praktisches Lernen: Ich wollte mit PyTorch-Trainingsskripten experimentieren, Speicheroptimierungstechniken verstehen und durch Versuch und Irrtum lernen. Lokal kann ich Code ändern und in Sekunden neu versuchen, anstatt in die Cloud bereitzustellen und auf die Ausführung der Skripte zu warten.

Ich hatte 988 Trainingsbeispiele, die Aussprachefehler, Analyse der Sprechweise und Coaching-Gespräche abdeckten. Es schien ein perfekter Kandidat für ein nächtliches lokales Training zu sein.

Was bedeutet das Training eines Modells eigentlich?

Kurze Klarstellung: Wenn Leute von „Training“ sprechen, meinen sie möglicherweise zwei sehr unterschiedliche Dinge.

Training von Grund auf ist das, was Google und OpenAI tun. Man beginnt mit Zufallszahlen und bringt einem neuronalen Netzwerk alles von Null an bei. Dies erfordert Milliarden von Textbeispielen, Hunderte von GPUs und Monate an Rechenzeit. Es ist teuer und langsam.

Feinabstimmung (Fine-Tuning) bedeutet, ein bereits trainiertes Modell zu nehmen und ihm seine spezifische Aufgabe beizubringen. Die harte Arbeit ist bereits erledigt. Das Modell versteht Sprache und logisches Denken. Man zeigt ihm nur sein spezifisches Format und seinen Bereich. So als würde man jemanden einstellen, der bereits programmieren kann, und ihm den eigenen Code beibringen, anstatt jemandem das Programmieren von Grund auf beizubringen.

Für meinen Anwendungsfall möchte ich eine Feinabstimmung. Das Modell versteht Englisch und Aussprache bereits. Ich muss ihm nur beibringen, Feedback in meinem Format zu geben.

Wie man mit Hugging Face feinabstimmt

Hugging Face macht diesen gesamten Prozess viel einfacher, als er sein sollte. Sie hosten Tausende von vortrainierten Modellen und stellen Python-Bibliotheken zur Verfügung, um sie feinabzustimmen. Man braucht keinen Doktortitel, um das zu tun.

Hier ist der grundlegende Arbeitsablauf:

from transformers import AutoProcessor, AutoModelForImageTextToText

# Modell und Prozessor herunterladen
processor = AutoProcessor.from_pretrained("google/gemma-3n-E2B-it")
model = AutoModelForImageTextToText.from_pretrained("google/gemma-3n-E2B-it")

Zwei Codezeilen. Das lädt ein KI-Modell mit 5,4 Milliarden Parametern auf Ihren Laptop herunter. Der processor wandelt Ihre Daten in das richtige Format um, und model ist das neuronale Netzwerk selbst.

Dann verwenden Sie die Klasse Trainer, um das Training tatsächlich durchzuführen:

from transformers import Trainer, TrainingArguments

training_args = TrainingArguments(
output_dir="outputs/gemma3n",
num_train_epochs=3,
per_device_train_batch_size=1,
learning_rate=3e-5,
)

trainer = Trainer(
model=model,
args=training_args,
train_dataset=my_dataset,
)

trainer.train() # Training starten!

Das ist großartig, weil man all die Low-Level-Dinge wie das Schreiben von Gradientenabstiegs-Schleifen und die Verwaltung von Checkpoints überspringt. Der Nachteil? Man weiß nicht wirklich, was unter der Haube passiert, insbesondere wie viel Speicher alles verbraucht. Genau das war mein Problem.

Das Speicherproblem

Das Training eines großen Sprachmodells erfordert, dass mehrere Dinge gleichzeitig im Speicher Platz finden:

  1. Modellgewichte: Für Gemma 3n E2B (5,4 Mrd. Parameter) sind das ca. 11 GB in Float16
  2. Gradienten: Weitere ca. 11 GB (gleiche Größe wie Gewichte)
  3. Optimierer-Zustände: Adam speichert 2 Zustände pro Parameter, was ca. 22 GB hinzufügt
  4. Aktivierungen: Zwischenergebnisse der Berechnung
  5. Batch-Daten: Die gerade verarbeiteten Trainingsbeispiele

Gesamt: 50–60 GB für das kleinere E2B-Modell, 70–80 GB für E4B. Meine 48 GB RAM würden nicht ausreichen.

Was ich versucht habe

Versuch 1: Volle Feinabstimmung mit E4B
Speicherfehler (Out of Memory) bei der Initialisierung des Optimierers. Das Modell wurde geladen (16 GB), aber der Optimierer konnte seinen Zustand nicht zuweisen.

Versuch 2: Kleinere Batch-Größen
Die Reduzierung von batch_size von 2 auf 1 verzögerte den OOM-Fehler nur bis zum Backward Pass.

Versuch 3: LoRA mit E4B
LoRA (Low-Rank Adaptation) trainiert nur kleine Adapter-Schichten anstelle des gesamten Modells, wodurch die trainierbaren Parameter von 7,8 Mrd. auf 40 Mio. (0,5 %) reduziert werden. Aber das eingefrorene Basismodell muss immer noch in den Speicher passen: 59 GB nur für E4B.

Versuch 4: LoRA mit E2B
Das hat fast funktioniert. Das kleinere E2B-Modell mit LoRA benötigte 40–45 GB und ließ 3–8 GB Spielraum. Das Training begann und lief einige Stunden, bevor es bei bestimmten Batches mit längeren Sequenzen zu Speicherfehlern kam.

Warum es letztendlich scheiterte

Selbst mit aggressiven Optimierungen (LoRA, batch_size=1, kein Gradienten-Checkpointing) waren 48 GB nicht ausreichend für ein konsistentes Training. Die Speichernutzung variierte je nach Beispiel:

  • Kurze Beispiele: 38–42 GB (in Ordnung)
  • Lange Beispiele: 46–50 GB (Absturz)

Ich hätte es wahrscheinlich zum Laufen bringen können, indem ich längere Beispiele herausfiltere oder max_length auf 1024 Tokens reduziere, aber an diesem Punkt kompromittiere ich die Fähigkeiten des Modells, um den Hardwarebeschränkungen gerecht zu werden.

Umstieg auf Vertex AI

Nach drei Tagen fehlgeschlagener Versuche wechsle ich für das Training zu Googles Vertex AI:

  • A100 40GB GPU: Reichlich Speicher für das E4B-Modell mit LoRA
  • Verwaltete Infrastruktur: Kein Debugging von Speicherproblemen, keine Abstürze
  • Kosten: ca. 3–5 $ für einen kompletten Trainingslauf (3 Epochen)
  • Zeit: 2–3 Stunden im Vergleich zu meinen lokalen Versuchen von 6–9 Stunden

Ich werde einen separaten Blogbeitrag über den Vertex AI-Trainingsprozess schreiben, einschließlich:

  • Einrichtung benutzerdefinierter Trainingsjobs mit Gemma 3n
  • Hochladen von Datensätzen in Cloud Storage
  • Überwachung des Trainings mit TensorBoard
  • Bereitstellung des trainierten Modells für Vertex AI Endpunkte

Wann kann man lokal trainieren?

Lokales Training auf Apple Silicon ist möglich, wenn:

  • Ihr Modell kleiner ist: Modelle mit 1–3 Milliarden Parametern passen mit LoRA bequem in 48 GB
  • Sie mehr RAM haben: Das M4 Max mit 128 GB würde Gemma 3n E2B problemlos bewältigen
  • Sie Quantisierung verwenden: 4-Bit- oder 8-Bit-Quantisierung reduziert den Speicher weiter, erhöht aber die Komplexität

Wichtigste Erkenntnisse

  • Speicher ist der Engpass: 48 GB gemeinsamer Speicher klingen nach viel, bis man versucht, Modelle mit über 5 Milliarden Parametern zu trainieren. Allein die Optimierer-Zustände können den Speicherbedarf verdoppeln oder verdreifachen.
  • LoRA hilft, ist aber keine Wunderwaffe: Es reduziert die trainierbaren Parameter um 99 %, aber die eingefrorenen Basismodellgewichte müssen während der Vorwärts- und Rückwärtsdurchläufe immer noch in den Speicher passen.
  • Cloud-Training ist kosteneffizient: 3–5 $ für einen Trainingslauf sind angemessen im Vergleich zu Tagen des Debuggens von OOM-Fehlern und fehlgeschlagenen Experimenten.
  • Kennen Sie Ihre Hardwaregrenzen: Der gemeinsame Speicher von Apple Silicon ist hervorragend für Inferenz und das Training kleinerer Modelle (1–3 Milliarden Parameter), aber das zuverlässige Training von Modellen mit über 5 Milliarden Parametern erfordert dedizierten GPU-VRAM.

Ressourcen

Bleiben Sie auf dem Laufenden

Erhalten Sie die neuesten Beiträge und Einblicke in Ihren Posteingang.

Unsubscribe anytime. No spam, ever.