Skip to content

Ferraronp/gpt-pretrain

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GPT Pretraining from Scratch

Серия русскоязычных языковых моделей, обученных с нуля на собственном корпусе. Архитектура эволюционировала от стандартного 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, обученный на русскоязычном корпусе.


AIVA 1.0 — GPT-2 Small

Первая модель, стандартный nanoGPT без изменений.

Конфиг: batch_size=8, block_size=1024, grad_accum=1, iters=600k


AIVA 1.1 — GPT-2 Small

Эксперименты с динамическим изменением гиперпараметров в процессе обучения — постепенное увеличение 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


AIVA 1.2 — GPT-2 Medium

Переход на Medium архитектуру. Введён dropout во второй половине обучения.

Конфиг: block_size=1024, batch_size=4, grad accum: 20→60, dropout: 0→0.05, iters=150k


AIVA 1.3 — GPT-2 Large

GPT-2 Large с кастомным токенизатором. Обучение через несколько Colab-воркеров с синхронизацией градиентов через Google Drive.

Конфиг: n_layer=36, n_head=20, n_embd=1280, block_size=2048, batch_size=2, grad_accum=125


Aiva Seina 1.0 — Custom Architecture

Переработанная архитектура с современными компонентами поверх 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-файлов

Обучение

Одиночный GPU (Colab)

python train.py config/train_config.py

Распределённое обучение (несколько Colab-сессий)

Несколько воркеров синхронизируют градиенты через 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.

About

Pretraining Russian GPT from scratch — RoPE, SwiGLU, GQA, distributed training across free Colab instances

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors