Техника дистилляции знаний: когда учитель учит ученика
В нашей практике частый запрос — снизить стоимость инференса больших языковых моделей (GPT-4o, Claude 3.5) без драматической потери качества. Мы применяем Knowledge Distillation (KD) — перенос знаний от громоздкого «учителя» к компактному «ученику». Это не просто fine-tuning: student обучается на мягких метках — распределении вероятностей teacher по всему словарю, что несёт в 10–100 раз больше информации, чем один правильный ответ.
Выгода очевидна: при кратной экономии на инференсе качество сохраняется на 85–95%. Закажите консультацию — мы оценим ваш проект и подберём оптимальную стратегию сжатия. Наша команда имеет более 30 успешных проектов по дистилляции для задач от QA-систем до анализа договоров.
Основные методы дистилляции для LLM
Black-box дистилляция (Response Distillation) использует только финальные ответы teacher. Учитель — чёрный ящик (например, GPT-4o API). Student обучается на датасете, где 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.
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. Результат — модели, которые на порядок дешевле в инференсе.
Практический кейс: дистилляция корпоративного ассистента
Задача: у клиента работал fine-tuned GPT-4o для анализа договоров. Стоимость инференса составляла значительную сумму в месяц. Требовалось снизить её в 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 часов. Затраты на сбор данных окупаются за первую неделю эксплуатации.
Результаты:
- Quality retention vs GPT-4o (LLM-judge): 91%
- Latency p95: сократилась в 4+ раза (self-hosted vLLM)
- Стоимость инференса: снизилась кратно, экономия до 90% от первоначальных затрат
Подробнее о настройке обучения
Для обучения использовали 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% качества по ключевым метрикам, а стоимость инференса снизится кратно. Получите консультацию — мы рассчитаем точные сроки и стоимость под вашу задачу.
Ограничения дистилляции
- 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 и гарантируют результат.







