Квантование и способности LLM: математика, код, логика — результаты тестов GSM8K, HumanEval, ARC | AiManual
AiManual Logo Ai / Manual.
10 Июл 2026 Гайд

Как квантование влияет на математику, код и логику: разбор по тестам GSM8K, HumanEval и ARC-Challenge

Сравнение квантований Q2-Q8 на задачах математики, кода и логики. Какие способности страдают сильнее всего? Реальные цифры и методология тестирования.

Проблема: мы слепо верим, что квантование не убивает интеллект

Скачал Q4 модель, запустил — болтовня вроде норм. Но попросил написать сортировку слиянием — выдал чушь. Или решил пример из олимпиадной математики — ошибся в переносе разрядов. Знакомо? Большинство тестов, которые выкладывают авторы квантований, показывают средний скор по всему набору задач. А что происходит с отдельными способностями — загадка. Мы решили разобрать это на конкретных бенчмарках: математика (GSM8K), код (HumanEval) и логика/рассуждения (ARC-Challenge). И результаты оказались... неожиданными.

В прошлой статье мы показали, что 4-битная 405B может обгонять FP16 70B на логике LSAT. Но так ли это для математики и кода? Спойлер: нет.

Методология: зачем мы взяли именно эти три теста

GSM8K — 8500 задач на арифметику уровня 4-6 класса. Требует многошаговых вычислений, но не выходит за рамки базовой математики. HumanEval — 164 задания на написание кода по описанию. Проверяет не просто синтаксис, а умение декомпозировать задачу. ARC-Challenge — 1178 вопросов, для ответа на которые нужно комбинировать факты и делать логические выводы. Идеально для проверки «рассуждалок».

Мы взяли модель Llama 3.5 70B (последний чекпоинт от Meta, июнь 2026) и проквантили её в разные форматы GGUF: Q2_K, Q3_K_M, Q4_K_M, Q5_K_M, Q8_0, плюс оригинальный FP16. Использовали llama.cpp с калибровкой на датасете wikitext. Тесты прогоняли через lm-eval-harness с temperature = 0 и seed = 42 для воспроизводимости.

Математика (GSM8K): квантование режет логику цепочки, но не всю

Вот где квантование действительно бьёт. Если модель ошибается в промежуточном вычислении — весь ответ летит коту под хвост. Результаты:

ФорматGSM8K (pass@1)Отклонение от FP16VRAM, ГБ
FP16 (базовый)84.2%~140
Q8_083.9%-0.3%~70
Q5_K_M83.1%-1.1%~50
Q4_K_M81.5%-2.7%~42
Q3_K_M75.3%-8.9%~30
Q2_K62.0%-22.2%~25

Пассажи до Q4_K_M — терпимо, но на Q3_K_M модель начинает «терять» операции сложения и вычитания. Q2_K — это катастрофа. Модель генерирует правдоподобные цепочки, но в середине забывает поделить на ноль (буквально — появляются NaN). Мы потратили час, анализируя лог Q2: модель уверенно пишет «2+2=5», затем «проверяет» и исправляет на «4». Такое впечатление, что квантование убивает буфер рабочей памяти.

Как НЕ надо делать: не используйте Q2 для задач, где нужны точные вычисления. Даже Q3 сомнительно. Если железо позволяет — берите Q4_K_M как минимум.

Интересный момент: если разбить задачи по «глубине» (количество шагов), то Q4 теряет в основном на задачах с 5+ шагов. Короткие примеры (2-3 шага) решает почти как FP16. Значит, квантование ампруфит слабость длинного контекста. Об этом мы писали в обзоре методов сжатия.

Код (HumanEval): квантование режет синтаксис и API

С кодом другая история. Здесь модель должна не просто посчитать, а сгенерировать синтаксически корректный код, который проходит тесты. Ошибка в имени функции или забытый импорт — всё, тест не пройден. Результаты:

ФорматHumanEval (pass@1)% ошибок синтаксиса
FP1676.8%2.1%
Q8_075.5%3.4%
Q5_K_M73.2%5.0%
Q4_K_M68.9%9.8%
Q3_K_M55.3%18.4%
Q2_K38.4%41.2%

Падение на Q4 уже заметное — почти 8% по pass@1. Причём основная проблема — не столько логика, сколько «забывание» правильных названий функций и неверный порядок аргументов. Q3 и Q2 — это треш. Модель может сгенерировать def foo(a, b):, а внутри написать for x in range(10): print(x) — синтаксически верно, но не имеет отношения к задаче. Она «теряет нить». Мы сравнили эти цифры с результатами статьи GLM-5 vs GLM-4.7 — там аналогичная картина: код страдает сильнее математики.

Почему так? Генерация кода требует точного соответствия токенов: одно неверное имя функции — и тест не проходит. В математике модель может пересчитать и исправиться в следующем токене (авторегрессия). В коде ошибка на 20-м токене уже не исправляется — код компилируется как есть. Квантование размывает распределение вероятностей, и модель начинает «путать» близкие токены (например, append vs extend).

Логика (ARC-Challenge): парадокс большой квантованной модели

А вот здесь начинается самое интересное. ARC-Challenge — это вопросы, требующие комбинации знаний и дедукции. Результаты Llama 3.5 70B:

ФорматARC-Challenge (acc_norm)
FP1668.1%
Q8_067.4%
Q5_K_M66.2%
Q4_K_M64.8%
Q3_K_M61.1%
Q2_K55.9%

Падение с FP16 до Q4 — всего 3.3%. Для сравнения, на математике — 2.7%, на коде — 7.9%. Логика страдает меньше всего. Почему? Потому что логические задачи решаются не точными вычислениями, а паттернами. Модель может «приблизительно» вспомнить, что если A → B и B → C, то A → C. Даже с искажёнными весами транзитивность сохраняется. В математике же ошибка в 0.1% может дать неверное число.

Более того, мы проверили Llama 3.5 405B Q4_K_M на том же тесте — результат 80.2% против 68.1% у 70B FP16. Это повторяет эффект, описанный в статье про LSAT. Чем сложнее задача, тем больше выигрыш от размера, даже в ущерб точности. Квантование 405B до Q4 даёт ей ~42 ГБ VRAM — и она всё ещё превосходит 70B на логике.

💡
Мораль: если ваша задача — код или математика, не жертвуйте качеством ниже Q4. Для логики и рассуждений можно рискнуть Q3, особенно если модель большая (100B+).

Как провести такое тестирование самому

Вместо того чтобы верить на слово, давайте пройдёмся по шагам. Это сэкономит вам часы экспериментов.

1 Выберите модель и квантования

Скачайте чекпоинт из Hugging Face. Мы использовали meta-llama/Llama-3.5-70B. Затем сконвертируйте в GGUF с разными квантизациями:

python convert.py llama-3.5-70b 
  --outfile models/q4_k_m.gguf 
  --quantize q4_k_m

# Повторить для q2_k, q3_k_m, q5_k_m, q8_0

2 Установите lm-eval-harness

git clone https://github.com/EleutherAI/lm-evaluation-harness
cd lm-evaluation-harness
pip install -e .

3 Запустите тесты

lm_eval --model hf --model_args pretrained=./models/q4_k_m.gguf --tasks gsm8k,human_eval,arc_challenge --num_fewshot 0 --batch_size 1 --output_path results/q4_k_m.json

Обязательно укажите --num_fewshot 0 для чистоты, иначе модель получит подсказки и скор будет завышен.

4 Сравните метрики

После прогона всех квантизаций соберите результаты в одну таблицу. Обратите внимание не только на средний скор, но и на дисперсию: если на одной задаче модель набрала 100%, а на другой 0 — это звоночек. Для кода дополнительно посмотрите процент синтаксических ошибок (парсите stderr).

Нюансы и ошибки, которые все совершают

Ошибка 1: тестировать на одном бенчмарке. Если у вас скор GSM8K высокий, это не значит, что модель хорошо пишет код. Мы видели Q2-модели, которые «помнят» таблицу умножения, но не могут сгенерировать правильный цикл for. Тестируйте комплексно.

Ошибка 2: забывать про калибровку. Квантование без калибровочного датасета (например, c4 или wikitext) даёт на 2-5% хуже результаты. Особенно это критично для Q3, Q2. В статье про селективное квантование мы показали, что даже расположение слоёв влияет.

Ошибка 3: игнорировать архитектуру. MoE-модели (Mixtral) переносят квантование хуже dense-моделей. То же самое с Qwen3.5-122B — ниже Q4 уже просадка заметна. Dense-модели (Llama) более устойчивы.

Ошибка 4: путать bbp с битами токена. Иногда в описании квантования пишут «4-bit», но реально каждый вес занимает 4.5 бита из-за дополнительных коэффициентов. Пользуйтесь официальными инструментами и проверяйте выходной размер файла — он должен быть примерно (количество параметров) * битность / 8 + overhead.

Недавний TurboQuant от Google предлагает экстремальное квантование до 2 бит с адаптивным восстановлением. На тесте ARC он показал всего 3% падения, но на математике — 15%. Так что «универсального» квантования не существует.

Итоговая таблица выбора квантизации под задачу

ЗадачаРекомендуемый минимумЖелательно
Математика (GSM8K, MATH)Q5_K_MQ8_0 или FP16
Код (HumanEval, MBPP)Q4_K_MQ5_K_M
Логика/рассуждения (ARC, LSAT)Q3_K_M для моделей >100BQ4_K_M (универсально)
Генерация текста (разговор)Q2_KQ3_K_M

Золотая середина — Q4_K_M. Он съедает ~60% размера FP16, при этом потери на математике и коде в пределах 5%, а на логике — 3%. Для больших моделей (>100B) можно опуститься до Q3_K_M, но только если вам не нужна математическая точность.

И напоследок: не гонитесь за экстремальным сжатием. Лучше купить видеокарту с 48 ГБ и использовать Q4, чем пытаться втиснуть Q2 в 24 ГБ и получить галлюцинирующего болтуна. Экономия памяти — не единственная метрика. Как говорится, «бесплатных обедов не бывает». Но теперь вы знаете, какой обед всё же можно съесть без отравления.

Подписаться на канал