Fermion Research

Intelligence at one-eighth the bits

One-shot two-bit conversion lands near chance. Training inside the constraint produces 72.1 MMLU from a 3.88 GB artifact. This is what changed inside the weights.

Published one-shot two-bit conversions of 8B models score 24.2 and 24.7 on five-shot MMLU. Random choice scores 25.0. Neutrino-1 8B uses three states for the same class of projection weights and scores 72.1. The important difference is not the nominal bit width. It is when the constraint enters training.

Every Neutrino training forward pass uses the representation that ships. The model learns which connections should be negative, zero, or positive while the optimizer coordinates those choices across 36 layers. The result is an 8.19-billion-parameter model that retains about 96 percent of Qwen3-8B general knowledge in a 3.88 GB serving artifact, 4.2 times fewer bytes than the bf16 reference.

The constraint has to be present during training

A decoder reads nearly every projection weight for every generated token. Reducing those bytes lowers the memory traffic on an H100, an Apple GPU, and a desktop CPU at the same time. But the smaller representation is useful only if the network can still coordinate its intermediate activations inside it.

Rounding after training changes millions of terms independently. A small error in one weight is usually harmless; millions of unrelated errors passing through 36 residual updates are not. Ternary QAT makes the forward pass expose that error during optimization, while a higher-precision carrier retains the gradient updates that never ship with the model.

What is actually ternary

The constraint applies to seven matrices in each decoder layer. Four serve attention. The query and output matrices are 4,096 by 4,096; key and value are narrower because 32 query heads share 8 key-value heads. Each head has width 128.

Gate, up, and down form the feed-forward block. The first two expand the residual stream from 4,096 to 12,288; the third writes it back. Together, the seven matrices contain 192,937,984 ternary weights per layer. The feed-forward group contains 78.3 percent of them, so it dominates both the byte budget and the depth-wise measurements.

Every layer has the same rank, width, and 72,351,744-byte weight lane. The differences we observe by depth therefore come from the learned state pattern, not from a changing architecture.

One of 36 identical decoder layers, area to weight count192,937,984 ternary weights per layer
gate4096 × 12288 · 50,331,648
up4096 × 12288 · 50,331,648
down12288 × 4096 · 50,331,648
q
o
k
v
feed-forward gate, up, down · 78.3% of the layerattention q, k, v, o · 21.7% of the layer
hidden width 4096, feed-forward width 12288, 32 query heads over 8 key and value heads at head dimension 128, so k and v are a quarter of q
Fig. 1Each rectangle's area is proportional to its share of the layer's weights.

Three states and a shared scale

A ternary weight has three states: minus, zero, or plus. The state has no magnitude by itself. The format groups consecutive input weights into fixed blocks. Each block shares one higher-precision scale.

The scale sets the block magnitude. Each state sets a sign or removes the contribution. The stored weight equals the state times the scale. This replaces one 16-bit value per weight with ternary states and a smaller set of scales.

The zero state changes the learned connectivity. A float network can make a connection small. A ternary network can remove it. Training selects which connections use minus, zero, or plus. The resulting weight distribution has three mass points, with most weights at zero.

One block of the ternary lane
consecutive weights along one input row
0
+
0
0
0
+
0
0
0
+
scale
stored weight = state × block scale− subtracts0 connection removed+ adds
Storage precision by tensor class
attention projections, all 36 layersternary + block scales
feed-forward matrices, all 36 layersternary + block scales
token embeddingsint8 · a lookup returns one row verbatim
output headint8 · decides tokens by small logit margins
norm gainsfp32 · one value per activation channel
Fig. 2A block scale, the three ternary states, and the tensor classes retained at higher precision.

Some tensors need more precision. A linear output sums hundreds of ternary contributions, so individual errors can cancel. An embedding lookup returns one row without that averaging. Any row error changes the full token representation.

The output head must separate one token from 151,936 alternatives. Small logit margins matter there. The model also has 308,224 normalization gains, and each one scales a full activation channel. Embeddings, the output head, and normalization gains therefore stay at higher precision.

Why rounding lands near chance

Neutrino-1 8B starts from Qwen3-8B. Every training forward pass uses the ternary representation that ships. Higher-precision optimizer state carries the gradients. The projection weights adapt together under the ternary constraint. Qwen supplied the base model; Fermion Research developed the adaptation and training method.

Post-training quantization trains in floating point and rounds the weights later. At ternary precision, this removes most measured accuracy. Published results for rounded 8B models sit near 25 on four-choice knowledge tests. Random answers also score 25. A similar model trained with ternary QAT scores 72.1.

Quantization error explains the failure. One linear output sums hundreds of weight and activation products. A trained network depends on how these terms cancel. Post-training quantization rounds each weight independently to a nearby level.

Each error is small, but unrelated errors accumulate across a row. The output then differs from the float activation. Thirty-six layers compound that difference. The final quality loss is large.

One output feature accumulating along a row of its weight matrixthe trained computationrounded after trainingternary QAT
weights accumulated along the row, 1 to 180the gap at the right edge is the feature the layer emits against the value rounding hands it
Per-weight error of the rounded path
every individual error stays inside the same bound; the sum of them does not
schematic accumulation of one feature, no measured values · the QAT path draws its states at the shipped 8B’s measured 18.7 / 62.6 / 18.7 occupancy
Fig. 3Accumulation of bounded per-weight quantization errors across one output row.

Two published one-shot two-bit conversions score 24.2 and 24.7 on five-shot MMLU. Random answers score 25.0. Three models trained for their target representation score 47.24, 65.75, and 72.1 at the same artifact size. At this precision, post-training rounding removes most measured task performance.

MMLU, five-shot
25405570
25.0, chance on a four-choice test24.2 and 24.7two published roundings of an 8B, 3 GB class72.1Neutrino-1 8B65.75Ternary-Bonsai-8B47.24Two-bit, training-aware
Rounded after trainingTernary QAT
Five published results for 8B-class models at or below three gigabytes. Post-training rounding scores near chance; models trained with the target representation score at least twenty-two points higher.
Fig. 4Five published results at the same artifact size, split by whether the format was present during training.

Quantization-aware training applies the constraint before the model ships. Every training forward pass uses ternary weights. The loss measures that representation. The gradient reaches a higher-precision carrier inside the optimizer, but that carrier never ships.

Training selects sign patterns, zero positions, and block scales that work together. The shipped projection weights come from this constrained process. They are not a post-training conversion.

2.56 GB on the wire, 3.88 GB in memory

Three equally likely states carry 1.58 bits of information. Hardware stores whole bits, so a simple container uses two bits per state. It wastes about one fifth of that space. Trained models make the states uneven, which creates more coding headroom. The release transport recovers both gaps.

Stored width of one weight, one step down per halving
32168421
32fp32
16fp16
8int8
4int4
1.58ternary
information in one stored ternary weight · 1.58hatched cap · whole-bit padding, removed by coded transport
Fig. 5Nominal storage width from fp32 to ternary weights on a logarithmic scale.

The download codes the weight stream near its information content. The receiving machine expands it without loss. The 8B download uses 2.56 GB and expands to the 3.88 GB artifact the engine serves. The 0.6B file uses 328 MB and downloads in 238 MB. That download is within 0.007 percent of its order-0 coding bound.

The weights chose where to go sparse

We inspected every tensor in the shipping container. The model has 8.19 billion parameters, including 6,945,767,424 ternary states. These cover every attention and feed-forward projection across 36 layers. Just under 63 percent use the zero state. The map below shows all 252 tensors.

Share of weights in the zero state, every tensor of the shipped 8B36 layers × 7 projections · 6,945,767,424 weights counted
qkvogateupdownattentionfeed-forward
161.9261.8462.2663.1362.0161.9660.59262.4662.4062.4162.6669.8263.5870.59362.2962.3062.2762.3568.6963.9772.47462.3662.3462.3362.5470.4863.2565.96562.2662.2462.3162.3463.3762.6561.85662.1762.2062.3062.5262.1561.9161.02762.2862.2662.6762.9862.1662.2562.04862.3062.2162.2762.6262.0862.1162.10962.2162.1862.1562.2762.1162.2262.371062.4462.4362.4162.8062.1862.3362.581162.3562.4362.3962.6862.1962.3362.551262.4562.5362.4262.6462.2162.3262.481362.3962.3762.4962.9662.3062.4262.481462.4662.3662.3262.6262.3662.4762.701562.3162.2762.3062.5462.3262.4462.641662.3762.3362.3462.2862.4062.4862.711762.4062.5062.6262.7962.5462.7061.851862.3262.3262.3062.5762.4162.4262.631962.3062.3562.0462.4162.5362.5262.692062.5362.5062.2962.6562.6262.6262.772162.4262.2162.2962.4162.4962.4562.622262.4462.3062.1262.3362.5362.4262.522362.3662.1462.2462.4762.4362.3562.372462.4962.0163.3362.5462.3062.2362.302562.6862.2263.5163.0162.1762.1462.142662.2962.0862.2962.0862.1162.0762.082762.4062.1562.5462.5562.1162.1162.222862.2161.9862.3662.2062.0162.0161.992962.3062.3462.1562.4161.9962.0161.913062.4562.4562.8762.2861.9862.0162.143162.4162.4862.8662.4061.9762.0362.093262.4462.6262.7662.1961.9762.0262.103362.5462.6262.8462.1861.9261.9761.963462.5262.6262.8961.9861.9862.0261.993562.4962.6663.1162.5862.0662.1562.093662.1962.2762.6462.7261.9262.1262.24
60.6%61.6%62.63%64%67%72.5%
hue depth is nonlinear, so the flat band keeps its texture
counted on true, unpadded rows of every quantized projection · the two dark rows are layers 2 and 3, the one cool cell is the layer 1 down projection at 60.59%
Fig. 6Zero-state occupancy of all 252 shipped tensors, with decoder layers as rows and projection types as columns.

Attention zero share varies by 1.67 points across 36 layers. The layer 1 key matrix uses 61.84 percent zeros. The layer 25 value matrix uses 63.51 percent. Depth has little effect on attention density.

The feed-forward matrices differ in layers 2 through 4. The down matrix reaches 72.47 percent zeros, and the gate reaches 70.48 percent. Both sit about ten points above later layers and return to the common range by layer 5. The layer 1 down matrix is the densest tensor at 60.59 percent zeros.

The learned weights created this pattern. The early feed-forward rows have heavier tails than the rest of the network. Neither the format nor the training objective required that result. It appears only in matrices that write back to the residual stream.

Zero share against depth, one line per projectiondowngateupq, kv, o
layers 2 to 4 · down reaches 72.47%, gate 70.48%
from layer 5 on, all seven projections sit inside a band one point wide
decoder layer, 1 to 36
The attention band at its own scale
the full range of the four attention projections across all 36 layers is 1.67 points wide, against 11.88 points across the feed-forward matrices
Fig. 7Zero-state occupancy by depth for three feed-forward and four attention projection types.

The vocabulary is now the expensive part

Parameter count and file size measure different things. The model has 8,190,735,360 parameters. Ternary projections account for 6,945,767,424. Two untied int8 vocabulary tables account for 1,244,659,712. The remaining 308,224 values are fp32 normalization gains.

The ternary lane uses 2.60 GB. The vocabulary tables use 1.24 GB. Scales, normalization values, and row metadata use 26 MB. Ternary states make up 84.8 percent of the parameters but 67.2 percent of the file.

Neutrino-1 8B, by parameter
84.8%15.2%8.19Bparameters
ternary projection weights · 6,945,767,424int8 embedding parameters · 1,244,659,712fp32 norm parameters · 308,224
Neutrino-1 8B, by byte
67.2%32.1%3.88 GBon disk
ternary weight lane · 2.60 GBtoken embeddings · 1.24 GBscales, norms, metadata · 26 MB
Neutrino-1 0.6B, by byte
50.4%47.5%328 MBon disk
ternary weight lane · 165 MBtoken embeddings · 156 MBscales, norms, metadata · 7 MB
byte lanes sum exactly to file size on both containers · 84.8%of the 8B’s parameters are ternary states, and they occupy 67.2% of the bytes
Fig. 8Parameter share and byte share by tensor class for the 8B and 0.6B artifacts.

The 0.6B file has a different balance. Its tied int8 vocabulary table has 155,582,464 parameters and uses 47.5 percent of the file. The ternary lane uses 50.4 percent. A fixed vocabulary takes a larger share as the decoder gets smaller. The 8B vocabulary uses 32.1 percent of its file.

The 3.88 GB artifact reaches 33.7 tokens per second through the optimized MLX path. On an NVIDIA L4, it reaches 30.7 tokens per second. It uses 4.68 GiB of VRAM with 4,096 tokens of context. This fits on an 8 GB card.

Memory movement limits single-stream decode. Each generated token reads every active weight. The released artifact moves 4.2 times fewer weight bytes per token than Qwen3-8B at bf16. Both models use the same memory system.

Zero share predicts transport size

Zero share predicts download size. Across layers, the ternary lane codes to 0.516 through 0.569 of its raw bytes. Zero share and coded size correlate at minus 0.92. Layers 2 through 4 have the most zeros and the smallest coded size.

Projection types follow the same order. The down matrix codes to 0.543 of its raw size. The key matrix codes to 0.567.

Coded size against zero share, one point per decoder layercorrelation across the 36 layers · −0.92
0.5200.5350.5500.565
62%64%66%
zero share of the layer’s ternary weights
whole ternary lane0.552
down projection, all 36 layers0.5431
gate projection, all 36 layers0.5468
up projection, all 36 layers0.5553
v projection, all 36 layers0.5614
o projection, all 36 layers0.5633
q projection, all 36 layers0.5668
k projection, all 36 layers0.5670
one decoder layer, 36 of themthe embedding lanes hold 0.883 of raw, and the whole file ships at 0.661
per-layer and per-projection ratios reproduce the shipped quantized-lane total to within 0.03%; the file-level figure is the shipped measurement
Fig. 9Coded-size ratio by layer and projection type as a function of zero-state occupancy.

The int8 vocabulary tables compress less. They retain 0.883 of their raw size. The complete 3.88 GB artifact downloads in 2.56 GB, or 0.661 of its raw size. The mix of ternary weights and dense vocabulary sets that ratio.

The state distribution survives a 14-fold scale change

The 0.6B model separates format effects from model effects. Its state shares sit within 0.4 point of the 8B across a fourteenfold parameter gap. Zero uses 62.26 percent against 62.63. Plus uses 18.87 against 18.68. Minus uses 18.86 against 18.69.

Other ratios change with scale. The 0.6B has 28 layers, a hidden width of 1,024, and a feed-forward width of 3,072. Attention uses 40 percent of each layer, compared with 21.7 percent in the 8B. Ternary states make up 73.9 percent of its parameters, compared with 84.8 percent in the 8B. Its vocabulary also uses more bytes than its ternary weights.

Seven measurements of both shipped containers, one shared scaleNeutrino-1 8BNeutrino-1 0.6B
80%60%40%20%
state statistics
parameter, byte and shape accounting
zero share62.6362.26
plus share18.6818.87
minus share18.6918.86
ternary share of parameters84.8073.89
weight lane share of bytes67.2150.39
vocabulary share of bytes32.1247.47
attention share of a layer21.7440.00
the 8B carries two untied int8 vocabulary tables, the 0.6B one tied table of 155,582,464 parameters serving both ends, which is why its vocabulary crosses above its weight lane
Fig. 10State occupancy and file composition for the 8B and 0.6B artifacts.

Knowledge survives better than behavior

One average would hide how retention changes by task. Against Qwen3-8B at full precision, Neutrino-1 8B retains 96 percent of general knowledge. It retains 87 percent on the re-annotated knowledge set and 87 percent on strict instruction following. Tool-use retention is 79 percent.

The Neutrino artifact uses 4.2 times fewer bytes. Per stored byte, those four axes reach 4.03, 3.65, 3.65, and 3.32 times the reference.

Knowledge retains more than behavior in this comparison. Many weights distribute each knowledge result. Linear sums can also cancel individual state errors. Strict instruction and tool-use tests score complete episodes instead. One failed step can fail the episode.

This order has held across every model we trained. Knowledge responds strongly to the weights. Behavior depends more on post-training and full-episode checks.

One behavior axis exceeds the reference. Neutrino-1 8B follows the required answer format more often and stops where the reference drifts. This result comes from behavior training, not from storage format alone.

general knowledge · 96 percent of the reference4.03×
knowledge, re-annotated set · 87 percent3.65×
strict instruction following · 87 percent3.65×
tool calling · 79 percent3.32×
answer-format discipline · returns above the reference4.2× and up
Benchmark retention divided by stored bytes, relative to the bf16 reference at 4.2 times the byte count. The format-discipline result is categorical because its score exceeds the reference.
Fig. 11Benchmark retention normalized by stored bytes on five evaluation axes. The dashed line shows the bf16 reference size.

Behavior objectives still interfere

Behavior objectives interact during post-training. Tool-use pressure reduced strict instruction following. Instruction pressure preserved tool use but changed termination behavior. These effects repeated in the same direction across stages. We recorded the affected axis after every stage.

A stage with two independent checks changed this pattern. Both checked behaviors improved together. This was the first two-axis gain in the program. Unmeasured axes can still fall, so evaluation coverage affects training decisions.

We do not accept a behavior gain until the full battery passes. Later stages use more checks at once so they detect adjacent regressions before checkpoint selection.

What the result establishes

Neutrino-1 8B retains 96 percent of Qwen3-8B general knowledge while using 4.2 times fewer bytes. One behavior axis exceeds the reference. State shares remain almost constant from 0.6B to 8B across a fourteenfold parameter gap. These results measure the same ternary representation during training, storage, and inference.

More from the lab

All research