Whittle dev: how a 27B was taken apart and what it cost

The developer side of the Whittle family. Every shape we built, what it scored, and the measurements that decided each step. If you just want a model to run, use Qwen3.8-Whittle-tri-14.7B.

The ladder

Fifteen shapes, all measured against the same 80-probe knowledge atlas and the same 39-prompt generation battery.

shape params battery how it was made
Whittle-16B v1 heal 16.8B 36/39 44L cut, 25% width prune, 3h QLoRA
48L cut 20.8B 35/39 16 layers dropped by block pricing, no training
restored 18.3B 18.3B 34/39 44L trunk with blocks 8-11 spliced back at full width
v40 identity-guided 16.8B 31/39 40 layers chosen by measured identity, no training
tri repaired 14.7B 31/39 64 layers distilled into 32, then repaired
44L cut 19.2B 28/39 contiguous bands removed
w50 uniform width 18.3B 27/39 every MLP halved, all layers kept
tri raw, pre-heal 14.7B 12/39 the distillation before any repair

Findings that changed what we built

Knowledge is not where the general lens says it is. A four-prompt lens priced blocks 8-11 as nearly free. Domain-targeted probes showed those blocks carry web-dev and rare-identifier retrieval: restoring them alone scored above the intact model. Price per domain before dropping anything.

Stopping is a measurable organ. P(end-of-turn) at a finished answer falls from 0.53 in the intact model to 0.05 in the worst cuts. That number is looping, seen from the inside. Restoring blocks 8-11 took it back to 0.55.

Attention alone computes nothing. Keep the 16 attention stations, delete every recurrent layer, and the output is flat noise. The recurrent tissue does the work; attention routes it.

Placement beats amount. Three cuts at identical size and identical selection rule score 0.648, 0.544 and 0.379 on the atlas. Only the attention spacing differs.

Absorbing beats deleting. Distilling a full-attention station into its two recurrent neighbours costs 0.0045 relative error; deleting it costs 0.035.

Sequential distillation compounds, and a global objective fixes it. Per-stage error rose 70x across 24 chained stages and the assembled model scored 12/39. Ninety minutes of global fine-tuning took it to 31/39. The knowledge was mis-coordinated, not destroyed: forced-choice recognition went 0/7 to 5/7.

Width damage is dormant, depth damage is erased. Halve every MLP and the model still recognises answers it can no longer recall (6/7, 7/7). Cut layers and the knowledge is simply gone.

Traps worth inheriting

Synthetic drills that state a rule in prose teach the phrasing, not the skill: our repaired model recites "multiplication binds before addition" and still answers 30 for 10 + 2 * 5. Replay slices amplify whatever format they contain. peft writes a local base path into adapter metadata that HF rejects. modules_to_save norms are trained but carried by neither the LoRA path nor a naive merge. llama.cpp cannot apply LoRA to this architecture at all: the fused GDN projection reshape has no low-rank equivalent, so merging is mandatory.

Artifacts

Recipes, adapters and mixes live in the model repo under recipe/, heal-lora/, repair-lora/ and training/. The relay, assembler, distillation proof of concept, norm patcher and trainers are all there and all runnable on two 12GB cards.

Collections

Models you can run has the two variants with published, tested weights. Research and dev has everything else, including variants whose weights are not uploaded yet.

Support this work

☕ ko-fi.com/davida81328

Base model by the Qwen team (Apache 2.0). Measured by David Aylward with Claude (Fable 5, Anthropic) as co-author.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for logic65/Qwen3.8-Whittle-dev

Base model

Qwen/Qwen3.8-27B
Finetuned
(5)
this model

Collection including logic65/Qwen3.8-Whittle-dev