Серия русскоязычных языковых моделей, обученных с нуля на собственном корпусе. Архитектура эволюционировала от стандартного GPT-2 Small до кастомной реализации с RoPE, RMSNorm, SwiGLU и GQA (~700M параметров). Обучение велось на бесплатных GPU Google Colab.
| Модель | Архитектура | Токенов | train loss | val loss |
|---|---|---|---|---|
| AIVA 1.0 | GPT-2 Small | 163M | 3.99 | 4.02 |
| AIVA 1.1 | GPT-2 Small | 5.3B | 3.24 | 3.30 |
| AIVA 1.2 | GPT-2 Medium | 5.5B+ | 3.07 | 3.12 |
| AIVA 1.3 | GPT-2 Large | 15B | 2.86 | 3.04 |
| Aiva Seina 1.0 | Custom (RoPE/SwiGLU/GQA) | 5.1B | 3.07 | 3.11 |
Все модели используют кастомный BPE-токенизатор с vocab size 51200, обученный на русскоязычном корпусе.
Первая модель, стандартный nanoGPT без изменений.
Конфиг: batch_size=8, block_size=1024, grad_accum=1, iters=600k
![]() |
![]() |
Эксперименты с динамическим изменением гиперпараметров в процессе обучения — постепенное увеличение batch size и gradient accumulation, подбор weight decay.
Конфиг: block_size=1024, batch size: 8→16→20, grad accum: 3→6→9→12→24, weight decay: 0.1→0.01→0.05→0.1, iters=600k→150k
![]() |
![]() |
Переход на Medium архитектуру. Введён dropout во второй половине обучения.
Конфиг: block_size=1024, batch_size=4, grad accum: 20→60, dropout: 0→0.05, iters=150k
![]() |
![]() |
GPT-2 Large с кастомным токенизатором. Обучение через несколько Colab-воркеров с синхронизацией градиентов через Google Drive.
Конфиг: n_layer=36, n_head=20, n_embd=1280, block_size=2048, batch_size=2, grad_accum=125
![]() |
![]() |
Переработанная архитектура с современными компонентами поверх nanoGPT.
| Компонент | Описание |
|---|---|
| RoPE | Rotary Positional Embedding вместо абсолютных позиций |
| RMSNorm | Нормализация без bias вместо LayerNorm |
| SwiGLU | Активация с gate-механизмом, hidden_dim = 4d × 2/3 |
| GQA | Grouped Query Attention, раздельные проекции Q и KV |
| Flash Attention | scaled_dot_product_attention (PyTorch 2.0+) |
| Selective Gradient Checkpointing | Стратегии: alternate, every_n, custom |
| 8-bit AdamW | Через bitsandbytes для экономии памяти GPU |
![]() |
![]() |
Собственный русскоязычный корпус из трёх частей:
- Taiga — новости, журналы, художественная литература, субтитры
- Собственный корпус — DTF, Ficbook, LiveJournal, StopGame, Nplus1, Igromania (~566k документов)
- FineWeb2 (
rus_Cyrl) — веб-корпус, отфильтрованный стриминговым пайплайном
data/
├── filter_fineweb.py # Стриминговая фильтрация FineWeb2 (SimHash-дедупликация + эвристики)
├── prepare.py # Токенизация датасета → train.bin / val.bin
└── tokenize_dataset.ipynb # Стриминговая токенизация больших JSONL-файлов
python train.py config/train_config.pyНесколько воркеров синхронизируют градиенты через Google Drive: каждый воркер сохраняет grad_iter_{N}_worker_{W}.pt, остальные подгружают и усредняют перед шагом оптимизатора.
count_workers = 2 # количество воркеров
worker_id = 1 # ID текущего воркераgpt-pretrain/
├── model.py # Архитектура (RoPE, RMSNorm, SwiGLU, GQA)
├── train.py # Обучение, одиночный GPU
├── train_distributed.py # Обучение, несколько Colab-воркеров
├── train_config.py # Конфигурация
├── data/
│ ├── filter_fineweb.py
│ ├── prepare.py
│ └── tokenize_dataset.ipynb
├── notebooks/
│ ├── training_single.ipynb
│ └── training_distributed.ipynb
└── assets/
pip install torch numpy transformers datasets tiktoken wandb tqdm
pip install tokenizers bitsandbytes
pip install simhash langid # для filter_fineweb.pyКод адаптирован из karpathy/nanoGPT.









