Nøkkelen til at en 3,1 GB modell i det hele tatt kan kjøre lokalt i nettleseren er en algoritme kalt TurboQuant og WGSL compute shaders. Demoen teamchong la ut på Show HN (67 poeng, 32 kommentarer) reimplementerer TurboQuant-kvantiseringen direkte på GPU-en, slik at KV-cachen komprimeres rundt 2,4x. Uten det grepet ville lengre samtaler sprengt GPU-minnet på de fleste forbrukerkort.
Det smarte utover selve modellen er hvordan prompt-til-Excalidraw er løst. I stedet for å be Gemma generere rå Excalidraw-JSON, som fort blir 5 000 tokens, genererer modellen kompakt kode som er rundt 50 tokens og som deretter ekspanderes til diagrammet. Det er en 100x reduksjon i output-tokens for samme resultat.
«Denne demoen reimplementerer TurboQuant-algoritmen i WGSL compute shaders slik at den kjører på GPU-en i 30+ tok/s.» — teamchong, fra repo-dokumentasjonen
TurboQuant-papiret stammer fra Google Research (ICLR 2026) og handler egentlig om vektorsøk: komprimer float32-embeddings 6x uten å dekomprimere dem under søk. Det smarte her er at samme matematikk fungerer på en LLMs KV-cache fordi begge er i bunn og grunn store vektortabeller. Samme algoritme, to substrater: WASM for CPU-vektorsøk, WGSL for GPU-LLM.
Begrensningene er reelle. WebGPU subgroups kreves, så Safari og iOS faller ut. Mobile nettlesere treffer RAM-taket lenge før 3 GB. Du trenger Chrome 134 eller nyere på desktop med et moderne GPU. Men hvis du har den kombinasjonen, er dette det råeste eksempelet jeg har sett på hva lokale modeller i nettleseren kan gjøre i april 2026.
Hva bør du gjøre?
- Prøv demoen på teamchong.github.io/turboquant-wasm/draw.html. Første innlasting tar flere minutter fordi den pulls 3,1 GB modellvekter, men etter det er inferensen lokal.
- Se på WGSL-shaderne i
demo/src/draw/shaders/i GitHub-repoet hvis du vurderer å implementere KV-cache-komprimering selv. Det er konkrete referanseimplementeringer, ikke bare et papir. - Test turboquant-wasm via npm (
npm install turboquant-wasm) hvis du bygger vektorsøk i nettleseren. Den gir rundt 6x kompresjon av float32-embeddings uten et treningssteg, og dotBatch() faller automatisk tilbake til WASM SIMD når WebGPU mangler.