mirror of
https://github.com/pese-git/simple-llm.git
synced 2026-01-23 13:03:55 +00:00
cc4138aba850ae5fe4a7c79159ba541e7576004b
Основные изменения в коде:
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 (токены)
- Подготовка к генерации новых данных
Simple-LLM: Персональная языковая модель
🎯 Цель проекта
Simple-LLM - это минималистичная реализация языковой модели (LLM) с полным циклом:
- Обучение BPE-токенизатора на ваших данных
- Подготовка датасета для обучения модели
- Тренировка компактной GPT-архитектуры
- Генерация текста в заданном стиле
Проект создан для:
- Образовательных целей - понимания работы современных LLM
- Экспериментов с генерацией текста на небольших датасетах
- Создания персонализированных языковых моделей
Полный цикл от обучения токенизатора до генерации текста
🛠 Установка
# 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-токенизатора
python bin/train_tokenizer.py \
--corpus data/corpus/sample \
--output data/tokenizer/bpe_model.json \
--vocab-size 500
2. Токенизация данных
python bin/tokenize_corpus.py \
--corpus data/corpus/sample \
--tokenizer data/tokenizer/bpe_model.json \
--output data/tokens/tokenized_corpus.pkl
3. Обучение GPT модели
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. Генерация текста
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
🚀 Быстрый старт (минимальная конфигурация)
# Последовательно выполните:
./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 |
⚠️ Устранение проблем
-
Ошибка памяти:
- Уменьшите
batch-sizeиseq-len
python bin/train_gpt_model.py --batch-size 2 --seq-len 64 - Уменьшите
-
Плохая генерация:
- Увеличьте размер корпуса (>1MB текста)
- Добавьте больше эпох обучения (
--epochs 15)
-
Медленная работа:
# Для GPU добавьте перед запуском: export CUDA_VISIBLE_DEVICES=0
👥 Участие в разработке
Мы приветствуем вклад в проект! Вот как вы можете помочь:
🛠 Как внести свой вклад:
- Форкните репозиторий
- Создайте ветку для вашего изменения (
git checkout -b feature/your-feature) - Сделайте коммит ваших изменений (
git commit -am 'Add some feature') - Запушьте в ветку (
git push origin feature/your-feature) - Создайте Pull Request
📌 Правила:
- Следуйте существующему стилю кода
- Пишите понятные сообщения коммитов
- Добавляйте тесты для новых функций
- Обновляйте документацию при изменении API
🐛 Сообщение об ошибках:
Открывайте Issue с описанием:
- Шаги для воспроизведения
- Ожидаемое поведение
- Фактическое поведение
- Версии ПО (Python, PyTorch и т.д.)
📜 Лицензия
Проект распространяется под лицензией MIT. Полный текст лицензии доступен в файле LICENSE.
Основные положения:
- Разрешается свободное использование, модификация и распространение кода
- Обязательно указание авторства
- Лицензия предоставляется "как есть" без гарантий
- Авторы не несут ответственности за последствия использования
📌 Важно
- Все скрипты имеют встроенную помощь:
python bin/train_tokenizer.py --help
- Модель автоматически использует GPU если доступен
- Для выхода из виртуального окружения:
deactivate
Languages
Python
100%