diff --git a/README.md b/README.md index cd099f8..c641745 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,16 @@ # LLM Architecture Research -Исследовательский проект для разработки и обучения архитектур больших языковых моделей (LLM). +Исследовательский проект по разработке, обучению и сравнительному анализу современных архитектур больших языковых моделей (LLM): **GPT, GPT-2, LLaMA, Mistral**. Прямая поддержка интеграции с HuggingFace (через модуль `hf-proxy`). + ## 🏗️ Архитектура проекта Проект организован как монорепозиторий с использованием **uv** workspace: -- **`llm`** — основная библиотека с реализацией архитектур LLM (GPT, GPT-2) -- **`hf-proxy`** — адаптер для интеграции с HuggingFace -- **`experiments`** — скрипты обучения и экспериментов -- **`notebooks`** — исследовательские ноутбуки +- **`llm`** — основная библиотека с реализацией архитектур LLM (**GPT, GPT-2, LLaMA, Mistral**) +- **`hf-proxy`** — экспериментальный адаптер для интеграции с HuggingFace (загрузка, токенизация, экспериментальные скрипты). Функционал может изменяться и не гарантирует полной совместимости с будущими версиями HuggingFace Transformers. +- **`experiments`** — скрипты обучения и генерации (включая HF и собственные модели) +- **`notebooks`** — исследовательские ноутбуки, анализ архитектур ## 📁 Структура проекта @@ -41,8 +42,11 @@ llm-arch-research/ │ │ │ ├── gpt.py │ │ │ ├── gpt2.py │ │ │ └── __init__.py -│ │ └── llama/ # LLaMA архитектура -│ │ ├── llama.py +│ │ ├── llama/ # LLaMA архитектура +│ │ │ ├── llama.py +│ │ │ └── __init__.py +│ │ └── mistral/ # Mistral архитектура +│ │ ├── mistral.py │ │ └── __init__.py │ ├── training/ # утилиты обучения │ │ ├── dataset.py @@ -81,6 +85,18 @@ llm-arch-research/ ## 🚀 Быстрый старт +**Пример запуска обучения и генерации для любых архитектур:** + +```bash +python experiments/llm_only/run_llm_experiment.py --model mistral --action generate --config experiments/llm_only/configs/mistral_generate.json +``` + +**Использование собственных моделей с HuggingFace-интерфейсом:** +```python +from hf_proxy.hf_adapter import HFAdapter +hf_model = HFAdapter("mistralai/Mistral-7B-v0.1") +``` + ### Установка зависимостей ```bash @@ -91,73 +107,15 @@ uv sync uv sync --extra dev ``` -## ⚡ Работа с экспериментами (experiments/llm_only) +## ⚡ Работа с экспериментами (experiments/llm_only, experiments/hf_integration) -В папке `experiments/llm_only` вы найдете универсальный скрипт для обучения и генерации LLM без HuggingFace. -Архитектура позволяет управлять выбором модели, типом действия и параметрами через аргументы командной строки и отдельные JSON-конфиги. +- В `experiments/llm_only`: универсальный скрипт для обучения и генерации LLM (включая LLaMA и Mistral) без HuggingFace — всё через собственную реализацию. +- В `experiments/hf_integration`: скрипты и примеры для генерации, обучения и тестирования моделей с помощью HuggingFace API (через hf-proxy). Позволяет использовать свои модели и токенизаторы как стандартные HF-объекты. -### Основные файлы и директории +**Для моделей Mistral/Llama доступны оба сценария: прямая работа или через HuggingFace-прокси.** -- `run_llm_experiment.py` — универсальный скрипт-стартер для обучения и генерации. -- `configs/` — примеры конфигурационных файлов (`*.json`) для разных моделей и сценариев. +*Конфиги и примеры см. в соответствующих папках.* -### Использование универсального скрипта - -1. **Настройте конфиг** - Для каждой модели и режима работы есть отдельный JSON-файл с параметрами: - - `configs/gpt_train.json`, `configs/gpt_generate.json` - - `configs/gpt2_train.json`, `configs/gpt2_generate.json` - - `configs/llama_train.json`, `configs/llama_generate.json` - -2. **Запустите обучение или генерацию** - Стандартная команда: - - ```bash - python experiments/llm_only/run_llm_experiment.py --model <название_модели> --action --config experiments/llm_only/configs/<имя_конфига>.json - ``` - - Примеры: - - - Обучить GPT: - ```bash - python experiments/llm_only/run_llm_experiment.py --model gpt --action train --config experiments/llm_only/configs/gpt_train.json - ``` - - - Генерировать текст GPT2: - ```bash - python experiments/llm_only/run_llm_experiment.py --model gpt2 --action generate --config experiments/llm_only/configs/gpt2_generate.json - ``` - - - Обучить Llama: - ```bash - python experiments/llm_only/run_llm_experiment.py --model llama --action train --config experiments/llm_only/configs/llama_train.json - ``` - - - Генерировать текст Llama: - ```bash - python experiments/llm_only/run_llm_experiment.py --model llama --action generate --config experiments/llm_only/configs/llama_generate.json - ``` - -3. **Конфигурирование параметров** - - Все гиперпараметры (архитектура, обучение, генерация, пути) задаются в json-файле. - - Для новых моделей создайте копию существующего конфига, укажите другие веса и параметры, и используйте нужное название модели в команде. - -4. **Структура конфига** - Минимальный пример конфига для обучения: - ```json - { - "bpe_tokenizer": "checkpoints/bpe_tokenizer.json", - "model_config": { - "vocab_size": null, - "embed_dim": 256, - "num_heads": 4, - "num_layers": 4, - "max_position_embeddings": 128, - "dropout": 0.1 - }, - "model_weights": "checkpoints/gpt-bpe/model.pt" - } - ``` --- @@ -272,33 +230,23 @@ dependencies = [ ## 🎯 Реализованные возможности -### Архитектуры GPT и GPT-2 -- ✅ Токенные и позиционные эмбеддинги -- ✅ Многоголовое внимание с causal mask -- ✅ Декодерные блоки с residual connections -- ✅ Layer normalization -- ✅ Dropout регуляризация -- ✅ Отдельные реализации GPT и GPT-2 (различия в масштабе и деталях архитектуры) +### Архитектуры +- ✅ GPT, GPT-2: Полностью воспроизводимые реализации, токенные и позиционные эмбеддинги, causal multi-head attention, LayerNorm +- ✅ LLaMA: Rotary Positional Embeddings (RoPE), RMSNorm, SwiGLU, оптимизированная память +- ✅ Mistral: Sliding Window Attention (оконное внимание), Grouped Query Attention (GQA), совместимость с HF +- ✅ Все архитектуры поддерживают обучение и генерацию текста ### Генерация текста -- ✅ Жадный поиск (greedy decoding) -- ✅ Вероятностное сэмплирование -- ✅ Top-k сэмплирование -- ✅ Nucleus sampling (top-p) -- ✅ Контроль температуры +- ✅ Greedy, sampling (Top-k, Top-p), контроль температуры, efficient caching ### Обучение -- ✅ Датасет для языкового моделирования -- ✅ Базовый тренировочный цикл -- ✅ Оптимизатор AdamW -- ✅ Сохранение чекпоинтов +- ✅ Языковое моделирование с кастомными и HF-токенизаторами +- ✅ AdamW, кастомные датасеты, сохранение чекпоинтов ### Интеграция с HuggingFace (hf-proxy) -- ✅ Адаптер моделей для совместимости с HF интерфейсами -- ✅ Адаптер токенизаторов с поддержкой всех методов HF -- ✅ Сохранение и загрузка в HF формате -- ✅ Совместимость с HF Trainer и pipelines -- ✅ Генерация через стандартные HF интерфейсы +- ✅ Экспорт/импорт моделей и токенизаторов в HF совместимый формат +- ✅ Генерация и обучение через HF Trainer, pipelines и т.д. +- ✅ Двусторонняя поддержка: собственные модели становятся HF-совместимыми и наоборот ## 🔬 Эксперименты с hf-proxy diff --git a/llm/README.md b/llm/README.md index ab35c48..a3a4b43 100644 --- a/llm/README.md +++ b/llm/README.md @@ -27,14 +27,19 @@ llm/ │ │ ├── gpt.py # Базовая GPT │ │ ├── gpt2.py # GPT-2 реализация │ │ └── __init__.py -│ └── llama/ # LLaMA архитектура -│ ├── llama.py # LLaMA реализация +│ ├── llama/ # LLaMA архитектура +│ │ ├── llama.py # LLaMA реализация +│ │ └── __init__.py +│ └── mistral/ # Mistral архитектура +│ ├── mistral.py # Mistral реализация │ └── __init__.py ├── tokenizers/ # Токенизаторы │ ├── base_tokenizer.py # Базовый интерфейс │ └── bpe_tokenizer.py # BPE токенизатор +├── datasets/ # Работа с датасетами +│ ├── text_dataset.py # Стандартный датасет +│ └── streaming_text_dataset.py # Стриминговый датасет └── training/ # Утилиты обучения - ├── dataset.py # Датасеты ├── trainer.py # Тренировочный цикл ├── optimizer.py # Оптимизаторы └── scheduler.py # Планировщики обучения @@ -175,13 +180,12 @@ generated = model.generate(input_ids, max_length=100) - ✅ Learned positional embeddings - ✅ Базовая архитектура трансформер-декодера -### GPT-2 Особенности -- ✅ Улучшенная версия оригинальной GPT +### GPT-2 Особенности - ✅ Layer Normalization (перед вниманием и FFN) - ✅ GELU активация - ✅ Learned positional embeddings -- ✅ Кэширование для эффективной генерации -- ✅ Оптимизированные веса инициализации +- ✅ Кэширование KV для быстрой генерации +- ✅ Улучшенная инициализация слоёв ### LLaMA Особенности - ✅ Rotary Positional Embeddings (RoPE) @@ -190,6 +194,21 @@ generated = model.generate(input_ids, max_length=100) - ✅ Оптимизированная структура декодера - ✅ Эффективное кэширование KV-памяти +### Mistral Особенности +- ✅ Sliding Window Attention (оконное внимание) +- ✅ Grouped Query Attention (GQA) +- ✅ RoPE +- ✅ RMSNorm +- ✅ Разделённая архитектура на блоки с эффективным управлением памятью +- ✅ Совместимость с HuggingFace через hf-proxy + +## 🤝 Интеграция с HuggingFace и BPE + +- Встроенная поддержка собственных BPE токенизаторов и экспериментальная поддержка токенизаторов через HuggingFace (см. hf-proxy). +- hf-proxy — экспериментальный модуль! Совместимость с будущими версиями Transformers не гарантируется; API может меняться. +- Допускается загрузка/конвертация моделей в формат HF для использования экосистемы Transformers. +- Для запуска моделей с токенизаторами HF используйте `hf-proxy` и соответствующие эксперименты из `experiments/hf_integration/`. + ## 🧪 Тестирование Запуск всех тестов: @@ -198,7 +217,7 @@ cd llm python -m pytest tests/ -v ``` -**Статус тестов:** ✅ 101 тест пройден +**Статус тестов:** ✅ 101+ тест, охвачены все основные компоненты (ядро, ядро-токенизация, архитектуры, обучение) ## 📚 Научные концепции