Квантование (GPTQ, AWQ)
Тема дорожной карты · Большие языковые модели (LLM)
Квантизация — это метод сжатия весов модели, активаций и KV-кеша, который позволяет уместить более крупные модели на меньшие GPU, а также ускоряет memory-bound декодирование. Этот метод особенно полезен для задач, где требуется высокая производительность и ограниченные ресурсы. Квантизация помогает снизить требования к памяти, что делает модели доступными для использования на устройствах с меньшей мощностью.
Как это работает
Квантизация (GPTQ, AWQ) преобразует веса модели с FP16/BF16 до INT8, INT4 или FP8, что обеспечивает экономию памяти в 4 раза, при этом сохраняя минимальную потерю качества. Методы квантизации, такие как GPTQ и AWQ, калибруются на небольшом датасете, что позволяет эффективно сжимать модели без значительного ухудшения их производительности.
Кроме того, используются различные стратегии управления памятью, такие как PagedAttention в vLLM, которые помогают эффективно управлять KV-кешем. Предсказательное декодирование, где маленькая модель предлагает результаты, а большая модель верифицирует их, позволяет достичь значительного увеличения производительности — до 2-3 раза.
Для улучшения производительности также применяются методы непрерывного батчирования, FlashAttention и дистилляции модели, где маленькая модель обучается на основе выводов большой модели. Это позволяет оптимизировать использование памяти и улучшить скорость обработки данных.
Когда применять
Квантизация (GPTQ, AWQ) следует применять везде, где возможно, особенно когда требуется уменьшение потребления VRAM. 4-битная квантизация AWQ/GPTQ обычно теряет менее 2% качества, но при этом сокращает потребление VRAM в 4 раза.
Предсказательное декодирование особенно полезно, когда нагрузка является compute-bound, то есть когда требуется обработка большого количества токенов за секунду на одной и той же GPU. В таких случаях предсказательное декодирование может значительно ускорить процесс.
Кеширование промптов на уровнях приложения и провайдера также помогает улучшить производительность, уменьшая время отклика и уменьшая нагрузку на модель.
Для оптимизации производительности важно профилировать модель до внесения изменений. Это можно сделать с помощью встроенных метрик vLLM, команд nvidia-smi и nvprof, чтобы определить, являются ли предполагаемые узкие места реальными или являются они результатом неправильной настройки.
Типичные ошибки
Типичные ошибки при использовании квантизации включают агрессивное квантизование (Q2/Q3), которое может ухудшить качество модели на сложных задачах. Использование предсказательного декодирования с несоответствующими моделями (draft/target) может привести к снижению производительности.
Также важно учесть, что использование KV-кеша на длинных контекстах может привести к исчерпанию памяти (OOM). Пагинация внимания (PagedAttention) может помочь в этом, но это не панацея и требует тщательного управления.
Наконец, избыточное тюнинг малого процента запросов может привести к снижению производительности для большинства случаев. Важно найти баланс между оптимизацией производительности и сохранением качества модели.