Дообучение (Fine-Tuning) языковой модели Mistral
Mistral AI выпускает как открытые модели (Mistral 7B, Mixtral 8x7B, Mixtral 8x22B), так и закрытые (Mistral Large, Mistral Small) с доступом через API. Fine-tuning доступен двумя путями: через La Plateforme (официальный сервис Mistral) для закрытых моделей, и через self-hosted обучение для открытых весов. Mistral 7B — одна из самых популярных базовых моделей для LoRA-дообучения благодаря высокому соотношению качества к размеру.
Семейство моделей Mistral для fine-tuning
| Модель | Тип | Доступ к весам | Fine-tuning |
|---|---|---|---|
| Mistral 7B v0.3 | Открытая | Да | Self-hosted, LoRA/Full |
| Mixtral 8x7B | Открытая (MoE) | Да | Self-hosted, LoRA |
| Mixtral 8x22B | Открытая (MoE) | Да | Self-hosted, многоGPU |
| Mistral Small | Закрытая | Нет | La Plateforme API |
| Mistral Large | Закрытая | Нет | La Plateforme API |
| Codestral | Закрытая | Нет | La Plateforme API |
Fine-tuning через La Plateforme
Mistral предоставляет управляемый fine-tuning через API с минимальным порогом входа:
from mistralai import Mistral
client = Mistral(api_key="...")
# Загрузка датасета
with open("train.jsonl", "rb") as f:
response = client.files.upload(file=("train.jsonl", f, "application/json"))
file_id = response.id
# Создание джоба
job = client.fine_tuning.jobs.create(
model="open-mistral-7b",
training_files=[{"file_id": file_id, "weight": 1}],
hyperparameters={
"training_steps": 1000,
"learning_rate": 0.0001
}
)
Формат данных для La Plateforme — JSONL с полями messages (аналогично OpenAI Chat format):
{"messages": [{"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]}
Архитектурная особенность Mixtral: Mixture of Experts
Mixtral 8x7B использует MoE-архитектуру: 8 «экспертов» (отдельных MLP), из которых для каждого токена активируются только 2. Это даёт качество сопоставимое с 40B+ моделью при VRAM-требованиях ~48GB (fp16) и скорости inference 7B модели.
При LoRA fine-tuning Mixtral важно выбрать правильные target_modules. В MoE-слоях есть специфические параметры:
lora_config = LoraConfig(
r=16,
lora_alpha=32,
# Для Mixtral включаем MoE-специфичные слои
target_modules=[
"q_proj", "v_proj", "k_proj", "o_proj",
"w1", "w2", "w3" # MoE expert weights
],
task_type="CAUSAL_LM"
)
Включение w1/w2/w3 (веса экспертов) в LoRA даёт существенный прирост качества для domain-specific задач, но увеличивает число обучаемых параметров.
Self-hosted fine-tuning Mistral 7B: пошаговый разбор
Типичный стек для продакшн fine-tuning: transformers + trl + peft + bitsandbytes + Weights & Biases для мониторинга.
from trl import SFTTrainer, SFTConfig
from peft import LoraConfig
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.bfloat16,
)
model = AutoModelForCausalLM.from_pretrained(
"mistralai/Mistral-7B-Instruct-v0.3",
quantization_config=bnb_config,
device_map="auto"
)
# Mistral использует sliding window attention
# context_length лучше ограничить до 4096 при QLoRA
trainer = SFTTrainer(
model=model,
args=SFTConfig(
max_seq_length=4096,
num_train_epochs=4,
per_device_train_batch_size=2,
gradient_accumulation_steps=8,
warmup_ratio=0.1,
lr_scheduler_type="cosine",
learning_rate=2e-4,
bf16=True,
report_to="wandb",
),
train_dataset=train_dataset,
peft_config=LoraConfig(r=16, lora_alpha=32, target_modules=["q_proj","v_proj"])
)
Практический кейс: e-commerce классификатор на Mistral 7B
Задача: классификация товарных описаний по 340 категориям каталога (иерархическая, 3 уровня). До этого использовался эвристический классификатор с accuracy 61%.
Датасет: 18 000 примеров (название + описание товара → путь в иерархии категорий).
Обучение: Mistral 7B Instruct v0.3, QLoRA (r=32), 3 эпохи, одна A100 40GB, 2.5 часа.
Результаты:
- Top-1 accuracy: 61% → 88%
- Top-3 accuracy: 79% → 97%
- Latency p50: 340мс (vLLM, batching)
- Стоимость vs La Plateforme API: -73% при объёме 500K запросов/месяц
Когда выбирать Mistral vs Llama vs GPT-4o для fine-tuning
Mistral 7B — оптимален, когда нужен баланс качества и скорости, один GPU, задачи классификации или извлечения данных умеренной сложности.
Mixtral 8x7B — когда 7B не хватает качества, но 70B слишком дорог в инференсе; хорош для генерации и сложного reasoning.
Llama 3.1 70B — максимальное качество среди открытых, когда нужно конкурировать с GPT-4 уровнем.
GPT-4o fine-tuning — когда нет GPU-инфраструктуры, данные не конфиденциальны, объём инференса средний.
Сроки проекта
- Подготовка данных: 2–5 недель
- Обучение и итерации (Mistral 7B, A100): 1–3 дня суммарно
- Обучение (Mixtral 8x7B, 2×A100): 3–7 дней суммарно
- Оценка, тюнинг, деплой: 1–2 недели
- Итого: 4–9 недель







