Lokales Python auf dem Mac: Gemma 4, sein Coding-Finetune und ein aktueller Spezialist

Lokales Python auf dem Mac: Gemma 4, sein Coding-Finetune und ein aktueller Spezialist

Gemma 4 12B wird in der Szene als das kompletteste lokale Modell gefeiert. Für reines Python ist die interessante Frage, ob der multimodale Generalist gegen spezialisierte Coder besteht. Ich habe drei Modelle auf einem M3 Max gegeneinander laufen lassen, mit MLX und echter Ausführung des erzeugten Codes, von einfachen Funktionen bis zu einem Arithmetik-Parser, an dem am Ende alle drei scheitern.

Die drei Kandidaten

Im Rennen stehen drei Modelle mit unterschiedlichen Profilen.

Gemma 4 12B (Basis). Googles encoder-freier, multimodaler Generalist, erschienen am 3. Juni 2026 unter Apache 2.0.1 Ein einziges Modell für Text, Bild, Video und Audio. Google hat es nie als Coding-Modell vermarktet.

Gemma 4 12B Coder (Fable5/Composer). Ein Community-Finetune der Basis, gezielt auf verifiziertes Python trainiert. Destilliert aus echten Reasoning-Spuren von Cursor Composer 2.5, von denen nur die behalten wurden, deren Code die Tests bestand, plus einem „second attempt"-Set aus Claude Fable 5 für genau die Fälle, an denen Composer scheiterte.2 Ein lokales Modell, das ein Stück vom Denken der großen Cloud-Modelle gelernt hat, kurz bevor Fable 5 abgeschaltet wurde.

Qwen3-Coder-30B-A3B. Der aktuelle, dedizierte Coding-Spezialist von Alibaba. Trotz 30 Milliarden Parametern ist er ein Mixture-of-Experts, das pro Token nur rund 3 Milliarden aktiviert. Genau das macht ihn auf dem Mac interessant.

Setup

Alle drei laufen lokal über MLX. Ein technisches Detail vorweg: Gemma 4 ist ein Vision-Language-Modell mit der Architektur gemma4_unified. Der gewohnte mlx_lm-Lader weigert sich, man braucht mlx_vlm. Vom Coder-Finetune gibt es keinen fertigen MLX-Build, also habe ich die bf16-Master-Gewichte selbst nach MLX 4bit quantisiert (affine, group size 64, am Ende 4,5 bit pro Gewicht). Qwen3-Coder läuft als reines Text-Modell direkt über mlx_lm.

HardwareApple M3 Max, 64 GB Unified Memory
Gemma 4 Basismlx-community/gemma-4-12B-it-qat-4bit (mlx_vlm)
Gemma 4 Coderyuxinlu1/gemma-4-12B-coder-fable5-composer2.5-v1, selbst nach MLX 4bit konvertiert
Qwen3-Codermlx-community/Qwen3-Coder-30B-A3B-Instruct-4bit (mlx_lm)
Parametertemp 0.2, bis 1536 Tokens
Aufgaben10 Python-Funktionen, jede mit Asserts geprüft

Der Test ist streng: Für jede Aufgabe wird der erzeugte Code extrahiert, in einen Subprozess geschrieben und gegen Asserts ausgeführt. Bestanden heißt, der Code läuft und liefert für alle Testfälle das richtige Ergebnis.

Ergebnisse

Zehn Aufgaben, von is_palindrome über two_sum und die längste gemeinsame Teilfolge bis zu zwei harten Brocken: einem Arithmetik-Parser mit Präzedenz, Klammern und unärem Minus, und der Kanonisierung eines Unix-Pfads.

AufgabeGemma 4 BasisGemma 4 CoderQwen3-Coder 30B-A3B
8 Standard- und Mittelaufgaben8/88/88/8
simplify_pathPASSPASSPASS
calc (Parser, 5 Läufe)1/50/50/5
ø Decode~29 tok/s~44 tok/s~92 tok/s

Auf den acht Standard- bis mittelschweren Aufgaben sind alle drei zuverlässig (vereinzelte Ausreißer in Einzelläufen, etwa beim Versionsvergleich oder bei den römischen Zahlen, verschwanden bei Wiederholung). Getrennt wird das Feld an zwei Stellen: am Parser und beim Tempo.

Der Parser, an dem alle scheitern

Die calc-Aufgabe verlangt einen vollständigen Ausdrucksauswerter mit Operatorpräzedenz, Klammern und unärem Minus. Um Glück oder Pech auszuschließen, habe ich sie fünfmal pro Modell laufen lassen. Das Ergebnis ist deutlich: Gemma 4 Basis löste sie in einem von fünf Läufen, der Coder-Finetune und Qwen3-Coder in keinem.

Die Fehlerbilder unterscheiden sich:

  • Gemma 4 Basis lieferte in vier von fünf Läufen lauffähigen Code mit falschem Ergebnis, einmal korrekt. Der Fehler ist also ein Logikfehler in Präzedenz oder Assoziativität, kein Syntaxfehler. Das Modell schreibt einen plausiblen Parser, der schlicht falsch rechnet.
  • Gemma 4 Coder scheiterte gemischt: mal Syntaxfehler, mal RecursionError, mal falsches Ergebnis.
  • Qwen3-Coder lieferte durchgehend lauffähigen, aber falsch rechnenden Code.

Damit das fair bleibt: Ich habe die Testfälle vorab gegen eine korrekte Referenzimplementierung geprüft, sie sind konsistent. Der Parser ist schlicht zu komplex für einen einzelnen Versuch dieser Modellgrößen bei niedriger Temperatur. Genau das zeigt ein Palindrom-Test nie: Auf Standardaufgaben sind lokale Modelle dieser Klasse stark, an einer Aufgabe mit Präzedenz, Klammern und unärem Minus stoßen sie geschlossen an die Grenze.

Tempo: warum der größte am schnellsten ist

Beim Durchsatz ist die Reihenfolge eindeutig, aber kontraintuitiv: Das mit Abstand größte Modell ist das schnellste. Qwen3-Coder mit 30 Milliarden Parametern generiert rund 92 Tokens pro Sekunde, der Gemma-Coder rund 44, die Gemma-Basis rund 29.

Der Schlüssel ist die Mixture-of-Experts-Architektur. Bei der Token-Generierung wird pro Token das Modell aus dem Speicher gelesen, und der Engpass ist die Speicherbandbreite, nicht die Rechenleistung.3 Ein dichtes 12B-Modell wie Gemma liest dabei alle 12 Milliarden Gewichte. Qwen3-Coder ist zwar 30B groß, aktiviert pro Token aber nur rund 3 Milliarden Parameter, liest also viel weniger pro Schritt und läuft entsprechend schneller. Nicht die Gesamtgröße entscheidet das Tempo, sondern die aktiven Parameter.

Zwischen den beiden Gemma-Varianten zeigt sich ein zweiter Effekt: Derselbe 12B-Unterbau, aber der Coding-Finetune ist rund anderthalbmal so schnell wie die Basis. Die multimodale Basis nutzt einen ausgeprägten internen Thinking-Channel und denkt vor jeder Antwort, der Coder kommt direkter zum Code.

Fazit

Für reines Python lässt sich das Ergebnis klar zusammenfassen.

Auf Korrektheit liegen alle drei nah beieinander. Sie lösen Standard- und mittelschwere Aufgaben zuverlässig und scheitern geschlossen am wirklich harten Parser. Wer eine Aussage über das beste lokale Python-Modell sucht, findet sie also nicht in der Trefferquote auf Alltagsaufgaben, sondern an den Rändern: beim Tempo und bei der Frage, was sonst noch im Modell steckt.

Beim Tempo gewinnt der aktuelle Spezialist deutlich. Qwen3-Coder-30B-A3B ist dank MoE mehr als dreimal so schnell wie die Gemma-Basis und damit für einen interaktiven Workflow die angenehmste Wahl. Wer Gemma 4 lokal zum Coden nutzt, sollte zudem den spezialisierten Finetune nehmen, nicht das Basismodell: gleiche Trefferquote, aber spürbar schneller, weil ohne den Umweg über den Thinking-Channel.

Und über allem steht der Parser. Kein lokales Modell dieser Größe hat ihn zuverlässig gelöst. Das ist die wichtigste Erkenntnis des Tests: Für Standard-Python sind diese Modelle alltagstauglich, für wirklich verwickelte Logik bleibt der Sprung zur Cloud oder zu deutlich größerer Hardware. Gemmas eigentliche Stärke liegt ohnehin woanders, in der Multimodalität, die ein reiner Code-Spezialist nicht hat.

Zu den Grenzen dieses Tests gehört, dass nur der Parser mehrfach gemessen wurde, die übrigen Aufgaben einmal pro Modell bei niedriger Temperatur. Einzelne Ausreißer sind damit möglich. Belastbar ist das Muster: gleiche Liga auf Standardaufgaben, der Finetune schlägt die Basis beim Tempo, der MoE-Spezialist ist mit Abstand am schnellsten, und die wirklich harte Aufgabe überfordert alle drei.

Stand: 19. Juni 2026. Alle Korrektheits- und Performance-Zahlen wurden auf einem Apple M3 Max (64 GB) selbst gemessen, mit Ausführung des erzeugten Codes; die Testfälle wurden gegen eine korrekte Referenz geprüft. Modell- und Technikbelege siehe Fußnoten.


  1. „Google DeepMind Releases Gemma 4 12B: An Encoder-Free Multimodal Model", MarkTechPost, Juni 2026, sowie Googles Ankündigung „Introducing Gemma 4 12B" (Release 3. Juni 2026, Apache 2.0, QAT-Q4 am 5. Juni). https://www.marktechpost.com/2026/06/03/google-deepmind-releases-gemma-4-12b-an-encoder-free-multimodal-model-with-native-audio-that-runs-on-a-16-gb-laptop/ ↩︎

  2. yuxinlu1/gemma-4-12B-coder-fable5-composer2.5-v1, Hugging Face. Finetune von google/gemma-4-12B-it auf verifiziertem Python, destilliert aus Cursor Composer 2.5 (nur bestandene Lösungen) und einem Claude-Fable-5-„second attempt"-Set. https://huggingface.co/yuxinlu1/gemma-4-12B-coder-fable5-composer2.5-v1 ↩︎

  3. „Ollama’s highest performance on Apple Silicon yet with MLX", Ollama Blog, Juni 2026, zum Punkt, dass der Generierungsdurchsatz an der Speicherbandbreite hängt. https://ollama.com/blog/mlx-performance ↩︎