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

Fine-tuning

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

Важно! Дообучение модели доступно только в on-premise версии платформы, запущенной на ваших серверах.

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

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

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

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

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

Compressa allows to fine-tune models on chat data. To start the process you should:

  1. Prepare conversation examples
  2. Format them into JSON Lines format with the next content on each line:
{
"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://localhost:8080/pod-1/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://localhost:8080/pod-1/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://localhost:8080/pod-1/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://localhost:8080/pod-1/api/v1/datasets/01be6d68-f790-434b-aa6d-5bd492aef202/' \
-H 'accept: application/json'

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

  • file

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

GET /v1/finetune/models/

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

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

curl -X 'GET' \
'http://localhost:8080/pod-1/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://localhost:8080/pod-1/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://localhost:8080/pod-1/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://localhost:8080/pod-1/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"
}

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

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

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