Model reference · open weights

Surjo

LLMs SurjoLabs Text gen 1 build Open weights 590 dl/mo

Surjo is an open-weight language model from SurjoLabs. Surjo-50m (FP32) weighs 108 MB; the smallest configuration that runs it is RTX 3060 12 GB.

For self-hosting, compare this build's requirements below with the GPU you plan to rent.

  • Surjo-50M is a 53.8M-parameter hybrid recurrent language model developed by SurjoLabs for text generation.
  • It uses a Gen-3 architecture combining Gated DeltaNet-2 linear attention with full attention, supporting a 2048-token context window.
  • The model is trained on English data and released under the Apache 2.0 license.

Summary of the SurjoLabs/Surjo-50m model card, 2026-10-01

What it is

Released bySurjoLabs
Released2026-09-05
Parameters54M
VRAM108 MB for the weights

What it runs on

Memory and cards for Surjo-50m (FP32)

108 MBweights, file size
10 MBcache per 1K tokens
484 MBruntime overhead, at least
2,048 tokenscontext max
CardRequests at onceContext maxMemory
2K each
RTX 3060 12 GB525all 2K11.6 GB
RTX 4060 Ti 16 GB706all 2K15.4 GB
RTX 3090 24 GB1000+all 2K23.4 GB
RTX 4090 24 GB1000+all 2K23.4 GB
RTX 5090 32 GB1000+all 2K31.0 GB
L40S 48 GB1000+all 2K44.0 GB
A100 80 GB1000+all 2K78.2 GB
H100 80 GB1000+all 2K78.1 GB
RTX PRO 6000 Blackwell 96 GB1000+all 2K93.8 GB
DGX Spark (GB10) 128 GB unified1000+all 2K107 GB
H200 141 GB1000+all 2K138 GB
B200 180 GB1000+all 2K176 GB
Memory needed at each load
Requests at once2K tokens each
1613 MB
5696 MB
8759 MB
16927 MB
321.3 GB
641.9 GB

One card, with vLLM's small-card settings.

From the model card

What SurjoLabs says about Surjo

Read the model card

Surjo-50M

Surjo-50M is a 53.8M-parameter hybrid recurrent language model developed by SurjoLabs. Built on the Gen-3 Surjo architecture, it couples Gated DeltaNet-2 (GDN-2) linear attention with full attention (XSA).

By executing a weight-tied recurrent core across 2 passes, the model reaches an effective computational depth of 18 layers while retaining the memory footprint and latency profile of a 10-layer physical model.

Instruction-Tuned Variant: For conversational use, instruction following, and a 2048-token context window, see Surjo-50M-SFT-Only.

Model Specifications

AttributeSpecification
Parameters53.8M
ArchitectureHybrid GDN-2 + XSA (Subtractive Attention)
Physical Layers10 (1 Prelude + 8 Recurrent Trunk + 1 Coda)
Effective Depth18 Layers (2 Recurrent Passes)
Hidden Size512
Intermediate Size1536
Attention ConfigurationGQA (8 Query heads, 4 KV heads; Head Dim: 64)
Linear AttentionGDN-2 (K: 64, V: 64, 8 V-Heads)
Context Length1024 tokens pretraining (2048 max)
Vocabulary32,768 (Custom BPE, tied embeddings)

Evaluation Results

BenchmarkScore
PIQA63.11%
ARC-Easy44.99%
ArithMark-337.90%
HellaSwag31.37%
ARC-Challenge25.94%
Int Index16.40

Architecture Details

Surjo Gen-3 combines fast recurrent sequence processing with full-attention boundary layers:

  • Prelude (Layer 0): Standard attention with subtractive value projection (XSA) to anchor context.
  • Recurrent Core (Layers 1–8, tied 2× passes): Two interleaved groups consisting of 3× GDN-2 linear attention layers followed by 1× XSA full attention layer. GDN-2 uses chunked/fused recurrent kernels via Flash Linear Attention (FLA).
  • Coda (Layer 9): Terminal full-attention XSA layer.
  • Tied Head: The output projection shares weights with the 32,768-token embedding layer.

Pretraining

  • Dataset (20B tokens):
    • 60% FinePhrase
    • 20% DCLM
    • 10% FineMath
    • 10% Cornstack Python
  • Training Schedule: 20,000 steps (~1M tokens/step) at a sequence length of 1024 tokens.
  • Optimizer: Hybrid Muon (peak lr = 0.02) and AdamW (peak lr = 0.0036).

Usage

Requirements

pip install torch transformers accelerate
pip install -U git+https://github.com/fla-org/flash-linear-attention

Generation Example

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "SurjoLabs/Surjo-50m"

tokenizer = AutoTokenizer.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    torch_dtype=torch.bfloat16 if torch.cuda.is_available() else torch.float32,
    device_map="auto",
    trust_remote_code=True,
)

prompt = "The secret to scaling small language models is"
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model.generate(
        **inputs,
        max_new_tokens=64,
        do_sample=True,
        temperature=0.7,
        top_p=0.9,
        repetition_penalty=1.1,
    )

print(tokenizer.decode(outputs[0], skip_special_tokens=True))

Citation & License

This project is released under the Apache 2.0 License.

@software{surjo50m2026,
  author = {SurjoLabs},
  title = {Surjo-50M: Hybrid Recurrent Language Model},
  year = {2026},
  url = {https://huggingface.co/SurjoLabs/Surjo-50m}
}

Quoted from the model card on Hugging Face. The full card is behind the Hugging Face link above.

© 2026 AxForge · EU-hosted AI infrastructure Pricing Docs Trust Privacy Terms