Об этом проекте

## Обучение LLM с нуля Этот репозиторий предоставляет простой и полный метод обучения вашей собственной большой языковой модели (LLM) — от загрузки сырых данных до генерации текста. Он создан Фаридом Ханом и основан на архитектуре Transformer из статьи «Attention is All You Need». Проект рассчитан на студентов, разработчиков и исследователей: каждый алгоритм реализован с нуля на чистом PyTorch (без использования библиотек вроде `trl`, `peft` или `transformers`). ### Основной конвейер Репозиторий проводит вас через весь путь обучения LLM: ``` сырой текст -> токены -> Transformer -> потеря следующего токена -> базовая модель базовая модель -> SFT -> модель вознаграждения -> {PPO, DPO} -> GRPO -> оценка и чат ``` ### Ключевые особенности - **Реализация с нуля**: Все модели и алгоритмы написаны вручную на PyTorch, что даёт глубокое понимание механизмов работы. - **Пошаговое руководство**: README и код структурированы логически, с понятными объяснениями и блоками кода. - **Несколько этапов обучения**: Охватывает предобучение, контролируемую донастройку (SFT), обучение модели вознаграждения и продвинутые методы обучения с подкреплением, такие как DPO, PPO и GRPO. - **Практичность и гибкость**: Включает опциональные функции экономии памяти (AMP, градиентная чекпоинтинг, накопление градиентов) для обучения более крупных моделей на ограниченном оборудовании. - **Комплексный инструментарий**: Включает скрипты для подготовки данных, обучения, оценки и панель управления Streamlit для мониторинга. ### Структура кода Репозиторий организован в понятные модули: - `src/models/`: Содержит модель Transformer, построенную из небольших переиспользуемых компонентов (MLP, attention, блоки). - `src/post_training/`: Реализует SFT, модели вознаграждения, PPO, DPO, GRPO, оценку и инференс. - `scripts/`: Содержит все исполняемые скрипты для каждого этапа конвейера. - `config/` и `configs/`: Файлы конфигурации (Python и JSON) для гиперпараметров модели и настроек обучения. - `data_loader/`: Пакетные итераторы для разных типов данных. - `ui/`: Панель управления Streamlit для взаимодействия с моделью и её мониторинга. - `docs/`: Сайт документации с теорией и диаграммами. ### Начало работы 1. **Клонирование и установка**: Клонируйте репозиторий и установите его в режиме редактирования с помощью `pip install -e .`. Доступны дополнительные опции для конкретных функций (обучение, интерфейс, документация). 2. **Подготовка данных**: Используйте предоставленные скрипты для токенизации наборов данных, таких как The Pile (для предобучения), Alpaca, Dolly и GSM8K (для настройки инструкций), а также Anthropic HH-RLHF (для обучения на предпочтениях). 3. **Создание и обучение модели**: Начните с небольшой модели на 13M параметров, используя `scripts/train_transformer.py`, или используйте более продвинутый `scripts/pretrain_base.py` для более крупных моделей с такими функциями, как распределённое обучение и накопление градиентов. 4. **Пост-обучение и использование модели**: Донастройте базовую модель с помощью SFT, обучите модель вознаграждения и примените методы RLHF, такие как DPO или PPO, для согласования модели с человеческими предпочтениями. Наконец, используйте скрипты оценки и чата для оценки и взаимодействия с вашей моделью. ### Пример вывода Вот пример текста, сгенерированного обученной моделью на 13M параметров: ``` В ***1978 году парк был возвращён на заводскую пластину, которую публика делит с нижней частью электронного забора, который следует из городов Станции. Канал древних западных наций был ограничен городским местом. Деревни были напрямую связаны с городами в Китае, которые восстают против бюджета США, и в Одамбинаисе неопределённость и удача установлены в сельских районах. ``` ### Документация Репозиторий включает сайт документации с более подробной теорией, диаграммами и объяснениями, доступный по ссылке в README.