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:
143
README.md
143
README.md
@@ -1,62 +1,34 @@
|
||||
# Simple LLM Framework
|
||||
# Simple-LLM Framework
|
||||
|
||||
[]()
|
||||
[]()
|
||||
[]()
|
||||
[]()
|
||||
|
||||
## Основные компоненты
|
||||
Простая и понятная реализация языковой модели 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)
|
||||
|
||||
Reference in New Issue
Block a user