Update README.md
Browse files
README.md
CHANGED
|
@@ -1,10 +1,91 @@
|
|
| 1 |
---
|
|
|
|
|
|
|
| 2 |
tags:
|
| 3 |
-
-
|
| 4 |
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
---
|
| 6 |
|
| 7 |
-
|
| 8 |
-
|
| 9 |
-
-
|
| 10 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
+
language:
|
| 3 |
+
- ru
|
| 4 |
tags:
|
| 5 |
+
- text-generation
|
| 6 |
+
- causal-lm
|
| 7 |
+
- transformer
|
| 8 |
+
- byte-level-bpe
|
| 9 |
+
- alibi
|
| 10 |
+
- rope
|
| 11 |
+
- gqa
|
| 12 |
+
- swiglu
|
| 13 |
+
- education
|
| 14 |
+
- course-work
|
| 15 |
+
datasets:
|
| 16 |
+
- IgorVolochay/russian_jokes
|
| 17 |
+
library_name: pytorch
|
| 18 |
+
pipeline_tag: text-generation
|
| 19 |
+
license: mit
|
| 20 |
+
model-index:
|
| 21 |
+
- name: llm-course-hw1 (nano/mini/small)
|
| 22 |
+
results:
|
| 23 |
+
- task:
|
| 24 |
+
name: Language Modeling
|
| 25 |
+
type: text-generation
|
| 26 |
+
dataset:
|
| 27 |
+
name: Russian Jokes
|
| 28 |
+
type: IgorVolochay/russian_jokes
|
| 29 |
+
split: test
|
| 30 |
+
metrics:
|
| 31 |
+
- name: Validation cross-entropy
|
| 32 |
+
type: loss
|
| 33 |
+
value: 2.624
|
| 34 |
+
|
| 35 |
---
|
| 36 |
|
| 37 |
+
# LLM Course HW1 — Byte-level BPE + Tiny Russian Jokes LM
|
| 38 |
+
|
| 39 |
+
Это домашнее задание: обучение **Byte-level BPE** токенизатора и небольшой **Causal Transformer** на датасете русских анекдотов.
|
| 40 |
+
|
| 41 |
+
## Что внутри
|
| 42 |
+
|
| 43 |
+
- **Токенизатор:** Byte-level BPE, обучен с нуля на `IgorVolochay/russian_jokes`
|
| 44 |
+
- **Модель:** Causal Transformer с:
|
| 45 |
+
- **ALiBi** позиционными смещениями *(по умолчанию)* или **RoPE** *(опционально)*
|
| 46 |
+
- **GQA** (Grouped-Query Attention)
|
| 47 |
+
- **SwiGLU** в FFN
|
| 48 |
+
- (опционально) **Multi-Head Latent Attention (MLA)** для экономии KV-кэша
|
| 49 |
+
- **Конфиги размеров:** `nano` / `mini` / `small`
|
| 50 |
+
- **Код генерации и обучения** на PyTorch
|
| 51 |
+
|
| 52 |
+
> Примечание: Модель и токенизатор — **кастомные классы**, не `transformers`. Для использования см. примеры ниже.
|
| 53 |
+
|
| 54 |
+
---
|
| 55 |
+
|
| 56 |
+
## Файлы в репозитории
|
| 57 |
+
|
| 58 |
+
- `model.safetensors` — веса модели
|
| 59 |
+
- `config.json` — конфиг модели
|
| 60 |
+
- `vocabulary.json`, `merges.json` — файлы Byte-level BPE
|
| 61 |
+
- `README.md` — эта карточка
|
| 62 |
+
|
| 63 |
+
---
|
| 64 |
+
|
| 65 |
+
## Архитектура
|
| 66 |
+
|
| 67 |
+
- **Embedding:** token embedding (без learnable pos embed; позиции кодируются ALiBi или RoPE)
|
| 68 |
+
- **Attention:** Multi-head, **GQA** (число KV-голов меньше числа Q-голов)
|
| 69 |
+
- **Positional encoding:**
|
| 70 |
+
- **ALiBi** (additive linear bias) — не требует табличек, хорошо масштабируется
|
| 71 |
+
- **RoPE** (опционально): комплексные вращения Q/K; требует чётного `head_dim`
|
| 72 |
+
- **FFN:** **SwiGLU** = `silu(W₁a x) ⊙ (W₁b x)` → `W₂`
|
| 73 |
+
- **Norm:** **RMSNorm** (pre-norm)
|
| 74 |
+
- **(Опция) MLA:** свёртка K/V в общий латент и on-the-fly дешифрация (снижение памяти под KV-кэш)
|
| 75 |
+
|
| 76 |
+
---
|
| 77 |
+
|
| 78 |
+
## Тренировочные детали
|
| 79 |
+
|
| 80 |
+
- **Датасет:** `IgorVolochay/russian_jokes` (train/test split 90/10, фиксированный seed)
|
| 81 |
+
- **Оптимизатор:** AdamW (`lr=3e-4`, `weight_decay=0.1`)
|
| 82 |
+
- **Шедулер:** Linear warmup (10% шагов) → linear decay
|
| 83 |
+
- **Batching:** паддинг до максимальной длины в батче + `attention_mask`
|
| 84 |
+
- **Критерий:** next-token cross-entropy с маскированием паддингов
|
| 85 |
+
- **Макс. контекст:** `max_seq_len=128`
|
| 86 |
+
|
| 87 |
+
---
|
| 88 |
+
|
| 89 |
+
## Графики
|
| 90 |
+

|
| 91 |
+
|