mirror of
https://github.com/pese-git/llm-arch-research.git
synced 2026-01-23 13:00: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).
|
||||
Исследовательский проект по разработке, обучению и сравнительному анализу современных архитектур больших языковых моделей (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 <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
|
||||
- ✅ Токенные и позиционные эмбеддинги
|
||||
- ✅ Многоголовое внимание с 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
|
||||
|
||||
|
||||
@@ -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 # Планировщики обучения
|
||||
@@ -176,12 +181,11 @@ generated = model.generate(input_ids, max_length=100)
|
||||
- ✅ Базовая архитектура трансформер-декодера
|
||||
|
||||
### GPT-2 Особенности
|
||||
- ✅ Улучшенная версия оригинальной GPT
|
||||
- ✅ 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+ тест, охвачены все основные компоненты (ядро, ядро-токенизация, архитектуры, обучение)
|
||||
|
||||
## 📚 Научные концепции
|
||||
|
||||
|
||||
Reference in New Issue
Block a user