Model reference · open weights

cagliostro

LLMs bench-labs Text gen 1 build Open weights 1k dl/mo

cagliostro is an open-weight language model from bench-labs. cagliostro-v3 (FP32) weighs 2.0 GB; 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.

  • Cagliostro-v3 is a 146M parameter decoder-only language model developed by bench-labs for English text generation.
  • It features a 2,048 token context length and is released under the Apache-2.0 license.
  • The model is a base version without instruction tuning, designed to complete text rather than follow chat instructions.

Summary of the bench-labs/cagliostro-v3 model card, 2026-10-01

What it is

Released bybench-labs
Released2026-09-11
Parameters146M
VRAM2.0 GB for the weights

What it runs on

Memory and cards for cagliostro-v3 (FP32)

2.0 GBweights, file size
38 MBcache per 1K tokens
486 MBruntime overhead, at least
2,048 tokenscontext max
CardRequests at onceContext maxMemory
2K each
RTX 3060 12 GB115all 2K11.6 GB
RTX 4060 Ti 16 GB163all 2K15.4 GB
RTX 3090 24 GB265all 2K23.4 GB
RTX 4090 24 GB264all 2K23.4 GB
RTX 5090 32 GB362all 2K31.0 GB
L40S 48 GB526all 2K44.0 GB
A100 80 GB961all 2K78.2 GB
H100 80 GB928all 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
12.6 GB
52.9 GB
83.2 GB
163.8 GB
325.1 GB
647.6 GB

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

From the model card

What bench-labs says about cagliostro

Read the model card

A 146M parameter decoder-only language model pretrained from scratch on 75B tokens of open web, synthetic textbook and mathematics data. It is the third model in the cagliostro line and the first to clear an Index of 26 on the Open SLM Leaderboard metric.

The training run is complete. 75.00B tokens, 762,939 steps, learning rate decayed to zero.

Results

Zero-shot, measured with lm-evaluation-harness and the leaderboard's own ArithMark-3 script, on the exported float32 weights in this repository.

BenchmarkMetricScore
HellaSwagacc_norm42.51
ARC-Easyacc_norm54.88
ARC-Challengeacc_norm28.75
PIQAacc_norm67.46
ArithMark-3acc_norm43.70
Open SLM Index26.55

The Index is the leaderboard's own formula, (N(HellaSwag,25) + N(CombinedARC,25) + N(PIQA,50) + 0.65*N(ArithMark,25)) / 3.65 where N(v,c) = 100(v-c)/(100-c) and CombinedARC is the mean of ARC-Easy and ARC-Challenge.

For context against other models at this scale, using the leaderboard's published figures:

ModelParamsTokensIndex
SmolLM2-135M135M2T27.13
cagliostro-v3146M75B26.55
SmolLM-135M135M600B25.74
GPT-X2.5-135M135M75B25.17
Haidass1.5-143M143M400B25.07
BananaMind-2-Pro139M100B24.96

SmolLM2-135M is 0.58 Index ahead on roughly 27 times the training tokens. Token counts for the other models are as published by their authors.

No single benchmark carries the cooldown gain. All five move together, which is the signature of the learning rate depression lifting rather than the model acquiring something new in the last 11B tokens.

The shape of the result is lopsided. cagliostro-v3 beats both models shown on ArithMark-3 by more than 4 points, which is what tripling the mathematics share during the cooldown bought. Across the whole board it places third on that benchmark, behind MobileLLM-R1-140M-base at 65.70 and palmer-006 at 52.70. It trails on PIQA, where GPT-X2.5-135M sits at 69.42 against our 67.46, and PIQA carries the heaviest weight in the Index at 0.548 per point. That single task is most of the remaining gap to SmolLM2-135M.

The flat stretch from 30B to 64B is not a stall. A warmup-stable-decay schedule holds the learning rate at its peak for the first 85% of the run, and constant peak learning rate depresses zero-shot multiple-choice accuracy even while validation loss keeps improving. The recovery from 22.0 to 26.6 is what the cooldown unlocks, not new knowledge appearing in the last 9B tokens.

The sharp drop in training loss at 63.75B is the data mixture changing, not the model improving. Validation loss on a fixed held-out set is the honest line, and it moves smoothly.

Model details

FieldValue
Parameters146,352,000
Non-embedding parameters85.7%
Layers30
Hidden size640
Intermediate size1,536
Attention heads10
Key/value heads5
AttentionGrouped query attention with cross-head subspace attenuation
ActivationSwiGLU
NormalizationRMSNorm, eps 1e-6
Positional encodingRoPE, theta 100,000
Context length2,048
Vocabulary32,768 BPE
EmbeddingsTied input and output
Logit cap15.0
Weightsfloat32 safetensors

The architecture is defined in this repository. trust_remote_code=True is required because CagliostroForCausalLM is not part of transformers.

Training data

Two mixtures. The first covers the stable phase, the second takes over when the cooldown begins at 85% of the run.

SourceStable phaseCooldown
FineWeb-Edu (deduplicated)43.7%37.0%
DCLM-Baseline28.3%5.0%
Cosmopedia v216.0%25.0%
FineMath 3+5.0%15.0%
OpenMathInstruct-23.0%13.0%
InfiWebMath 3+2.0%0.0%
SmolTalk2.0%5.0%

Mathematics rises from 10% to 28% during the cooldown. No source exceeds 0.4 epochs across the full run, so nothing is repeated enough to memorize.

Training setup

FieldValue
OptimizerAdamW, weight decay 0.01
ScheduleWarmup-stable-decay
Warmup2,000 steps
Stable phasesteps 2,000 to 648,498 at peak learning rate
Cooldown114,441 steps, cosine to zero
Tokens per step98,304
Total steps762,939
Precisionbfloat16 with float32 master weights
Hardwareone RTX 5090
Throughput90,000 to 103,000 tokens per second
Wall clockabout 9 days

Usage

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

model_id = "bench-labs/cagliostro-v3"
tok = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, trust_remote_code=True, dtype=torch.float32)

ids = tok("The capital of France is", return_tensors="pt")
out = model.generate(**ids, max_new_tokens=32, do_sample=False)
print(tok.decode(out[0], skip_special_tokens=True))

This is a base model with no instruction tuning and no chat template. It completes text.

Reproducing the evaluation

pip install lm-eval
python -m lm_eval --model hf \
  --model_args pretrained=bench-labs/cagliostro-v3,dtype=float32,trust_remote_code=True \
  --tasks hellaswag,arc_easy,arc_challenge,piqa \
  --num_fewshot 0 --batch_size 8 --device cuda:0

ArithMark-3 uses the script linked from the leaderboard, pointed at the same model id. Evaluate in float32. A bfloat16 round trip moves logits by about 1.3e-1 at this logit cap, which is enough to change borderline multiple-choice answers, while float32 agrees with the training weights to 3.2e-05.

Provenance

This repository holds the full training history. A checkpoint was pushed every 30 minutes from the first step, giving 363 commits between 11 and 20 September 2026. Any intermediate checkpoint can be retrieved

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