Bis heute lief jede Messung dieser Serie auf einer Grafikkarte. 24 Gigabyte, und damit war die Grenze klar: was mehr braucht, wurde nicht gemessen. Seit heute stecken zwei RTX 3090 im selben Rechner. 48 Gigabyte. Damit wird zum ersten Mal messbar, was vorher nur behauptet werden konnte.
Das Ergebnis in einem Satz: Das kleinere der beiden Modelle löst alle 48 Zellen vollständig richtig und ist dabei neunmal schneller als das doppelt so große — und genau dieses Ergebnis macht den Prüfstand für die nächste Runde unbrauchbar.
Die vier Aufgaben
Jede Aufgabe hat genau eine richtige Antwort — nicht eine gut aussehende. Das ist die Bedingung, unter der sich überhaupt maschinell auswerten lässt. Und jede verlangt als letzte Zeile eine Ergebniszeile in fester Form, damit die Antwort ohne Deutung gelesen werden kann.
rechnung— mehrstufige Preisrechnung. Drei Positionen mit unterschiedlichen Mengen und Preisen. Darauf, in dieser Reihenfolge: Positionsrabatte ab bestimmten Stückzahlen, dann 3 Prozent Skonto auf die Zwischensumme, dann eine Versandpauschale, die ab einem Nettowarenwert entfällt, dann 19 Prozent Umsatzsteuer. Gefragt ist der Bruttoendbetrag auf zwei Nachkommastellen. Ein einziger Betrag ist richtig.plan— kleines Zuordnungsproblem. Vier Vorträge auf vier Zeitfenster, jedes Fenster genau ein Vortrag. Vier Bedingungen der Art „A liegt früher als B“, „C liegt weder um 9 noch um 12 Uhr“, „D liegt unmittelbar nach C“. Genau eine Zuordnung erfüllt alle vier. Gewertet werden alle vier Zeitfenster einzeln.extrakt— Extraktion nach JSON. Aus einer formlosen Notiz sind sechs Felder zu ziehen: Rechnungsnummer, Datum, vollständiger Firmenname, Bruttobetrag, Währungscode und Fälligkeitsdatum. Das letzte steht nicht in der Notiz, sondern muss gerechnet werden — Rechnungsdatum plus Zahlungsziel, über einen Monatswechsel hinweg. Sechs feldgenau prüfbare Werte.raetsel— Zuordnungsrätsel. Fünf Kollegen auf fünf Plätzen, jeder mit genau einem Projekt und genau einem Getränk. Elf Bedingungen, darunter Nachbarschaftsangaben („unmittelbar rechts von“). Gefragt sind alle fünfzehn Zuordnungen — Name, Projekt und Getränk je Platz. Fünfzehn einzeln prüfbare Werte.
„Vollständig richtig“ heißt in den Tabellen weiter unten: alle prüfbaren Werte einer Aufgabe stimmen. Bei rechnung ist das ein Wert, bei raetsel sind es fünfzehn. Eine Antwort mit vierzehn von fünfzehn richtigen Zuordnungen zählt nicht als gelöst.
Die vier Varianten
Gegen jede Aufgabe laufen vier Fassungen desselben Prompts. Aufgabentext und Formatvorgabe sind in allen vier wörtlich identisch. Was sich unterscheidet, ist ausschließlich das, was zusätzlich davor oder dahinter steht:
| Variante | Was zusätzlich im Prompt steht |
|---|---|
nackt | Nichts. Nur die Aufgabe und die Formatvorgabe. Das ist die Vergleichsgrundlage. |
schritte | Ein Satz vor der Formatvorgabe: „Denk Schritt für Schritt.“ |
rolle | Ein Rollensatz vor der Aufgabe, je nach Aufgabe passend — bei rechnung etwa: „Du bist ein erfahrener Buchhalter und rechnest Angebote seit zwanzig Jahren fehlerfrei nach.“ |
beispiel | Eine vollständig durchgerechnete Analogaufgabe mit Lösung, zwischen Aufgabe und Formatvorgabe. Also ein gelöster Fall zum Abschauen, nicht die Lösung der eigentlichen Aufgabe. |
Die Prompts sind dadurch unterschiedlich lang — beispiel ist regelmäßig der längste. Das ist gewollt und wird mitgemessen, denn ein Zusatz kostet Eingabelänge, bevor er irgendetwas nützt.
Was gemessen wurde
Zwei Modelle, die auf einer einzelnen Karte nicht laufen können:
llama3.3:70b— 39,6 GB, dichtes 70-Milliarden-Modell, Quantisierung q4_K_Mqwen3.5:35b-a3b-q8_0— 36 GB, Mixture-of-Experts mit 3 Milliarden aktiven Parametern, Quantisierung Q8
Vier Aufgaben mal vier Varianten mal drei Seeds ergibt 48 Zellen je Modell. num_ctx 32768, num_predict 4000, temperature 0, Denkmodus aus. Ein Aufwärmlauf je Modell, dessen Ergebnis verworfen wird. Der Aufbau ist der aus den Läufen v1 bis v3, unverändert — sonst wäre kein Wert mit einem früheren vergleichbar.
Keine Zelle wurde abgeschnitten. 96 von 96 liegen vor.
Die Zahlen
| Modell | Zellen | vollständig richtig | mittlerer Anteil | Tempo |
|---|---|---|---|---|
llama3.3:70b | 48 | 33 | 0,931 | 10,96 tok/s |
qwen3.5:35b-a3b-q8_0 | 48 | 48 | 1,000 | 96,96 tok/s |
„Mittlerer Anteil“ ist der Durchschnitt der richtig gelösten Teilwerte über alle Zellen — 0,931 heißt also: im Schnitt stimmen 93,1 Prozent der prüfbaren Einzelwerte, auch wenn nur 33 von 48 Antworten vollständig richtig sind.
In Wanduhrzeit je Aufgabe, gemittelt über alle Varianten und Seeds:
| Aufgabe | llama3.3:70b | qwen3.5:35b-a3b |
|---|---|---|
extrakt (sechs Felder aus einer Notiz) | 32,9 s | 3,0 s |
plan (vier Vorträge auf vier Zeiten) | 42,8 s | 8,6 s |
rechnung (Rabatt, Skonto, Versand, Steuer) | 57,1 s | 10,1 s |
raetsel (fünf Personen, fünfzehn Werte) | 166,0 s | 23,6 s |
Beim Zuordnungsrätsel sind das 166 Sekunden für ein überwiegend falsches Ergebnis gegen 23,6 Sekunden für ein richtiges.
Wo das 70B scheitert
Die 15 Fehlschläge von llama3.3:70b verteilen sich nicht. Sie sitzen in zwei Nestern. Gezeigt ist, wie viele der drei Läufe je Feld vollständig richtig waren.
| Aufgabe | nackt(nur die Aufgabe) | schritte(+ „Denk Schritt für Schritt“) | rolle(+ Rollensatz) | beispiel(+ gelöster Analogfall) |
|---|---|---|---|---|
plan | 3/3 | 3/3 | 3/3 | 3/3 |
rechnung | 2/3 | 3/3 | 3/3 | 3/3 |
extrakt | 3/3 | 0/3 | 3/3 | 3/3 |
raetsel | 1/3 | 0/3 | 0/3 | 0/3 |
Das Zuordnungsrätsel bricht das Modell in allen vier Varianten — 1 von 12. Und die Extraktion, die es in drei Varianten fehlerfrei löst, scheitert vollständig, sobald „Denk Schritt für Schritt“ davorsteht. Die übrige Matrix ist makellos.
Was in 48 Gigabyte passt — und was nicht
Das ist der praktisch nützlichste Teil. Zwei 3090 klingen nach viel. Die aktuelle Generation großer Modelle ist trotzdem außer Reichweite:
| Modell | Umfang | passt in 48 GB? |
|---|---|---|
qwen3.5:27b-q8_0 | 30 GB | ja, mit Luft |
qwen3.5:35b-a3b-q8_0 | 39 GB | ja |
llama3.3:70b (q4_K_M) | 43 GB | knapp — siehe unten |
gpt-oss:120b | 65 GB | nein |
mistral-medium-3.5:128b | 80 GB | nein |
qwen3.5:122b-a10b | 81 GB | nein |
nemotron-3-super:120b | 87 GB | nein |
Die Schwelle liegt nicht bei 48, sondern eher bei 44 Gigabyte. Der Rest geht für den Kontextspeicher und die Bildausgabe drauf.
Die 5,1 Prozent, die man nicht sieht
Ollama meldet je geladenem Modell, wie viel davon wirklich im Grafikspeicher liegt. Der Unterschied ist der Teil, der auf der CPU rechnet:
| Modell | gesamt | im VRAM | ausgelagert |
|---|---|---|---|
llama3.3:70b | 48,95 GB | 46,45 GB | 5,1 % |
qwen3.5:35b-a3b-q8_0 | 38,48 GB | 38,48 GB | 0,0 % |
Nichts in der Ollama-Ausgabe weist darauf hin. Kein Hinweis, keine Warnung. Das Modell läuft, es antwortet, und ein Zwanzigstel davon rechnet die CPU mit. Wer den Wert nicht abfragt, hält die 10,96 tok/s für die Leistung von zwei RTX 3090.
Das ist zur Hälfte mein eigener Aufbau. num_ctx stand auf 32768, weil sonst kein Wert dieser Serie mit einem früheren vergleichbar wäre. Genau dieser Kontextspeicher drückt llama3.3:70b über die Kante. Bei kleinerem Kontext passte es vollständig hinein. Die 10,96 tok/s sind also nicht das Beste, was dieses Modell auf dieser Hardware kann — sie sind das Beste unter einer Randbedingung, die ich der Vergleichbarkeit zuliebe gesetzt habe. Wie viel es ohne diese Bedingung wäre, weiß ich nicht; das ist nicht gemessen.
Zwei alte Befunde, unabhängig bestätigt
Der Seed wirkt nicht, die Position des Laufs wirkt
Vorgestern stand hier, dass Seeds bei diesen Modellen nichts bewirken und stattdessen der jeweils erste Lauf abweicht. Das war auf elf Modellen und einer einzelnen Grafikkarte gemessen. Hier ist dieselbe Signatur, auf neuer Hardware und auf einem Modell, das im damaligen Datensatz nicht vorkam — beim Zuordnungsrätsel, bei dem fünfzehn Werte einzeln geprüft werden:
| Variante | Seed | Punkte | erzeugte Token |
|---|---|---|---|
nackt | 42 | 15/15 | 1404 |
nackt | 43 | 10/15 | 1508 |
nackt | 44 | 10/15 | 1508 |
schritte | 42 | 13/15 | 2122 |
schritte | 43 | 13/15 | 1725 |
schritte | 44 | 13/15 | 1725 |
Seed 43 und Seed 44 liefern identische Ergebnisse — gleiche Punktzahl, gleiche Tokenzahl, in beiden Varianten. Seed 42 weicht ab. Und Seed 42 ist jeweils der erste Lauf. Wären die Seeds wirksam, müssten sich alle drei unterscheiden. Sie tun es nicht.
„Denk Schritt für Schritt“ schadet der Extraktion
Am Montag stand hier, dass dieser Zusatz auf einer von vier Aufgaben schadet — auf der Extraktion, also dem Herausziehen von sechs Feldern aus einer formlosen Notiz. Der naheliegende Einwand lautete: die gemessenen Modelle sind zu klein, ein größeres verkraftet den Zusatz. llama3.3:70b ist mehr als doppelt so groß wie alles, was damals gemessen wurde. Ohne den Zusatz drei von drei vollständig richtig. Mit ihm null von drei. Auf derselben Aufgabe.
Der Einwand ist damit ausgeräumt. Nicht widerlegt für alle Modellgrößen — aber für diese eine Vergrößerung, und das war die, die zur Debatte stand.
Was hier nicht belegt ist
Die naheliegende Überschrift wäre „Mixture-of-Experts schlägt dichtes Modell“. Sie steht nicht da, weil die Daten sie nicht tragen. Die beiden Modelle unterscheiden sich in mindestens vier Dingen gleichzeitig:
- Architektur — MoE mit 3 Milliarden aktiven Parametern gegen dicht
- Quantisierung — Q8 gegen q4_K_M
- Erscheinungsjahr — anderthalb Jahre Abstand
- Ausführung — eines passt vollständig in den Grafikspeicher, das andere nicht
Welcher dieser vier Unterschiede den Abstand erzeugt, ist aus zwei Modellen nicht zu bestimmen. Belegt ist ausschließlich: auf diesem Aufgabensatz ist qwen3.5:35b-a3b bei Q8 fehlerfrei und rund neunmal schneller als llama3.3:70b bei q4_K_M.
Der Prüfstand ist an seiner Decke
48 von 48 ist kein gutes Ergebnis. Es ist ein Messproblem. Über ein Modell, das jede Zelle löst, lässt sich genau eine Aussage treffen: es ist nicht gescheitert. Wie viel Reserve es hat, ob ein anderes Modell besser wäre, wo seine Grenze liegt — nichts davon ist noch messbar. Ein Aufgabensatz, den der Prüfling vollständig löst, misst nur noch sich selbst.
Deshalb läuft seit heute Nachmittag ein zweiter Satz mit sechs Aufgaben. Die Bewertungsregeln standen fest, bevor die erste Zelle gemessen wurde. Was der Prüfling dort jeweils tun soll:
rechnung2— dieselbe Art Rechnung wie oben, aber mit zwei Steuersätzen nebeneinander (19 und 7 Prozent), Rabatt vor Skonto, und gerundet wird erst am Ende je Steuersatz. Gefragt sind drei Beträge: brutto je Steuersatz und die Summe.plan2— sechs Vorträge auf sechs Zeitfenster statt vier auf vier. Fünf Bedingungen, darunter „F liegt echt zwischen A und B“. Sechs prüfbare Werte.extrakt2— neun Felder aus einer Notiz mit drei eingebauten Fallen: drei Datumsangaben, von denen nur eine das Rechnungsdatum ist; ein „vertreten durch Herrn …“, der nicht der Kunde ist; eine IBAN mit Leerzeichen, die normalisiert werden muss. Dazu zwei gerechnete Fristen und ein gerechneter Bruttobetrag.widerspruch— fünf Pakete auf zwei Transporter verteilen, unter Bedingungen, die erfüllbar aussehen, aber unerfüllbar sind. Richtig ist die Antwort „keine Lösung“ — zusammen mit den beiden Gesamtgewichten, die nach den Bedingungen nötig wären. Wer die Ausrede rät, ohne zu rechnen, bekommt die Zahlen nicht.trace— gegeben ist eine kleine Python-Funktion mit einer Schleife, einer Fibonacci-Folge und einer Verzweigung nach Teilbarkeit. Gefragt sind zwei ihrer Rückgabewerte. Kein Spielraum in der Bewertung.raetsel— das Zuordnungsrätsel von oben, unverändert. Anker: nur über diese eine Aufgabe sind alter und neuer Datensatz überhaupt verknüpfbar.
Bevor gemessen wurde, ist der Prüfer selbst geprüft worden: die bekannten richtigen Antworten müssen volle Punktzahl bekommen, tolerierbare Schreibweisen ebenfalls (1.924,70 EUR so gut wie 1924.70), die eingebauten Fallen dürfen es nicht, und eine Antwort ohne Ergebniszeile muss null geben. Ein Prüfer, der die richtige Antwort nicht erkennt, erzeugt einen Reihenfehler über den ganzen Lauf — und der fällt in den Messdaten nicht auf, weil dort alles gleichmäßig falsch aussieht.
Drei eigene Fehler
Erstens. Beim Zwischenstand stand in meiner Auswertungstabelle für das Zuordnungsrätsel eine leere Zelle, und ich habe sie als „null von acht richtig“ gelesen. Das war ein Darstellungsartefakt der Auswertung, nicht ein Messwert. Tatsächlich war es eine von acht. Eine Null, die aus einer leeren Tabellenzelle stammt, ist kein Ergebnis — sie ist ein fehlender Wert, und die beiden sehen gleich aus.
Zweitens. Die 5,1 Prozent Auslagerung oben. Ich habe den Kontextspeicher aus Gründen der Vergleichbarkeit auf 32768 festgenagelt und dabei nicht bedacht, dass genau diese Festlegung eines der beiden Modelle über die Speichergrenze drückt. Das Ergebnis ist gültig, aber es ist kein Vergleich zweier Modelle unter gleichen Bedingungen — eines lief benachteiligt, und zwar durch meinen Aufbau, nicht durch seine Eigenschaften.
Drittens, und der lehrreichste: am selben Tag lief eine Datensicherung, deren Skript am Ende ein Gesamturteil schreibt. Das Urteil lautete „OK“. Im Bericht darüber stand, zwei Zeilen höher, der Rückgabewert 9 — was in dieser Werkzeugfamilie „Dateien konnten nicht kopiert werden“ bedeutet. Die Prüfung auf genau diesen Fall stand im Skript und griff daneben, weil die Ergebnisliste neben den Ergebnissen auch die Statusmeldungen der Funktion enthielt und diese kein Feld für den Rückgabewert haben.
Nicht der Kopiervorgang hat versagt, sondern seine Bewertung — und das ist der schlimmere Fall, weil ein Fehler als Erfolg ausgewiesen wird. Es ist derselbe Gedanke, der oben den Selbsttest der Prüffunktionen erzwingt: ein Programm, das Erfolg meldet, ist kein Nachweis für Erfolg. Der Nachweis ist ein zweiter, unabhängiger Blick auf das Ergebnis. Im Sicherungsskript fehlte er. Im Prüfstand steht er jetzt drin.
Der Aufbau, für die Nachrechner
- Zwei RTX 3090, Treiber 610.88, zusammen 48 GB. Kein NVLink — die Brücke ist nicht gesteckt, beide Karten melden alle Verbindungen als inaktiv.
- Die zweite Karte hängt mit acht statt sechzehn PCIe-Bahnen an. Für Inferenz kaum spürbar, weil zwischen den Karten wenig verschoben wird — beim Laden eines 40-GB-Modells sehr wohl.
- Ollama 0.32.5,
OLLAMA_FLASH_ATTENTION=1,OLLAMA_KV_CACHE_TYPE=q8_0. - Unter Last erreichten die Karten 77 und 73 Grad bei 201 und 221 Watt — von 350 Watt Spezifikation. Die obere Karte läuft durchgehend drei bis vier Grad wärmer.
Als dieser Text geschrieben wurde, lief der schwere Satz noch. Seine Zahlen stehen deshalb im nächsten Beitrag und nicht in diesem — vollständig oder gar nicht. Beim vierten Teil dieser Serie habe ich einen Abschnitt nach zwei von vier Modellen geschrieben, und das dritte hat das Urteil umgedreht. Einmal reicht.