mirror of
https://github.com/pese-git/llm-arch-research.git
synced 2026-01-23 21:10:54 +00:00
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:
130
README.md
130
README.md
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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 # Планировщики обучения
|
||||||
@@ -176,12 +181,11 @@ generated = model.generate(input_ids, max_length=100)
|
|||||||
- ✅ Базовая архитектура трансформер-декодера
|
- ✅ Базовая архитектура трансформер-декодера
|
||||||
|
|
||||||
### 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+ тест, охвачены все основные компоненты (ядро, ядро-токенизация, архитектуры, обучение)
|
||||||
|
|
||||||
## 📚 Научные концепции
|
## 📚 Научные концепции
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user