Downloads · 30 days
3
13% of all-time downloads
crumb-ai/abl_2_1_backloaded
abl_2_1_backloaded is a machine learning model from crumb-ai. Use it for the machine learning task on the model card, and read the license before you ship it in a product. The card lists the license as mit.
abl21backloaded is a hybrid decoder-only language model from the CRUMB (Compact Recurrent-hybrid Underlying Mamba Blocks) project. It interleaves Mamba-3 selective state-space layers with GQA (Grouped-Query Attention)…
Downloads · 30 days
3
13% of all-time downloads
All-time downloads
23
Public
Repo size
584 MB
Likes
0
Public
Click a slice to open those files.
.pt584 MB · 99%
From the Hugging Face model README
abl_2_1_backloadedabl_2_1_backloaded is a hybrid decoder-only language model from the
CRUMB (Compact Recurrent-hybrid Underlying Mamba Blocks) project. It
interleaves Mamba-3 selective state-space layers with GQA
(Grouped-Query Attention) layers at a 2:1 Mamba-majority ratio with
backloaded placement, and was pre-trained exclusively on Python source
code.
It is one of eleven ablation variants trained to study how the Mamba-to-attention ratio and the placement of attention layers affect small-scale (~150M-parameter) language models on Python program synthesis.
| Property | Value |
|---|---|
| Total parameters | 146,075,776 (146.1M) |
d_model | 768 |
n_layers | 12 |
n_heads | 12 |
n_kv_heads | 4 (GQA) |
d_head | 64 |
d_ff | 3072 |
vocab_size | 32768 |
seq_len | 4096 |
| Tie embeddings | yes |
| Pos. encoding | RoPE (base = 10000) |
| Mamba layer type | Mamba-3 (d_state=64, expand=2, headdim=64, ngroups=1, chunk=64) |
8 Mamba layers + 4 GQA attention layers (2 Mamba blocks per attention block).
Attention layers are stacked at the end of the network. Layer order:
M M M M M M M M A A A A
This placement keeps the final layers — closest to the output projection — precise and attention-based, while the earlier layers compress the input through linear-time Mamba blocks.
| Property | Value |
|---|---|
| Training data | Python subset of bigcode/the-stack-dedup-v2 |
| Tokens seen | 5,367,406,590 (~5.37 B) |
| Steps | 163,840 |
| Context length | 4096 |
| Training time | 47 h 28 m 32 s |
| Final learning rate | 3.00e-05 |
Per-token cross-entropy loss with BF16 autocast, computed over the full held-out evaluation set.
| Setting | Value |
|---|---|
| Eval sequences | 20,063 batches |
| Eval tokens | 328,631,940 |
| Implementation | src/evaluation/perplexity.py |
temperature=0.8, top_k=50,
max_new_tokens=128; each completion checked with ast.parse().
Implementation: src/evaluation/syntax_validity.py.temperature=0.6, top_k=50, max_new_tokens=200, identical random
seed per prompt.
Implementation: src/evaluation/qualitative_comparison.py.| Metric | Value |
|---|---|
| Eval loss | 1.2437 |
| Eval perplexity | 3.4683 |
| Eval time | 3,201.84 s (~53 min) |
| Syntax validity (n=200) | 56 / 200 → 28.0 % |
| Inference gen. time (200×128 tok) | 176.35 s |
Out of 11 ablation configurations evaluated at the same token budget:
| Rank | Model | Perplexity |
|---|---|---|
| 1 | abl_2_1_interleaved | 3.4182 |
| 2 | abl_3_1_interleaved | 3.4359 |
| 3 | abl_3_1_backloaded | 3.4493 |
| 4 | abl_2_1_backloaded | 3.4683 |
| 5 | abl_1_1_backloaded | 3.4763 |
| 6 | abl_pure_mamba | 3.5237 |
| 7 | abl_1_1_interleaved | 3.5407 |
| 8 | abl_pure_attn | 3.5939 |
| 9 | abl_3_1_frontloaded | 3.6798 |
| 10 | abl_2_1_frontloaded | 3.7078 |
| 11 | abl_1_1_frontloaded | 3.7315 |
abl_2_1_backloaded is the best backloaded variant across all three
ratios, and the best 2:1 backloaded model in the study. Within the 2:1
ratio it ranks second after abl_2_1_interleaved (the overall best model).
This model is part of the CRUMB Phase-1 ablation study:
Efficient Architectural Hybrids for Small-Scale Language Models in Python Program Synthesis — Department of Computer Science and Engineering, Daffodil International University. Findings documented in
documents/phase1_ablation_findings.md.
from tokenizers import Tokenizer
import torch
from src.model.config import CRUMBConfig
from src.model.model import CRUMBModel
config = CRUMBConfig.from_yaml("configs/model/abl_2_1_backloaded.yaml")
model = CRUMBModel(config)
state = torch.load("saved/model/abl_2_1_backloaded/model.pt", map_location="cpu")
model.load_state_dict(state)
model.eval()
tok = Tokenizer.from_file("saved/tokenizer/crumb_tok_hf/tokenizer.json")
ids = tok.encode("def fibonacci(n):\n").ids
x = torch.tensor([ids])
with torch.no_grad():
y = model(x)