Qwen3.5-0.8B: Eine KI hat 0,016 % seiner Gewichte editiert, und die Denkschleifen fielen von 93 % auf etwa 32 %

Kein Training, zwei editierte Schichten. Am Tokenlimit abgeschnittene Antworten fielen von 93 % auf etwa 32 %. Bei 50 Aufgaben: 62 % richtig statt 8 %.

Eine andere KI hat in Qwen3.5-0.8B, einem kleinen offenen Reasoning-Modell, an zwei Stellen je 64 Spalten von Zahlen geändert, und zwar ganz ohne Training. Wir haben das editierte Modell und das Original nebeneinander auf einer RTX 4090 in unserer Cloud laufen lassen, mit denselben 50 Matheaufgaben und denselben Einstellungen. Das editierte kam auf 62 % richtige Antworten. Das Original auf 8 %, weil 96 % seiner Antworten nie endeten: Es dachte im Kreis, bis es das Limit von 32.768 Tokens (Wortstücken) erreichte. Wenn du kleine Reasoning-Modelle auf deinen eigenen GPUs betreibst, geht es hier genauso um Kosten wie um Genauigkeit. Eine Antwort, die nie endet, belegt einen Platz auf deiner Karte, bis das Limit sie abschneidet, und meistens kommt dabei keine Antwort heraus. Die editierte Datei lädt und läuft mit demselben Befehl wie das Basismodell. Geprüft haben wir nur Mathe mit eingeschaltetem Denken.

Dieselbe Frage, dasselbe Sampling, dieselbe GPU. Links schreibt das editierte Qwen3.5-0.8B 17.077 Tokens, hört von selbst auf und setzt die richtige Antwort 9 in die Box (grüner Kasten). Rechts läuft das Basismodell bis zum Limit von 32.768 Tokens, prüft Zahlen einzeln, „Let's check 3309... 3311... 3313...“, und antwortet nie (roter Kasten).

Die Frage auf dem Bild ist einfach: Wie viele Teiler hat 196? Die Antwort ist 9. Das editierte Modell fand sie und hörte auf. Das Basismodell begann, Zahlen jenseits von 3.300 einzeln aufzuzählen, und war immer noch dabei, als das Limit es abschnitt.

Bei unseren 50 Wettbewerbs-Matheaufgaben (MATH-500)EditiertBasis
Richtige Antworten62 %8 %
Am Limit von 32.768 Tokens abgeschnittene Antworten20 %96 %
Durchschnittliche Tokens pro Antwort20.44431.832

Ein Modell, das das Ende nicht findet, und ein Edit, der ihm eines gibt

Der Edit macht genau eine Sache: Er entfernt die Gewohnheit, die das Modell in Schleifen laufen ließ. Die Mathematik, die das Modell richtig löst, steckte schon vorher drin.

Qwen3.5-0.8B gehört zur Qwen3.5-Familie und hat etwa 0,8 Milliarden gelernte Zahlen (die Gewichte). Bevor ein Reasoning-Modell antwortet, schreibt es einen Notizblock: Es denkt laut nach und gibt dann das Ergebnis aus. Qwens eigene Model Card warnt, dass diese Größe „more prone to entering thinking loops“ ist als ihre Geschwister. Stell dir eine Band vor, die das Ende eines Songs nicht findet. Alle spielen noch in der richtigen Tonart, aber das Outro dreht sich im Kreis, bis der Tontechniker den Stecker zieht. Auf einer GPU ist der Tontechniker das Tokenlimit, und jedes Token, das das Modell schreibt, kostet Zeit auf der Karte.

Am 2. November 2026 veröffentlichte ein Team am MIT CSAIL einen Blogpost über das, was es Weight-Space Programming nennt. In einem ihrer Experimente bekommt ein großes Modell, das sie GPT-6 Astra nennen, ein Werkzeug, um die Zahlen des kleinen Modells zu untersuchen und zu ändern. Dazu bekommt es Übungsaufgaben, keine davon aus dem Test, auf dem es bewertet wird. Sein Budget ist eine Anzahl von Übungsläufen des kleinen Modells: 10, 25 oder 50. Astra beobachtet, was das Modell tut, liest sein Inneres und ändert die Zahlen direkt. Keinerlei Training.

Von den ersten 96 Übungsantworten des Basismodells liefen 85 bis zum Limit von 32.768 Tokens. Mit 50 Läufen fand Astra das Muster hinter den Schleifen an zwei Stellen im Modell und löschte es dort aus jeweils 64 Spalten von Zahlen. Das sind 131.072 Gewichte des gesamten Modells: 0,016 %. Auf MATH-500, einem Standardsatz von 500 Wettbewerbs-Matheaufgaben, berichten die Autoren einen Sprung von 7,9 % auf 48,1 % richtige Antworten. Der Anteil der am Limit abgeschnittenen Antworten fiel von 93 % auf 33,1 %. Ähnliche Sprünge berichten sie auf zwei weiteren Tests, die wir nicht wiederholt haben (siehe Anhang).

Die Autoren haben die genaue Änderung veröffentlicht und ein Skript, das sie nachbaut. Der Hugging-Face-Nutzer akhaliq hat die editierte Modelldatei nachgebaut, sie auf allen 500 Aufgaben neu laufen lassen und eine öffentliche Demo online gestellt. Sein Lauf kam auf 51,0 % richtige Antworten, mit 31,6 % am Limit abgeschnittenen. Wir sind auf die Geschichte im News-Video von AI Search vom 8. November gestoßen.

62 % richtig gegen 8 % auf einer RTX 4090, und die Schleifen fallen von 96 % auf 20 %

Mit den Evaluationseinstellungen der Autoren hörte die editierte Datei auf unserer Hardware mit den meisten ihrer Schleifen auf und beantwortete fast achtmal so viele Aufgaben richtig.

Beide Modelle liefen nebeneinander auf einer einzigen RTX 4090 mit 24 GB in unserer Cloud, jedes hinter seinem eigenen API-Endpoint. Beide nutzten vLLM, die Open-Source-Serving-Engine, die auch akhaliqs Lauf verwendete, mit eingeschaltetem Denk-Notizblock und den Zufallseinstellungen der Autoren.

Die Fragen waren die ersten 50 MATH-500-Aufgaben in der Reihenfolge von akhaliqs Lauf, ein Versuch pro Aufgabe, bis zu 32.768 Tokens pro Antwort. Alle 50 liefen pro Modell gleichzeitig, beide Modelle zur selben Zeit. Bewertet haben wir mit dem Bewertungsskript der Autoren.

EditiertBasis
Richtig31 von 50 (62 %)4 von 50 (8 %)
Abgeschnitten bei 32.768 Tokens10 (20 %)48 (96 %)
Durchschnittliche Tokens pro Antwort20.44431.832

Unsere 62 % liegen über beiden veröffentlichten Werten. Das liegt an der kleinen Stichprobe: Auf diesen 50 Aufgaben kam akhaliqs Lauf im Schnitt auf 54 %, und unsere Antworten stimmten bei 42 von 50 mit seinem üblichen Ergebnis überein. Die 8 % und 96 % des Basismodells liegen genau auf den Werten der Autoren.

Die beiden Male, in denen das Basismodell eine Antwort zu Ende brachte, war sie richtig. Seine anderen 2 richtigen Antworten kamen aus Schleifen, die die richtige Zahl schon geschrieben hatten, bevor das Limit sie abschnitt.

Die Ersparnis: 1,02 Millionen Tokens statt 1,59 Millionen für dieselben 50 Aufgaben

Auf denselben 50 Aufgaben brauchte das editierte Modell im Schnitt 20.444 Tokens pro Antwort und das Basismodell 31.832, und 20 % der editierten Antworten wurden am Limit abgeschnitten gegenüber 96 %. Pro richtiger Antwort: etwa 5 Minuten Batch-Zeit gegenüber 32 Sekunden (398.000 Tokens gegenüber 33.000). Dieser Abstand beruht auf nur 4 richtigen Antworten des Basismodells, nimm ihn also als grobe Schätzung.

Eine GPU bedient eine feste Zahl von Antworten gleichzeitig. Beim Basismodell steckte fast jeder dieser Plätze in einer Schleife fest, bei der Teiler-Frage bis zu 12,6 Minuten lang. Das editierte Modell schreibt immer noch lange Antworten, aber die meisten enden mit einem Ergebnis.

Warum nicht einfach das Limit senken oder den Stream beobachten und eine Schleife abbrechen, wie Qwens Card vorschlägt? Damit scheitert eine Schleife früher, und das spart Zeit auf der Karte. Das haben wir beim Basismodell nicht ausprobiert, ebenso wenig das Ausschalten des Denkens, also teste das, bevor du die Dateien tauschst.

Wo es aufhört zu funktionieren: Es entfernt Schleifen, es fügt kein Können hinzu

Der Edit hat eine schlechte Gewohnheit behoben. Klüger hat er das Modell nicht gemacht, und das sagen die Autoren selbst.

Sie haben denselben Ansatz bei Gemma 3 270M versucht, einem Modell, das selten in Schleifen gerät: Nur 8,5 % seiner Antworten erreichten das Limit. Astra konnte es nicht verbessern. Es blieb auf MATH-500 zwischen 6,8 % und 7,7 %, egal mit welchem Budget. In ihren Worten: „Editing weights could remove an obstacle that hid an ability, but it could not add an ability the model lacked.“ Erwarte also nicht, dass das bei einem Modell funktioniert, dessen Problem keine Schleifen sind.

Auch editiert lief noch ein Fünftel unserer Antworten in eine Schleife, und 3 weitere endeten ohne finale Antwort. Die Antworten sind lang, eine einzelne Antwort braucht allein etwa eine Minute. Und der Sprung kam erst mit dem größten Budget: Mit 10 oder 25 Läufen ließen Astras Edits das Modell bei 12,3 % und 14,1 %.

Auch das Video von AI Search warnt vor dem Hype und erwähnt eine Analyse, die das unveränderte Modell angeblich allein durch geänderte Einstellungen auf etwa 44 % bei MATH-500 brachte. Das Video nennt keine Quelle, und wir haben es nicht geprüft.

Getestet haben wir nur Mathe mit eingeschaltetem Denken. Allgemeinen Chat, das Befolgen von Anweisungen, ausgeschaltetes Denken und Bilder haben wir mit der editierten Datei nicht geprüft. Laut Qwens Card läuft das 0.8B-Modell standardmäßig mit ausgeschaltetem Denken.

Welche GPU: Das editierte Modell kam unter einer emulierten Speichergrenze von 6 GB ans Ziel

Diese Prüfung zeigt, dass das Modell unter jeder Grenze startet und lange Antworten zu Ende bringt. Wir nahmen fünf Aufgaben, die es im Batch schon gelöst hatte, und unter 6 GB lieferte es dieselben fünf richtigen Antworten wie unter 8 GB, in derselben Zeit. Bei 5 GB kam es erst durch, nachdem wir den für parallele Unterhaltungen reservierten Platz von 256 auf 32 reduziert hatten. Bei 4 GB startete es nicht.

Wie viel Speicher braucht es? Speichergrenzen auf der RTX 4090 mit dem vollen Kontext von 34.816 Tokens, editiertes Modell allein: Grenze 8 GB, 5 von 5 richtig. Grenze 6 GB, die kleinste, die bestanden hat, 5 von 5 richtig mit denselben Antworten. Grenze 5 GB, nur mit 32 Plätzen. Grenze 4 GB, startet nicht. Fußzeile: emulierte Speichergrenzen, keine echten kleinen Karten, Gewichte 1,63 GiB.

Jede Grenze unter 24 GB war ein Limit, das wir auf der 4090 gesetzt haben. Eine echte Karte mit 6 oder 8 GB haben wir nicht laufen lassen. Eine echte kleine Karte hat außerdem langsameren Speicher, rechne also damit, dass sie langsamer läuft als hier. Die Grenze von 4 GB mit einem kürzeren Antwortlimit oder eine komprimierte Version des Modells haben wir nicht ausprobiert.

Auf InferenceKey: das Basismodell und sein editierter Zwilling auf einer 24-GB-Karte, bereit in 7 Minuten

Eine Karte mit 24 GB hielt das Basismodell und seinen editierten Zwilling gleichzeitig, jedes mit weniger als der halben Karte, mit 16,9 GiB in der Spitze. Beide waren 418 Sekunden, nachdem wir sie angefordert hatten, bereit, von einer kalten Maschine aus. Etwa drei Minuten gingen für die Installation von vLLM drauf und etwa drei weitere für das Aufwärmen der Engine selbst. Sobald diese Installation auf der Maschine lag, war eine neue Engine in etwa einer Minute bereit.

Unsere API kann einige Einstellungen noch nicht pro Anfrage ändern, etwa den Denk-Schalter, deshalb haben wir sie auf dem Server für alle Aufrufer festgelegt.

Ein Problem, auf das du stoßen wirst: Eine über den Endpoint gestreamte Antwort des Basismodells brach nach 152 Sekunden ab, ohne Fehler, den unser Client sehen konnte, und ohne Endmarkierung. Für einen Client sieht eine abgeschnittene Antwort aus wie eine fertige. Wir vermuten den Stille-Timeout der Plattform von zwei Minuten, der einen Fehler schicken würde, den unser Beispielskript ignoriert, aber die Ursache ist nicht bestätigt. Bis dahin: Prüf bei jeder gestreamten Antwort, dass sie ordentlich als beendet markiert ist, bevor du ihr vertraust.

Solltest du es nutzen? Probier es, wenn du Qwen3.5-0.8B mit eingeschaltetem Denken betreibst

  • Wenn du Qwen3.5-0.8B schon mit eingeschaltetem Denken betreibst und ihm Mathe schickst: Probier den Tausch. Gleiche Größe, gleiche Lizenz, und es läuft auf derselben Engine.
  • Wenn du die beste Mathe aus einem winzigen Modell willst: Sieh es als Reparatur, nicht als Upgrade. Es holt heraus, was das Modell schon wusste, und es schreibt immer noch lange Antworten.
  • Wenn du eine GPU dimensionierst: Das Ergebnis mit 6 GB wurde auf einer 24-GB-Karte emuliert, nicht auf einer echten 6-GB-Karte; siehe den Abschnitt zum Speicher.
  • Wenn du ein anderes kleines Modell betreibst, das in Schleifen läuft: Das ist eine veröffentlichte Methode mit Logs, kein Produkt. Das Ergebnis mit Gemma zeigt, dass sie nur hilft, wenn Schleifen das Problem sind.

Um denselben Vergleich auf deiner eigenen GPU-Maschine laufen zu lassen, nimm das SDK-Beispiel für den Gewichts-Edit von Qwen3.5-0.8B mit IK_WITH_BASELINE=1. Es braucht eine registrierte NVIDIA-Maschine (einen Worker) mit einer 24-GB-Karte und etwa 15 GB freiem Plattenplatz. Die Zugangsschlüssel und den lokalen SDK-Build findest du in der Schritt-für-Schritt-Anleitung unten. Am Ende löscht es beide Workloads.

Für Ingenieure

Credits

  • Qwen-Team: Qwen/Qwen3.5-0.8B, Apache-2.0, einschließlich der Warnung vor Schleifen in der Card.
  • Rikiya Takehi, Jayden Teoh (gleicher Beitrag), Alex Zhang, Omar Khattab, MIT CSAIL: die Methode, Experiment 8, der bitgenaue Diff und apply_edit.py, das den Edit nachbaut und per Hash prüft, sowie die Logs. Blogpost (2. November 2026), Checkpoint, Logs und Diffs. Das editierende Modell ist „GPT-6 Astra“.
  • akhaliq, mit ML Intern auf HF Jobs (2026-11-02): hat den Edit auf der CPU nachgebaut, per Hash geprüft und den Hugging-Face-Checkpoint samt Card gebaut; der unabhängige vollständige Lauf über MATH-500; der Demo-Space (zuerst veröffentlicht als akhaliq/weight-space-programming-demo, Gradio auf ZeroGPU).
  • AI Search: wo wir es entdeckt haben, Video 9RIK3A24ZxA, Abschnitt 12:01 bis 16:59.
  • Prüfung: Das Log-Repository der Autoren enthält den genauen Diff zum Basismodell und apply_edit.py, das den sha256 jedes nachgebauten Tensors prüft; akhaliq hat damit den Checkpoint nachgebaut und geprüft.
  • Unser Teil: beide Modelle auf einer Karte über InferenceKey bereitgestellt (die Tensor-Hashes haben wir nicht nachgerechnet; die Datei lief so, wie sie veröffentlicht wurde), der Vergleich auf 50 Aufgaben, die Aufnahmen über die Endpoints, die Speicherleiter, das SDK-Beispiel.

Modell und Edit

PunktWert
Editiertes RepoRikiyaT/Qwen3.5-0.8B-weight-space-programming, sha d1671a178705bcab7644806d23c535517f35723b, Apache-2.0, ein bf16-Shard mit 1.746.943.032 Bytes (1,75 GB, 1,63 GiB)
Basis-RepoQwen/Qwen3.5-0.8B, sha 2fc06364715b967f1860aea9cf38778875588b17, Apache-2.0, Shard mit 1.746.942.600 Bytes
generation_config.jsonin keinem der beiden Repos enthalten
ArchitekturQwen3_5ForConditionalGeneration (vollständiges multimodales Release). Der Post hat einen reinen Text-Export evaluiert, die LM-Tensoren sind hash-identisch, und Text-Prompts nutzen den Vision-Tower nicht
Geänderte Tensorenmodel.language_model.layers.15.mlp.down_proj.weight sha256 82e2d733ea64feaeb4af93a1e065641d3df98b494a8b7576ef2f52e90fe2ee53; model.language_model.layers.19.mlp.down_proj.weight sha256 8ef3c61bc36af113ad58e89dbb0a4a14dcba5a45cb750c15ab515c82ddd12eb2 (rohe bf16-Bytes)
Formjeweils [1024, 3584] bf16, 64 geänderte Spalten, 131.072 berührte Gewichte (0,016 %)
Manifest (exp8_math/runs/p50c/edit/manifest.json)geänderte Einträge 65.260 (Schicht 15) und 64.928 (Schicht 19), zusammen 130.188 (berührte Einträge, die auf denselben bf16-Wert zurückgerundet werden, zählen nicht); relative Änderung 0,106 und 0,081
Nachbauexp8_math/code/apply_edit.py prüft jeden nachgebauten Tensor per sha256 gegen den im Post evaluierten Checkpoint
Lizenz der Logsdie Card sagt CC BY 4.0 / MIT; GitHub meldet NOASSERTION

Experiment 8: Astra führte die Schleifen auf eine Richtung zurück, die von den MLPs der Schichten 15 und 19 geschrieben wird, und zog sie in jeder der beiden Schichten von 64 Ausgabespalten von down_proj ab. Harness: ein Python-Kernel über den Gewichten (keine GPU für Astra), Übungsaufgaben (7.469 Trainingsaufgaben aus GSM8K und 7.275 aus MATH, keine Testsätze), ein Budget von 10, 25 oder 50 Forward-Passes (ein Pass: bis zu 512 beantwortete Aufgaben oder 1.024 gelesene Texte). Evaluation: Denken an, bis zu 32.768 Tokens, Temperature 0,6, top-p 0,95, top-k 20, Presence Penalty 1,5. MATH-500 mittelt über 4 Samples, GSM8K und IFEval über 2.

Angaben der Autoren (von uns nicht reproduziert, außer MATH-500 auf 50 Aufgaben)

MATH-500GSM8KIFEvalTokenlimit erreicht
Basis7,913,821,093,0 %
Editiert, 10 Passes12,325,749,087,2 %
Editiert, 25 Passes14,125,139,986,4 %
Editiert, 50 Passes (der veröffentlichte Checkpoint)48,167,162,333,1 %

Gemma 3 270M: Basis 6,8 % auf MATH-500, editiert 7,0 / 7,6 / 7,7 / 7,0 % mit 5 / 10 / 25 / 50 Passes, 8,5 % der Basisantworten erreichten das Limit.

Unabhängiger Lauf (akhaliq, 2026-11-02): vollständiges MATH-500, 500 x 4 = 2.000 Generierungen, 43.407.495 Tokens, 3.059 s auf einer H200, vLLM 0.33.0, transformers 5.20.2, math-verify 0.9.0, Seed 0: 51,0 % richtig, 31,6 % am Limit, 14.190,9 Tokens/s, Mittelwert 21.704 Tokens. Smoke-Test des Basismodells, 25 Aufgaben x 4: 5,0 % richtig, 95 % am Limit, Mittelwert 31.690 Tokens.

Die Model Card nennt keine Mindestversion von vLLM. Der Lauf von akhaliq nutzte 0.33.0, wir ebenfalls. Keine andere Version wurde getestet.

Setup

  • Eine RTX 4090 24 GB auf InferenceKey Cloud (Treiber 595.91.07, CUDA 13.2), beide Modelle auf derselben Karte.
  • Lokaler InferenceKey-Manager, gebaut aus origin/main eb1ee503, eingebautes Backend vllm, vllm_version="0.33.0". Produktion nie angefasst.
  • Serving-Befehl, pro Workload:
vllm serve <model> --dtype bfloat16 --max-model-len 34816 \
  --gpu-memory-utilization 0.45 \
  --default-chat-template-kwargs '{"enable_thinking": true}' \
  --override-generation-config '{"temperature": 0.6, "top_p": 0.95, "top_k": 20, "presence_penalty": 1.5}'

Nimm --gpu-memory-utilization 0.90, wenn das editierte Modell allein läuft. Das vLLM-Log bestätigt den Override: „Default vLLM sampling parameters have been overridden ... {'presence_penalty': 1.5, 'temperature': 0.6, 'top_k': 20, 'top_p': 0.95}“.

Warum auf dem Server: Bei eb1ee503 leitet ChatSampling des Managers (crates/shared/src/models.rs) temperature, max_tokens, top_p, stop, presence_penalty, frequency_penalty und seed weiter. top_k und chat_template_kwargs werden nicht weitergeleitet, und generate_text() des SDK hat weder presence_penalty noch top_k.

Schritt für Schritt mit dem SDK-Beispiel

Ordner: examples/qwen3-5-0-8b-weight-edit-math-vllm-private-nvidia (Commit 7661793, plus 07215bb).

  1. Bau das SDK lokal mit maturin und installier die requirements.txt des Beispiels.
  2. Kopier .env.example nach .env und trag ein ik_sdk_-Token ein, einen ik_live_-API-Key mit Scope <project>/*, den Projekt-Slug und IK_WORKER_ID (ein registrierter NVIDIA-Worker mit etwa 15 GB freiem Plattenplatz).
  3. Optional: IK_WITH_BASELINE=1 deployt das Basismodell neben dem editierten (je 0,45 der Karte), IK_MAX_TOKENS (Standard 32.768), IK_KEEP_ALIVE=1 behält die Workloads nach dem Lauf.
  4. python main.py. Es ruft ensure() für jeden Workload auf, dann wait_until_ready(), streamt MATH-500 test/number_theory/572 (Teiler von 196, Antwort 9) von jedem Endpoint über einfaches HTTP, gibt Tokens, Zeit und die Antwort in der Box aus und löscht die Workloads, außer bei IK_KEEP_ALIVE=1.
  5. Für ein Budget von 5 GB füg dem Befehl --max-num-seqs 32 hinzu (im Beispiel dokumentiert).

Zeiten

SchrittEditiertBasis
ensure() bis bereit, kalter Worker418,1 s418,2 s
pip install vllm==0.33.0etwa 3 min (gemeinsam)
Laden der Gewichte (vorab heruntergeladen)0,29 bis 0,32 s
Engine-Init (Profiling, KV-Cache, Aufwärmen)181,7 s186,0 s
davon torch.compile17,3 bis 17,7 s
CUDA-Graphen8 bis 9 s
Warme Engines der Leiter, einzeln60 bis 63 s (133 s für die 5-GB-Stufe)

MATH-500, 50 Aufgaben pro Modell

Die ersten 50 Aufgaben-IDs in der Reihenfolge von akhaliqs Lauf-Datei eval/scores_edited_math500.json (im HF-Checkpoint), 1 Sample, Seed 0, maximal 32.768 neue Tokens, alle 50 pro Modell gleichzeitig in Arbeit, beide Modelle zugleich, Anfragen direkt an die zwei vLLM-Server, die die Plattform gestartet hatte. Bewertet mit mathqa.py der Autoren (letztes \boxed{} der gesamten Ausgabe) und math-verify 0.9.0; aus den bewerteten Dateien neu berechnet, identisch.

EditiertBasis
Richtig31/50 (62 %)4/50 (8 %)
32.768 Tokens erreicht10 (20 %)48 (96 %)
Beendet ohne Box30
Mittel / Maximum Tokens20.444 / 32.76831.832 / 32.768
Median-Tokens der beendeten Antworten17.477 (40 beendet)9.377 (2 beendet, beide richtig; die anderen 2 richtigen Antworten wurden am Limit abgeschnitten, nachdem sie die richtige Antwort in die Box gesetzt hatten)
Tokens gesamt / Laufzeit1.022.176 in 986,7 s1.591.617 in 1.194,4 s
Tokens pro richtiger Antwortetwa 33.000etwa 398.000
Nach GebietAlgebra 10/12, Zahlentheorie 5/7, Präalgebra 4/7, Präkalkül 4/7, Geometrie 3/5, fortgeschrittene Algebra 3/8, Kombinatorik 2/4Präalgebra 2/7, Algebra 2/12, andere 0
Lauf von akhaliqdieselben 50: 54 % (Mittel über 4 Samples); unser Richtig/Falsch mit 1 Sample stimmt bei 42/50 mit seiner Mehrheit übereinSmoke-Test des Basismodells, 25 Aufgaben x 4: 5 % (95 % abgeschnitten)

Durchsatz: eine Anfrage allein 300 bis 380 Tokens/s; zwei gleichzeitig über die Endpoints etwa 175 Tokens/s pro Anfrage; 3.100 bis 4.300 Tokens/s pro Engine zu Beginn mit 50 laufenden Anfragen, fallend, während sich der KV-Cache füllte. Gesamt über den Lauf: etwa 1.036 Tokens/s editiert gegenüber 1.333 Basis, kein fairer Vergleich: Die beiden Engines starteten im selben Moment, und die editierte bekam die Hälfte des Arbeitsspeichers, also begann sie früher, Anfragen in die Warteschlange zu stellen. Details: KV-Cache aufgeteilt in Basis 6,48 GiB (517.266 Tokens) gegenüber editiert 3,32 GiB (265.098 Tokens) bei derselben Einstellung 0,45, weil beide Engines den Speicher im selben Moment profilierten, sodass die editierte Engine Anfragen in die Warteschlange stellte (99 % KV, 22 laufend, 21 wartend zu einem Zeitpunkt). Der ganze Lauf mit 100 Aufgaben (2,61 M Tokens) dauerte 1.194 s.

Aufgabe 572 (Teiler von 196)

  • Über die Endpoints der Plattform, beide gleichzeitig, aufgezeichnet: editiert \boxed{9} in 14.518 Tokens, 87 s. Basis 32.768 Tokens nach 138 s, keine Antwort, die letzten Zeilen wiederholen „Wait, $14 \times 14 = 196$.“
  • Batch-Lauf: editiert 17.077 Tokens, beendet, richtig, etwa 287 s mit 50 gleichzeitig in Arbeit. Basis 32.768 Tokens, abgeschnitten, zählt „Let's check 3309. $3309 \times 2 = 6618$. No.“ aufwärts, etwa 757 s. Das ist das Bild des Schlüsselvergleichs.

GPU-Speicher und VRAM-Leiter

Gewichte 1,63 GiB pro Modell. Spitze der Karte 17.282 MiB (16,9 GiB) mit beiden Engines bei 0,45, 100 % Auslastung, 286 W. Editierte Engine allein bei 0,45, im Leerlauf: 6.846 MiB.

Leiter: editiertes Modell allein, derselbe Befehl, --max-model-len 34816, 5 Aufgaben, die das editierte Modell im Batch gelöst hatte (572, 515, 807, 2584, 248), gleichzeitig in Arbeit, maximal 32.768. Jede Stufe unter 24 GB ist eine Grenze, die mit --gpu-memory-utilization auf der 4090 gesetzt wurde, keine echte Karte.

GPU oder GrenzeKonfigurationKV-CacheErgebnisEcht oder emuliert
RTX 4090 24 GBbeide Modelle, je 0,45, je 50 Aufgaben6,48 / 3,32 GiB62 % gegen 8 % richtig, Spitze 16,9 GiBecht
Grenze 8 GB0,3334,3 GiB (343.186 Tokens)5/5 richtig, 25 bis 96 s pro Antwort, längste 31.606 Tokens in 95,5 semuliert
Grenze 6 GB0,2452,23 GiB (177.561 Tokens)5/5 richtig, identische Ausgaben und Zeiten wie bei 8 GB (95,7 s)emuliert
Grenze 5 GB0,204, Standard-max_num_seqs 256scheitert: max_num_seqs (256) exceeds available Mamba cache blocks (202)emuliert
Grenze 5 GB0,204, --max-num-seqs 321,74 GiB (138.766 Tokens)5/5 richtig (andere Texte, andere Batch-Formen), längste 30.948 Tokens in 97 semuliert
Grenze 4 GB0,1630,29 GiBscheitert: braucht 0,44 GiB KV-Cache für eine Anfrage mit 34.816 Tokens; vLLM schlägt maximal 22.304 Tokens voremuliert
Grenze 3 GB0,122-0,66 GiBscheitert: kein verfügbarer Speicher für die Cache-Blöckeemuliert

Nicht versucht: eine echte kleine Karte (an dem Tag war nichts unter 16 GB verfügbar, die RTX 2000 Ada mit 16 GB haben wir nicht ausprobiert), 4 GB mit kürzerem Kontext, fp8, mehr als 50 gleichzeitige Anfragen, der Vision-Pfad. Echte Karten mit 6 bis 8 GB haben weniger Speicherbandbreite: Rechne damit, dass sie langsamer sind als diese Zeiten.

Offene Probleme

  1. Stilles Ende einer gestreamten Basisantwort (offen). Über den Endpoint, während der KV-Cache der Basis-Engine gesättigt war, schloss sich der Stream nach 152,3 s mit 3.286 Zeichen, ohne finish_reason, ohne usage. Ursache nicht bestätigt, rohes SSE nicht mitgeschnitten. Bei eb1ee503 nutzt der GPU-Stream-Pfad des Managers STREAM_IDLE_TIMEOUT_MS = 120_000 und sendet beim Timeout einen Chunk {"error":{"code":"inference_timeout",...}}, gefolgt von [DONE]. Das ask() des Beispiels liest nur choices und usage, also würde der Client einen solchen Chunk stillschweigend ignorieren; das Beispiel braucht noch einen Fix, der ihn sichtbar macht. Prüf in deinem eigenen Client auf einen error-Schlüssel und einen finish_reason.
  2. Gleichzeitiges pip in dasselbe venv (offen). Zwei Workloads mit derselben vllm_version führten pip install vllm==0.33.0 gleichzeitig im selben venv aus. Hier hat es funktioniert. Es ist eine Race Condition.
  3. Ungleiche KV-Aufteilung (Workaround). Zwei Engines, die zusammen auf einer Karte starten, profilieren den Speicher gleichzeitig, und die zweite sieht weniger freien Speicher. Starte sie nacheinander.
  4. 5 GB braucht --max-num-seqs 32 (im Beispiel dokumentiert).
  5. Das Modell: 20 % der editierten Antworten laufen weiterhin bis 32.768 Tokens, und 3 endeten ohne Box. Ein früher Lauf des Beispiels mit einem Standard von 16.384 Tokens schnitt die editierte Antwort ab, deshalb ist der Standard jetzt 32.768.
  6. Kleinigkeit: min_disk_gb 60 in der Anfrage zum Anlegen des Workers wurde ignoriert (100 GB vergeben). Der erste Start des nats-proxy im lokalen Stack scheiterte an einem fehlenden JWT_SECRET.
  7. Bewertung: mcqa.py der Autoren ist nicht veröffentlicht. Ein Stub deckte einen Import ab, der nur in den Schleifenstatistiken genutzt wird; der Bewertungscode blieb unangetastet.
  8. Von uns nicht geprüft: GSM8K, IFEval; die Erwähnung im Video von AI Search von etwa 44 % für das unveränderte Modell mit anderen Einstellungen (keine Quelle genannt).

Demovideo

Deploy-Test des Gewichts-Edits von Qwen3.5-0.8B

176,6 s, vertont: der Blog der Autoren mit Credits, Qwens Warnung vor Schleifen, die Zahlen der Autoren und unsere, die beiden Modelle, die die Teiler-Frage über die Endpoints beantworten, und die Speichergrenzen.

Zusammenfassung: 62 % gegen 8 % richtig, 20 % gegen 96 % am Tokenlimit abgeschnitten, Speichergrenze von 6 GB, bei der das editierte Modell richtig blieb (emuliert, 4 GB scheitert)

Quellen