Дотонування мовних моделей Mistral
Mistral AI випускає як моделі з відкритим кодом (Mistral 7B, Mixtral 8x7B, Mixtral 8x22B), так і закриті моделі (Mistral Large, Mistral Small) доступні через API. Дотонування доступне двома шляхами: через La Plateforme (офіційний сервіс Mistral) для закритих моделей та через self-hosted тренування для відкритих ваг. Mistral 7B — одна з найпопулярніших базових моделей для дотонування LoRA завдяки відмінному співвідношенню якості до розміру.
Сімейство моделей Mistral для дотонування
| Модель | Тип | Доступ до ваг | Дотонування |
|---|---|---|---|
| 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 |
Дотонування через La Plateforme
Mistral надає керований дотонування через 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):
{"messages": [{"role": "user", "content": "..."}, {"role": "assistant", "content": "..."}]}
Архітектурна особливість Mixtral: Mixture of Experts
Mixtral 8x7B використовує архітектуру MoE: 8 "експертів" (окремих MLP), з яких активуються тільки 2 для кожного токену. Це забезпечує якість порівнянну з моделями 40B+ з вимогами до VRAM ~48GB (fp16) та швидкістю логічного висновку моделі 7B.
Для дотонування LoRA 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
],
task_type="CAUSAL_LM"
)
Включення w1/w2/w3 (ваги експертів) у LoRA забезпечує значне покращення якості для завдань, специфічних для домену, але збільшує треновані параметри.
Self-Hosted дотонування Mistral 7B: покроково
Типовий стек для дотонування виробництва: 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"])
)
Практичний випадок: класифікатор електронної комерції на Mistral 7B
Завдання: класифікувати описи товарів у 340 категорій каталогу (ієрархічна, 3 рівні). Раніше використовувався еврістичний класифікатор з точністю 61%.
Набір даних: 18,000 прикладів (назва товару + опис → шлях ієрархії категорій).
Тренування: Mistral 7B Instruct v0.3, QLoRA (r=32), 3 епохи, один A100 40GB, 2.5 години.
Результати:
- Top-1 точність: 61% → 88%
- Top-3 точність: 79% → 97%
- Затримка p50: 340ms (vLLM, batching)
- Вартість проти La Plateforme API: -73% при 500K запитів/місяць
Коли вибирати Mistral проти Llama проти GPT-4o для дотонування
Mistral 7B — оптимальна при потребі в рівновазі якості та швидкості, один GPU, завдання класифікації або видалення даних помірної складності.
Mixtral 8x7B — коли 7B не має достатньої якості, але 70B занадто дорогий при логічному висновку; хорошо для генерування та складного reasoning.
Llama 3.1 70B — максимальна якість серед моделей з відкритим кодом, коли потрібно конкурувати з рівнем GPT-4.
Дотонування GPT-4o — при відсутності GPU-інфраструктури, дані не конфіденційні, середній обсяг логічного висновку.
Графік проекту
- Підготовка даних: 2–5 тижнів
- Тренування та ітерації (Mistral 7B, A100): 1–3 дні усього
- Тренування (Mixtral 8x7B, 2×A100): 3–7 днів усього
- Оцінка, налаштування, розгортання: 1–2 тижні
- Усього: 4–9 тижнів







