impruver
Набор скриптов и конфигураций для самостоятельного обучения Больших Языковых Моделей (БЯМ) или же на английском Large Language Models (LLM).
Вдохновлён проектами: saiga, torchtune, nanoGPT.
Обладает следующими возможностями:
- Единая конфигурация для подготовки датасетов, запуска обучения и инференса в формате YAML;
- Гибкая система подготовки датасетов, позволяющая скомбинировать несколько датасетов, каждый из них индивидуально нарезать и преобразовать, после чего выполнить слияние и дедупликаци;
- Предусмотрены возможности обучения моделей с нуля (from scratch), full-train дообучения и LoRA/Peft дообучения;
- В отличие от иных реализаций использует классы из пакета
transformers
, однако, можно указать путь до любого другого класса описывающей модели или токенизатор и скрипты будет использовать их; - Поддерживает возможность распределённого обучения при помощи
accelerate
.
Рекомендации
- Python 3.12
- Python Virtual Environment
- Nvidia GPU с 24Гб VRAM (на видеокартах с меньшим объёмом VRAM можно уменьшить
train_batch_size
) - Драйвера Nvidia и CUDA
Как установить
Клонируем репозиторий и подготавливаем окружение:
git clone https://github.com/EvilFreelancer/impruver.git
cd impruver
python3 -m venv venv
. venv/bin/activate
Если планируется обучение моделей поддерживающих Flash Attention, то устанавливать нужно так:
pip install "torch>=2.4.1"
pip install setuptools psutil
pip install "flash-attn>=2.6.3" --no-build-isolation
pip install -r requirements.txt
Если будете обучать модель без Flash Attention, то понадобится только это выполнить:
pip install -r requirements.txt
В планах сделать из
impruver
полноценный пакет, чтобы можно было простоpip install impruver
делать.
Доступные конфигурации
В директории configs имеется набор готовых конфигураций, каждый из них оптимизирован на запуска на одной видеокарте, память которой равен 24Гб, хотя маленькие модели можно обучать и на меньших объёмах памяти просто уменьшая размер батча.
Модель | Тип модели | Конфигурации |
---|---|---|
ruGPT3.5-13B | Saiga 2 | lora |
ruGPT3.5-13B | function call | lora |
nanoGPT (обучение с нуля) | Alpaca | full-train |
rugpt3large | Saiga 2 | full-train, lora |
rugpt3large | function call | full-train, lora |
rugpt3medium | Saiga 2 | full-train |
rugpt3medium | function call | full-train |
rugpt3small | Saiga 2 | full-train |
rugpt3small | function call | full-train |
Подробнее о том из чего состоят конфигурации и как их описывать сказано в документации.
Сборка датасета
Прежде чем приступить к обучению модели необходимо подготовить и дедуплицировать датасет обучения:
python3 compose_dataset.py configs/ruGPT35_13B_lora.yaml
Обучение на одной машине с одной видеокартой
Запускаем обучение модели вот так:
python3 train_transformers.py configs/ruGPT35_13B_lora.yaml
Скрипт тренировки поддерживает режим отправки логов в Weights and Biases, но по умолчанию данный функционал отключен, для того чтобы включить данный функционал нужно добавить опцию --report-to=wandb
в команду запуска обучения:
python3 train_transformers.py configs/ruGPT35_13B_lora.yaml --report-to=wandb
Инференс обученной модели
По завершению обучения можно взять интерактивный чат
python3 infer_transformer.py configs/ruGPT35_13B_lora.yaml
Обучение в режиме (D)DP - (Distributed) Data Parallel
Если у вас на сервере несколько видеокарт то потребуется выполнить ряд дополнительных настроек.
Для начала необходимо пройти небольшой опрос, выполни команду:
accelerate config
Пример вопросов и ответов для сервера с тремя видеокартами RTX 4070 Ti.
In which compute environment are you running? This machine
Which type of machine are you using? Multi-GPU
How many different machines will you use (in total with all the processes)? 1
Do you wish to use DeepSpeed? No
How many processes in total will you use? 3
Do you wish to use FP16 or BF16 (mixed precision)? bf16
Would you like to enable numa efficiency? (Currently only supported on NVIDIA hardware). Yes
Остальное по умолчанию, просто прожимайте Enter пока не закончится.
Далее в YAML-конфигурацию потребуется добавить стройки вида:
ddp:
ddp_find_unused_parameters: false
После этого можно будет запустить обучение:
accelerate launch train_transformers.py configs/ruGPT35_13B_lora.yaml
Опция --report-to=wandb
в таком формате тоже поддерживается.
Далее смотрите в nvidia-smi
или nvitop
, модель должна будет запуститься и разлиться на все видеокарты.