Обновление метода 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:
Sergey Penkovsky
2025-07-22 10:53:57 +03:00
parent ae87faddc2
commit 5765eb3bd3
5 changed files with 441 additions and 219 deletions

143
README.md
View File

@@ -1,62 +1,34 @@
# Simple LLM Framework
# Simple-LLM Framework
[![Python 3.9+](https://img.shields.io/badge/python-3.9+-blue.svg)]()
[![PyTorch 2.0+](https://img.shields.io/badge/PyTorch-2.0+-red.svg)]()
[![Python Version](https://img.shields.io/badge/python-3.8%2B-blue)]()
[![PyTorch Version](https://img.shields.io/badge/pytorch-1.10%2B-orange)]()
## Основные компоненты
Простая и понятная реализация языковой модели GPT-стиля с нуля на PyTorch
### Токенизация
- `SimpleBPE` - алгоритм Byte Pair Encoding
- `OptimizeBPE` - оптимизированная версия
## 🔍 Обзор
### Эмбеддинги
- `TokenEmbeddings` - векторные представления токенов
- `PositionalEmbeddings` - позиционное кодирование
Simple-LLM предоставляет:
- Полную реализацию архитектуры GPT
- Эффективный токенизатор BPE
- Модули трансформера (внимание, FFN, эмбеддинги)
- Гибкую систему генерации текста
- Примеры использования и документацию
### Transformer Layers
- `HeadAttention` - механизм внимания одной головы
- `MultiHeadAttention` - многоголовое внимание (4-16 голов)
- `FeedForward` - двухслойная FFN сеть (расширение → сжатие)
- `Decoder` - полный декодер Transformer (Self-Attention + FFN)
## 🚀 Быстрый старт
## Быстрый старт
```python
from simple_llm import SimpleBPE, MultiHeadAttention, FeedForward
# 1. Токенизация
bpe = SimpleBPE().fit(text_corpus)
tokens = bpe.encode("Пример текста")
# 2. Полный пайплайн
model = nn.Sequential(
TokenEmbeddings(10000, 256),
PositionalEmbeddings(256, 512),
MultiHeadAttention(8, 256, 32),
FeedForward(256)
)
```
## Документация
- [Токенизация](/doc/bpe_algorithm.md)
- [MultiHeadAttention](/doc/multi_head_attention_ru.md)
- [FeedForward](/doc/feed_forward_ru.md)
## Примеры
1. Установите зависимости:
```bash
# Запуск примеров
python -m example.multi_head_attention_example # Визуализация внимания
python -m example.feed_forward_example # Анализ FFN слоя
pip install torch numpy tqdm
```
## Установка
2. Запустите пример генерации:
```bash
git clone https://github.com/pese-git/simple-llm.git
cd simple-llm
pip install -e .
python example/example_gpt.py
```
### Пример использования GPT
## 🧠 Основные компоненты
### Модель GPT
```python
from simple_llm.transformer.gpt import GPT
@@ -65,74 +37,39 @@ model = GPT(
max_seq_len=512,
emb_size=768,
num_heads=12,
head_size=64,
num_layers=6
)
# Генерация текста
output = model.generate(input_tokens, max_new_tokens=50)
```
## 🛠 How-To Guide
### 1. Работа с токенизатором
### Генерация текста
```python
from simple_llm.tokenizer import SimpleBPE
bpe = SimpleBPE().fit(text_corpus)
tokens = bpe.encode("Текст для токенизации")
output = model.generate(
input_ids,
max_new_tokens=100,
temperature=0.9,
top_k=50,
top_p=0.9
)
```
### 2. Использование отдельных компонентов
```python
from simple_llm.transformer import MultiHeadAttention, FeedForward
attention = MultiHeadAttention(num_heads=8, emb_size=512, head_size=64)
ffn = FeedForward(emb_size=512)
```
### 3. Обучение GPT
```python
# Пример цикла обучения
optimizer = torch.optim.Adam(model.parameters())
loss_fn = nn.CrossEntropyLoss()
for batch in dataloader:
logits = model(batch['input_ids'])
loss = loss_fn(logits.view(-1, logits.size(-1)), batch['targets'].view(-1))
loss.backward()
optimizer.step()
```
## 📋 Системные требования
| Компонент | Минимальные | Рекомендуемые |
|----------------|----------------------|----------------------|
| **Процессор** | x86-64 | 8+ ядер |
| **Память** | 8GB RAM | 16GB+ RAM |
| **GPU** | Не требуется | NVIDIA (8GB+ VRAM) |
| **ОС** | Linux/MacOS/Windows | Linux |
## 📚 Документация
- [Архитектура GPT](/doc/gpt_documentation_ru.md)
- [Алгоритм BPE](/doc/bpe_algorithm.md)
- [MultiHeadAttention](/doc/multi_head_attention_ru.md)
- [Decoder](/doc/decoder_ru.md)
Полная документация доступна в [doc/](./doc/):
- [Архитектура GPT](./doc/gpt_documentation_ru.md)
- [Алгоритм BPE](./doc/bpe_algorithm.md)
- [Примеры использования](./example/)
## 🧪 Примеры
## 🛠 Тестирование
```bash
# Запуск примеров
python -m example.example_gpt # Генерация текста
python -m example.multi_head_attention # Визуализация внимания
python -m example.decoder_example # Демонстрация декодера
pytest tests/
```
## 🤝 Участие в разработке
PR и issues приветствуются! Перед внесением изменений:
1. Создайте issue с описанием
2. Сделайте fork репозитория
3. Откройте Pull Request
## 🤝 Как внести вклад
1. Форкните репозиторий
2. Создайте ветку (`git checkout -b feature/AmazingFeature`)
3. Сделайте коммит (`git commit -m 'Add some AmazingFeature'`)
4. Запушьте ветку (`git push origin feature/AmazingFeature`)
5. Откройте Pull Request
## 📜 Лицензия
MIT License. Подробнее в [LICENSE](LICENSE).
Распространяется под лицензией MIT. См. [LICENSE](./LICENSE)