нейропоток
ГайдыПрактик

Mistral fine-tuning: дообучаю модель на своих данных через API

Дообучаю Mistral через официальный API: готовлю датасет JSONL, загружаю, запускаю fine-tuning, проверяю результат. Сколько стоит и когда это выгоднее Unsloth.

Павел·8 мин чтения
Mistral fine-tuning: дообучаю модель на своих данных через API
Поделиться:TelegramVK

Недавно дообучал модель через Unsloth — это бесплатно, но требует GPU или хотя бы Colab. Работает, но есть нюанс: после обучения тебе нужно где-то хостить модель. Плюс надо разбираться с Hugging Face, квантизацией, форматами весов.

Mistral предлагает другой путь: платное облачное дообучение через la Plateforme. Загрузил датасет → запустил job → получил fine-tuned модель, доступную через тот же API. Никакой инфраструктуры, деплой включён в стоимость.

Это не лучше и не хуже Unsloth — просто другой trade-off. Если у тебя нет GPU и не хочется возиться с хостингом, Mistral API — разумный вариант.

Для кого: разработчики и инженеры, которые хотят дообучить LLM без настройки инфраструктуры. Нужен базовый Python и понимание что такое fine-tuning. Если сомневаешься нужен ли тебе вообще fine-tuning или достаточно RAG — сначала прочти это.


Почему Mistral API, а не Unsloth?

Смотри, задача звучит одинаково: «хочу дообучить модель на своих данных». Но под ней могут быть два разных сценария.

Сценарий A: у тебя есть время, GPU (или готов платить за Colab), и тебя не пугает Hugging Face. Хочешь максимально бесплатно. → Unsloth.

Сценарий B: тебе нужен быстрый результат, нет желания разбираться с инфраструктурой, и ты готов заплатить за токены. Хочешь, чтобы через час дообученная модель уже отвечала через API. → Mistral Fine-tuning API.

Я оказался в сценарии B: нужно было дообучить модель для конкретного продукта, без setup'а сервера. Потратил $1.4, получил модель через ~40 минут, сразу начал её использовать.

Ключевое отличие от Unsloth: деплой включён. Дообученная модель живёт на серверах Mistral и доступна через обычный /v1/chat/completions с твоим model ID. Не надо ничего хостить.


Что умеет Mistral Fine-tuning API

Mistral la Plateforme поддерживает fine-tuning нескольких моделей. На апрель 2026:

МодельПараметрыЦена обучения (за 1M токенов)
mistral-7b-v0.37B$2
mistral-small-2409~22B$3
open-mistral-nemo12B$2
codestral-240522B$4

Цены проверял на docs.mistral.ai. Дополнительно платишь за инференс дообученной модели — обычно немного дороже базовой.

Что поддерживается:

  • conversational формат (system/user/assistant)
  • supervised fine-tuning (SFT) — подстройка под примеры диалогов
  • hyperparameters: количество эпох, learning rate, случайный seed

Под капотом Mistral использует LoRA — дообучает не всю модель, а небольшие адаптеры. Это дешевле полного fine-tuning и достаточно для большинства задач.


Шаг 1: Готовлю датасет в формате JSONL

Mistral принимает датасет в conversational формате — каждая строка это один JSON-объект с ключом messages.

Минимальный рабочий пример:

jsonl
{"messages": [{"role": "user", "content": "Что такое квантизация модели?"}, {"role": "assistant", "content": "Квантизация — это сжатие весов модели. Вместо float32 используешь int8 или int4. Модель становится в 2-4 раза легче с минимальной потерей качества."}]} {"messages": [{"role": "system", "content": "Ты — технический эксперт по AI. Отвечаешь коротко и конкретно."}, {"role": "user", "content": "Чем LoRA отличается от full fine-tuning?"}, {"role": "assistant", "content": "LoRA обучает только небольшие адаптерные матрицы поверх замороженных весов модели. Full fine-tuning меняет все веса. LoRA быстрее, дешевле, занимает меньше памяти — и обычно достаточно для SFT."}]}

Несколько практических моментов:

Минимум примеров: официально 10, но на практике хорошие результаты начинаются от 50. Для смены стиля ответов мне хватало 80-100 примеров. Для узкодоменных задач (юридический язык, специфические форматы) — от 200.

Качество важнее количества. 50 чистых, разнообразных примеров дадут лучше результат, чем 500 похожих или зашумленных. Я проверяю каждый вручную перед загрузкой — да, это скучно, да, это обязательно.

Длина ответов: если твои ответы сильно разные по длине — нормально. Mistral справляется. Если все одинаково короткие — модель начнёт truncate длинные ответы.

Файл должен называться что-то вроде train.jsonl. Опционально можно добавить валидационный файл val.jsonl (те же 10-20% примеров) — тогда будешь видеть метрики валидации в процессе обучения.


Шаг 2: Загружаю файл через Files API

python
import os from mistralai import Mistral client = Mistral(api_key=os.environ["MISTRAL_API_KEY"]) # Загружаем тренировочный файл with open("train.jsonl", "rb") as f: train_file = client.files.upload( file={ "file_name": "train.jsonl", "content": f, }, purpose="fine-tune" ) print(f"Файл загружен. ID: {train_file.id}") # Опционально: валидационный файл # with open("val.jsonl", "rb") as f: # val_file = client.files.upload( # file={"file_name": "val.jsonl", "content": f}, # purpose="fine-tune" # )

После загрузки получаешь file_id вида "00edaf84-95b0-45db-8f83-f71138491f23" — он нужен для следующего шага.

Если файл не прошёл валидацию (неправильный формат, пустые поля, битый JSON), upload вернёт ошибку. Самые частые: пустое поле content в одном из примеров, или перепутанные роли (assistant вместо user).


Шаг 3: Запускаю fine-tuning job

python
# Запускаем обучение job = client.fine_tuning.jobs.create( model="open-mistral-nemo", # базовая модель training_files=[{"file_id": train_file.id, "weight": 1}], # validation_files=[{"file_id": val_file.id}], # если есть hyperparameters={ "training_steps": 100, # шагов обучения (или epochs) "learning_rate": 0.0001, # начальный LR, по умолчанию подойдёт }, suffix="my-assistant-v1", # суффикс для имени модели integrations=[ { "type": "wandb", # опционально: логи в W&B "project": "mistral-ft" } ] if False else None # уберите if False чтобы включить ) print(f"Job запущен. ID: {job.id}") print(f"Статус: {job.status}")

Параметры, которые меняю чаще всего:

  • training_steps: 50-200 для небольших датасетов. Если видишь переобучение (train loss падает, val loss растёт) — уменьши.
  • learning_rate: по умолчанию ~0.0001, обычно трогать не нужно.
  • suffix: будет добавлен к имени дообученной модели, чтобы ты понял что это.

Job запускается асинхронно. Получаешь ID и дальше следишь за статусом.


Шаг 4: Отслеживаю процесс и забираю модель

python
import time def wait_for_job(client, job_id: str, poll_interval: int = 60): """Ждём завершения job, выводим статус каждую минуту.""" while True: job = client.fine_tuning.jobs.retrieve(job_id) print(f"Статус: {job.status} | Шаг: {job.trained_tokens or 0} токенов") if job.status in ("SUCCESS", "FAILED", "CANCELLED"): return job time.sleep(poll_interval) # Ждём завершения finished_job = wait_for_job(client, job.id) if finished_job.status == "SUCCESS": fine_tuned_model = finished_job.fine_tuned_model print(f"\n✅ Готово! Модель: {fine_tuned_model}") print("Используй это имя в параметре model при запросах") else: print(f"\n❌ Ошибка: {finished_job.status}")

На open-mistral-nemo с датасетом ~100 примеров, 100 шагов — у меня заняло около 35 минут. Mistral посылает email когда job завершился.

После завершения — сразу можно использовать:

python
# Тестируем дообученную модель response = client.chat.complete( model=fine_tuned_model, # "open-mistral-nemo-my-assistant-v1-..." messages=[ {"role": "user", "content": "Объясни что такое attention mechanism"} ] ) print(response.choices[0].message.content)

Разница в ответах — если датасет был хорошим — чувствуется сразу. Модель начинает отвечать в том стиле и с той терминологией, которую ты показал в примерах.


Сколько это стоит: считаю реальный чек

Mistral берёт деньги за токены обучения. Формула простая:

стоимость = (токены в датасете) × (эпохи) × (цена за 1M токенов)

Пример: датасет 100 примеров, ~500 токенов на пример, 3 эпохи, модель open-mistral-nemo:

100 × 500 × 3 = 150,000 токенов обучения 150,000 / 1,000,000 × $2 = $0.30

Добавь плату за хранение файлов и инференс — итого мои типичные job'ы выходят $0.30 - $1.50.

Для сравнения:

ПодходСтоимостьИнфраструктураДеплой
Unsloth (Colab бесплатный)$0GPU нуженСам
Unsloth (Colab Pro)$10-12/месяцGPU включёнСам
Mistral Fine-tuning API$0.30-2 за jobНетВключён
OpenAI Fine-tuning API$0.80-8 за jobНетВключён

OpenAI дороже в 2-4 раза за те же токены. Плюс у Mistral есть открытые модели (Mistral 7B, Nemo) — что важно, если проект требует воспроизводимости.

Когда API окупается: если ценишь своё время дороже $1-2, не хочешь разбираться с хостингом и нужен быстрый запуск. Unsloth бесплатен, но «бесплатный» значит «платишь своим временем».


Mistral vs Unsloth: когда платить, а когда бесплатно

КритерийUnslothMistral API
СтоимостьБесплатно (нужен GPU)$0.30-2 за job
Нужен GPUДа (Colab T4 минимум)Нет
ДеплойСам настраиваешьВключён в стоимость
Скорость старта30-60 мин на setup5 минут
Контроль гиперпараметровПолныйБазовый
Размер моделейДо 70B (с квантизацией)7B-22B
Приватность данныхЛокальноДанные уходят в облако

Если работаешь с чувствительными данными — это важный пункт. Mistral обрабатывает твой датасет на своих серверах. Для большинства задач это нормально, но для медицинских или юридических данных — используй локальный Unsloth.

Подробнее про Unsloth и дообучение без кода — в отдельной статье.


FAQ

Сколько стоит fine-tuning через Mistral API?

Зависит от размера датасета и модели. Ориентир: $0.30-1.50 за типичный job (100-300 примеров, модель Nemo или 7B, 3-5 эпох). Точные цены — на docs.mistral.ai/capabilities/fine-tuning.

Какие модели Mistral можно дообучить?

На апрель 2026: mistral-7b-v0.3, open-mistral-nemo, mistral-small-2409 и codestral-2405. Полный актуальный список — в документации.

Какой формат датасета нужен для Mistral fine-tuning?

JSONL (JSON Lines): каждая строка — отдельный JSON с ключом messages. Формат совпадает с OpenAI fine-tuning. Каждый messages — список объектов с ролями system, user, assistant.

Чем Mistral fine-tuning отличается от OpenAI fine-tuning?

Технически похожи: оба SFT через API, оба используют JSONL-датасет. Mistral дешевле в 2-4 раза и предоставляет открытые базовые модели. Минус — меньше встроенных инструментов (нет автоматической оценки результатов как у OpenAI).

Можно ли дообучить Mistral бесплатно?

Через официальный API — нет. Бесплатный вариант: Unsloth локально или на Colab. Это сложнее, зато полный контроль и без ограничений на данные. Подробнее — в гайде по Unsloth.