mirror of
https://github.com/pese-git/simple-llm.git
synced 2026-01-23 13:03:55 +00:00
7.6 KiB
7.6 KiB
Документация по 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 Полная блок-схема
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 Режимы генерации
-
Жадный поиск (do_sample=False):
- Всегда выбирает токен с максимальной вероятностью
- Детерминированный результат
-
Вероятностное сэмплирование (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. Обучение модели
Метод fit() позволяет обучать модель GPT на ваших данных.
6.1 Параметры обучения
model.fit(
train_loader, # DataLoader с обучающими данными
valid_loader=None, # Опциональный DataLoader для валидации
num_epoch=10, # Количество эпох
learning_rate=0.001 # Скорость обучения
)
6.2 Пример обучения
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)