2025-07-19 12:05:20 +03:00
|
|
|
|
# Simple LLM Framework
|
2025-07-11 12:21:33 +03:00
|
|
|
|
|
2025-07-19 12:05:20 +03:00
|
|
|
|
[]()
|
|
|
|
|
|
[]()
|
2025-07-11 12:21:33 +03:00
|
|
|
|
|
2025-07-20 14:34:17 +03:00
|
|
|
|
## Основные компоненты
|
2025-07-11 12:21:33 +03:00
|
|
|
|
|
2025-07-20 14:34:17 +03:00
|
|
|
|
### Токенизация
|
|
|
|
|
|
- `SimpleBPE` - алгоритм Byte Pair Encoding
|
|
|
|
|
|
- `OptimizeBPE` - оптимизированная версия
|
|
|
|
|
|
|
|
|
|
|
|
### Эмбеддинги
|
|
|
|
|
|
- `TokenEmbeddings` - векторные представления токенов
|
|
|
|
|
|
- `PositionalEmbeddings` - позиционное кодирование
|
|
|
|
|
|
|
|
|
|
|
|
### Transformer Layers
|
|
|
|
|
|
- `HeadAttention` - механизм внимания одной головы
|
|
|
|
|
|
- `MultiHeadAttention` - многоголовое внимание (4-16 голов)
|
|
|
|
|
|
- `FeedForward` - двухслойная FFN сеть (расширение → сжатие)
|
2025-07-21 11:00:35 +03:00
|
|
|
|
- `Decoder` - полный декодер Transformer (Self-Attention + FFN)
|
2025-07-11 12:21:33 +03:00
|
|
|
|
|
|
|
|
|
|
## Быстрый старт
|
2025-07-20 14:34:17 +03:00
|
|
|
|
|
2025-07-11 12:21:33 +03:00
|
|
|
|
```python
|
2025-07-20 14:34:17 +03:00
|
|
|
|
from simple_llm import SimpleBPE, MultiHeadAttention, FeedForward
|
2025-07-11 12:21:33 +03:00
|
|
|
|
|
2025-07-19 12:05:20 +03:00
|
|
|
|
# 1. Токенизация
|
2025-07-19 22:20:12 +03:00
|
|
|
|
bpe = SimpleBPE().fit(text_corpus)
|
|
|
|
|
|
tokens = bpe.encode("Пример текста")
|
2025-07-11 12:21:33 +03:00
|
|
|
|
|
2025-07-20 14:34:17 +03:00
|
|
|
|
# 2. Полный пайплайн
|
|
|
|
|
|
model = nn.Sequential(
|
|
|
|
|
|
TokenEmbeddings(10000, 256),
|
|
|
|
|
|
PositionalEmbeddings(256, 512),
|
|
|
|
|
|
MultiHeadAttention(8, 256, 32),
|
|
|
|
|
|
FeedForward(256)
|
2025-07-19 22:20:12 +03:00
|
|
|
|
)
|
2025-07-13 01:08:37 +03:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-07-20 14:34:17 +03:00
|
|
|
|
## Документация
|
|
|
|
|
|
- [Токенизация](/doc/bpe_algorithm.md)
|
|
|
|
|
|
- [MultiHeadAttention](/doc/multi_head_attention_ru.md)
|
|
|
|
|
|
- [FeedForward](/doc/feed_forward_ru.md)
|
2025-07-18 00:31:08 +03:00
|
|
|
|
|
2025-07-19 12:05:20 +03:00
|
|
|
|
## Примеры
|
2025-07-19 22:20:12 +03:00
|
|
|
|
```bash
|
|
|
|
|
|
# Запуск примеров
|
2025-07-20 14:34:17 +03:00
|
|
|
|
python -m example.multi_head_attention_example # Визуализация внимания
|
|
|
|
|
|
python -m example.feed_forward_example # Анализ FFN слоя
|
2025-07-19 22:20:12 +03:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-07-19 12:05:20 +03:00
|
|
|
|
## Установка
|
2025-07-11 12:21:33 +03:00
|
|
|
|
```bash
|
2025-07-19 12:05:20 +03:00
|
|
|
|
git clone https://github.com/pese-git/simple-llm.git
|
|
|
|
|
|
cd simple-llm
|
|
|
|
|
|
pip install -e .
|
2025-07-11 12:21:33 +03:00
|
|
|
|
```
|
2025-07-22 06:24:46 +03:00
|
|
|
|
|
|
|
|
|
|
### Пример использования GPT
|
|
|
|
|
|
```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
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# Генерация текста
|
|
|
|
|
|
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("Текст для токенизации")
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 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)
|
|
|
|
|
|
|
|
|
|
|
|
## 🧪 Примеры
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# Запуск примеров
|
|
|
|
|
|
python -m example.example_gpt # Генерация текста
|
|
|
|
|
|
python -m example.multi_head_attention # Визуализация внимания
|
|
|
|
|
|
python -m example.decoder_example # Демонстрация декодера
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🤝 Участие в разработке
|
|
|
|
|
|
PR и issues приветствуются! Перед внесением изменений:
|
|
|
|
|
|
1. Создайте issue с описанием
|
|
|
|
|
|
2. Сделайте fork репозитория
|
|
|
|
|
|
3. Откройте Pull Request
|
|
|
|
|
|
|
|
|
|
|
|
## 📜 Лицензия
|
|
|
|
|
|
MIT License. Подробнее в [LICENSE](LICENSE).
|