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

141 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Документация по GPT модели
## 1. Общее описание
GPT (Generative Pre-trained Transformer) - это авторегрессивная модель генерации текста на основе архитектуры трансформера.
**Ключевые особенности реализации:**
- Поддержка различных режимов генерации (жадный поиск, сэмплирование)
- Многослойный декодер с механизмом самовнимания
- Оптимизированная работа на CPU/GPU
- Гибкая настройка параметров генерации
- Поддержка комбинированных стратегий (top-k + top-p)
## 2. Архитектура и алгоритм
### 2.1 Полная блок-схема
```mermaid
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 Инициализация модели
```python
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 Генерация текста
```python
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 Примеры использования
**Базовый пример:**
```python
text = "Анализ данных - это"
input_ids = tokenizer.encode(text)
output_ids = model.generate(input_ids, max_new_tokens=100)
generated_text = tokenizer.decode(output_ids[0])
```
**Креативная генерация:**
```python
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:**
```python
model = GPT(
emb_size=256,
num_layers=4,
num_heads=8,
device='cpu'
)
```
**Для GPU:**
```python
model = GPT(
emb_size=1024,
num_layers=12,
device='cuda'
)
```
## 5. Ограничения и решения
| Ограничение | Решение |
|---------------------------|------------------------------|
| Длинные последовательности| Чанкование входных данных |
| Высокая загрузка памяти | Уменьшение batch_size |
| Повторы в генерации | Настройка repetition_penalty |
| Медленная генерация | Кэширование ключей/значений |
## 6. Дополнительные материалы
- [Примеры использования](../example/example_gpt.py)
- [Тесты](../tests/test_gpt.py)
- [Оптимизация производительности](performance_guide.md)