R&D sprint

Project Crucible

Building TAME (Ternary Adaptive MoE), an efficient small-model architecture combining 1.58-bit weights, mixture of experts, multi-token prediction, and group query attention.

Dates
July 4 – August 17, 2026
Length
6-week sprint
Last updated

14.5MPoC parameters

102MChat model

600MCurrent run, Qwen 0.6B

0.009Excess learning rate

Illustration of the BitLinear rounding step, with each row scaled by its own absolute mean. The values are generated for this picture, not read from a Crucible checkpoint.

Overview

Sennoric ran a 6-week R&D sprint (July 4 – August 17, 2026) to build “Crucible Axon” — an efficient small-model architecture for edge deployment and cost-sensitive inference. The architecture combines five recently proven techniques into a single, tightly integrated design.

TAME — ternary adaptive MoE

Nicknamed TAME, the architecture stacks five components designed to work together, not as isolated tricks.

The TAME block Input tokens pass through an embedding into a stack of TAME blocks, 8 layers in the proof of concept and 24 in the 300M design. Each block runs grouped-query attention, where 8 query heads share 2 key-value heads, then a mixture-of-experts layer: a router with a per-expert bias picks one of 8 ternary routed experts for each token, beside a full-precision shared expert that sees every token. Both sub-layers carry SubLN normalisation and a residual connection. A primary head predicts token t+1; an auxiliary head, fed from an intermediate layer, predicts t+2 during training only. input tokens Embedding TAME block 8 layers in the PoC, 24 at 300M SubLN SubLN Grouped-query attention RoPE KV KV 8 query heads share 2 KV heads Shared expert full precision Router +b 8 ternary experts LM head predicts t+1 from an intermediate layer Aux head predicts t+2 training only, discarded at inference
  • Ternary weights

    1.58-bit BitLinear with straight-through estimation. Weights are ternary (−1, 0, +1), giving extreme memory savings while STE preserves a usable gradient signal through the hard quantization.

  • MoE (MoTE-style)

    A single full-precision shared expert handles common patterns; multiple ternary routed experts specialize via top-1 gating. This keeps the compute profile close to a dense model of equivalent size while expanding capacity.

  • Multi-token prediction

    An auxiliary head predicts t+2 alongside the standard t+1 head. The auxiliary loss provides a richer training signal per step without additional autoregressive decoding during inference.

  • Grouped query attention

    8 query heads share 2 KV heads, cutting the KV cache footprint by 4× compared to full multi-head attention. This is critical for deployment on memory-constrained hardware.

  • Aux-Loss-Free balancing

    DeepSeek-V3-style per-expert bias that adjusts routing logits directly, with no auxiliary load-balancing loss term. This eliminates a known source of gradient interference in MoE training.

  • SubLN

    Sub-layer normalization adapted from Microsoft’s BitDistill research, added to stabilize training at the larger Axon-Chat scale where ternary quantization noise compounds across more layers.

The TAME block. Point at or tap a component in the list to find it in the diagram. Dashed outlines mark what only part of the setup uses: SubLN, added at Axon-Chat scale, and the auxiliary head, which exists only in training.

What’s the point? Each of these techniques has been validated independently in recent literature. The hypothesis of Project Crucible is that they compose well, and that the memory savings of ternary weights, the capacity expansion of MoE, and the training efficiency of MTP create a model that’s disproportionately capable for its parameter count.

Day 22 sprint status

Real progress, and one expensive mistake. The architecture holds up at small scale, but the 600M run has to be thrown away and done again because the learning rate was wrong.

Where this update sits in the sprint. Ticks mark days; the taller ones, weeks.
  1. Day ~2

    14M proof-of-concept trained

    A ~14M parameter TAME model was trained on TinyStories for 10,000 steps on a Colab T4. Despite the tiny scale, the model produces coherent multi-paragraph English with dialogue and narrative structure — promising signal for the architecture.

  2. Day ~3

    GQA + Aux-Loss-Free variant built

    A second variant swapping in Grouped Query Attention and aux-loss-free load balancing was built and validated against the first variant at identical step count for a controlled head-to-head comparison. Result: equivalent quality with ~600K fewer parameters and a 4× smaller KV cache — confirming the efficiency techniques hold up in practice, not just in theory.

  3. Scaling up

    102M trained, 300M came up short

    Crucible Axon-Chat (102M) trained on a mixed UltraChat + TinyChat dataset using the full validated stack: topically relevant responses, correct poem formatting, natural stopping points. Scaling the same recipe to 300M was a partial failure: enough of it worked to be worth diagnosing, not enough to keep.

    Having fixed what caused it, Sennoric skipped retrying at 300M and went straight to 600M, built on Qwen 0.6B, the same base model Microsoft used for BitDistill, which makes the head-to-head below a fair fight instead of an apples-to-oranges one.

    14.5M

    Proof of concept

    TinyStories, 10,000 steps

    Trained

    102M

    Crucible Axon-Chat

    UltraChat + TinyChat

    Trained

    300M

    From scratch

    The same recipe, scaled

    Partial failure

    600M

    Built on Qwen 0.6B

    First run scrapped

    Rerun in progress

    The runs so far, drawn to scale. Each square’s area is proportional to the model’s parameter count. The patterned squares were trained; the hatched one came up short; the dashed one is the 600M model, being trained again.
  4. Setback

    The learning rate was 0.009 too high — run scrapped

    The training config had the learning rate set 0.009 above where it should have been. Written down on its own, 0.009 looks like a rounding error. As a learning rate it is nothing of the sort: they live down in the ten-thousandths, so an extra 0.009 doesn’t nudge the value, it swamps it. The model was taking wildly oversized steps from the first batch onward and never had a chance to settle.

    There’s no partial credit to salvage. Everything downstream of that number is untrustworthy, and a run that can’t be trusted is worse than no run at all. So the 600M model goes in the bin and the run starts again.

    Where learning rates live 0.0001–0.0009

    The excess +0.009

    One linear scale. Every value in the ten-thousandths fits inside the first tenth of the excess.
  5. In progress

    Rerunning the 600M model

    Same architecture, same Qwen 0.6B base, same setup, with a corrected learning rate. The one upside of losing a run this way is that nothing about the design is in question, so there is nothing to redesign before starting over.

  6. Next

    Head-to-head against Microsoft’s BitDistill

    Once the rerun finishes, the plan is to evaluate it against BitDistill*, Microsoft’s pipeline for taking an off-the-shelf full-precision model down to 1.58-bit. The comparison is deliberately tight: BitDistill’s published results start from Qwen 0.6B, so the 600M run starts from the same weights. Same base model, same target precision, two different routes there, which means whatever gap shows up is attributable to the method rather than to a difference in the models being compared.

    Either result is worth having. If TAME comes out ahead, there’s a reason to keep building it. If BitDistill does, there’s a better starting point than the one that was about to be built from scratch — cheaper to learn now than at 300M of wasted compute.

What goes into Crucible Axon

Here’s what each component looks like in practice.

Ternary BitLinear

Weights are quantized to ternary values during the forward pass: round(clamp(w / scale, -1, 1)) where scale is the per-channel absolute mean. Gradients pass through the round operation via straight-through estimation, ignoring the quantization threshold in the backward pass. No full-precision copies are kept; the master weights are stored in FP16 and quantized per step.

Forward: round(clamp(w / scale, -1, 1)) Backward: straight-through estimate +1 0 −1 −1 −0.5 0.5 1 w / scale
Rounding sends anything past ±0.5 to ±1 and everything in between to 0. In the backward pass the gradient goes straight through the rounding.

MoE routing

Every MoE layer has one full-precision shared expert and 8 ternary routed experts. A learned router produces logits over the 8 routed experts; top-1 gating selects which expert to activate per token. The shared expert processes every token, acting as a stable backbone while routed experts handle specialization.

sharedrouted experts12345678token 1token 2token 3token 4token 5token 6token 7token 8
Illustration of the pattern, not a routing log: every token goes through the shared expert, and the router sends it to exactly one of the 8 routed experts.

Aux-Loss-Free balancing

Instead of adding an auxiliary loss to encourage balanced expert usage (which competes with the main LM loss gradient), per-expert bias terms are added directly to the routing logits. After each step, if an expert receives fewer tokens than the expected uniform share, its bias is incremented; if it receives more, its bias is decremented. This is a purely feedback-based mechanism: no gradient competition, no tuning of loss coefficients.

uniform share bias up bias down E1E2E3E4E5E6E7E8
Illustration of the rule, not measured loads. After each step, an expert below the uniform share has its bias raised and one above it has its bias lowered.

Multi-token prediction

The model has two LM heads. The primary head predicts t+1 as usual. A secondary head, fed from an intermediate layer, predicts t+2. Both heads contribute to the training loss with a fixed ratio. At inference time, only the primary head is used; the auxiliary head is discarded, so there’s no runtime cost.

Primary head t+1 layers Aux head t+2 training only position t
Both heads add to the training loss. At inference only the primary head runs, so the auxiliary head costs nothing.

Grouped query attention

With 8 query heads and 2 KV heads, grouped query attention projects each KV head to serve 4 query heads. The KV cache is 4× smaller than full multi-head attention (8 KV heads), and the attention computation is proportionally faster. Positional encoding via RoPE (rotary position embeddings).

Full multi-head attentionKV cache:8 headsGrouped-query attentionKV cache:2 heads, 4× smaller
Circles are query heads; filled blocks are the KV heads that have to be cached. Each KV head serves 4 query heads.

Model configuration

Model configuration of the proof of concept and the from-scratch 300M design
PropertyPoC (14M)From scratch (300M)
Parameters~14.5M~300M
Layers824
Hidden dim2561024
Attention heads8 query / 2 KV8 query / 2 KV
Expert count8 (ternary) + 1 (shared)8 (ternary) + 1 (shared)
Training dataTinyStories (~10K steps)TBD (FineWeb-Edu + curated)
Training hardwareColab T4TBD

The 300M column is the from-scratch design that came up short. The current 600M run starts from Qwen 0.6B instead, so it inherits that model’s configuration rather than this one. Its specs will go up here once the rerun finishes.

PoC (14M)8 × 256 From scratch (300M)24 × 1024
Both configurations at the same scale: one bar per layer, each bar as wide as the hidden dimension.

What’s next?

The 600M run is training again after a bad learning rate cost us the first attempt. Once it lands, it goes head-to-head with Microsoft’s BitDistill from the same Qwen 0.6B starting point, with the long-term goal of open-sourcing the architecture and tooling either way. Follow along in Announcements.