mirror of
https://github.com/pese-git/simple-llm.git
synced 2026-01-23 21:14:17 +00:00
173 lines
6.5 KiB
Markdown
173 lines
6.5 KiB
Markdown
# Simple-LLM: Персональная языковая модель
|
||
|
||
## 🎯 Цель проекта
|
||
|
||
Simple-LLM - это минималистичная реализация языковой модели (LLM) с полным циклом:
|
||
- Обучение BPE-токенизатора на ваших данных
|
||
- Подготовка датасета для обучения модели
|
||
- Тренировка компактной GPT-архитектуры
|
||
- Генерация текста в заданном стиле
|
||
|
||
Проект создан для:
|
||
1. Образовательных целей - понимания работы современных LLM
|
||
2. Экспериментов с генерацией текста на небольших датасетах
|
||
3. Создания персонализированных языковых моделей
|
||
|
||
Полный цикл от обучения токенизатора до генерации текста
|
||
|
||
## 🛠 Установка
|
||
|
||
```bash
|
||
# 1. Клонируйте репозиторий
|
||
git clone https://github.com/ваш-репозиторий/simple-llm.git
|
||
cd simple-llm
|
||
|
||
# 2. Создайте виртуальное окружение (рекомендуется)
|
||
python -m venv venv
|
||
source venv/bin/activate # Linux/Mac
|
||
# или venv\Scripts\activate # Windows
|
||
|
||
# 3. Установите зависимости
|
||
pip install torch
|
||
pip install dill tqdm # Основные зависимости для работы
|
||
|
||
# Установка simple_llm пакета
|
||
pip install .
|
||
```
|
||
|
||
## 📂 Подготовка данных
|
||
|
||
Поместите текстовые файлы (.txt) в папку:
|
||
```
|
||
data/
|
||
└── corpus/
|
||
└── sample/
|
||
├── text1.txt
|
||
├── text2.txt
|
||
└── ...
|
||
```
|
||
|
||
## 🔄 Полный рабочий цикл
|
||
|
||
### 1. Обучение BPE-токенизатора
|
||
```bash
|
||
python bin/train_tokenizer.py \
|
||
--corpus data/corpus/sample \
|
||
--output data/tokenizer/bpe_model.json \
|
||
--vocab-size 500
|
||
```
|
||
|
||
### 2. Токенизация данных
|
||
```bash
|
||
python bin/tokenize_corpus.py \
|
||
--corpus data/corpus/sample \
|
||
--tokenizer data/tokenizer/bpe_model.json \
|
||
--output data/tokens/tokenized_corpus.pkl
|
||
```
|
||
|
||
### 3. Обучение GPT модели
|
||
```bash
|
||
python bin/train_gpt_model.py \
|
||
--tokens data/tokens/tokenized_corpus.pkl \
|
||
--tokenizer data/tokenizer/bpe_model.json \
|
||
--output data/model/gpt_model.pth \
|
||
--seq-len 32 \
|
||
--batch-size 3 \
|
||
--epochs 3 \
|
||
--emb-size 64 \
|
||
--num-heads 2 \
|
||
--num-layers 2
|
||
```
|
||
|
||
### 4. Генерация текста
|
||
```bash
|
||
python bin/generate_text.py \
|
||
--model data/model/gpt_model.pth \
|
||
--tokenizer data/tokenizer/bpe_model.json \
|
||
--seq-len 32 \
|
||
--emb-size 64 \
|
||
--num-heads 2 \
|
||
--num-layers 2 \
|
||
--prompt "Ваш текст для продолжения" \
|
||
--length 100 \
|
||
--temperature 0.7
|
||
```
|
||
|
||
## 🚀 Быстрый старт (минимальная конфигурация)
|
||
```bash
|
||
# Последовательно выполните:
|
||
./bin/train_tokenizer.py --corpus data/corpus/sample --output data/tokenizer/bpe.json
|
||
./bin/tokenize_corpus.py --corpus data/corpus/sample --tokenizer data/tokenizer/bpe.json
|
||
./bin/train_gpt_model.py --tokens data/tokens/corpus_tokens.pkl --tokenizer data/tokenizer/bpe.json
|
||
./bin/generate_text.py --model data/model/gpt_model.pth --tokenizer data/tokenizer/bpe.json --prompt "Привет"
|
||
```
|
||
|
||
## 🧠 Рекомендации по параметрам
|
||
|
||
| Параметр | CPU (рекомендации) | GPU (рекомендации) |
|
||
|------------------|--------------------|--------------------|
|
||
| vocab-size | 2000-5000 | 5000-10000 |
|
||
| seq-len | 64-128 | 128-256 |
|
||
| batch-size | 4-8 | 16-32 |
|
||
| emb-size | 64-128 | 256-512 |
|
||
| num-layers | 2-4 | 6-12 |
|
||
|
||
## ⚠️ Устранение проблем
|
||
1. **Ошибка памяти**:
|
||
- Уменьшите `batch-size` и `seq-len`
|
||
```bash
|
||
python bin/train_gpt_model.py --batch-size 2 --seq-len 64
|
||
```
|
||
|
||
2. **Плохая генерация**:
|
||
- Увеличьте размер корпуса (>1MB текста)
|
||
- Добавьте больше эпох обучения (`--epochs 15`)
|
||
|
||
3. **Медленная работа**:
|
||
```bash
|
||
# Для GPU добавьте перед запуском:
|
||
export CUDA_VISIBLE_DEVICES=0
|
||
```
|
||
|
||
## 👥 Участие в разработке
|
||
|
||
Мы приветствуем вклад в проект! Вот как вы можете помочь:
|
||
|
||
### 🛠 Как внести свой вклад:
|
||
1. Форкните репозиторий
|
||
2. Создайте ветку для вашего изменения (`git checkout -b feature/your-feature`)
|
||
3. Сделайте коммит ваших изменений (`git commit -am 'Add some feature'`)
|
||
4. Запушьте в ветку (`git push origin feature/your-feature`)
|
||
5. Создайте Pull Request
|
||
|
||
### 📌 Правила:
|
||
- Следуйте существующему стилю кода
|
||
- Пишите понятные сообщения коммитов
|
||
- Добавляйте тесты для новых функций
|
||
- Обновляйте документацию при изменении API
|
||
|
||
### 🐛 Сообщение об ошибках:
|
||
Открывайте Issue с описанием:
|
||
1. Шаги для воспроизведения
|
||
2. Ожидаемое поведение
|
||
3. Фактическое поведение
|
||
4. Версии ПО (Python, PyTorch и т.д.)
|
||
|
||
## 📜 Лицензия
|
||
|
||
Проект распространяется под лицензией MIT. Полный текст лицензии доступен в файле [LICENSE](LICENSE).
|
||
|
||
Основные положения:
|
||
- Разрешается свободное использование, модификация и распространение кода
|
||
- Обязательно указание авторства
|
||
- Лицензия предоставляется "как есть" без гарантий
|
||
- Авторы не несут ответственности за последствия использования
|
||
|
||
## 📌 Важно
|
||
- Все скрипты имеют встроенную помощь:
|
||
```bash
|
||
python bin/train_tokenizer.py --help
|
||
```
|
||
- Модель автоматически использует GPU если доступен
|
||
- Для выхода из виртуального окружения: `deactivate`
|