Squeal-Studio/drakon_28m-base

drakon_28m-base is a compact ~28M parameter language model pretrained from scratch on Russian-language text. It uses a hybrid architecture combining Depthwise Causal Conv, MinGRU, and Full Causal Attention with RoPE — every 3rd block is an attention block.

This is a base model (pretraining only). Instruction-tuned (SFT) version is in progress.

Research and Experimental Model. Designed for experimentation and research. Given its size, performance on complex tasks will be limited.

Model Description

  • Architecture: Drakon (Depthwise Conv + MinGRU + Causal Attention with RoPE)
  • Parameters: ~28.5M
  • Tokenizer: Custom BPE, vocab_size = 24,001
  • Context length: 1024 tokens

Architecture Details

Parameter Value
hidden_size 448
num_layers 12
num_attention_heads 8
attention_every_n_layers 3
num_attention_layers 4
num_mingru_layers 8
conv_kernel_size 4
ffn_ratio 2.0
dropout 0.1
position_embedding RoPE
normalization RMSNorm (pre-norm)
block_pattern [ConvMinGRU, ConvMinGRU, Attention] x 4

Training Details

  • Dataset: ~5.5M documents, 10gb, ~1.5B unique tokens, ~3B tokens total (2 epochs)
  • Preprocessing: Unicode normalization (NFKC), Cyrillic-ratio filtering, degenerate-repetition filtering, digit/punctuation-ratio filtering, Wikipedia, Fineweb2, cultura paragraph-level chunking, short-utterance grouping, exact deduplication (SHA-256), and approximate deduplication (MinHash/LSH)
  • Sequence length: 1024 tokens
  • Epochs: 2
  • Batch size: 16 per device, gradient accumulation steps 8 (effective batch size 128)
  • Learning rate: 4e-4 (cosine schedule, warmup 1500 steps)
  • Weight decay: 0.01
  • Max grad norm: 1.0
  • Steps: 22,924
  • Precision: fp16
  • Seed: 42

Sources:

Source Documents Characters
cultura_ru_edu 649,700 1,194,216,253
fineweb2_ru 649,493 1,107,124,811
wikipedia 642,803 1,078,959,165
taiga_proza 549,206 967,503,171
habr 499,169 830,954,448
ru_news 329,573 552,286,936
opensubtitles 199,970 104,917,728

Evaluation

Step Eval Loss Perplexity
5,000 3.4508 31.5
10,000 3.2175 25.0
15,000 3.1293 22.9
22,924 3.0893 22.0

Training Curve

Training Curve

Usage

from transformers import AutoModelForCausalLM, AutoTokenizer

repo = "Squeal-Studio/drakon_28m-base"
tok = AutoTokenizer.from_pretrained(repo, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(repo, trust_remote_code=True).eval().cuda()

inputs = tok("Однажды в лесу", return_tensors="pt").to("cuda")
inputs.pop("token_type_ids", None)

out = model.generate(
    **inputs,
    max_new_tokens=150,
    do_sample=True,
    temperature=0.8,
    top_k=50,
    repetition_penalty=1.1,
)
print(tok.decode(out[0], skip_special_tokens=True))

Generation Examples

Prompt: Однажды утром я проснулся и

Однажды утром я проснулся и почувствовал, как в ушах у меня мелькает голос: "Скажи
мне, что ты не хочешь быть рядом с тобой"
- Я... - прошептал он. — Ты же знаешь, что это так. Это был мой первый шанс!
Мне было страшно! И когда мы шли к нему домой, то его лицо стало совсем светло.
Он смотрел на меня с улыбкой и говорил: "Я люблю тебя!"

Prompt: Дорогие друзья! Сегодня мы

Дорогие друзья! Сегодня мы познакомимся с одним из самых интересных и популярных
блюд в мире.
Очень часто хочется побывать на кухне, чтобы приготовить вкусный ужин. Не стоит
забывать о том что у нас есть много разных рецептов приготовления пищи: это
диетические блюда, которые содержат множество полезных веществ, помогающих нам
справиться со многими недугами организма.

Prompt: Погода сегодня была

Погода сегодня была очень солнечной, но как и в прошлом году, это был самый
теплый день для зимы.
В течение года погода стала более прохладной, чем днем на солнце. С 1946 по 2015
год температура воздуха в зимний период составляла около +3 градусов. Среднегодовая
температура воздуха составила -7,8°С. В этот же период зимой температура воздуха
поднялась до +10,7°C. Температура воздуха понизилась до +25...+26°C.

Prompt: Когда я был маленьким, мы с бабушкой

Когда я был маленьким, мы с бабушкой ходили в школу и играли на гитаре. В 1960
году мне было очень трудно понять, почему папа так сильно меня любил. Я не знал,
что он должен был быть таким же взрослым, как и мама. Мне казалось его жизнь
интересной. Он был прав: когда родители говорили о том, что мать хочет жить, то
они считали себя "неправдоподобными". Но отец понимал это иначе, потому что у
него были разные причины для того, чтобы стать отцом. И он решил, что ему нравится.
- Да, но я люблю тебя! - сказал дедушка. — Я тебе не нравлюсь.
Он хотел сказать, а он боялся, что будет лучше. Потому что он не мог знать, где
ты родишь сына, который живет до сих пор. А вот если бы бабушка была матерью, то
она могла бы получить от нее все больше удовольствия.

Prompt: В выходные мы поехали на дачу, где

В выходные мы поехали на дачу, где дед жил. В этот раз за городом стояла наша
любимая семья — отец, и мама, которая была рядом с нами в тот день, называла
меня Анечкой. И я приехала к нам домой.
- Ну что ты, - сказала она ей, - мне нужно было идти к бабушке...
На следующий вечер у нас родилась дочь, а родители сказали:
- Мама, а то бабушка будет жить в Москве, не знаю куда ехать, да еще и там
учиться надо!

Scope & Limitations

  • The architecture is still raw and prototype-level — expect rough edges
  • Designed for architectural experiments and educational purposes
  • Context length of 1024 tokens limits long-range coherence
  • Not intended for production use

License

Apache 2.0

Downloads last month
511
Safetensors
Model size
39.2M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for Squeal-Studio/drakon_28m-base

Finetunes
1 model