Локальный ИИ · GGUF · квантизация
GGUF и квантизация локальных LLM: Q4_K_M, Q5_K_M, Q8_0 и что выбрать
Одна и та же модель на Hugging Face может быть доступна в десятках файлов: Q4_K_M, Q4_K_S, Q5_K_M, Q6_K, Q8_0, IQ4_XS и других. Это не разные модели, а разные способы хранения её весов. Чем сильнее сжатие, тем меньше файл и требования к памяти, но тем выше риск потери качества. Разберём обозначения и выберем quant без гадания.
Что такое GGUF
GGUF — бинарный формат файлов, используемый экосистемой GGML/llama.cpp для локальных моделей. В одном или нескольких GGUF-файлах хранятся тензоры модели и метаданные, необходимые runtime.
В текущем исходном коде llama.cpp формат GGUF включает:
- версию формата;
- key-value metadata;
- описания тензоров;
- тип данных каждого тензора;
- смещения и размеры;
- сам бинарный массив tensor data.
GGUF особенно удобен для llama.cpp, но сегодня его напрямую используют и другие локальные инструменты. В июне 2026 Ollama отдельно расширила GGUF-совместимость через llama.cpp, а LM Studio позволяет искать, скачивать и импортировать GGUF-модели.
Что такое квантизация LLM
В исходной модели веса обычно хранятся с высокой точностью — например BF16 или FP16. Это требует много памяти.
Квантизация представляет веса меньшим количеством бит. Условно:
Для 7–8B-класса разница огромна: полный F16-файл может занимать около 15 ГиБ, тогда как типичный Q4_K_M — около 4,5 ГиБ. Точные значения зависят от архитектуры и от того, какие тензоры оставлены в большей точности.
Квантизация нужна не только ради диска. Если модель становится меньше, она:
- легче помещается в VRAM;
- требует меньше RAM при CPU-only;
- снижает объём чтения весов из памяти;
- может дать выше скорость token generation в memory-bound сценарии.
Как читать название Q4_K_M
Названия выглядят пугающе, но в основе логика достаточно простая.
Веса хранятся в квантованном представлении.
Примерно 4-bit семейство, хотя фактический bits/weight выше из-за scales и смешанных tensor types.
Блочная схема квантования GGML с superblocks и отдельными scales/mins.
Профиль квантования, где часть чувствительных тензоров хранится точнее.
Почему M обычно чуть больше S
В llama.cpp Q4_K_M и Q4_K_S используют один базовый Q4_K тип, но preset Q4_K_M повышает точность для части категорий тензоров. Поэтому файл становится немного больше.
Аналогично устроены Q5_K_S и Q5_K_M. Это не просто буквы «small» и «medium» в имени файла, а разные recipes распределения типов по тензорам.
Какой quant скачать: короткая таблица
| Quant | Размер | Когда выбирать | Что учитывать |
|---|---|---|---|
| Q3_K_M | Очень компактный | Когда Q4 уже не помещается | Выше риск заметной деградации. |
| Q4_K_S | Чуть меньше Q4_K_M | Когда не хватает последних сотен МБ | Компромисс чуть сильнее в сторону размера. |
| Q4_K_M | Средний | Универсальная стартовая точка | Хороший баланс размера и fidelity. |
| Q5_K_M | Больше Q4 | Есть запас RAM/VRAM, важна точность | Меньше quantization error, но выше требования. |
| Q6_K | Ещё больше | Памяти достаточно, quality приоритетнее размера | Разница с Q5 на реальной задаче может быть небольшой. |
| Q8_0 | Почти вдвое тяжелее Q4 | Большой запас памяти, сравнения, sensitive workload | Часто не лучший value для домашнего inference. |
Важно: это практическая карта выбора, а не утверждение, что конкретный quant всегда лучше другого на любой модели.
Q4_K_M: почему его так часто рекомендуют
Q4_K_M оказался популярным именно из-за баланса: модель уменьшается примерно до четверти от F16-класса, но не уходит в экстремально низкую битность.
В текущем llama.cpp при запуске модели из Hugging Face через -hf quant по умолчанию — Q4_K_M, если в репозитории он существует и пользователь не указал другой вариант.
llama cli -hf ggml-org/Qwen3.6-27B-GGUF
Эквивалентно явному выбору:
llama cli -hf ggml-org/Qwen3.6-27B-GGUF:Q4_K_M
Q5_K_M: когда есть смысл перейти выше Q4
Q5_K_M использует больше бит и обычно даёт меньшую ошибку квантования. В актуальном встроенном benchmark llama.cpp на тестовой Llama-3-8B Q5_K_M был около 5,33 ГиБ против 4,58 ГиБ у Q4_K_M.
Перейти на Q5_K_M имеет смысл, когда:
- Q4_K_M уверенно помещается, и остаётся несколько гигабайт VRAM;
- вы используете модель для кода, математики или structured output;
- разница в размере не заставляет уменьшать context;
- вы реально видите выигрыш на своих тестах.
Q6_K: почти максимум без веса Q8
Q6_K занимает больше памяти, но quantization error уже довольно мала. В том же текущем benchmark llama.cpp для Llama-3-8B Q6_K был около 6,14 ГиБ, тогда как Q8_0 — около 7,95 ГиБ.
Это делает Q6_K интересным вариантом для пользователя, которому памяти достаточно, но Q8_0 кажется неоправданно тяжёлым.
Практический сценарий: у вас 24 ГБ VRAM, модель среднего размера занимает в Q4 заметно меньше половины карты, а задача чувствительна к точности. Тогда есть смысл сравнить Q5_K_M и Q6_K.
Q8_0: нужен ли он вообще
Q8_0 хранит веса примерно в 8-bit классе и значительно тяжелее Q4/Q5. Потери относительно высокоточной версии обычно очень малы, но цена — RAM, VRAM и объём чтения данных.
В текущем benchmark llama.cpp на Llama-3-8B Q8_0 занимал около 7,95 ГиБ, тогда как Q4_K_M — около 4,58 ГиБ.
Для домашнего пользователя Q8_0 имеет смысл, если:
- модель небольшая;
- памяти много;
- вы сравниваете качество quantization;
- не хотите использовать F16/BF16;
- контекст всё равно остаётся комфортным.
Q4_K_S и Q5_K_S: зачем нужны S-варианты
S-профили немного компактнее M-вариантов. Это полезно, когда модель почти помещается, но не хватает небольшого объёма.
В текущем quantizer llama.cpp для тестовой Llama-3-8B:
- Q4_K_S — около 4,37 ГиБ;
- Q4_K_M — около 4,58 ГиБ;
- Q5_K_S — около 5,21 ГиБ;
- Q5_K_M — около 5,33 ГиБ.
Разница небольшая. Поэтому переход M → S — инструмент для тонкой подгонки под память, а не способ радикально уменьшить модель.
Что такое IQ4_XS, IQ4_NL, IQ3 и другие IQ-кванты
llama.cpp поддерживает семейство I-quants / IQ, включая IQ4_XS, IQ4_NL и более агрессивные IQ3/IQ2/IQ1.
Их задача — дать более эффективное представление весов при заданном размере, используя более сложные схемы, чем классические Qx_K.
| Тип | Что показывает текущий quantizer llama.cpp |
|---|---|
| IQ4_XS | Около 4,25 nominal bpw non-linear quantization. |
| IQ4_NL | Около 4,50 nominal bpw non-linear quantization. |
| IQ3 | Семейство около 3–3,7 bpw в зависимости от варианта. |
| IQ2 / IQ1 | Экстремальное сжатие для случаев, когда обычные Q4/Q5 не помещаются. |
IQ-кванты особенно интересны опытным пользователям, но для первого запуска обычный Q4_K_M проще: больше совместимых примеров, проще сравнивать и меньше шансов запутаться в model-specific особенностях.
Dynamic и model-specific quants: почему в 2026 уже мало смотреть только на Q4
Современная квантизация всё чаще становится model-specific: разные тензоры получают разную точность в зависимости от чувствительности.
Например, Unsloth Dynamic 2.0/3.0 не просто применяет один quant ко всем слоям. Алгоритм выбирает разные схемы для разных tensor groups и моделей. В свежих Qwen3.8 GGUF встречаются варианты вроде UD-Q4_K_XL.
В llama.cpp тоже развивается recipe-подход: даже стандартный Q4_K_M фактически является смесью tensor types, а не «каждый tensor строго Q4».
Что такое importance matrix / imatrix
Importance matrix помогает quantizer понять, какие части модели сильнее влияют на результат на calibration data. В инструментах llama.cpp использование --imatrix прямо предусмотрено для оптимизации quantization.
Для пользователя вывод простой: хороший готовый quant от надёжного автора может быть лучше на практике, чем случайный файл с тем же названием Q4_K_M.
Как заранее понять размер GGUF
Грубая формула:
Но это только ориентир. Реальный GGUF больше или меньше простой формулы из-за:
- mixed tensor types;
- scales/mins;
- metadata;
- embedding/output tensors повышенной точности;
- MoE-архитектуры;
- split-файлов;
- model-specific quant recipes.
Поэтому для выбора лучше смотреть фактический размер конкретного GGUF-файла.
Что именно ухудшается при слишком сильной квантизации
Нельзя свести качество к одной цифре perplexity. Пользователь может заметить:
- хуже следование сложным инструкциям;
- больше ошибок в reasoning;
- ухудшение кода;
- нестабильный structured output;
- ошибки tool calling;
- хуже работу на редких языках или терминах;
- повышенную склонность к повторениям на тяжёлых low-bit quants.
При этом деградация сильно зависит от модели. Нельзя утверждать, что переход Q5 → Q4 всегда стоит фиксированный процент качества.
Как quant влияет на скорость
Интуитивно кажется, что Q8 должен быть быстрее, потому что «точнее и проще». На практике token generation часто memory-bound: чем больше данных нужно прочитать из RAM/VRAM, тем хуже может быть скорость.
В текущем benchmark llama.cpp на одной тестовой системе Q4_K_M генерировал быстрее Q6_K и Q8_0. Но это не универсальная таблица скорости: hardware backend, CPU/GPU и архитектура модели меняют результат.
Поэтому тестируйте конкретный quant через llama-bench или одинаковые prompts в одном runtime.
Как запустить свой GGUF в Ollama
В Ollama 0.30 совместимость с GGUF расширена через llama.cpp. Можно скачать внешний GGUF, создать Modelfile и импортировать его.
FROM ./my-model.Q4_K_M.gguf
Затем:
ollama create -f Modelfile my-model
ollama run my-model
Если модель поддерживает tools, Ollama умеет сохранить эту возможность. Проверить capabilities можно через:
ollama show my-model
Как выбрать GGUF в LM Studio
LM Studio прямо показывает доступные quantizations при скачивании модели. В документации рекомендуется выбирать 4-bit или выше, если компьютер позволяет.
Через CLI можно указать quant явно:
lms get llama-3.1-8b@q4_k_m
Показать только GGUF:
lms get --gguf
Если GGUF уже скачан вручную:
lms import D:\Models\model-Q4_K_M.gguf
Как запускать GGUF напрямую через llama.cpp
Если файл уже скачан:
llama-cli -m model-Q4_K_M.gguf
Или скачать нужный quant с Hugging Face прямо из llama.cpp:
llama cli -hf ggml-org/Qwen3.6-27B-GGUF:Q5_K_M
Это удобно для честного сравнения нескольких quantizations одной модели.
Почему плохо квантизировать уже квантованную модель
Если взять Q8/Q5/Q4 и повторно превратить его в другой low-bit quant, ошибка предыдущей квантизации никуда не исчезает — сверху добавляется новая.
В quantize-tool llama.cpp опция --allow-requantize существует, но сама документация предупреждает, что requantization может сильно ухудшить качество по сравнению с квантованием исходной 16/32-bit модели.
Что выбрать под конкретный объём VRAM
Да → начинайте с Q4_K_M.
Сравните Q5_K_M, затем Q6_K.
Сначала Q4_K_S или меньшая модель.
Только тогда смотрите Q3/IQ3/Q2 и тестируйте качество.
Пример: 8 ГБ VRAM
Если 8B Q4_K_M занимает около 5–6 ГБ, это хороший сценарий. Если 12B Q4 занимает 7,5–8 ГБ, лучше сравнить 8B Q5 с 12B Q3/Q4_S, потому что слишком плотное размещение оставит мало места KV-cache.
Пример: 24 ГБ VRAM
Если 27B Q4 занимает 18–19 ГБ, Q5 может уже приблизиться к потолку. В таком случае Q4 с длинным контекстом может быть полезнее Q5 с offload.
Актуальные модели по уровням VRAM: какие локальные LLM выбрать для 8, 12, 16 и 24 ГБ VRAM.
Почему «самый большой quant, который помещается» — плохое правило
VRAM нужна не только весам. Дополнительно память занимают:
- KV-cache;
- compute buffers;
- vision projector;
- parallel requests;
- драйвер и desktop compositor;
- другие процессы GPU.
Поэтому лучше оставить запас, чем забить карту весами на 100%.
Q4 маленькой модели или Q2 большой?
Это один из самых сложных вопросов. Большая модель обычно имеет более сильную базовую способность, но экстремальная квантизация может сильнее повредить поведение.
Свежие обсуждения локального сообщества часто рекомендуют в такой ситуации сначала сравнить меньшую модель в нормальном Q4 с более крупной в Q2/Q3. Это разумный практический принцип, но не математическое правило.
Частые вопросы
Что лучше: Q4_K_M или Q5_K_M?
Если Q4_K_M работает хорошо и памяти мало — оставайтесь на Q4. Если есть запас и задача чувствительна к точности, сравните Q5_K_M на своих запросах.
Q4_K_M сильно хуже Q8_0?
Он сильнее сжат и имеет больше quantization error, но реальная разница по качеству зависит от модели и задачи. Для обычного чата она может быть небольшой, для reasoning/code/tool-use — заметнее.
Почему Q4_K_M занимает больше 4 бит на параметр?
Потому что K-quants используют block scales/mins и mixed tensor recipes. Название Q4 — класс квантования, а не точный итоговый bits-per-weight всего файла.
Что лучше: Q4_K_S или Q4_K_M?
Q4_K_S немного компактнее. Q4_K_M сохраняет часть чувствительных tensor categories в более высокой точности и обычно является более безопасным default, если помещается.
Стоит ли скачивать Q8_0?
Если памяти много, модель небольшая и вы хотите минимизировать quantization loss — да. Но для ограниченной VRAM Q5/Q6 часто дают более рациональный баланс.
Что такое IQ4_XS?
Это один из non-linear I-quant форматов llama.cpp. Он ориентирован на эффективное хранение примерно в 4-bit классе. Для новичка проще начать с Q4_K_M.
Можно ли использовать GGUF в Ollama?
Да. Ollama 0.30 расширила GGUF-совместимость через llama.cpp. Внешний GGUF можно импортировать через Modelfile с FROM ./model.gguf.
Можно ли использовать GGUF в LM Studio?
Да. LM Studio поддерживает GGUF, позволяет выбирать quant при загрузке и импортировать уже скачанные .gguf через lms import.
GGUF и Safetensors — одно и то же?
Нет. Это разные форматы хранения model weights/metadata и разные типичные inference-экосистемы. GGUF тесно связан с llama.cpp и локальным quantized inference.
Свежий спрос
Почему тема GGUF снова растёт
С выходом новых локальных моделей пользователи снова упираются в один и тот же выбор: скачать Q4_K_M, Q5_K_M, Q8_0 или новый dynamic quant. В свежей ветке Ollama от 16 сентября 2026 вопрос именно «какой GGUF quant реально использовать» снова вынесен отдельно.
Одновременно появляются новые model-specific методы: Unsloth Dynamic, GSQ/RCO и другие схемы. Поэтому старый совет «всегда скачивай Q4_K_M» остаётся хорошим стартом, но уже не закрывает всю тему.
Связанные гайды
Что читать дальше
Первичные источники
Документация и исходный код
- llama.cpp — структура GGUF
- llama.cpp — Tensor Encoding Schemes
- llama.cpp — актуальные quant types и встроенные оценки
- llama.cpp — recipes Q4_K_M / Q5_K_M
- llama.cpp — quantize tool
- Ollama 0.30 — GGUF compatibility
- LM Studio — выбор quant через lms get
- LM Studio — импорт GGUF
- Unsloth — Dynamic GGUF quantization
Подбор модели и quant
