Перейти к основному содержимому

Fine-tuning

Compressa позволяет дообучить LLM модель быстро и эффективно с помощью LoRA/QLoRA адаптеров. Дообучение позволяет улучшить качество ответов на конкретной бизнес-задаче, сфокусировать на определенной теме или задать формат/стиль ответов.

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

Подготовка данных

Для дообучения вам понадобятся диалоговые данные. Вам необходимо:

  1. Подготовить примеры целевых диалогов

  2. Отформатировать их в формате JSON Lines, где каждая строка содержит следующий контент:

{
"messages": [
{
"role": "user",
"content": "<USER MESSAGE 1>"
},
{
"role": "bot",
"content": " <BOT'S RESPONSE>"
},
{
"role": "user",
"content": "<USER MESSAGE 2>"
},
{
"role": "bot",
"content": " <BOT'S RESPONSE2>"
},
]
}

Каждый диалог может включать любое количество сообщений. Для эффективного дообучения набор данных должен содержать не менее 100 примеров.

Дообучение

После подготовки данных можно запустить процесс обучения через UI интерфейс Compressa Fine-tuning или с использованием REST API. Ниже мы рассмотрим оба этих варианта.

Дообучение через UI

URL: http://ваш_адрес:8080/finetune/ (в поле токен нужно вставить токена админа)

Fine-Tune UI

Чтобы дообучить модель через UI интерфейс, необходимо:

  1. Выбрать LLM модель в левой панели
  2. Ввести название для вашей дообученной версии
  3. Загрузить jsonl файл в форму
  4. Нажать кнопку Finetune

Процесс дообучения можно отслеживать в дэшборде AIM. Для этого нажмите Training Dashboard после запуска процесса.

Training Dashboard

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

Training Dashboard

Дообучение через REST API

Управление датасетами

GET /v1/datasets/

Получить список доступных датасетов.

Пример запроса:

curl -X 'GET' \
'http://ваш_адрес:8080/api/v1/datasets/' \
-H 'accept: application/json'

Пример ответа:

[
{
"id": "01be6d68-f790-434b-aa6d-5bd492aef202",
"name": "train.jsonl",
"s3_path": "01be6d68-f790-434b-aa6d-5bd492aef202/metadata.json",
"description": null
},
{
"id": "077adb68-2b0e-481b-bd13-e8807adf625f",
"name": "train.jsonl",
"s3_path": "077adb68-2b0e-481b-bd13-e8807adf625f/metadata.json",
"description": "My dataset 2"
}
]

POST /v1/datasets/upload/

Загрузить новый датасет (только ‘jsonl’ формат).

Параметры:

  • query: description - dataset description

Тело запроса:

  • multipart/form-data: file

Пример запроса:

curl -X 'POST' \
'http://ваш_адрес:8080/api/v1/datasets/upload/?description=My%20Description' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@train.jsonl'

Пример ответа:

{
"id": "string",
"name": "string",
"s3_path": "string",
"description": "string"
}

GET /v1/datasets/{dataset_id}/

Загрузить конкретный датасет по id dataset_id

Параметры:

  • path: dataset_id

Пример запроса:

curl -X 'GET' \
'http://ваш_адрес:8080/api/v1/datasets/01be6d68-f790-434b-aa6d-5bd492aef202/' \
-H 'accept: application/json'

Пример ответа:

  • file

Дообучение модели

GET /v1/finetune/models/

Получить список моделей, доступных для дообучения

Пример запроса:

curl -X 'GET' \
'http://ваш_адрес:8080/api/v1/finetune/models/' \
-H 'accept: application/json'

Пример ответа:

[
{
"model_id": "TheBloke/mixtral-8x7b-v0.1-AWQ",
"adapter": false,
"base_model_id": null
},
{
"model_id": "NeuralNovel/Mistral-7B-Instruct-v0.2-Neural-Story",
"adapter": false,
"base_model_id": null
}
]

POST /v1/finetune/

Запустить дообучение модели на датасете

Тело запроса:

{
"name": "string",
"model_id": "string",
"dataset_id": "string"
}
  • name - name of training
  • model_id - id of model to train
  • dataset_id - id of dataset to train on

Пример запроса:

curl -X 'POST' \
'http://ваш_адрес:8080/api/v1/finetune/' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"name": "My Adapter Training",
"model_id": "NousResearch/Llama-2-7b-chat-hf",
"dataset_id": "01be6d68-f790-434b-aa6d-5bd492aef202"
}'

Пример ответа:

{
"id": "74280be7-4723-475d-89ae-346e9017990e",
"name": "FT_NousResearch/Llama-2-7b-chat-hf_01be6d68-f790-434b-aa6d-5bd492aef202",
"status": "CREATED",
"started_at": "2024-03-21T10:40:40.928442"
}

GET /v1/finetune/status

Получить статус текущего процесса дообучения

Пример запроса:

curl -X 'GET' \
'http://ваш_адрес:8080/api/v1/finetune/status/' \
-H 'accept: application/json'

Пример ответа:

{
"id": "46c155b4-17fe-4226-9412-a77edfadc7e7",
"name": "My Adapter Training",
"model_id": "NousResearch/Llama-2-7b-chat-hf",
"dataset_id": "01be6d68-f790-434b-aa6d-5bd492aef202",
"job": {
"id": "74280be7-4723-475d-89ae-346e9017990e",
"name": "FT_NousResearch/Llama-2-7b-chat-hf_01be6d68-f790-434b-aa6d-5bd492aef202",
"status": "RUNNING",
"started_at": "2024-03-21T10:40:40.928442"
}
}

POST /v1/finetune/interrupt/

Прервать процесс дообучения

Пример запрос:

curl -X 'POST' \
'http://ваш_адрес:8080/api/v1/finetune/interrupt/' \
-H 'accept: application/json' \
-d ''

Пример ответа:

{
"id": "74280be7-4723-475d-89ae-346e9017990e",
"name": "FT_NousResearch/Llama-2-7b-chat-hf_01be6d68-f790-434b-aa6d-5bd492aef202",
"status": "RUNNING",
"started_at": "2024-03-21T10:40:40.928442"
}

Запуск дообученной модели

После завершения процесса, вы можете запустить дообученную версию модели на своем сервере и начать ее использование.

Подробные инструкции можно найти на специальной странице.