Комментарии 19
На словах красиво, а есть цифры? Хочется осязаемых метрик, а не размышлений на тему. И результатов тестов тоже хочется. Какие ваши доказательства? (С)
Ну например Qwen3.5-9B, тотже показатель PPL лично намеряный мной на корпусе wikitext2 (всего 128 чанков по 512 токенов каждый).
PPL FP16: 8.0276
PPL Q4_K_M: 8.0346
PPL delta: 0,007
О чем это говорит? Да ни о чем! Полное отсутствие деградации между FP16 и квантовании до 4 бит. НО! Это для корпуса из wikitext2, и вообще ни о чем не говорит для кода, картинок, сложных научных текстов. Но понимание дает.
Ну и к слову сказать Q3 кванты да, дают деградацию до единицы PPL, что уже заметно скажется на качестве ответа.
Ну вот я видел результаты тестов разного квантования, например, у Unsloth. По ним можно сделать вывод, что Q4 совсем незначительно уступает Q8. Но автор говорит, что это всё лоботомия, и кодить скрипты на питоне на Q4 категорически нельзя. Вот хотелось бы доказательств.
Кодить на Q4 квантах можно и нужно, разницы в качестве ответов никакой не будет 100%. Потери на Q4 квантах настолько мизерны, что никак не аффектят на workflow. Ну или на крайняк агент сделает на 1 итерацию больше, если вдруг скобку где забудет:)
Вот у меня тоже такое впечатление сложилось, читая мануалы тех кто профессионально занимается квантованием моделей. Там смысл не в том, что на 4 битах модель становится тупой с лоботомией. Смысл в 1-2% точности ответа. То есть вероятность ошибки выше. Но! Если это код, модели никогда не пишут код без ошибок.
Но самое главное, что если вы пишите код, вы никогда не делаете это в один заход. Это всегда 10-15 проходов, и ещё проходы с покрытием тестами, баг треками и так далее. Можно сказать на Qwen3.6 27B писать код можно, точно так же как и на ChatGPT.
В моем случае последняя выдает 20t/s. Когда Qwen 35B тоже с 4bit (если хуже то только на 5%-10%) выдает 100t/s. Больше скорость больше работы.
Да потому что O(n^2) и это даже не сам вес, а также пропускная способность памяти. Меньше вес на бит -> меньше трафика из VRAM до tensor, лучше утилизация самой GPU (любая llm для одного пользователя это memory bound, не compute), больше prefill и decode, счастливее пользователь.
Да и сейчас никто не квантует в лоб до наилучшего ближайшего значения для группы весов, GPTQ/AWQ, SPINquant, тотже GGUF всем известный - вариантов беречь "интеллект" модели масса, везде свои плюсы и минусы, влоть до банального "огораживания" outliers и наиболее значимых токенов при условно стандартном calibration corpus (типа wikitext2) и проверке на evaluation corpus.
Показатель PPL не самый лучший, как ты правильно написал, есть ведь еще NLL, KL-divergence.
Короче квантование тоже отрасль и там есть свои интересные вещи. Конкретно мне понравилось пытаться перенести tradeoff из memory в лишний compute для своего проекта SVSK (уже кидал ссылку, но не сочтите за рекламу https://github.com/Dookoo2/SVSK).
И дополню еще - рассказы про Q4 квантование - ложь! Нормальный Q4_K_M это чуть ли не 4.5-4.7 бита на вес (можно посмотреть в llama.cpp при загрузке модели - там показывается BPW параметр (bits per weight).
Вы пишете: "Рассказы про Q4 квантование - ложь! Нормальный Q4_K_M это чуть ли не 4.5-4.7 бита". А задумывались ли вы, почему разработчики llama.cpp сделали Q4_K_M равным 4.7 бита, а не ровно 4.0?Потому что они, выяснили ровно то, о чем я пишу: чистые 4 бита убивают модель. Чтобы «четверка» хоть как-то сохраняла способность к логике, Илье (автору llama.cpp) и комьюнити пришлось изобрести смешанную точность. Они принудительно оставляют критически важные матрицы (например, v_proj, lm_head или эмбеддинги) в 8 или 16 битах, а в 4 бита жмут только самые большие слои (FFN).
Вы упоминаете AWQ/GPTQ и калибровку активаций с защитой аутлайеров. Механика там такая: алгоритм прогоняет через модель калибровочный датасет (тот самый WikiText) и смотрит, какие веса генерируют самые большие активации. Их мы оставляем в FP16/INT8, остальное безжалостно рубим в 3-4 бита. Но в этом кроется ошибка! WikiText-2 это википедия. Это усредненный, предсказуемый, грамматически выверенный текст. Калибруя квантование на википедии, мы защищаем аутлайеры, которые важны для написания статей на википедии. А веса, которые отвечали за редкие навыки (написание кода на rust, решение математических уравнений, сарказм), на фоне википедии кажутся алгоритму незначимым шумом, и он спрессовывает их в 3 бита. В итоге мы получаем модель с прекрасным PPL на текстах, которая превратилась в идиота в задачах reasoning'а.
Не, просто веса не вся модель, еще эмбеддинги есть, например:) А их не квантуют, активации есть, тоже не квантуют, а все это имеет вес, потому и не все ровно под 4 бит получается. Еще outliers есть, которые квантовать бездумно не стоит
Илье (автору llama.cpp)
Который Георгий Герганов (Georgi Gerganov)?
Прекращайте форматировать текст через LLM хотя бы для собственных коментов. В противном случае можно совсем разлучиться формулировать мысли. А также хорошо бы вывод модели проверять и фактчекать. Кто такой Илья и какое отношение к llama.cpp он имеет? И таки разработчики ли llama.cpp придумали q4 квант?
Хотя квантование имеет проблемы, есть подходы к уменьшению значений до (-1, 0, 1) в Bonsai языковой модели, которая обучается с нуля. Но сейчас пока не ясно, насколько хорошо они масштабируются. Если окажется, что хорошо, то это сильно сместит акцент в языковых моделях. Насколько я знаю, исследования пока ведутся, у той же Microsoft как раз BitNet (тоже присутствует в видео).
слова красивые, доказательств 0, потери от q4_k_m(~4.5 bpw, один из самых эффективных вариантов на гигабайт памяти) представляются как смерть
Я проводил эксперименты для себя. Чисто субъективно оценивая результат. Действительно, в обычных диалогах зачастую экстремально квантованная модель не отличается. Но в практическом применении, например opencode анализирующий проект из нескольких десятков файлов начинаются чудеса, вплоть до зацикливания модели. Однако уже квантование iq4 вполне себе работает и в большинстве примененийявляется разумным кокомпромиссом.
Есть другая похожая/сопутствующая проблема. При попытках ужаться во vram приходится включать квантование kv кэша. И если q8 ещё нормально проходит, то q4 сводит модель на длинных диалогах и задачах с ума. Особенно это касается v кэша, так как ошибка там итерационно накапливается.
Почему у меня возникло ощущение, что текст писал ИИ? По стилистике, по оборотам, он прям "пахнет" ии-шностью.
Статья не учитывает, что квантование до таких значений выполняется не в лоб, а с применением scale и zero point, слои квантуются не все. А последний аргумент, что мы перегружаем вычислительный блок это вообще что-то. Уже только ленивый за последнее время не сказал, что основной упор сейчас в скорость памяти, а вычислительной мощи нам с избытком хватает.
В статье как то много эмоций. Но мало цифр.
Возьмём для примера гемму от Гугла. gguf файл для модели gemma4 e4b с 8 битным квантом весит 8 гигабайт.
Следующая модель gemma4-26b-a4b с таким же квантом будет весить 27 гигабайт.
Между этими двумя моделями нету какой то середины, между ними пропасть.
Но
Я могу для модели 26b-a4b выбрать 3 битный квант, модель будет весить 13 гигабайт и выдавать комфортные 30 токенов в секунду. Будет ли она тупее чем эта же модель но с 8 битным квантом? Наверняка. Но моя альтернатива это не эта же модель с 8 битным квантом, она у меня две не запустится. А е4b. Будет ли она тупее чем e4b? По моим ощущениям нет. Но мне бы хотелось увидеть тут какие то конкретные пруфы а не эмоции,если я не прав.
Ну да, квантование это трейдофф, ты получаешь меньшее потребление ресурсов/большую скорость за счёт деградации модели. И? Что в этом ужасного? Что плохого в наличии выбора и возможности гибко настроить что то под свою систему?
Upd: для меня это примерно как подпилить ручку у молотка, если он в ящик с инструментами не помещается. Ну да это будет уже не тот молоток как он продавался в магазине. Ну да может быть пользоваться им будет не та удобно. Но это мой молоток и мой ящик)
Взять бенчмарк и прогнать на разных квантах - будет численное подтверждение тезисов статьи. Но тот тест, что мне удалось найти, показывает незначительное падение результатов для ходового Q4_K_M.
Большие модели (больше 100B параметров) очень устойчивы к квантованию и в 4-битном кванте способны сохранять качество ответов близкое к исходной модели. А вот малые модели на 4B параметров начинают терять точность уже при 8 битах.

Культ квантования: почему 3 битные LLM это диагноз, а не оптимизация