Skip to content

Commit

Permalink
Merge branch 'dev'
Browse files Browse the repository at this point in the history
  • Loading branch information
EvilFreelancer committed Dec 25, 2024
2 parents 2485955 + 933faec commit 1ca077d
Show file tree
Hide file tree
Showing 47 changed files with 888 additions and 330 deletions.
4 changes: 4 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,9 @@
/venv/
/impruver.egg-info/
/build/
/dist/
/*.yaml
__pycache__
/output/
/*.jsonl
/wandb/
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
/venv/
/impruver.egg-info/
/build/
/dist/
/*.yaml
__pycache__
/output/
Expand Down
118 changes: 31 additions & 87 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,139 +22,83 @@ Language Models (LLM).
класса описывающего модель и/или токенизатор и `impruver` будет использовать уже их
- Поддерживает возможность распределённого обучения при помощи `accelerate`

## Рекомендации
При необходимости вы можете изучить [документацию](https://github.com/EvilFreelancer/impruver/wiki) проекта.

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

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

## Как установить

Клонируем репозиторий и подготавливаем окружение:
Устанавливается одной командой:

```shell
git clone https://github.com/EvilFreelancer/impruver.git
cd impruver
python3 -m venv venv
. venv/bin/activate
pip install impruver
```

Если планируется обучение моделей поддерживающих Flash Attention, то устанавливать нужно так:

```shell
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
```
После чего в PATH станет доступна утилита командной строки `impruver`.

Если будете обучать модель без Flash Attention, то понадобится только это выполнить:
Если же планируется обучение моделей поддерживающих Flash Attention, то устанавливать следует так:

```shell
pip install -r requirements.txt
pip install setuptools psutil torch flash-attn --no-build-isolation
pip install impruver
```

> В планах сделать из `impruver` полноценный пакет, чтобы можно было просто `pip install impruver` делать.
## Доступные конфигурации

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

| Модель | Тип модели | Конфигурации |
|------------------------------------------------------------------------------|------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------|
| [ruGPT3.5-13B](https://huggingface.co/ai-forever/ruGPT-3.5-13B) | Saiga 2 | [lora](/configs/ruGPT35_13B_lora_saiga2.yaml) |
| [ruGPT3.5-13B](https://huggingface.co/ai-forever/ruGPT-3.5-13B) | function call | [lora](/configs/ruGPT35_13B_lora_fc.yaml) |
| [nanoGPT](https://github.com/karpathy/nanoGPT) (обучение с нуля) | Alpaca | [full-train](/configs/nanoGPT_full_alpaca.yaml) |
| [rugpt3large](https://huggingface.co/ai-forever/rugpt3large_based_on_gpt2) | Saiga 2 | [full-train](/configs/rugpt3large_full_saiga2.yaml), [lora](/configs/rugpt3large_lora_saiga2.yaml) |
| [rugpt3large](https://huggingface.co/ai-forever/rugpt3large_based_on_gpt2) | function call | [full-train](/configs/rugpt3large_full_fc.yaml), [lora](/configs/rugpt3large_lora_fc.yaml) |
| [rugpt3medium](https://huggingface.co/ai-forever/rugpt3medium_based_on_gpt2) | Saiga 2 | [full-train](/configs/rugpt3medium_full_saiga2.yaml) |
| [rugpt3medium](https://huggingface.co/ai-forever/rugpt3medium_based_on_gpt2) | function call | [full-train](/configs/rugpt3medium_full_fc.yaml) |
| [rugpt3small](https://huggingface.co/ai-forever/rugpt3small_based_on_gpt2) | Saiga 2 | [full-train](/configs/rugpt3small_full_saiga2.yaml) |
| [rugpt3small](https://huggingface.co/ai-forever/rugpt3small_based_on_gpt2) | function call | [full-train](/configs/rugpt3small_full_fc.yaml) |
| [zephyr-7b-beta](https://huggingface.co/HuggingFaceH4/zephyr-7b-beta) | [zephyr-python-ru](https://huggingface.co/MexIvanov/zephyr-python-ru) analog | [lora](/configs/zephyr_7B_lora_python-ru.yaml) |

Подробнее о том из чего состоят конфигурации и как их описывать сказано
в [документации](https://github.com/EvilFreelancer/impruver/wiki).

## Сборка датасета

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

```shell
python3 compose_dataset.py configs/ruGPT35_13B_lora_saiga2.yaml
impruver ls
```

## Обучение на одной машине с одной видеокартой
Подробнее про [конфигурации](https://github.com/EvilFreelancer/impruver/wiki) в wiki проекта.

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

```shell
python3 train_transformers.py configs/ruGPT35_13B_lora_saiga2.yaml
impruver cp ruGPT-3.5/13B_lora_saiga2 ./ruGPT-3.5_13B_lora_saiga2.yaml
```

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

```shell
python3 train_transformers.py configs/ruGPT35_13B_lora_saiga2.yaml --report-to=wandb
```
## Как пользоваться

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

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

```shell
python3 infer_transformer.py configs/ruGPT35_13B_lora_saiga2.yaml
impruver run compose_dataset --config ./ruGPT-3.5_13B_lora_saiga2.yaml
```

## Обучение в режиме (D)DP - (Distributed) Data Parallel

Если у вас на сервере несколько видеокарт то потребуется выполнить ряд дополнительных настроек.

Для начала необходимо пройти небольшой опрос, выполни команду:

```shell
accelerate config
# Или используя конфигурацию дующую в стандартной поставке
impruver run compose_dataset --config ruGPT-3.5/13B_lora_saiga2
```

Пример вопросов и ответов для сервера с тремя видеокартами 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
```shell
impruver run finetune --config ./ruGPT-3.5_13B_lora_saiga2.yaml
```

Остальное по умолчанию, просто прожимайте Enter пока не закончится.

Далее в YAML-конфигурацию потребуется добавить стройки вида:

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

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

```shell
accelerate launch train_transformers.py configs/ruGPT35_13B_lora_saiga2.yaml
impruver run chat ./ruGPT-3.5_13B_lora_saiga2.yaml
```

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

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

## Лицензия

Этот проект лицензирован под лицензией `MIT`. Подробности см. в файле [LICENSE](./LICENSE).
Данный проект распространяется под лицензией `MIT`. Подробности в файле [LICENSE](./LICENSE).

## Цитирование

Expand Down
1 change: 0 additions & 1 deletion configs/ruGPT35_13B_lora.yml

This file was deleted.

Loading

0 comments on commit 1ca077d

Please sign in to comment.