mirror of
https://github.com/pese-git/simple-llm.git
synced 2026-01-23 21:14:17 +00:00
Основные изменения в коде:
1. Токенизатор (bpe.py):
- Добавлен прогресс-бар через tqdm в метод fit()
- Улучшено логирование процесса обучения
- Добавлена обработка edge-cases для vocab_size
2. Генерация текста (generate_text.py):
- Полный рефакторинг скрипта
- Добавлены проверки модели перед загрузкой
- Поддержка уменьшенных моделей (seq_len=32)
- Подробное логирование процесса генерации
3. Обучение GPT (train_gpt_model.py):
- Автоподбор параметров под размер данных
- Уменьшенные параметры модели по умолчанию
- Контроль памяти и устройств (CPU/MPS)
4. Токенизация корпуса (tokenize_corpus.py):
- Добавлены проверки входных данных
- Подробное логирование процесса
- Обработка ошибок загрузки файлов
Исправления:
- Синхронизация размеров слоёв в GPT
- Корректная работа с малыми наборами данных
- Исправление загрузки моделей на MPS
Обновление README.md
- Добавлены обязательные зависимости: dill и tqdm
- Добавлен раздел 'Цель проекта' с описанием задач
- Добавлен раздел 'Участие в разработке' для контрибьюторов
- Добавлен раздел 'Лицензия' с условиями MIT
Рефакторинг основных скриптов и обновление данных
Основные изменения:
1. Скрипты в bin/:
- Оптимизация generate_text.py (генерация текста)
- Улучшение tokenize_corpus.py (обработка корпуса)
- Рефакторинг train_gpt_model.py (обучение модели)
- Обновление train_tokenizer.py (алгоритм BPE)
2. Данные:
- Удалены устаревшие артефакты:
* simple_llm_gpt.pth (модель)
* bpe_tokenizer.json (токенизатор)
* corpus_tokens.pkl (токены)
- Подготовка к генерации новых данных
170 lines
6.5 KiB
Markdown
170 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==2.0.1
|
||
pip install dill tqdm # Основные зависимости для работы
|
||
```
|
||
|
||
## 📂 Подготовка данных
|
||
|
||
Поместите текстовые файлы (.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`
|