☕ If this research is useful to you, it runs on one person's grocery money: ko-fi.com/davida81328
Every experiment on this card was paid for out of pocket. Donations go directly to GPU hours.
⚠️ RESEARCH ARTIFACT — NOT AN ASSISTANT
This is the record of an experiment, published so it can be reproduced, not deployed. It fails ~80% of a standard conversational loop test. It has had no completed instruction tuning and no safety work. Use it to study the architecture; do not put it in front of users.
Qwen3.8-Whittle-Next — 19.8B, ~10B active
A Qwen3.8-Flash-Next-style architecture (qwen4_exp) built by surgery instead of pretraining:
a training-free MoE carve of a compressed 14.7B dense model, wrapped in hyper-connections,
with a 4-billion-parameter n-gram memory bolted on — running end-to-end in llama.cpp.
| component | params | active/token |
|---|---|---|
| MoE carve (240 experts, k=58 + 2048 shared) | 14.76 B | 9.03 B |
| hyper-connections (4 streams, rank 320) | 0.86 B | 0.86 B |
| QSA indexer (budget ≥ ctx ⇒ full attention) | 0.03 B | 0.03 B |
| PLE projections | 0.13 B | 0.13 B |
| n-gram table (8 heads × 781,312 rows × 640) | 4.00 B | ~5 K |
| total | ≈19.8 B | ≈10.0 B |
The table is the point: capacity bought with memory instead of FLOPs. It adds 4B parameters and a few gathered rows per token.
Measured (wikitext-2 test, ctx 512, 24 chunks, same session)
| stage | PPL |
|---|---|
MoE carve alone (qwen3_5_moe) |
86.62 |
| + hyper-connections, identity (2 export bugs fixed) | 85.02 |
| + trained HC/attention, n-gram off | 73.46 |
| + 4-billion n-gram on | 33.18 |
Read the next line before quoting that number. On science text the table never saw, n-gram on vs off is 27.53 vs 27.96 — a 1.5% gain. The in-domain 55% drop is mostly memorisation of the training corpus, not generalised capacity: this table has so far seen ~2% of one epoch of its mixed corpus. A memory is only as good as what has been written into it — that is both the honest caveat and the design thesis.
The n-gram does not worsen degeneration: on the 94-generation loop test it improved failures 86→79 and looping 42→31 versus the same model with the table off.
What this repo taught us (the findings are the product)
- llama.cpp's
qwen4expGDN uses a sigmoid output gate; Qwen3.5-derived GDN weights need silu. No weight transform can bridge them (silu is unbounded). One-line patch included (patches/in the kit). Perplexity with sigmoid: 36,138 — with silu: 85.02. - The converter folds
+1intohc_norm.weight(Gemma-style zero-centred gammas), so an identity retrofit must store2(1+w)−1. Storing2(1+w)costs a 16× perplexity blow-up. heads_per_ngramis per gram order — total heads =(ngram−1) × heads_per_ngram.- The PLE hash, verified bit-for-bit: one shared multiplier vector,
mixed = Σ⊕ ctx[j]·m[j]per order; heads differ only by% vocab + offset; EOS resets the window. Verified by a probe table whose rows spell out their own indices throughllama-eval-callback— 8/8 exact. - Two init deadlocks that silently disable training. The PLE returned only its conv path
(llama.cpp returns
hidden + gated + conv), so with zero init nothing had gradient — the first 4B table "trained" overnight and moved 3.6% of rows, all numerical noise. And the HC identity init (down=0, up=0) mutually kills both gradients: after every run, all 64 mix modules still had|down|=|up|=0.000exactly. The 845M-param mix path never learned — onlyhc_normandinjectdid. Fix: initup~N(0,0.02), down=0— still exactly identity, gradient alive from step 1. - A hand-written training loop gets no gradient checkpointing from HF. The 4-stream residual made activations ~40 GB of a 79 GB card; checkpointing each layer body let 3× more parameters train in less memory (64.9 GB) at 2× step time.
Running it
GGUF (recommended): the .gguf files here run on llama.cpp with the one-line silu-gate
patch (patches/qwen4exp-silu-gate.patch in
the kit). Upstreaming a gate
flag is planned. HF transformers loading of this text-only qwen4_exp export is untested.
Provenance & training data
Qwen3.8-27B → Whittle-tri-14.7B (layer-merge compression) → ExpertWeaver-style carve + DOT-MoE alignment (arXiv 2602.15521, 2606.01666) → HC/PLE retrofit (this repo). The n-gram table and adapters saw: wikitext-2, fineweb-edu, cosmopedia/openstax, open-web-math, wikihow, and fenced code (code_x_glue, Magicoder-OSS, CodeFeedback) — a few million tokens total, far short of the corpus. SFT (ultrachat multi-turn + reasoning traces) was in progress when the GPU window closed; the checkpoint here carries its best gate-selected state. Chat remains broken. That is the top of the roadmap, not a surprise.
Every training script, log, probe and patch: logic65/mini-next-a100-kit.
Built by David Aylward with Claude (Anthropic) as co-author. Thanks to the contributor who pointed at free weekly T4 quota — that is where the next epochs run.
☕ ko-fi.com/davida81328 — GPU hours, not coffee.
Update (same day): the hyper-connection mix path, woken
After every earlier run, the HC low-rank mix was measured dead at exactly zero (a mutual
gradient deadlock in the identity init - see finding 5). wake/ carries the first checkpoint
trained with it alive, in tandem with chat SFT: the 5-probe factual battery reached 5/5
(the gold-symbol and largest-planet probes pass for the first time), greedy 4-gram repetition
0.056. Stopping (EOS) remains weak - that is the top of the roadmap.
Load with subfolder="wake", or use the wakeHC GGUF.