mirror of
https://github.com/pese-git/simple-llm.git
synced 2026-01-23 21:14:17 +00:00
Обновление метода 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. Оптимизация кода: - Эффективное обрезание последовательности - Оптимизированные операции с тензорами - Четкое разделение логики для разных режимов
This commit is contained in:
@@ -1,79 +1,140 @@
|
||||
# Документация по GPT модели (рус)
|
||||
# Документация по GPT модели
|
||||
|
||||
## 1. Общее описание
|
||||
GPT (Generative Pre-trained Transformer) - это архитектура трансформера для генерации текста, основанная на механизме внимания.
|
||||
GPT (Generative Pre-trained Transformer) - это авторегрессивная модель генерации текста на основе архитектуры трансформера.
|
||||
|
||||
**Основные характеристики:**
|
||||
- Авторегрессивная генерация
|
||||
- Многослойный декодер
|
||||
- Самовнимание с маской
|
||||
**Ключевые особенности реализации:**
|
||||
- Поддержка различных режимов генерации (жадный поиск, сэмплирование)
|
||||
- Многослойный декодер с механизмом самовнимания
|
||||
- Оптимизированная работа на CPU/GPU
|
||||
- Гибкая настройка параметров генерации
|
||||
- Поддержка комбинированных стратегий (top-k + top-p)
|
||||
|
||||
## 2. Алгоритм работы
|
||||
## 2. Архитектура и алгоритм
|
||||
|
||||
### 2.1 Архитектура
|
||||
### 2.1 Полная блок-схема
|
||||
```mermaid
|
||||
graph TD
|
||||
A[Входные токены] --> B[Токенные эмбеддинги]
|
||||
A --> C[Позиционные эмбеддинги]
|
||||
B --> D[Сумма эмбеддингов]
|
||||
B --> D[Сумма эмбеддингов + Dropout]
|
||||
C --> D
|
||||
D --> E[Слой нормализации]
|
||||
E --> F[Многоголовое внимание]
|
||||
F --> G[Пропускная связь]
|
||||
G --> H[FeedForward слой]
|
||||
H --> I[Слой нормализации]
|
||||
D --> E[Стек декодеров]
|
||||
E --> F[Многоголовое самовнимание]
|
||||
F --> G[Add & Norm]
|
||||
G --> H[FeedForward]
|
||||
H --> I[Add & Norm]
|
||||
I --> J[Выходные логиты]
|
||||
J --> K[Выбор следующего токена]
|
||||
K --> L[Добавление к последовательности]
|
||||
```
|
||||
|
||||
### 2.2 Процесс генерации
|
||||
1. Токенизация входного текста
|
||||
2. Вычисление эмбеддингов:
|
||||
- Токенные + позиционные
|
||||
3. Прохождение через N декодеров:
|
||||
- Самовнимание с маской
|
||||
- Полносвязные слои
|
||||
4. Преобразование в вероятности
|
||||
5. Выбор следующего токена
|
||||
### 2.2 Режимы генерации
|
||||
1. **Жадный поиск** (do_sample=False):
|
||||
- Всегда выбирает токен с максимальной вероятностью
|
||||
- Детерминированный результат
|
||||
|
||||
## 3. Использование
|
||||
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.1 Инициализация
|
||||
## 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
|
||||
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, max_new_tokens=50)
|
||||
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 # Токены для остановки генерации
|
||||
)
|
||||
```
|
||||
|
||||
## 4. Гиперпараметры
|
||||
### 3.3 Примеры использования
|
||||
|
||||
| Параметр | Описание |
|
||||
|----------------|-----------------------------------|
|
||||
| vocab_size | Размер словаря |
|
||||
| max_seq_len | Макс. длина последовательности |
|
||||
| emb_size | Размерность эмбеддингов |
|
||||
| num_heads | Количество голов внимания |
|
||||
| head_size | Размерность головы внимания |
|
||||
| num_layers | Количество слоев декодера |
|
||||
**Базовый пример:**
|
||||
```python
|
||||
text = "Анализ данных - это"
|
||||
input_ids = tokenizer.encode(text)
|
||||
output_ids = model.generate(input_ids, max_new_tokens=100)
|
||||
generated_text = tokenizer.decode(output_ids[0])
|
||||
```
|
||||
|
||||
## 5. Примеры применения
|
||||
- Генерация текста
|
||||
- Дозаполнение форм
|
||||
- Кодогенерация
|
||||
- Чат-боты
|
||||
**Креативная генерация:**
|
||||
```python
|
||||
output = model.generate(
|
||||
input_ids,
|
||||
max_new_tokens=100,
|
||||
do_sample=True,
|
||||
temperature=1.3,
|
||||
top_k=60,
|
||||
top_p=0.85
|
||||
)
|
||||
```
|
||||
|
||||
## 6. Ограничения
|
||||
- Требует больших вычислительных ресурсов
|
||||
- Ограничена максимальной длиной последовательности
|
||||
- Может генерировать некорректный текст
|
||||
## 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)
|
||||
|
||||
Reference in New Issue
Block a user