docs(readme): update project documentation for LLaMA, Mistral, HF integration

- Added explicit support and usage examples for Mistral and LLaMA architectures in both root and llm/ READMEs
- Updated directory structure and naming (datasets, tokenizers, mistral, hf-proxy)
- Clarified quickstart and experiments usage including config location and CLI
- Documented HuggingFace integration via  and marked it as experimental
- Highlighted differences and specifics of all supported architectures
- Improved guide for launching training/generation/experiments
- Made project scope and architecture more transparent for new contributors
This commit is contained in:
Sergey Penkovsky
2025-10-17 20:18:57 +03:00
parent d947b7beb3
commit 9794db3e18
2 changed files with 66 additions and 99 deletions

130
README.md
View File

@@ -1,15 +1,16 @@
# LLM Architecture Research # LLM Architecture Research
Исследовательский проект для разработки и обучения архитектур больших языковых моделей (LLM). Исследовательский проект по разработке, обучению и сравнительному анализу современных архитектур больших языковых моделей (LLM): **GPT, GPT-2, LLaMA, Mistral**. Прямая поддержка интеграции с HuggingFace (через модуль `hf-proxy`).
## 🏗️ Архитектура проекта ## 🏗️ Архитектура проекта
Проект организован как монорепозиторий с использованием **uv** workspace: Проект организован как монорепозиторий с использованием **uv** workspace:
- **`llm`** — основная библиотека с реализацией архитектур LLM (GPT, GPT-2) - **`llm`** — основная библиотека с реализацией архитектур LLM (**GPT, GPT-2, LLaMA, Mistral**)
- **`hf-proxy`** — адаптер для интеграции с HuggingFace - **`hf-proxy`** — экспериментальный адаптер для интеграции с HuggingFace (загрузка, токенизация, экспериментальные скрипты). Функционал может изменяться и не гарантирует полной совместимости с будущими версиями HuggingFace Transformers.
- **`experiments`** — скрипты обучения и экспериментов - **`experiments`** — скрипты обучения и генерации (включая HF и собственные модели)
- **`notebooks`** — исследовательские ноутбуки - **`notebooks`** — исследовательские ноутбуки, анализ архитектур
## 📁 Структура проекта ## 📁 Структура проекта
@@ -41,8 +42,11 @@ llm-arch-research/
│ │ │ ├── gpt.py │ │ │ ├── gpt.py
│ │ │ ├── gpt2.py │ │ │ ├── gpt2.py
│ │ │ └── __init__.py │ │ │ └── __init__.py
│ │ ── llama/ # LLaMA архитектура │ │ ── llama/ # LLaMA архитектура
│ │ ├── llama.py │ │ ├── llama.py
│ │ │ └── __init__.py
│ │ └── mistral/ # Mistral архитектура
│ │ ├── mistral.py
│ │ └── __init__.py │ │ └── __init__.py
│ ├── training/ # утилиты обучения │ ├── training/ # утилиты обучения
│ │ ├── dataset.py │ │ ├── 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 ```bash
@@ -91,73 +107,15 @@ uv sync
uv sync --extra dev uv sync --extra dev
``` ```
## ⚡ Работа с экспериментами (experiments/llm_only) ## ⚡ Работа с экспериментами (experiments/llm_only, experiments/hf_integration)
В папке `experiments/llm_only` вы найдете универсальный скрипт для обучения и генерации LLM без HuggingFace. - В `experiments/llm_only`: универсальный скрипт для обучения и генерации LLM (включая LLaMA и Mistral) без HuggingFace — всё через собственную реализацию.
Архитектура позволяет управлять выбором модели, типом действия и параметрами через аргументы командной строки и отдельные JSON-конфиги. - В `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 <train/generate> --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 ### Архитектуры
- ✅ Токенные и позиционные эмбеддинги - ✅ GPT, GPT-2: Полностью воспроизводимые реализации, токенные и позиционные эмбеддинги, causal multi-head attention, LayerNorm
- ✅ Многоголовое внимание с causal mask - ✅ LLaMA: Rotary Positional Embeddings (RoPE), RMSNorm, SwiGLU, оптимизированная память
- ✅ Декодерные блоки с residual connections - ✅ Mistral: Sliding Window Attention (оконное внимание), Grouped Query Attention (GQA), совместимость с HF
- ✅ Layer normalization -Все архитектуры поддерживают обучение и генерацию текста
- ✅ Dropout регуляризация
- ✅ Отдельные реализации GPT и GPT-2 (различия в масштабе и деталях архитектуры)
### Генерация текста ### Генерация текста
- ✅ Жадный поиск (greedy decoding) - ✅ Greedy, sampling (Top-k, Top-p), контроль температуры, efficient caching
- ✅ Вероятностное сэмплирование
- ✅ Top-k сэмплирование
- ✅ Nucleus sampling (top-p)
- ✅ Контроль температуры
### Обучение ### Обучение
- ✅ Датасет для языкового моделирования - ✅ Языковое моделирование с кастомными и HF-токенизаторами
- ✅ Базовый тренировочный цикл - ✅ AdamW, кастомные датасеты, сохранение чекпоинтов
- ✅ Оптимизатор AdamW
- ✅ Сохранение чекпоинтов
### Интеграция с HuggingFace (hf-proxy) ### Интеграция с HuggingFace (hf-proxy)
- ✅ Адаптер моделей для совместимости с HF интерфейсами - ✅ Экспорт/импорт моделей и токенизаторов в HF совместимый формат
- ✅ Адаптер токенизаторов с поддержкой всех методов HF - ✅ Генерация и обучение через HF Trainer, pipelines и т.д.
- ✅ Сохранение и загрузка в HF формате - ✅ Двусторонняя поддержка: собственные модели становятся HF-совместимыми и наоборот
- ✅ Совместимость с HF Trainer и pipelines
- ✅ Генерация через стандартные HF интерфейсы
## 🔬 Эксперименты с hf-proxy ## 🔬 Эксперименты с hf-proxy

View File

@@ -27,14 +27,19 @@ llm/
│ │ ├── gpt.py # Базовая GPT │ │ ├── gpt.py # Базовая GPT
│ │ ├── gpt2.py # GPT-2 реализация │ │ ├── gpt2.py # GPT-2 реализация
│ │ └── __init__.py │ │ └── __init__.py
── llama/ # LLaMA архитектура ── llama/ # LLaMA архитектура
├── llama.py # LLaMA реализация ├── llama.py # LLaMA реализация
│ │ └── __init__.py
│ └── mistral/ # Mistral архитектура
│ ├── mistral.py # Mistral реализация
│ └── __init__.py │ └── __init__.py
├── tokenizers/ # Токенизаторы ├── tokenizers/ # Токенизаторы
│ ├── base_tokenizer.py # Базовый интерфейс │ ├── base_tokenizer.py # Базовый интерфейс
│ └── bpe_tokenizer.py # BPE токенизатор │ └── bpe_tokenizer.py # BPE токенизатор
├── datasets/ # Работа с датасетами
│ ├── text_dataset.py # Стандартный датасет
│ └── streaming_text_dataset.py # Стриминговый датасет
└── training/ # Утилиты обучения └── training/ # Утилиты обучения
├── dataset.py # Датасеты
├── trainer.py # Тренировочный цикл ├── trainer.py # Тренировочный цикл
├── optimizer.py # Оптимизаторы ├── optimizer.py # Оптимизаторы
└── scheduler.py # Планировщики обучения └── scheduler.py # Планировщики обучения
@@ -175,13 +180,12 @@ generated = model.generate(input_ids, max_length=100)
- ✅ Learned positional embeddings - ✅ Learned positional embeddings
- ✅ Базовая архитектура трансформер-декодера - ✅ Базовая архитектура трансформер-декодера
### GPT-2 Особенности ### GPT-2 Особенности
- ✅ Улучшенная версия оригинальной GPT
- ✅ Layer Normalization (перед вниманием и FFN) - ✅ Layer Normalization (перед вниманием и FFN)
- ✅ GELU активация - ✅ GELU активация
- ✅ Learned positional embeddings - ✅ Learned positional embeddings
- ✅ Кэширование для эффективной генерации - ✅ Кэширование KV для быстрой генерации
-Оптимизированные веса инициализации -Улучшенная инициализация слоёв
### LLaMA Особенности ### LLaMA Особенности
- ✅ Rotary Positional Embeddings (RoPE) - ✅ Rotary Positional Embeddings (RoPE)
@@ -190,6 +194,21 @@ generated = model.generate(input_ids, max_length=100)
- ✅ Оптимизированная структура декодера - ✅ Оптимизированная структура декодера
- ✅ Эффективное кэширование KV-памяти - ✅ Эффективное кэширование 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 python -m pytest tests/ -v
``` ```
**Статус тестов:** ✅ 101 тест пройден **Статус тестов:** ✅ 101+ тест, охвачены все основные компоненты (ядро, ядро-токенизация, архитектуры, обучение)
## 📚 Научные концепции ## 📚 Научные концепции