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

Техника дистилляции знаний: когда учитель учит ученика

Направления 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) — перенос знаний от громоздкого «учителя» к компактному «ученику». Это не просто 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.

Стратегия:

  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 часов. Затраты на сбор данных окупаются за первую неделю эксплуатации.

Результаты:

  • 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 и гарантируют результат.