llm-course-hw1 / README.md
Amir337's picture
Update README.md
0f8efc7 verified
metadata
language:
  - ru
tags:
  - text-generation
  - causal-lm
  - transformer
  - byte-level-bpe
  - alibi
  - rope
  - gqa
  - swiglu
  - education
  - course-work
datasets:
  - IgorVolochay/russian_jokes
library_name: pytorch
pipeline_tag: text-generation
license: mit
model-index:
  - name: llm-course-hw1 (nano/mini/small)
    results:
      - task:
          name: Language Modeling
          type: text-generation
        dataset:
          name: Russian Jokes
          type: IgorVolochay/russian_jokes
          split: test
        metrics:
          - name: Validation cross-entropy
            type: loss
            value: 2.624

LLM Course HW1 — Byte-level BPE + Tiny Russian Jokes LM

Это домашнее задание: обучение Byte-level BPE токенизатора и небольшой Causal Transformer на датасете русских анекдотов.

Что внутри

  • Токенизатор: Byte-level BPE, обучен с нуля на IgorVolochay/russian_jokes
  • Модель: Causal Transformer с:
    • ALiBi позиционными смещениями (по умолчанию) или RoPE (опционально)
    • GQA (Grouped-Query Attention)
    • SwiGLU в FFN
    • (опционально) Multi-Head Latent Attention (MLA) для экономии KV-кэша
  • Конфиги размеров: nano / mini / small
  • Код генерации и обучения на PyTorch

Примечание: Модель и токенизатор — кастомные классы, не transformers. Для использования см. примеры ниже.


Файлы в репозитории

  • model.safetensors — веса модели
  • config.json — конфиг модели
  • vocabulary.json, merges.json — файлы Byte-level BPE
  • README.md — эта карточка

Архитектура

  • Embedding: token embedding (без learnable pos embed; позиции кодируются ALiBi или RoPE)
  • Attention: Multi-head, GQA (число KV-голов меньше числа Q-голов)
  • Positional encoding:
    • ALiBi (additive linear bias) — не требует табличек, хорошо масштабируется
    • RoPE (опционально): комплексные вращения Q/K; требует чётного head_dim
  • FFN: SwiGLU = silu(W₁a x) ⊙ (W₁b x)W₂
  • Norm: RMSNorm (pre-norm)
  • (Опция) MLA: свёртка K/V в общий латент и on-the-fly дешифрация (снижение памяти под KV-кэш)

Тренировочные детали

  • Датасет: IgorVolochay/russian_jokes (train/test split 90/10, фиксированный seed)
  • Оптимизатор: AdamW (lr=3e-4, weight_decay=0.1)
  • Шедулер: Linear warmup (10% шагов) → linear decay
  • Batching: паддинг до максимальной длины в батче + attention_mask
  • Критерий: next-token cross-entropy с маскированием паддингов
  • Макс. контекст: max_seq_len=128

Графики

Графики