Skip to content
github-actions[bot] edited this page Dec 25, 2024 · 9 revisions

Impruver: Фреймворк для обучения Больших Языковых Моделей (LLM)

Набор скриптов и конфигураций для самостоятельного обучения Больших Языковых Моделей (БЯМ) или же на английском Large Language Models (LLM).

Вдохновлён проектами: saiga, torchtune, nanoGPT.

Обладает следующими возможностями:

  • Единая конфигурация для подготовки датасетов, запуска обучения и инференса в формате YAML
    • Возможно указать отдельно токенизатор и модель
    • При необходимости можно описать конфигурацию модели from scratch
  • Гибкая система подготовки датасетов, позволяющая скомбинировать несколько датасетов, каждый из них индивидуально нарезать и преобразовать, после чего выполнить слияние и дедупликацию
    • Можно использовать датасеты типа instruct или chat произвольного формата, система преобразует их в OpenAI-подобный chat типа messages
    • Можно обучать function call модели с ролями function_call и function_response
  • Предусмотрены возможности обучения моделей с нуля (from scratch), full-train дообучения и LoRA/Peft дообучения
  • В отличие от иных реализаций использует классы из пакета transformers, однако, можно указать путь до любого другого класса описывающего модель и/или токенизатор и impruver будет использовать уже их
  • Поддерживает возможность распределённого обучения при помощи accelerate

Рекомендованные системные требования

  • Python 3.12
  • Python Virtual Environment
  • Nvidia GPU с 24Гб VRAM (на видеокартах с меньшим объёмом VRAM можно уменьшить размер per_device_*_batch_size и/или gradient_accumulation_steps)
  • Драйвера Nvidia и CUDA

Доступные конфигурации

В директории configs имеется набор готовых конфигураций, каждый из них оптимизирован для обучения модели на одной видеокарте, память которой равна 24Гб, хотя маленькие модели можно обучать и на меньших объёмах памяти просто уменьшая размер per_device_*_batch_size и/или gradient_accumulation_steps.

Модель Тип модели Конфигурации
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
zephyr-7b-beta zephyr-python-ru analog lora

Полный список рецептов обучения и конфигураций можно посмотреть выполнив:

impruver ls

Как пользоваться

Прежде чем приступить к обучению модели необходимо подготовить и дедуплицировать датасет, после чего разделить его на тренировочный и валидационный наборы сэмплов.

Все эти задачи можно выполнить запустив рецепт compose_dataset и указав необходимую конфигурацию:

impruver run compose_dataset --config ruGPT-3.5/13B_lora_saiga2

Далее запускаем рецепт обучения трансфорфмерной модели:

impruver run finetune --config ruGPT-3.5/13B_lora_saiga2

Скрипт тренировки поддерживает режим отправки логов в Weights and Biases, но по умолчанию данный функционал отключен, для того чтобы включить данный функционал нужно добавить опцию --report-to=wandb в команду запуска обучения.

По завершению обучения можно запустить интерактивный чат:

impruver run chat ruGPT-3.5/13B_lora_saiga2

Режим (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/ruGPT-3.5/13B_lora_saiga2.yaml

Опция --report-to=wandb в таком формате тоже поддерживается.

Далее смотрите в nvidia-smi или nvitop, модель должна будет запуститься и разлиться на все видеокарты.

Clone this wiki locally