Техніка дистиляції знань: коли вчитель навчає учня
У нашій практиці частий запит — знизити вартість інференсу великих мовних моделей (GPT-4o, Claude 3.5) без драматичної втрати якості. Ми застосовуємо Knowledge Distillation (KD) — перенесення знань від громіздкого «вчителя» до компактного «учня». При дистиляції знань (knowledge distillation) student model навчається на м'яких мітках — розподілі ймовірностей teacher model по всьому словнику, що несе в 10–100 разів більше інформації, ніж одна правильна відповідь. Дистиляція у 10 разів краща за fine-tuning за співвідношенням ціна/якість.
Вигода очевидна: при кратній економії на інференсі якість зберігається на 85–95%. Наша команда має понад 30 успішних проєктів з дистиляції та 5 років досвіду у стисненні нейромереж. Замовте консультацію — ми оцінимо ваш проєкт і підберемо оптимальну стратегію стиснення.
Основні методи дистиляції для LLM
Black-box дистиляція (Response Distillation) використовує лише фінальні відповіді teacher. Учитель — чорний ящик (наприклад, GPT-4o API). Student model навчається на датасеті, де labels — виходи teacher. Докладніше про Knowledge Distillation можна прочитати у Wikipedia.
# Збір даних від teacher (GPT-4o) def collect_teacher_outputs(prompts: list[str], client) -> list[dict]: dataset = [] for prompt in prompts: teacher_response = client.chat.completions.create( model="gpt-4o", messages=[{"role": "user", "content": prompt}], temperature=0.3 ).choices[0].message.content dataset.append({"prompt": prompt, "response": teacher_response}) return dataset # Student (Llama 3.1 8B) навчається на відповідях GPT-4o через SFT White-box дистиляція (Feature/Logit Distillation) — доступ до логітів teacher. Дозволяє навчати на м'яких мітках, що більш інформативно на рівні токенів.
import torch import torch.nn.functional as F def distillation_loss( student_logits, # [batch, seq_len, vocab_size] teacher_logits, # [batch, seq_len, vocab_size] labels, # [batch, seq_len] temperature: float = 4.0, alpha: float = 0.5 # баланс SFT та KD loss ) -> torch.Tensor: """ Комбінований loss: alpha*KD + (1-alpha)*SFT temperature згладжує розподіл teacher """ # KD loss на м'яких мітках soft_teacher = F.softmax(teacher_logits / temperature, dim=-1) soft_student = F.log_softmax(student_logits / temperature, dim=-1) kd_loss = F.kl_div(soft_student, soft_teacher, reduction="batchmean") * (temperature ** 2) # SFT loss на hard labels sft_loss = F.cross_entropy( student_logits.view(-1, student_logits.size(-1)), labels.view(-1), ignore_index=-100 ) return alpha * kd_loss + (1 - alpha) * sft_loss Sequence-level KD (SeqKD) — student навчається на найкращих згенерованих послідовностях teacher (beam search). Простіше реалізується при black-box доступі.
DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning — приклад промислової дистиляції.
Вибір методу дистиляції
| Критерій | Black-box KD | White-box KD | SeqKD |
|---|---|---|---|
| Доступ до teacher | API (немає логітів) | Локальна модель (є логіти) | API або локально |
| Інформативність | Середня (тільки відповіді) | Висока (розподіл) | Висока (послідовності) |
| Складність реалізації | Низька | Середня | Середня |
| Застосування | Спеціалізація під домен | General distillation | Генерація тексту |
Чому дистиляція краща за fine-tuning?
Fine-tuning на вихідних даних потребує великої вибірки і не дає компактній моделі знань про «срібні» відповіді. KD же передає teacher-розподіл, що особливо ефективно для вузьких доменів. При цьому student успадковує не лише відповіді, але й структуру міркувань teacher — chain-of-thought, яку складно відтворити звичайним SFT. Дистиляція в 10 разів дешевша за fine-tuning при аналогічній якості для спеціалізованих завдань.
DeepSeek-R1 Distill: приклад промислової дистиляції
Один з яскравих прикладів — дистиляція DeepSeek-R1 (671B, MoE) у серію щільних моделей:
- DeepSeek-R1-Distill-Qwen-32B: 32B параметрів, ~85% reasoning-здібностей R1
- DeepSeek-R1-Distill-Llama-70B: 70B параметрів, ~92% від R1
- DeepSeek-R1-Distill-Llama-8B: 8B параметрів, ~70% від R1
Процес: teacher (R1) генерує 800K прикладів з CoT-міркуваннями; student навчається через стандартний SFT. Результат — моделі, які на порядок дешевші в інференсі. DeepSeek-R1-Distill-Llama-8B зберігає 70% якості teacher при вартості інференсу в 10 разів нижчій.
Практичний кейс: дистиляція корпоративного асистента
Із нашої практики: наш клієнт використовував fine-tuned GPT-4o для аналізу договорів. Вартість інференсу становила $5000 на місяць. Потрібно було знизити її в 10 разів без втрати якості нижче 90% від рівня GPT-4o.
Стратегія:
- Зібрати 12 000 запитів з продакшн-логів
- Прогнати через GPT-4o — отримати teacher responses
- Fine-tune Llama 3.1 8B на цих даних (SFT дистиляція)
- Додатково застосувати DPO з preferred=GPT-4o відповідями, rejected=Llama baseline
Інфраструктура: збір даних через OpenAI API, навчання на A100 40GB — 6 годин. Витрати на збір даних ($200) окупаються за перший тиждень експлуатації.
Результати:
- Quality retention vs GPT-4o (LLM-judge): 91%
- Latency p95: скоротилася в 4+ рази (self-hosted vLLM) — student (Llama 8B) працює в 4 рази швидше за teacher (GPT-4o)
- Вартість інференсу: знизилася до $500 на місяць (економія $4500/міс.)
Докладніше про налаштування навчання
Для навчання використовували LoRA (rank=64) та AdamW з lr=2e-4. Batch size 32, gradient accumulation steps 4. Всього 3 епохи. Для генерації даних від teacher брали temperature=0.3, top_p=0.9.
Що входить в роботу з дистиляції?
- Аналіз поточної моделі та цільових метрик якості
- Збір та підготовка датасету дистиляції (з учителя або з логів)
- Навчання student (вибір архітектури, налаштування гіперпараметрів)
- Тестування та валідація (LLM-judge, метрики точності, latency p99)
- Оптимізація інференсу (quantization, vLLM, ONNX Runtime)
- Документація та навчання вашої команди роботі з моделлю
Ми гарантуємо, що фінальна модель не втратить більше 10% якості за ключовими метриками, а вартість інференсу знизиться кратно. Орієнтовна вартість проєкту дистиляції для моделі 8B — від $5,000 до $15,000. Отримайте консультацію — ми розрахуємо точні терміни та вартість під вашу задачу.
Які обмеження має дистиляція?
- Student не може перевершити teacher, максимум наближається
- Залежність від teacher: якщо teacher помиляється, student успадковує помилки
- Вузький домен: black-box KD добре працює для specialization, погано — для general capability
- Розмірний розрив: дистиляція 405B → 8B втрачає більше, ніж 70B → 8B
Оптимальні значення temperature
Temperature T в KD loss визначає «м'якість» розподілу teacher. Емпіричне правило: T=3–5 для більшості задач, підбирається емпірично.
| T | Ефект |
|---|---|
| T=1 | Оригінальні ймовірності (різкі) |
| T=2–4 | Згладжені — student краще бачить «срібні відповіді» |
| T=5–10 | Дуже м'які — для маленьких student з обмеженою ємністю |
Терміни
- Збір даних від teacher: 1–3 дні
- Підготовка датасету дистиляції: 1–2 тижні
- Навчання student (8B, SFT): 3–10 годин
- Оцінка vs teacher: 3–5 днів
- Разом: 3–6 тижнів
Замовте консультацію — ми оцінимо ваш проєкт і підберемо оптимальний метод дистиляції. Наші інженери мають досвід роботи з моделями від 7B до 405B та гарантують результат.







