Дистилляция знаний (Knowledge Distillation) из большой модели в малую

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Дистилляция знаний (Knowledge Distillation) из большой модели в малую
Сложная
от 1 недели до 3 месяцев
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    853
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Дистилляция знаний (Knowledge Distillation) из большой модели в малую

Knowledge Distillation (KD) — техника обучения малой модели (student) с использованием выходов большой модели (teacher) в качестве «мягких меток». Вместо обучения только на правильных ответах (hard labels), student обучается воспроизводить распределение вероятностей teacher'а по всему словарю — это несёт значительно больше информации о структуре задачи.

Типы дистилляции для LLM

Black-box дистилляция (Response Distillation): Используем только финальные ответы teacher модели. Teacher — черный ящик (может быть GPT-4o API). Student обучается на датасете, где labels — выходы teacher.

# Сбор данных от 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. Позволяет обучать student на «мягких метках» — это более информативно.

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 outputs). Проще реализуется при black-box доступе.

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.

Практический кейс: дистилляция корпоративного ассистента

Задача: у клиента работает GPT-4o fine-tuned для анализа договоров (стоимость инференса — $4000/месяц). Нужно снизить стоимость в 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 (~$180 на 12K запросов), обучение на A100 40GB — 6 часов.

Результаты:

  • Quality retention vs GPT-4o (LLM-judge): 91%
  • Latency p95: 4.2с (GPT-4o API) → 0.9с (self-hosted vLLM)
  • Стоимость инференса: $4000/мес → $380/мес (сервер + электричество)

Выбор temperature при дистилляции

Temperature T в KD loss определяет «мягкость» распределения teacher:

T Эффект
T=1 Оригинальные вероятности (резкие)
T=2–4 Сглаженные — student лучше видит «серебряные ответы»
T=5–10 Очень мягкие — для маленьких student с ограниченной ёмкостью

Практика: T=3–5 для большинства задач, подбирается эмпирически.

Ограничения дистилляции

  • Ограничение ёмкости: student не может превзойти teacher, максимум приближается
  • Зависимость от teacher: если teacher ошибается, student наследует ошибки
  • Узкий домен: black-box KD хорошо работает для specialization, плохо — для general capability
  • Размерный разрыв: дистилляция 405B → 8B теряет больше, чем 70B → 8B

Сроки

  • Сбор данных от teacher: 1–3 дня
  • Подготовка датасета дистилляции: 1–2 недели
  • Обучение student (8B, SFT): 3–10 часов
  • Оценка vs teacher: 3–5 дней
  • Итого: 3–6 недель