
Почему дистилляция спасла мой отпуск
Когда я уходил в долгожданный отпуск, моя система мониторинга проектов на основе больших языковых моделей была прожорливой и медленной. Она требовала постоянного подключения к облачным API, тратила мегабайты трафика и обходилась недёшево. После двух недель отпуска я понял: нужно обучить компактную версию, которая работает локально. Так я впервые серьёзно занялся дистилляцией моделей.
Эта третья часть цикла статей рассказывает о том, как я сжал работающую LLM в 50 раз меньшую модель, не потеряв в качестве анализа логов и статус-отчётов.
Что такое дистилляция и зачем она нужна
Дистилляция — это процесс обучения меньшей модели (студента) воспроизводить поведение большей модели (учителя). Это не просто урезание нейронных сетей, а целенаправленный перенос знаний.
В контексте моей задачи я использовал полноценную GPT-подобную модель для анализа текстовых отчётов о состоянии проектов. Она работала в облаке, стоила деньги за каждый запрос и требовала интернета. После дистилляции я получил модель размером 2-3 ГБ, которая работает на обычном ноутбуке и анализирует данные за миллисекунды без облака.
Практические преимущества дистилляции в DevOps
- Снижение задержек: локальное выполнение против сетевых запросов
- Экономия затрат: отсутствие API-платежей
- Конфиденциальность: данные проектов остаются внутри инфраструктуры
- Надёжность: работает без интернета и сервисов третьих лиц
- Контроль версий: воспроизводимость результатов
Мой процесс дистилляции: пошаговый подход
Этап 1: подготовка датасета
Первое и критически важное — собрать репрезентативный датасет. Я использовал историю своих проектов:
- Логи ошибок с соответствующими тегами важности
- Отчёты о проблемах и их разрешение
- Примеры автоматического анализа (выполненные учителем-моделью)
- Примеры неправильных классификаций (для балансировки)
Собрал около 5000 примеров. Это казалось мало, но для дистилляции этого хватает — не нужно обучаться с нуля, а только копировать поведение.
Этап 2: сбор «мягких целей» от учителя
Вместо жёстких меток (критично/важно/информационно) я использовал вероятностные распределения от большой модели. Ключ к успеху в дистилляции — это не только ответ, но и уверенность модели.
Пример: вместо метки «критично», учитель выдал распределение: критично (0.85), важно (0.12), информационно (0.03). Это помогло студенту учиться не только правильным ответам, но и правильной неуверенности.
Этап 3: выбор архитектуры студента
Я экспериментировал с несколькими вариантами:
- DistilBERT — уже готовое сжатие BERT на 40%, хороший старт
- TinyBERT — ещё компактнее, для узких задач
- MobileBERT — оптимизация для мобильных устройств
Для моего случая выбрал промежуточный вариант — модель размером около 90 млн параметров (учитель имел ~7 млрд).
Этап 4: обучение с температурой
Это самая интересная часть. При обычном обучении модель учится на жёстких целях. При дистилляции используется температура софтмакса — параметр, который размягчает вероятностные распределения.
При температуре выше 1 модель получает больше информации о том, почему учитель отклонил неправильные ответы. Я использовал температуру 4-5 для обучения студента видеть нюансы, которые видит учитель.
Формула потерь объединяла две части:
- KL-дивергенция между распределениями (дистилляция)
- Кроссэнтропия на жёстких метках (стабильность)
Весовой коэффициент дистилляции я установил 0.7 к 0.3 для обычного обучения — студент в основном копирует учителя, но учится от жёстких фактов.
Реальные результаты и метрики
После двух недель обучения на GPU:
- Точность анализа: 94% (вместо 96% у учителя) — потеря всего 2%
- Скорость: 120 мс вместо 2000 мс (облачный API) — ускорение в 17 раз
- Размер модели: 2.1 ГБ вместо 45 ГБ
- Потребление памяти: 4 ГБ RAM против 24 ГБ
Самое интересное — малые ошибки студента были другие, чем у учителя. Это означает, что дистилляция создала не просто копию, а компактный способ решения задачи. На практике это обнаружилось при обработке экзотических логов, которых не было в обучающем наборе.
Практические советы для DevOps
Применение дистилляции в ваших проектах
Проверьте готовность: Убедитесь, что текущая модель работает хорошо. Дистилляция не исправляет неправильный учитель — она копирует его поведение.
Соберите данные: Начните с 1000-2000 примеров из вашей истории. Это часто больше, чем нужно для дистилляции.
Выберите метрику: Определите, что критично: скорость, точность или размер. Это влияет на выбор студента и параметров обучения.
Тестируйте на реальных данных: Всегда проверяйте на свежих логах и отчётах, которые не видела модель.
Помните о переобучении: Компактная модель быстро переучивается на малых датасетах. Используйте валидационный набор и ранню остановку.
Лёгкая интеграция в CI/CD
После успешной дистилляции модель встроилась в наш pipeline просто:
- Модель загружается при старте контейнера (4 ГБ на диск, быстрая загрузка)
- Каждый новый лог проходит локальный анализ без задержек
- Результаты складываются в локальную БД с фаллбеком на облако для неуверенных случаев
Гибридный подход: студент обрабатывает 95% случаев, учитель остаётся для экзотических ситуаций и переобучения модели раз в месяц.
Заключение: дистилляция как инвестиция
Дистилляция моделей — это не волшебство, но близко к тому. Потратив неделю на подготовку и обучение, я получил систему, которая работает независимо, быстрее и дешевле. Главное — начать с задачи, где учитель уже работает хорошо, собрать реальные данные и не бояться экспериментировать с параметрами.
Теперь мой отпуск действительно спокойный. Мониторинг работает локально, обновляется автоматически, и я уверен в качестве анализа. А когда я вернусь, смогу переобучить модель на новых данных за несколько часов — всего на одном GPU вместо облачного кластера.
morfix.ru