Набор скриптов и конфигураций для самостоятельного обучения Больших Языковых Моделей (БЯМ) или же на английском Large Language Models (LLM).
Вдохновлён проектами: saiga, torchtune, nanoGPT.
Обладает следующими возможностями:
- Единая конфигурация для подготовки датасетов, запуска обучения и инференса в формате YAML
- Возможно указать отдельно токенизатор и модель
- Предусмотрена возможность обучения моделей с нуля (from scratch), full-train дообучения и LoRA/Peft дообучения
- Гибкая система подготовки датасетов, позволяющая скомбинировать несколько датасетов, каждый из них индивидуально
нарезать и преобразовать, после чего выполнить слияние и дедупликацию
- Можно использовать датасеты типа
instruct
илиchat
произвольного формата, система преобразует их в OpenAI-подобный chat типа messages - Можно обучать function call модели с ролями
function_call
иfunction_response
- Можно использовать датасеты типа
- В отличие от иных реализаций использует классы из пакета
transformers
, однако, можно указать путь до любого другого класса описывающего модель и/или токенизатор иimpruver
будет использовать уже их - Поддерживает возможность распределённого обучения при помощи
accelerate
При необходимости вы можете изучить документацию проекта.
- Python 3.12
- Python Virtual Environment
- Nvidia GPU с 24Гб VRAM (на видеокартах с меньшим объёмом VRAM можно уменьшить размер
per_device_*_batch_size
и/илиgradient_accumulation_steps
) - Драйвера Nvidia и CUDA
Устанавливается одной командой:
pip install impruver
После чего в PATH станет доступна утилита командной строки impruver
.
Если планируется обучение моделей с использованием Flash Attention, то надо будет выполнить ещё и:
pip install setuptools psutil torch flash-attn --no-build-isolation
Полный список рецептов обучения и конфигураций можно посмотреть выполнив:
impruver ls
Вы можете скопировать конфигурацию локально:
impruver cp ruGPT-3.5/13B_lora_saiga2 ./ruGPT-3.5_13B_lora_saiga2.yaml
Подробнее про конфигурации в wiki проекта.
Прежде чем приступить к обучению модели необходимо подготовить и дедуплицировать датасет, после чего разделить его на тренировочный и валидационный наборы сэмплов.
Все эти задачи можно выполнить запустив рецепт compose_dataset
и указав необходимую конфигурацию:
impruver run compose_dataset --config ./ruGPT-3.5_13B_lora_saiga2.yaml
Или используя конфигурацию, идущую в стандартной поставке:
impruver run compose_dataset --config ruGPT-3.5/13B_lora_saiga2
Далее запускаем рецепт finetune
для обучения трансфорфмерной модели:
impruver run finetune --config ./ruGPT-3.5_13B_lora_saiga2.yaml
Скрипт тренировки поддерживает режим отправки логов в Weights and Biases, но по умолчанию это отключено,
для того чтобы включить данный функционал нужно добавить опцию --report-to=wandb
в команду запуска обучения.
По завершению обучения при помощи рецепта chat
можно запустить интерактивный чат:
impruver run chat ./ruGPT-3.5_13B_lora_saiga2.yaml
Для того чтобы выйти из оболочки чата, используйте комбинацию клавиш Ctrl+D
или Ctrl+C
.
Подробнее про обучение в wiki проекта.
Данный проект распространяется под лицензией MIT
. Подробности в файле LICENSE.
@misc{impruver2024sources,
author = {Pavel Rykov},
title = {{Impruver: Framework for Training Large Language Models}},
howpublished = {\url{https://github.com/EvilFreelancer/impruver}},
year = {2024}
}