Урок по треку Глубокое обучение 7 мин

Квантование, дистилляция и быстрый инференс за 7 минут

Память модели, fp16 и bf16, квантование int8 и int4, дистилляция знаний, прунинг и ускорение инференса.

Модель должна не только быть точной, но и помещаться в память и отвечать быстро. На собесе ML-инженера спрашивают, сколько памяти нужно модели, как работают квантование и дистилляция и что ограничивает скорость генерации.

Форматы чисел и память

ФорматБайт на параметрОсобенность
fp324эталон обучения
bf162диапазон как у fp32, мантисса 7 бит
fp162точнее bf16, но узкий диапазон
int8, fp81инференс, иногда обучение
int40.5инференс LLM, плюс масштабы групп

Модель на 7 млрд параметров: 14 ГБ в bf16 и около 3.5 ГБ в 4 битах. Для инференса нужна ещё память под KV-кеш и активации.

Квантование

Симметричное int8:

s = max|w| / 127,   q = round(w / s),   w ≈ q·s
  • Масштаб по тензору, каналу или группе: чем мельче группа, тем точнее.
  • Выбросы раздувают масштаб: один вес 100 делает шаг сетки около 0.79, и маленькие веса превращаются в ноль.
  • PTQ квантует готовую модель с калибровкой на небольшой выборке. int8 обычно почти без потерь.
  • QAT имитирует квантование при обучении, градиент проходит через округление по straight-through estimator. Точнее при низкой разрядности, но дороже.
  • Для LLM популярно weight-only квантование в 4 бита методами, которые учитывают влияние ошибки на выход слоя (GPTQ, AWQ и подобные). Активации квантовать сложнее из-за выбросов в отдельных каналах.

Проверяйте качество на своей задаче, особенно рассуждения, код и длинный контекст.

Дистилляция

Маленький ученик учится повторять мягкие вероятности большого учителя:

L = α·T²·KL(softmax(z_t/T) ‖ softmax(z_s/T)) + (1 - α)·CE(y, z_s)
  • Температура T > 1 открывает «тёмные знания»: насколько неверные классы похожи на верный.
  • T² компенсирует уменьшение градиентов.
  • LLM дистиллируют и на текстах, сгенерированных учителем.

Прунинг

  • Неструктурированный: обнулить мелкие веса. Хорошо сжимает хранение, но на GPU почти не ускоряет.
  • Структурированный: удалить каналы, головы, слои. Матрицы становятся меньше, ускорение реальное.
  • Полуструктурированный 2:4: из каждых четырёх весов два нулевые, поддерживается тензорными ядрами новых GPU.

Что ограничивает скорость генерации LLM

Генерация одного токена читает все веса из памяти, а вычислений мало: процесс упирается в пропускную способность памяти. Помогают:

  • батчинг запросов (continuous batching): одно чтение весов на много запросов;
  • квантование весов: меньше байт читать;
  • speculative decoding: маленькая модель предлагает несколько токенов, большая проверяет их за один проход;
  • эффективный KV-кеш (PagedAttention, GQA, квантование кеша).

План ускорения в проде

  1. Измерить: латентность или пропускная способность, где узкое место.
  2. Инженерия инференса: батчинг, компиляция, специализированные рантаймы, кеширование.
  3. bf16, затем int8 или 4 бита.
  4. Дистилляция и структурированный прунинг, если нужно кратное ускорение.
  5. Проверка качества после каждого шага на важных срезах.

Частые ошибки

  • Считать, что неструктурированный прунинг ускоряет инференс.
  • Квантовать по тензору целиком при сильных выбросах.
  • Оценивать сжатую модель только по средней метрике.
  • Путать bf16 и fp16.

Что спросят на собесе

  • Сколько памяти занимает модель на N параметров в разных форматах.
  • Как работает int8-квантование, PTQ против QAT.
  • Что такое дистилляция и зачем температура.
  • Почему генерация LLM упирается в память и как её ускоряют.

Закрепите за 5 минут

После урока в тренажёре 3-5 проверочных вопросов, дальше модуль уходит в повторения.