2025-07-22 10:53:57 +03:00
|
|
|
|
# Simple-LLM Framework
|
2025-07-11 12:21:33 +03:00
|
|
|
|
|
2025-07-22 10:53:57 +03:00
|
|
|
|
[]()
|
|
|
|
|
|
[]()
|
2025-07-11 12:21:33 +03:00
|
|
|
|
|
2025-07-22 10:53:57 +03:00
|
|
|
|
Простая и понятная реализация языковой модели GPT-стиля с нуля на PyTorch
|
2025-07-11 12:21:33 +03:00
|
|
|
|
|
2025-07-22 10:53:57 +03:00
|
|
|
|
## 🔍 Обзор
|
2025-07-20 14:34:17 +03:00
|
|
|
|
|
2025-07-22 10:53:57 +03:00
|
|
|
|
Simple-LLM предоставляет:
|
|
|
|
|
|
- Полную реализацию архитектуры GPT
|
|
|
|
|
|
- Эффективный токенизатор BPE
|
|
|
|
|
|
- Модули трансформера (внимание, FFN, эмбеддинги)
|
|
|
|
|
|
- Гибкую систему генерации текста
|
|
|
|
|
|
- Примеры использования и документацию
|
2025-07-20 14:34:17 +03:00
|
|
|
|
|
2025-07-22 10:53:57 +03:00
|
|
|
|
## 🚀 Быстрый старт
|
2025-07-11 12:21:33 +03:00
|
|
|
|
|
2025-07-22 10:53:57 +03:00
|
|
|
|
1. Установите зависимости:
|
2025-07-19 22:20:12 +03:00
|
|
|
|
```bash
|
2025-07-22 10:53:57 +03:00
|
|
|
|
pip install torch numpy tqdm
|
2025-07-19 22:20:12 +03:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-07-23 12:26:49 +03:00
|
|
|
|
2. Запустите примеры:
|
2025-07-11 12:21:33 +03:00
|
|
|
|
```bash
|
2025-07-23 12:26:49 +03:00
|
|
|
|
# Пример генерации текста
|
2025-07-22 10:53:57 +03:00
|
|
|
|
python example/example_gpt.py
|
2025-07-23 12:26:49 +03:00
|
|
|
|
|
|
|
|
|
|
# Пример обучения модели
|
|
|
|
|
|
python example/train_gpt_example.py
|
2025-07-11 12:21:33 +03:00
|
|
|
|
```
|
2025-07-22 06:24:46 +03:00
|
|
|
|
|
2025-07-22 10:53:57 +03:00
|
|
|
|
## 🧠 Основные компоненты
|
|
|
|
|
|
|
2025-07-22 17:10:28 +03:00
|
|
|
|
### Обработка данных
|
|
|
|
|
|
```python
|
|
|
|
|
|
from simple_llm.data.get_data import GetData
|
|
|
|
|
|
|
|
|
|
|
|
dataset = GetData(
|
|
|
|
|
|
data=[1, 2, 3, 4, 5], # Входная последовательность
|
|
|
|
|
|
seq_len=3, # Длина окна
|
|
|
|
|
|
device="cuda" # Устройство (опционально)
|
|
|
|
|
|
)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-07-22 10:53:57 +03:00
|
|
|
|
### Модель GPT
|
2025-07-22 06:24:46 +03:00
|
|
|
|
```python
|
|
|
|
|
|
from simple_llm.transformer.gpt import GPT
|
|
|
|
|
|
|
|
|
|
|
|
model = GPT(
|
|
|
|
|
|
vocab_size=10000,
|
|
|
|
|
|
max_seq_len=512,
|
|
|
|
|
|
emb_size=768,
|
|
|
|
|
|
num_heads=12,
|
|
|
|
|
|
num_layers=6
|
|
|
|
|
|
)
|
|
|
|
|
|
```
|
|
|
|
|
|
|
2025-07-22 10:53:57 +03:00
|
|
|
|
### Генерация текста
|
2025-07-22 06:24:46 +03:00
|
|
|
|
```python
|
2025-07-22 10:53:57 +03:00
|
|
|
|
output = model.generate(
|
|
|
|
|
|
input_ids,
|
|
|
|
|
|
max_new_tokens=100,
|
|
|
|
|
|
temperature=0.9,
|
|
|
|
|
|
top_k=50,
|
|
|
|
|
|
top_p=0.9
|
|
|
|
|
|
)
|
2025-07-22 06:24:46 +03:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-07-23 12:26:49 +03:00
|
|
|
|
### Обучение модели
|
|
|
|
|
|
```python
|
|
|
|
|
|
from torch.utils.data import DataLoader
|
|
|
|
|
|
|
|
|
|
|
|
# Данные должны быть в формате (input_ids, targets)
|
|
|
|
|
|
# targets - это input_ids, сдвинутые на 1 токен вперед
|
|
|
|
|
|
train_loader = DataLoader(...)
|
|
|
|
|
|
|
|
|
|
|
|
model.fit(
|
|
|
|
|
|
train_loader=train_loader, # Обучающие данные (обязательно)
|
|
|
|
|
|
valid_loader=None, # Валидационные данные (опционально)
|
|
|
|
|
|
num_epoch=10, # Количество эпох
|
|
|
|
|
|
learning_rate=0.001 # Скорость обучения
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
# Сохранение модели
|
|
|
|
|
|
model.save("model.pt")
|
|
|
|
|
|
|
|
|
|
|
|
# Загрузка модели
|
|
|
|
|
|
loaded_model = GPT.load("model.pt", device="cuda")
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**Требования к данным:**
|
|
|
|
|
|
- Формат: `(input_ids, targets)` где `targets = roll(input_ids, -1)`
|
|
|
|
|
|
- `input_ids`: тензор формы `[batch_size, seq_len]`
|
|
|
|
|
|
- Поддерживаются как синтетические, так и реальные текстовые данные
|
|
|
|
|
|
|
2025-07-22 06:24:46 +03:00
|
|
|
|
## 📚 Документация
|
|
|
|
|
|
|
2025-07-22 10:53:57 +03:00
|
|
|
|
Полная документация доступна в [doc/](./doc/):
|
|
|
|
|
|
- [Архитектура GPT](./doc/gpt_documentation_ru.md)
|
|
|
|
|
|
- [Алгоритм BPE](./doc/bpe_algorithm.md)
|
2025-07-22 17:10:28 +03:00
|
|
|
|
- [Обработка последовательностей](./doc/get_data_documentation_ru.md)
|
2025-07-22 10:53:57 +03:00
|
|
|
|
- [Примеры использования](./example/)
|
2025-07-22 06:24:46 +03:00
|
|
|
|
|
2025-07-22 10:53:57 +03:00
|
|
|
|
## 🛠 Тестирование
|
2025-07-22 06:24:46 +03:00
|
|
|
|
```bash
|
2025-07-22 10:53:57 +03:00
|
|
|
|
pytest tests/
|
2025-07-22 06:24:46 +03:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-07-22 10:53:57 +03:00
|
|
|
|
## 🤝 Как внести вклад
|
|
|
|
|
|
1. Форкните репозиторий
|
|
|
|
|
|
2. Создайте ветку (`git checkout -b feature/AmazingFeature`)
|
|
|
|
|
|
3. Сделайте коммит (`git commit -m 'Add some AmazingFeature'`)
|
|
|
|
|
|
4. Запушьте ветку (`git push origin feature/AmazingFeature`)
|
|
|
|
|
|
5. Откройте Pull Request
|
2025-07-22 06:24:46 +03:00
|
|
|
|
|
|
|
|
|
|
## 📜 Лицензия
|
2025-07-22 10:53:57 +03:00
|
|
|
|
Распространяется под лицензией MIT. См. [LICENSE](./LICENSE)
|