---
license: apache-2.0
library_name: pytorch
pipeline_tag: text-generation
tags:
- code
- reasoning
- gated-linear-attention
- hybrid-attention
- long-context
- from-scratch
language:
- en
---
# FLATest — Hybrid GLA + Attention code/reasoning LM
A **308M-parameter** decoder-only language model trained **from scratch** on a single
RTX PRO 6000 (Blackwell). It mixes **Gated Linear Attention (GLA)** layers with sparse
full-attention layers — a hybrid sequence mixer in the spirit of Jamba / MiniMax —
to get **O(N) long-context** behaviour while keeping the **exact associative recall**
that pure linear attention loses.
This is an **educational / research** model: trained on a single GPU for a limited
token budget. It is **not** a SOTA code assistant. Its purpose is to demonstrate a
correct, scalable architecture for long-context + reasoning, and the GrokAdamW
optimizer recipe.
## Architecture
| | |
|---|---|
| Params | ~308M |
| `d_model` | 1024 |
| Layers | 24 |
| Heads | 16 (GQA, 4 KV-heads) |
| Mixer | **hybrid** — GLA on most layers, attention every 4th layer (`gggAgggAgggAgggAgggAgggA`) |
| Train context | 4096 |
| Vocab | 49152 (StarCoder2 BPE) |
| Position | RoPE on attention layers; GLA uses learned decay (no RoPE) |
| Norm / MLP | RMSNorm + SwiGLU |
| Embeddings | tied input/output |
**Why hybrid:** pure GLA fails exact associative recall (recall ≈ chance on an
induction probe), while a few interleaved attention layers restore it (recall ≈ 1.0).
The GLA layers keep the model linear in context length, so the real payoff is
**long-form generation**: in our decode benchmark GLA's recurrent state is **~8.7×
faster and ~20× lighter** than an attention KV-cache at 64k output tokens.
## Training
- **Optimizer:** GrokAdamW — decoupled weight decay (0.1), betas (0.9, 0.95),
cautious update, optional Grokfast EMA. The weight-decay-driven recipe was verified
to reproduce **grokking** on modular addition (val acc 0 → 1.0).
- **Data:** infinite mixed stream — code documents (`bigcode/starcoderdata`) +
reasoning traces (`open-r1/OpenR1-Math-220k`, ratio 0.3). Reasoning examples are
**prompt-masked** (loss only on `…` + answer).
- **Schedule:** warmup + cosine, bf16 autocast, grad clip 1.0, effective batch 64
(262k tokens/step), `torch.compile`.
- **Throughput:** ~81k tok/s, ~58 GB peak on the PRO 6000.
- **Reasoning format:** special tokens `` / ``; the model learns to
reason in text before answering.
Validation perplexity dropped steadily (ppl 33 → ~4 within a few thousand steps).
See `config.json` and `training_state.json` for the exact step the uploaded
checkpoint corresponds to.
## Files
- `ckpt_last.pt` — checkpoint: `{model, opt, step, cfg}` (PyTorch).
- `config.json` — the `ModelConfig` used to build the model.
- `model.py`, `optim.py` — model + optimizer definitions (the `codetrain` package).
- `generate.py` — inference / sampling script.
## Inference
```bash
pip install torch transformers flash-linear-attention
python generate.py --ckpt ckpt_last.pt --prompt "Write a Python function that reverses a linked list."
```
`generate.py` seeds a `` block to elicit reasoning, then samples the answer.
Requires `flash-linear-attention` (Triton) for the GLA layers.
## Limitations
- Single-GPU, limited token budget → expect incoherent or repetitive output on hard
prompts. It is a scaffold, not a product.
- GLA layers require `flash-linear-attention` + a Triton-capable GPU.
- `generate.py` uses full-recompute decoding (simple, correct for both layer types);
the O(1) recurrent GLA decode that gives the long-context speedup is not yet wired
into the sampler.
## Citation / lineage
Builds on: Gated Linear Attention (Yang et al. 2023), Grokfast (Lee et al. 2024),
grokking (Power et al. 2022), hybrid linear/attention stacks (Jamba, MiniMax).