⚙️ Метод
На префилле имеем дело с тяжёлыми матричными умножениями, поэтому для ускорения целесообразно квантизовать и веса, и активации. На декоде — только веса, ибо упираемся всё равно в скорость работы памяти. Сжатие активаций вносит дополнительную ошибку, и если оно нам ничего не даёт, то лучше его убрать.
Задачи можно разделить на:
- 🔢 decode-heavy — когда генерируется длинный ответ, цепочки рассуждений и тому подобное;
- 📚 prefill-heavy — объёмный вход, но короткий ответ.
Можно ожидать, что в первом случае важнее сохранить точность на этапе декода, а во втором — на префилле. И действительно, оказывается, что при прогоне более интенсивного этапа в более низкой точности (а другого — в bf16, скажем) качество просаживается заметно сильнее, чем если делать наоборот. Сжатие и на префилле, и на декоде (в NVFP4) ожидаемо даёт ещё большую ошибку.
Format disaggregated quantization предлагает следующее. Исходно у нас есть квантизованные веса в какой-то точности (NVFP4, LUT-3bit, LUT-2bit). На префилле переквантовываем веса в NVFP4 (для LUT-форматов) и используем эффективные GEMM для FP4. На декоде — weight-only квантизация.
LUT* — lookup table
🔬 FULLY-DISAGGREGATED QUANTIZATION
Чтобы улучшить качество, предлагается дообучать специализированные квантизованные модели под префилл и декод.
Делается это следующим образом:
- 🔹 Промпт прогоняем через prefill-модель, а ответ — через decode-модель. Каждая из экспертных моделей инициализируется весами исходной модели.
- 🔹 Лосс считаем только по токенам ответа, но градиент через KV протечёт и в prefill-модель, позволяя оптимизировать и качество префилла.
- 🔹 Prefill- и decode-модели учатся через QAD (Quantization Aware Distillation) — через KL между логитами квантизованных моделей и исходной модели.
Это позволяет немного поднять качество.
💽 OFFLOADED DISAGGREGATED PREFILL
Чтобы не грузить две модели в памяти, префилльные блоки можно подгружать по очереди, набирая KV-кэш, а затем сгружать обратно на диск. Если префилл и генерация достаточно долгие, то замедление от перекачки весов с SSD в VRAM не сильно замедляет инференс, зато позволяет экономить память ускорителя вычислений.
🛠️ Prefillers
А ещё можно обучать специальный NVFP4-префиллер под заданную замороженную квантизованную модель, дабы заранее компенсировать ошибку квантования.
📊 Эксперименты
Метод валидируют на семействах Qwen3 / Gemma3. В качестве decode-heavy задач рассматриваются всякие математические задачи (AIME, MATH500), а для prefill-heavy — long-context-бенчмарки из RULER.
Format disaggregation консистентно даёт лучшее качество, чем наивная weight + activation-квантизация, при примерно той же скорости как префилла, так и декода. Full disaggregation даёт некоторое улучшение качества, а оффлоадинг позволяет сэкономить VRAM.
Для больших моделей (Qwen3.8-2.4T, Kimi-K3) дезагрегация в W4A4 даёт небольшой, но всё же прирост качества.
Обучение префиллеров для разных GGUF-квантов Qwen3.8-27B позволяет при той же скорости инференса на декоде заметно поднять качество, особенно в случае сильного сжатия, как IQ1_S и IQ1_M.
✅ Выводы
Результат важный и практически интересный. Как будто то, к чему стоит стремиться всем инференс-провайдерам, балансирующим между качеством и скоростью.
Post #847
671
- ❤ 4
- 👍 2