Выбор между AWQ и GPTQ начинается с готового checkpoint: документация Transformers указывает, что квантованный checkpoint задаёт метод загрузки. Дальше сверяют метод, формат, backend и железо. Ниже — разбор AWQ или GPTQ: как выбрать квантизацию модели по шагам, с учебной матрицей и протоколом проверки качества.
Что общего у AWQ и GPTQ
Оба метода относятся к weight-only post-training quantization: веса сжимаются после обучения. Точность остальных вычислений проверяют для выбранной реализации и настроек. В таблице выбора метода документация Transformers относит AWQ и GPTQ к четырёхбитному диапазону и отмечает, что память сокращается примерно вчетверо относительно bf16, а точность остаётся высокой. Там же сказано, что AWQ и GPTQ часто лидируют по точности среди четырёхбитных методов, и обоим нужна калибровка.
В четырёхбитном примере GPTQ веса хранятся в int4 и восстанавливаются во fp16 внутри fused-ядра при инференсе. Описание AWQ связывает четырёхбитное сжатие с сохранением значимых весов; остальные веса при загрузке по умолчанию получают fp16, а параметр dtype позволяет выбрать другой тип. Настройки конкретного пути загрузки проверяют отдельно.
Практическое следствие общности: обе технологии требуют, чтобы у вас уже был квантованный checkpoint либо чтобы вы его получили своей калибровкой. Документация Transformers помечает AWQ как «pre-quantized only»: загрузка идёт из готового файла. GPTQ там же помечен как метод, работающий «while loading, with calibration»: квантование может происходить в момент загрузки с набором данных. Это первое расхождение в рабочем процессе, и оно определяет, сколько времени вы потратите до первого запуска.
Оба семейства поддерживают сохранение и дообучение по таблице Transformers: у AWQ отмечено сохранение с оговоркой про backend ExLlama и дообучение при gptqmodel версии 5.0.0 и выше, у GPTQ — сохранение и дообучение без оговорок. Разрядность тоже пересекается: GPTQ в таблице покрывает 2, 3, 4 и 8 бит, AWQ — 4 бита.
Различие квантизаторов и calibration
Квантизатор — это алгоритм, который решает, как разложить веса по уровням. В AWQ ставка сделана на активации: документация Transformers описывает метод как activation-aware, то есть чувствительность определяется по активациям, и небольшой набор значимых весов сохраняется. Репозиторий mit-han-lab добавляет, что AWQ ищет масштаб по калибровочным данным и поддерживает INT3 и INT4.
GPTQ решает задачу иначе. Документация Transformers описывает его как метод, где каждая строка матрицы весов квантуется независимо, чтобы найти версию весов с минимальной ошибкой. Репозиторий IST-DASLab показывает, что качество заметно зависит от порядка обработки: флаги act-order и true-sequential исправили слабый результат на модели 7B, подняв Wiki2 PPL с 7.15 до 6.09. Этот результат относится к указанной модели и настройкам GPTQ. Влияние параметров на своей задаче проверяют отдельным сравнением.
Калибровка — второй слой различий. Для GPTQ документация Transformers требует передать датасет и токенизатор в GPTQConfig; в примере используется набор c4, а собственный список строк допустим, хотя рекомендуется брать тот же датасет, что в статье GPTQ. Для AWQ калибровка происходит на этапе получения checkpoint: страница Transformers показывает установку autoawq и загрузку уже готовой модели, а репозиторий mit-han-lab приводит команду AWQ search с сохранением результатов в файл. Разница в том, где стоит калибровка в вашем процессе: у GPTQ она может быть внутри загрузки, у AWQ — на шаге подготовки файла.
Практический вывод для читателя: сравнивать методы по одному слову «4-bit» бессмысленно. Калибровочный набор, порядок обработки столбцов и группировка весов меняют и качество, и совместимость. Фиксируйте эти параметры в карточке эксперимента, иначе сравнение распадётся.
Метод, формат checkpoint и serving backend
Три сущности часто путают, и из-за этого ломается загрузка. Метод — это алгоритм квантования (AWQ или GPTQ). Формат checkpoint — то, как веса и конфиг записаны в файле. Backend — ядро или движок, который исполняет вычисления на вашем железе.
Формат виден в config.json. Документация AWQ показывает, что метод определяется по ключу quant_method со значением awq, а рядом лежат zero_point, group_size 128, bits 4 и version gemm. Документация GPTQ описывает свой конфиг через GPTQConfig с числом бит, датасетом и токенизатором, а backend задаётся отдельным параметром.
Backend — самая подвижная часть. Документация GPTQ называет Marlin четырёхбитным CUDA-ядром, оптимизированным под архитектуру NVIDIA A100 (Ampere), и указывает, что Marlin доступен только для инференса и не выполняет квантование. Для AWQ документация Transformers перечисляет несколько путей: обычная загрузка через from_pretrained, fused-модули для архитектур Llama и Mistral, а также ядра ExLlamaV2 при version=»exllama», которые поддерживаются на AMD GPU.
Отдельно стоит история пакетов. Документация GPTQ сообщает, что AutoGPTQ в Transformers больше не поддерживается и вместо него устанавливают GPT-QModel, форк с более быстрой квантификацией и асимметричной схемой. Для AWQ документация предупреждает: AutoAWQ понижает версию Transformers до 4.47.1, и после установки может понадобиться переустановить Transformers для инференса. Это версионные ограничения конкретных пакетов, и их проверяют на своей среде.
| Слой | AWQ | GPTQ |
|---|---|---|
| Алгоритм | activation-aware, поиск масштаба | построчное квантование с минимизацией ошибки |
| Когда квантуют | заранее, готовый checkpoint | при загрузке с калибровкой либо готовый checkpoint |
| Разрядность в таблице Transformers | 4 бита | 2, 3, 4, 8 бит |
| Backend | GEMM, fused-модули, ExLlamaV2 | ядро по умолчанию, Marlin для 4 бит |
| Пакет | autoawq, llm-awq | gptqmodel, GPT-QModel |
| Железо в таблице Transformers | CUDA, ROCm, XPU, CPU | CUDA, ROCm, XPU, CPU |
Учебная матрица AWQ GEMM и asymmetric GPTQ с Marlin
Разберём две учебные карточки. Это условный вход для тренировки проверки совместимости. Модели редакция не запускала, и ни одна строка не объявляется готовой к развёртыванию.
Строка A: AWQ, bits=4, group_size=128, version=GEMM. Эти поля согласованы с примером AWQ config в документации Transformers. Согласованность карточки означает, что поля записаны в том же виде, что в документации. Совместимость GPU, модели и runtime проверяется отдельно, поэтому строка A получает статус «проверить дальше».
Строка B: GPTQ, 4 бита, асимметричная квантизация, запрошен backend Marlin. Здесь срабатывает ограничение: документация GPTQ указывает, что не все ядра поддерживают асимметричную квантизацию и Marlin в их числе. Результат B — BLOCK. Следующий шаг: взять другой поддерживаемый backend либо подходящий симметричный checkpoint, затем заново проверить модель и железо.
Карточка A (учебная)
method: awq
bits: 4
group_size: 128
version: gemm
статус: поля согласованы с примером конфига; GPU, модель и runtime проверить
Карточка B (учебная)
method: gptq
bits: 4
quantization: asymmetric
backend: marlin
статус: BLOCK — Marlin не поддерживает asymmetric GPTQ
следующий шаг: другой backend или symmetric checkpoint, затем модель и железо
Смысл упражнения в том, что метод и backend нельзя подменять одним словом «4-bit». Две карточки выглядят одинаково по разрядности и расходятся по совместимости. Тот же принцип работает и в реальной загрузке: сначала читаете конфиг, потом сверяете backend с железом, и только затем запускаете модель.
Остальная совместимость модели и GPU
Кроме метода и backend есть четыре слоя, которые ломают запуск. Первый — архитектура модели. Документация AWQ отмечает, что fused-модули поддерживаются из коробки для Llama и Mistral, а для других архитектур нужна своя карта слияния через modules_to_fuse с ключами attention, layernorm, mlp и параметрами вроде hidden_size. Репозиторий mit-han-lab перечисляет подготовленные результаты поиска для семейств Llama, OPT, CodeLlama, StarCoder, Vicuna, Qwen-2.5 и других.
Второй слой — GPU и его архитектура. Marlin в документации GPTQ оптимизирован под A100 (Ampere). Ядра ExLlamaV2 для AWQ поддерживаются на AMD GPU. Таблица Transformers перечисляет для AWQ и GPTQ набор CUDA, ROCm, XPU и CPU, а для отдельных методов вроде NVFP4 указывает одну GPU Blackwell. Ваш ускоритель должен попадать в этот список.
Третий слой — движок обслуживания. Репозиторий mit-han-lab сообщает, что AWQ интегрирован в vLLM, HuggingFace TGI, LMDeploy, TensorRT-LLM и FastChat. Это значит, что один и тот же checkpoint может вести себя по-разному в разных движках, и проверять надо тот, который стоит у вас.
Четвёртый слой — версии пакетов. AutoAWQ понижает Transformers до 4.47.1, AutoGPTQ выведен из поддержки, GPT-QModel не совместим с legacy-checkpoint AutoGPTQ. Перед сравнением зафиксируйте версии и не смешивайте checkpoint от одного пакета с загрузчиком от другого.
| Что проверяем | Где смотреть | Что фиксируем |
|---|---|---|
| Архитектура | config.json, architectures | поддержку fused-модулей или карту слияния |
| GPU | таблица методов Transformers | архитектуру и поддерживаемые ядра |
| Движок | документация движка | список поддерживаемых методов |
| Версии | предупреждения документации | версии Transformers, autoawq, gptqmodel |
Единый quality protocol без готового победителя
Документация Transformers прямо советует измерять точность и скорость на своей задаче и своём железе перед выбором метода для продакшена. Бенчмарки в той же документации относятся к конкретной постановке — Llama 3.1 8B и 70B, две A100 80GB для bf16, одна H100 для FP8, batch size 1, генерация 64 токенов. Переносить эти числа на свою нагрузку нельзя.
Соберите протокол из шести фиксируемых полей: base model, tokenizer, revision, калибровочный набор, параметры декодирования и профиль нагрузки. Без них сравнение двух checkpoint распадётся, потому что разойдутся не методы, а условия.
Дальше измеряйте четыре величины отдельно. Ошибки на вашей задаче — метрика качества, которую вы выбрали заранее. Peak VRAM — сколько памяти занято на пике. TTFT — время до первого токена. Throughput — сколько токенов в секунду выдаёт система. Смешивать их в одно число нельзя: метод, выигравший по памяти, может проиграть по задержке.
Порядок действий такой. Возьмите две совместимые карточки AWQ и GPTQ для одной базовой модели и одной ревизии. Прогоните одинаковый набор запросов с одинаковыми параметрами декодирования. Запишите четыре величины в таблицу. Повторите прогон, чтобы отделить случайный разброс от устойчивой разницы. Решение принимайте по той величине, которая критична для вашей задачи.
Промпт ниже помогает собрать такую карточку эксперимента и не потерять условия. Подставьте свои значения в квадратных скобках.
Ты помогаешь спланировать сравнение двух квантованных checkpoint одной модели.
Заполни карточку эксперимента и проверь совместимость.
Дано:
- базовая модель: [название и ревизия]
- checkpoint A: [метод, bits, group_size, backend]
- checkpoint B: [метод, bits, схема, backend]
- GPU: [модель и объём памяти]
- движок: [название и версия]
- версии пакетов: [transformers, autoawq, gptqmodel]
Сделай:
1. Для каждого checkpoint выпиши поля конфига и сверь их с документацией метода.
2. Отметь, какие сочетания метода и backend несовместимы, и объясни причину.
3. Составь таблицу с колонками: ошибки задачи, peak VRAM, TTFT, throughput.
4. Перечисли, что нужно зафиксировать, чтобы сравнение было честным.
5. Предложи порядок прогонов и способ отделить разброс от устойчивой разницы.
Меняйте под себя названия модели, checkpoint, GPU и движка. Если у вас уже есть готовый checkpoint, начните с чтения config.json и сверки backend с железом, а калибровку оставьте на случай, когда готового файла нет.
Частые вопросы
AWQ или GPTQ: что быстрее на практике?
Скорость зависит от ядра и железа. Marlin в документации GPTQ оптимизирован под A100, ядра ExLlamaV2 для AWQ поддерживаются на AMD GPU. Сравнивать нужно на своей нагрузке с фиксированными параметрами декодирования.
Можно ли загрузить GPTQ-модель с backend Marlin?
Marlin — четырёхбитное CUDA-ядро для инференса, и документация GPTQ указывает, что не все ядра поддерживают асимметричную квантизацию. Для асимметричного checkpoint нужен другой backend либо симметричный вариант. Совместимость проверяют до запуска.
Нужна ли калибровка для AWQ?
Калибровка AWQ происходит на этапе получения checkpoint: репозиторий mit-han-lab показывает команду AWQ search с сохранением результатов. При загрузке готового файла через Transformers отдельная калибровка не требуется, метод помечен как pre-quantized only.
Почему AutoGPTQ больше не используют?
Документация GPTQ сообщает, что AutoGPTQ в Transformers больше не поддерживается, и вместо него устанавливают GPT-QModel. Этот пакет даёт более быструю квантификацию и асимметричную схему, но не совместим с legacy-checkpoint AutoGPTQ.
Как понять, что checkpoint подходит моей GPU?
Сверьте три вещи: архитектуру GPU с таблицей методов Transformers, backend с требованиями ядра и версии пакетов с предупреждениями документации. Marlin рассчитан на Ampere, ExLlamaV2 работает на AMD. Совместимость подтверждается запуском на вашем железе.
