Files
simple-llm/doc/gpt_documentation_ru.md

197 lines
7.6 KiB
Markdown
Raw Permalink 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 модели
> **Документ актуален для Simple-LLM v1.0 (июль 2025)**
---
**Краткое summary:**
Этот документ подробно описывает архитектуру и практическое применение GPT (Generative Pre-trained Transformer) — авторегрессивной языковой модели, реализованной в Simple-LLM. Документ предназначен для разработчиков и исследователей, желающих понять детали реализации и настройки 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. Обучение модели
Метод `fit()` позволяет обучать модель GPT на ваших данных.
### 6.1 Параметры обучения
```python
model.fit(
train_loader, # DataLoader с обучающими данными
valid_loader=None, # Опциональный DataLoader для валидации
num_epoch=10, # Количество эпох
learning_rate=0.001 # Скорость обучения
)
```
### 6.2 Пример обучения
```python
from torch.utils.data import DataLoader, TensorDataset
# Создание синтетических данных
inputs = torch.randint(0, 10000, (1000, 32)) # 1000 примеров по 32 токена
targets = torch.roll(inputs, -1, dims=1) # Сдвиг на 1 токен вперед
dataset = TensorDataset(inputs, targets)
train_loader = DataLoader(dataset, batch_size=32)
model = GPT(...) # Инициализация модели
model.fit(train_loader, num_epoch=5)
```
### 6.3 Особенности обучения
- Автоматическое определение устройства (CPU/GPU)
- Сохранение истории потерь в атрибутах:
- `model.train_loss` - потери на обучении
- `model.validation_loss` - потери на валидации (если есть)
- Поддержка ранней остановки (через callback)
## 7. Дополнительные материалы
- [Примеры использования](../example/example_gpt.py)
- [Пример обучения](../example/train_gpt_example.py)
- [Тесты](../tests/test_gpt.py)
- [Оптимизация производительности](performance_guide.md)