Files
simple-llm/doc/gpt_documentation_ru.md
Sergey Penkovsky 5765eb3bd3 Обновление метода generate в GPT
Основные изменения:
1. Добавлена поддержка различных стратегий генерации:
   - Жадный поиск (do_sample=False)
   - Вероятностное сэмплирование (do_sample=True)
   - Top-k сэмплирование (top_k параметр)
   - Nucleus (top-p) сэмплирование (top_p параметр)
   - Температурное сэмплирование (temperature параметр)

2. Добавлена валидация параметров:
   - Проверка temperature > 0
   - Проверка top_k > 0
   - Проверка top_p в диапазоне (0, 1]
   - Запрет одновременного использования top_k и top_p

3. Улучшена документация:
   - Подробное описание всех параметров
   - Примеры использования
   - Примечания о детерминированности
   - Описание исключений

4. Оптимизация кода:
   - Эффективное обрезание последовательности
   - Оптимизированные операции с тензорами
   - Четкое разделение логики для разных режимов
2025-07-22 10:53:57 +03:00

5.2 KiB
Raw Blame History

Документация по GPT модели

1. Общее описание

GPT (Generative Pre-trained Transformer) - это авторегрессивная модель генерации текста на основе архитектуры трансформера.

Ключевые особенности реализации:

  • Поддержка различных режимов генерации (жадный поиск, сэмплирование)
  • Многослойный декодер с механизмом самовнимания
  • Оптимизированная работа на CPU/GPU
  • Гибкая настройка параметров генерации
  • Поддержка комбинированных стратегий (top-k + top-p)

2. Архитектура и алгоритм

2.1 Полная блок-схема

graph TD
    A[Входные токены] --> B[Токенные эмбеддинги]
    A --> C[Позиционные эмбеддинги]
    B --> D[Сумма эмбеддингов + Dropout]
    C --> D
    D --> E[Стек декодеров]
    E --> F[Многоголовое самовнимание]
    F --> G[Add & Norm]
    G --> H[FeedForward]
    H --> I[Add & Norm]
    I --> J[Выходные логиты]
    J --> K[Выбор следующего токена]
    K --> L[Добавление к последовательности]

2.2 Режимы генерации

  1. Жадный поиск (do_sample=False):

    • Всегда выбирает токен с максимальной вероятностью
    • Детерминированный результат
  2. Вероятностное сэмплирование (do_sample=True):

    • С температурой (temperature=0.5-1.5)
    • Top-k (top_k=10-100)
    • Nucleus sampling (top_p=0.7-0.95)
    • Комбинированный режим (top_k + top_p)

3. Практическое использование

3.1 Инициализация модели

from simple_llm.transformer.gpt import GPT

model = GPT(
    vocab_size=10000,    # Размер словаря
    max_seq_len=512,     # Макс. длина контекста
    emb_size=768,        # Размерность эмбеддингов
    num_heads=12,        # Число голов внимания
    head_size=64,        # Размерность головы
    num_layers=6,        # Количество слоев декодера
    dropout=0.1,         # Вероятность dropout
    device='cuda'        # 'cpu' или 'cuda'
)

3.2 Генерация текста

output = model.generate(
    input_ids,           # Входные токены [batch_size, seq_len]
    max_new_tokens=50,    # Макс. число новых токенов
    do_sample=True,      # Режим сэмплирования
    temperature=0.9,     # Контроль случайности (0.1-2.0)
    top_k=50,            # Ограничение по топ-k токенам
    top_p=0.9,           # Параметр nucleus sampling
    repetition_penalty=1.2, # Штраф за повторения
    stop_tokens=None     # Токены для остановки генерации
)

3.3 Примеры использования

Базовый пример:

text = "Анализ данных - это"
input_ids = tokenizer.encode(text)
output_ids = model.generate(input_ids, max_new_tokens=100)
generated_text = tokenizer.decode(output_ids[0])

Креативная генерация:

output = model.generate(
    input_ids,
    max_new_tokens=100,
    do_sample=True,
    temperature=1.3,
    top_k=60,
    top_p=0.85
)

4. Оптимизация и настройка

4.1 Рекомендуемые параметры

Тип задачи Параметры
Точные ответы temp=0.7, top_k=40, top_p=0.8
Креативная письмо temp=1.2, top_k=60, top_p=0.9
Кодогенерация temp=0.8, top_k=50, top_p=0.85

4.2 Производительность

Для CPU:

model = GPT(
    emb_size=256,
    num_layers=4,
    num_heads=8,
    device='cpu'
)

Для GPU:

model = GPT(
    emb_size=1024,
    num_layers=12,
    device='cuda'
)

5. Ограничения и решения

Ограничение Решение
Длинные последовательности Чанкование входных данных
Высокая загрузка памяти Уменьшение batch_size
Повторы в генерации Настройка repetition_penalty
Медленная генерация Кэширование ключей/значений

6. Дополнительные материалы