Name | impruver JSON |
Version |
1.0.7
JSON |
| download |
home_page | None |
Summary | Transformer based LLM trainer |
upload_time | 2025-01-12 16:36:05 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.12 |
license | MIT License Copyright (c) 2024 Pavel Rykov Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
keywords |
pytorch
transformers
finetuning
llm
|
VCS |
|
bugtrack_url |
|
requirements |
pydantic
pyyaml
jsonlines
fire
datasketch
torch
accelerate
datasets
transformers
huggingface-hub
safetensors
zstandard
tokenizers
tqdm
bitsandbytes
peft
wandb
tiktoken
torchao
sentencepiece
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Impruver: Фреймворк для обучения Больших Языковых Моделей (LLM)
**Русский** | [中文](./README.zh.md) | [English](./README.en.md)
Набор скриптов и конфигураций для самостоятельного обучения Больших Языковых Моделей (БЯМ) или же на английском Large
Language Models (LLM).
Вдохновлён проектами: [saiga](https://github.com/IlyaGusev/saiga),
[torchtune](https://github.com/pytorch/torchtune),
[nanoGPT](https://github.com/karpathy/nanoGPT).
Обладает следующими возможностями:
- Единая конфигурация для подготовки датасетов, запуска обучения и инференса в формате YAML
- Возможно указать отдельно токенизатор и модель
- Предусмотрена возможность обучения моделей с нуля (from scratch), full-train дообучения и LoRA/Peft дообучения
- Гибкая система подготовки датасетов, позволяющая скомбинировать несколько датасетов, каждый из них индивидуально
нарезать и преобразовать, после чего выполнить слияние и дедупликацию
- Можно использовать датасеты типа `instruct` или `chat` произвольного формата, система преобразует их в
OpenAI-подобный chat типа messages
- Можно обучать function call модели с ролями `function_call` и `function_response`
- В отличие от иных реализаций использует классы из пакета `transformers`, однако, можно указать путь до любого другого
класса описывающего модель и/или токенизатор и `impruver` будет использовать уже их
- Поддерживает возможность распределённого обучения при помощи `accelerate`
При необходимости вы можете изучить [документацию](https://github.com/EvilFreelancer/impruver/wiki) проекта.
## Рекомендованные системные требования
* Python 3.12
* Python Virtual Environment
* Nvidia GPU с 24Гб VRAM (на видеокартах с меньшим объёмом VRAM можно уменьшить размер `per_device_*_batch_size`
и/или `gradient_accumulation_steps`)
* Драйвера Nvidia и CUDA
## Как установить
Устанавливается одной командой:
```shell
pip install impruver
```
После чего в PATH станет доступна утилита командной строки `impruver`.
Если планируется обучение моделей с использованием Flash Attention, то надо будет выполнить ещё и:
```shell
pip install setuptools psutil torch flash-attn --no-build-isolation
```
## Доступные конфигурации
Полный список рецептов обучения и конфигураций можно посмотреть выполнив:
```shell
impruver ls
```
Вы можете скопировать конфигурацию локально:
```shell
impruver cp ruGPT-3.5/13B_lora_saiga2 ./ruGPT-3.5_13B_lora_saiga2.yaml
```
Подробнее про [конфигурации](https://github.com/EvilFreelancer/impruver/wiki/Конфигурация) в wiki проекта.
## Как пользоваться
Прежде чем приступить к обучению модели необходимо подготовить и дедуплицировать датасет, после чего разделить
его на тренировочный и валидационный наборы сэмплов.
Все эти задачи можно выполнить запустив рецепт `compose_dataset` и указав необходимую конфигурацию:
```shell
impruver run compose_dataset --config ./ruGPT-3.5_13B_lora_saiga2.yaml
```
Или используя конфигурацию, идущую в стандартной поставке:
```shell
impruver run compose_dataset --config ruGPT-3.5/13B_lora_saiga2
```
Далее запускаем рецепт `finetune` для обучения трансфорфмерной модели:
```shell
impruver run finetune --config ./ruGPT-3.5_13B_lora_saiga2.yaml
```
Скрипт тренировки поддерживает режим отправки логов в Weights and Biases, но по умолчанию это отключено,
для того чтобы включить данный функционал нужно добавить опцию `--report-to=wandb` в команду запуска обучения.
По завершению обучения при помощи рецепта `chat` можно запустить интерактивный чат:
```shell
impruver run chat ./ruGPT-3.5_13B_lora_saiga2.yaml
```
Для того чтобы выйти из оболочки чата, используйте комбинацию клавиш `Ctrl+D` или `Ctrl+C`.
Подробнее про [обучение](https://github.com/EvilFreelancer/impruver/wiki/Обучение) в wiki проекта.
## Лицензия
Данный проект распространяется под лицензией `MIT`. Подробности в файле [LICENSE](./LICENSE).
## Цитирование
```
@misc{impruver2024sources,
author = {Pavel Rykov},
title = {{Impruver: Framework for Training Large Language Models}},
howpublished = {\url{https://github.com/EvilFreelancer/impruver}},
year = {2024}
}
```
Raw data
{
"_id": null,
"home_page": null,
"name": "impruver",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.12",
"maintainer_email": null,
"keywords": "pytorch, transformers, finetuning, llm",
"author": null,
"author_email": "Pavel Rykov <paul@drteam.rocks>",
"download_url": "https://files.pythonhosted.org/packages/cd/6d/526e50df2cd4550fc04c33b7feaec5ff84913d5fd461d9b812b39b108246/impruver-1.0.7.tar.gz",
"platform": null,
"description": "# Impruver: \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0411\u043e\u043b\u044c\u0448\u0438\u0445 \u042f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u041c\u043e\u0434\u0435\u043b\u0435\u0439 (LLM)\n\n**\u0420\u0443\u0441\u0441\u043a\u0438\u0439** | [\u4e2d\u6587](./README.zh.md) | [English](./README.en.md)\n\n\u041d\u0430\u0431\u043e\u0440 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0411\u043e\u043b\u044c\u0448\u0438\u0445 \u042f\u0437\u044b\u043a\u043e\u0432\u044b\u0445 \u041c\u043e\u0434\u0435\u043b\u0435\u0439 (\u0411\u042f\u041c) \u0438\u043b\u0438 \u0436\u0435 \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c Large\nLanguage Models (LLM).\n\n\u0412\u0434\u043e\u0445\u043d\u043e\u0432\u043b\u0451\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438: [saiga](https://github.com/IlyaGusev/saiga),\n[torchtune](https://github.com/pytorch/torchtune),\n[nanoGPT](https://github.com/karpathy/nanoGPT).\n\n\u041e\u0431\u043b\u0430\u0434\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438:\n\n- \u0415\u0434\u0438\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432, \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u0438\u043d\u0444\u0435\u0440\u0435\u043d\u0441\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 YAML\n - \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0442\u043e\u043a\u0435\u043d\u0438\u0437\u0430\u0442\u043e\u0440 \u0438 \u043c\u043e\u0434\u0435\u043b\u044c\n - \u041f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0441 \u043d\u0443\u043b\u044f (from scratch), full-train \u0434\u043e\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438 LoRA/Peft \u0434\u043e\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f\n- \u0413\u0438\u0431\u043a\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u0441\u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u043e\n \u043d\u0430\u0440\u0435\u0437\u0430\u0442\u044c \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0438\u044f\u043d\u0438\u0435 \u0438 \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044e\n - \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u044b \u0442\u0438\u043f\u0430 `instruct` \u0438\u043b\u0438 `chat` \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442 \u0438\u0445 \u0432\n OpenAI-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 chat \u0442\u0438\u043f\u0430 messages\n - \u041c\u043e\u0436\u043d\u043e \u043e\u0431\u0443\u0447\u0430\u0442\u044c function call \u043c\u043e\u0434\u0435\u043b\u0438 \u0441 \u0440\u043e\u043b\u044f\u043c\u0438 `function_call` \u0438 `function_response`\n- \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0438\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043a\u043b\u0430\u0441\u0441\u044b \u0438\u0437 \u043f\u0430\u043a\u0435\u0442\u0430 `transformers`, \u043e\u0434\u043d\u0430\u043a\u043e, \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0443\u0442\u044c \u0434\u043e \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e\n \u043a\u043b\u0430\u0441\u0441\u0430 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u043c\u043e\u0434\u0435\u043b\u044c \u0438/\u0438\u043b\u0438 \u0442\u043e\u043a\u0435\u043d\u0438\u0437\u0430\u0442\u043e\u0440 \u0438 `impruver` \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0438\u0445\n- \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 `accelerate`\n\n\u041f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0437\u0443\u0447\u0438\u0442\u044c [\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e](https://github.com/EvilFreelancer/impruver/wiki) \u043f\u0440\u043e\u0435\u043a\u0442\u0430.\n\n## \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\n\n* Python 3.12\n* Python Virtual Environment\n* Nvidia GPU \u0441 24\u0413\u0431 VRAM (\u043d\u0430 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0430\u0445 \u0441 \u043c\u0435\u043d\u044c\u0448\u0438\u043c \u043e\u0431\u044a\u0451\u043c\u043e\u043c VRAM \u043c\u043e\u0436\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 `per_device_*_batch_size`\n \u0438/\u0438\u043b\u0438 `gradient_accumulation_steps`)\n* \u0414\u0440\u0430\u0439\u0432\u0435\u0440\u0430 Nvidia \u0438 CUDA\n\n## \u041a\u0430\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\n\n\u0423\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:\n\n```shell\npip install impruver\n```\n\n\u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432 PATH \u0441\u0442\u0430\u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 `impruver`.\n\n\u0415\u0441\u043b\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Flash Attention, \u0442\u043e \u043d\u0430\u0434\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0435\u0449\u0451 \u0438:\n\n```shell\npip install setuptools psutil torch flash-attn --no-build-isolation\n```\n\n## \u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\n\n\u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0446\u0435\u043f\u0442\u043e\u0432 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0432:\n\n```shell\nimpruver ls\n```\n\n\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e:\n\n```shell\nimpruver cp ruGPT-3.5/13B_lora_saiga2 ./ruGPT-3.5_13B_lora_saiga2.yaml\n```\n\n\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e [\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438](https://github.com/EvilFreelancer/impruver/wiki/\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f) \u0432 wiki \u043f\u0440\u043e\u0435\u043a\u0442\u0430.\n\n## \u041a\u0430\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f\n\n\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044e \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0438 \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u0442\u0430\u0441\u0435\u0442, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c\n\u0435\u0433\u043e \u043d\u0430 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440\u044b \u0441\u044d\u043c\u043f\u043b\u043e\u0432.\n\n\u0412\u0441\u0435 \u044d\u0442\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0432 \u0440\u0435\u0446\u0435\u043f\u0442 `compose_dataset` \u0438 \u0443\u043a\u0430\u0437\u0430\u0432 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e:\n\n```shell\nimpruver run compose_dataset --config ./ruGPT-3.5_13B_lora_saiga2.yaml\n```\n\n\u0418\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e, \u0438\u0434\u0443\u0449\u0443\u044e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0435:\n\n```shell\nimpruver run compose_dataset --config ruGPT-3.5/13B_lora_saiga2\n```\n\n\u0414\u0430\u043b\u0435\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0440\u0435\u0446\u0435\u043f\u0442 `finetune` \u0434\u043b\u044f \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u0444\u043c\u0435\u0440\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438:\n\n```shell\nimpruver run finetune --config ./ruGPT-3.5_13B_lora_saiga2.yaml\n```\n\n\u0421\u043a\u0440\u0438\u043f\u0442 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0435\u0436\u0438\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043b\u043e\u0433\u043e\u0432 \u0432 Weights and Biases, \u043d\u043e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u043e,\n\u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0446\u0438\u044e `--report-to=wandb` \u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f.\n\n\u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0440\u0435\u0446\u0435\u043f\u0442\u0430 `chat` \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0447\u0430\u0442:\n\n```shell\nimpruver run chat ./ruGPT-3.5_13B_lora_saiga2.yaml\n```\n\n\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0439\u0442\u0438 \u0438\u0437 \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438 \u0447\u0430\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044e \u043a\u043b\u0430\u0432\u0438\u0448 `Ctrl+D` \u0438\u043b\u0438 `Ctrl+C`.\n\n\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e [\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435](https://github.com/EvilFreelancer/impruver/wiki/\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435) \u0432 wiki \u043f\u0440\u043e\u0435\u043a\u0442\u0430.\n\n## \u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f\n\n\u0414\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 `MIT`. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 [LICENSE](./LICENSE).\n\n## \u0426\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\n\n```\n@misc{impruver2024sources,\n author = {Pavel Rykov},\n title = {{Impruver: Framework for Training Large Language Models}},\n howpublished = {\\url{https://github.com/EvilFreelancer/impruver}},\n year = {2024}\n}\n```\n",
"bugtrack_url": null,
"license": "MIT License Copyright (c) 2024 Pavel Rykov Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ",
"summary": "Transformer based LLM trainer",
"version": "1.0.7",
"project_urls": {
"Documentation": "https://github.com/EvilFreelancer/impruver/wiki",
"GitHub": "https://github.com/EvilFreelancer/impruver",
"Issues": "https://github.com/EvilFreelancer/impruver/issues"
},
"split_keywords": [
"pytorch",
" transformers",
" finetuning",
" llm"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "fc3cc1d2a377314fde0dc842e12769e53e38ca5f210184c87cffb82d3ca11c1c",
"md5": "01cc147a9fdecb7957ea97363254c86c",
"sha256": "767ce50e3a5239f66c2cd953af996e9d818d56795611525290310808344e0dd4"
},
"downloads": -1,
"filename": "impruver-1.0.7-py3-none-any.whl",
"has_sig": false,
"md5_digest": "01cc147a9fdecb7957ea97363254c86c",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.12",
"size": 57665,
"upload_time": "2025-01-12T16:36:03",
"upload_time_iso_8601": "2025-01-12T16:36:03.055255Z",
"url": "https://files.pythonhosted.org/packages/fc/3c/c1d2a377314fde0dc842e12769e53e38ca5f210184c87cffb82d3ca11c1c/impruver-1.0.7-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "cd6d526e50df2cd4550fc04c33b7feaec5ff84913d5fd461d9b812b39b108246",
"md5": "579047ac5c55de3a631efafeac1d28ac",
"sha256": "6fad6598e2b73d045df33afa8cd080c716dff9167ea5cf77e2e9c8e6810f5d5d"
},
"downloads": -1,
"filename": "impruver-1.0.7.tar.gz",
"has_sig": false,
"md5_digest": "579047ac5c55de3a631efafeac1d28ac",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.12",
"size": 36848,
"upload_time": "2025-01-12T16:36:05",
"upload_time_iso_8601": "2025-01-12T16:36:05.691950Z",
"url": "https://files.pythonhosted.org/packages/cd/6d/526e50df2cd4550fc04c33b7feaec5ff84913d5fd461d9b812b39b108246/impruver-1.0.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-12 16:36:05",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "EvilFreelancer",
"github_project": "impruver",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "pydantic",
"specs": [
[
">=",
"2.10.4"
]
]
},
{
"name": "pyyaml",
"specs": [
[
">=",
"6.0.2"
]
]
},
{
"name": "jsonlines",
"specs": [
[
">=",
"4.0.0"
]
]
},
{
"name": "fire",
"specs": [
[
">=",
"0.7.0"
]
]
},
{
"name": "datasketch",
"specs": [
[
">=",
"1.6.5"
]
]
},
{
"name": "torch",
"specs": [
[
">=",
"2.5.1"
]
]
},
{
"name": "accelerate",
"specs": [
[
">=",
"1.2.1"
]
]
},
{
"name": "datasets",
"specs": [
[
">=",
"3.2.0"
]
]
},
{
"name": "transformers",
"specs": [
[
">=",
"4.47.1"
]
]
},
{
"name": "huggingface-hub",
"specs": [
[
">=",
"0.27.0"
]
]
},
{
"name": "safetensors",
"specs": [
[
">=",
"0.4.5"
]
]
},
{
"name": "zstandard",
"specs": [
[
">=",
"0.23.0"
]
]
},
{
"name": "tokenizers",
"specs": [
[
">=",
"0.21.0"
]
]
},
{
"name": "tqdm",
"specs": [
[
">=",
"4.67.1"
]
]
},
{
"name": "bitsandbytes",
"specs": [
[
">=",
"0.45.0"
]
]
},
{
"name": "peft",
"specs": [
[
">=",
"0.14.0"
]
]
},
{
"name": "wandb",
"specs": [
[
">=",
"0.19.1"
]
]
},
{
"name": "tiktoken",
"specs": [
[
">=",
"0.8.0"
]
]
},
{
"name": "torchao",
"specs": [
[
">=",
"0.4.0"
]
]
},
{
"name": "sentencepiece",
"specs": [
[
">=",
"0.2.0"
]
]
}
],
"lcname": "impruver"
}