Et oppfølgingsspørsmål i en samtale på 50 000 tokens tok tre til fem minutter før første token dukket opp. Ikke hele svaret. Første token. Utvikleren bak bloggposten hadde kjøpt en M3 Mac Studio Ultra med 96 GB unified memory nettopp for å kjøre en stor modell lokalt, og satt igjen med noe som lignet mer på en batch-jobb enn en samtale.
Modellbyttet og feilrettingen er to separate historier, og forfatteren holder dem fra hverandre. Han gikk fra DS4 Flash til Qwen 3.5 122B fordi en MoE med rundt 10 milliarder aktive parametre treffer båndbredden på M3 Ultra godt, ikke fordi DS4 er dårlig. Så begynte det egentlige arbeidet: tre bugs i hans egen serverstack, en fork av rapid-mlx som han kaller qMLX.
Årsaken ligger i den hybride arkitekturen. Rundt 75 prosent av lagene er GatedDeltaNet (SSM) med rekurrent tilstand som ikke kan spoles tilbake, så minne-cachen dropper hver eneste oppføring som inneholder dem. I et normalt vindu målte han null treff i minnet mot 109 treff på disk. Disk-restore er ikke en reserveløsning her, den er hele cachen. Og den knakk på tre måter, hver skjult bak den forrige.
Bug én: agent-rammeverket stemplet en unik meldings-ID inn i systemprompten hver tur. KV-gjenbruk er byte-eksakt, så en unik verdi øverst i en 130k-token-prompt gjorde prefiksen ustabil og kastet cachen hver gang. Bug to: avbrøt du modellen mens den svarte, brøt koden ut av løkka uten å lagre svaret den allerede hadde strømmet. Serveren hadde tokenene i KV-cachen, historikken manglet turen, og alt divergerte. Bug tre: en bakgrunnshook skrev en full checkpoint hvert 256. token uten nøkkel, altså umulig å matche. Rundt 27 GB ubrukelige checkpoints presset lageret over taket, og eviction slettet eldst først, inkludert den ene gode checkpointen.
Etter fiksene restaurerer hver tur forrige kontekst og prefiller bare den nye meldingen. Forfatteren er samtidig påfallende streng med egne tall, og nekter å oppgi den vanlige gjennomstrømningsmålingen på 350 til 600 tokens i sekundet, fordi den domineres av prefill-tokens som lander nesten umiddelbart. Decode-raten du faktisk merker, ligger på 55 tokens i sekundet ved kort kontekst og rundt 28 ved 64k.
«Enhver måling som stiger når du sender et lengre prompt ved konstant decode-hastighet, lyver til deg.» — utvikleren bak qMLX
Alle tallene kommer fra én maskin, og prosjektet er alpha. For andre som kjører hybride MoE-modeller lokalt ligger nytten i mønsteret bak de tre bugene: samtlige handler om at noe utenfor selve modellen gjorde prompt-prefiksen ustabil. Kjører du lokal inferens og lurer på hvorfor cachen aldri treffer, er det der du bør lete først.