Стиснення великих мовних моделей: дистиляція знань

Техніка дистиляції знань: коли вчитель навчає учня

Напрямки AI-розробки

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1414
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    982
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1241
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    697
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983

Техніка дистиляції знань: коли вчитель навчає учня

У нашій практиці частий запит — знизити вартість інференсу великих мовних моделей (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.

Стратегія:

  1. Зібрати 12 000 запитів з продакшн-логів
  2. Прогнати через GPT-4o — отримати teacher responses
  3. Fine-tune Llama 3.1 8B на цих даних (SFT дистиляція)
  4. Додатково застосувати 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 та гарантують результат.