Перейти к содержанию
Публикация AiManual

Почему имя GGUF-кванта может не совпадать с тем, что реально лежит в файле

Разбираем, почему маркировка GGUF может скрывать fallback в llama-quantize, из-за которого IQ1 или IQ2 оказываются ближе к 4.5 bpw. Узнайте, как проверить типы

Коротко

Что будет в материале

  1. 01

    Почему название GGUF не гарантирует реальную квантизацию

  2. 02

    Как возникает fallback в llama-quantize

  3. 03

    Почему IQ1 или IQ2 могут оказаться ближе к 4.5 bpw

  4. 04

    Какие модели сильнее зависят от ограничений размерностей

Имя GGUF-файла может описывать запрошенный режим квантизации, но не гарантировать, что каждый тензор внутри действительно хранится в этом типе. При обработке модели инструмент llama-quantize проверяет, подходит ли выбранный формат конкретному тензору. Если его размерность не соответствует требованиям, инструмент может применить совместимый fallback-вариант, сохранив прежнее имя файла.

Из-за этого файл с меткой IQ1 или IQ2 иногда занимает больше места и требует больше VRAM, чем ожидает пользователь. В отдельных случаях его фактическая средняя плотность может оказаться ближе к 4.5 bpw. Это не обязательно означает повреждение GGUF или ошибку скачивания: расхождение возникает из-за состава тензоров.

Перед загрузкой модели под конкретную GPU нужно проверить размер файла, метаданные, типы хранения тензоров и фактический или расчетный bpw. Название кванта подходит для первичного поиска, но не заменяет анализ содержимого.

Почему название GGUF не гарантирует реальную квантизацию

Короткий ответ: имя файла описывает намерение, а не всегда результат

Маркировка вроде IQ1, IQ2, Q3 или Q4 обычно сообщает, какой режим выбрали при создании файла. Для большинства тензоров это название отражает фактический тип хранения. Исключение появляется, когда отдельный тензор нельзя обработать выбранным форматом из-за требований к его размерности.

В такой ситуации llama-quantize подбирает совместимый тип для конкретного тензора. Остальные веса могут остаться в запрошенном режиме. В одном GGUF поэтому соседствуют тензоры с разными типами хранения, хотя имя файла выглядит однозначно.

Разница между заявленным и фактическим режимом особенно заметна у низкобитных квантов. Пользователь выбирает IQ1, рассчитывая на минимальный размер, а получает файл, по требованиям к памяти сопоставимый с более тяжелой сборкой. Имя при этом может выглядеть полностью корректно.

Почему разница заметна именно при выборе GPU

Фактическая плотность влияет на объем весов, который нужно разместить в VRAM или оперативной памяти. Чем больше тензоров получили fallback-тип, тем выше среднее количество бит на параметр и тем меньше остается запаса под контекст, KV-кэш, рабочие буферы и граф вычислений.

Для грубой оценки веса модели можно умножить число параметров на средний bpw и разделить результат на 8. Например, 27 млрд параметров при средней плотности 4.5 bpw требуют примерно 15.2 ГБ только под биты весов в десятичном пересчете. GGUF-метаданные, выравнивание, служебные буферы и KV-кэш увеличат итоговый расход.

Эта оценка не предсказывает точное потребление VRAM. На него влияют размер контекста, число GPU-слоев, тип KV-кэша, backend и настройки offload. Похожие факторы разобраны в материале о том, как автоматическая загрузка тензоров MTP/NextN меняет расход памяти в llama.cpp: автоматическая загрузка тензоров и расход VRAM.

Как возникает fallback в llama-quantize

Какие ограничения тензора могут иметь значение

Квантизация работает с блоками чисел фиксированной структуры. Конкретный тип хранения может требовать, чтобы одна или несколько размерностей тензора делились на определенное число либо соответствовали ожидаемой форме блока.

Большинство матриц в модели подходит под такие условия. Отдельные слои, проекции, выходные головы или специальные компоненты архитектуры могут иметь другую форму. Проблема возникает на уровне конкретного тензора, поэтому нельзя автоматически считать всю модель несовместимой с выбранным режимом.

Причина fallback формулируется так: запрошенный тип не удается применить к тензору с текущей размерностью, а совместимый тип позволяет сохранить модель работоспособной. Точный набор условий зависит от формата квантизации и версии инструментов.

Что именно меняется внутри GGUF

Fallback меняет тип хранения части весов. Значения параметров остаются частью той же модели, но для некоторых тензоров используется другой способ упаковки и восстановления.

Итоговый GGUF может содержать смешанный набор типов. Например, основная масса тензоров будет храниться в низкобитном формате, а несколько крупных или структурно особых тензоров получат более тяжелый совместимый вариант. Средний bpw рассчитывается по всему набору весов, поэтому даже ограниченная доля крупных тензоров способна заметно изменить размер файла.

Это отличается от намеренно созданной mixed-precision-квантизации, где распределение типов заранее выбирают для баланса качества и размера. При fallback распределение возникает как реакция на ограничения совместимости.

Почему имя выходного файла остается прежним

Имя файла и его внутреннее содержимое формируются разными механизмами. Название обычно задает человек, скрипт сборки или соглашение репозитория. После замены типа отдельного тензора инструмент может не пересобирать имя на основе полного состава GGUF.

Нельзя переносить это поведение на каждую версию llama.cpp и любой сценарий квантизации. Конкретный результат зависит от реализации, параметров запуска и версии инструментов. Поэтому имя остается заявкой на режим, а проверка GGUF показывает фактический состав.

Почему IQ1 или IQ2 могут оказаться ближе к 4.5 bpw

Что означает фактический bpw

bpw, bits per weight, показывает среднее число бит на один параметр. Это удобная метрика для сопоставления плотности хранения разных файлов одной модели или моделей близкого размера.

Условный IQ2 с низким средним bpw должен занимать меньше места, чем сборка с плотностью около 4.5 bpw. Но среднее значение зависит от всех тензоров, накладных расходов и правил упаковки. Название типа не сообщает точную итоговую плотность конкретного файла.

bpw помогает оценить объем весов, но не описывает качество ответа, скорость генерации или полный расход VRAM. На качество влияют распределение ошибок, imatrix, архитектура и конкретная сборка. На запуск влияют KV-кэш, контекст и выбранный runtime.

Как небольшой набор fallback-тензоров меняет среднее значение

Средняя плотность зависит не от количества тензоров как такового, а от их размера. Десятки маленьких fallback-тензоров могут почти не изменить размер файла. Несколько крупных матриц с более тяжелым типом способны дать заметный прирост.

Поэтому два файла с одинаковой маркировкой IQ1 могут иметь разный размер. Причины включают архитектуру модели, набор тензоров, версию квантизатора и правила обработки нестандартных размерностей.

Сценарий, при котором IQ1 или IQ2 оказывается ближе к 4.5 bpw, нужно воспринимать как возможный результат для конкретной сборки. Это не универсальное свойство всех файлов с такими названиями.

Почему низкобитная маркировка создает ложное ожидание

Пользователь часто сравнивает кванты по числу в имени: IQ1 кажется заведомо компактнее Q4. Такой порядок может нарушиться, если низкобитный формат не подходит части весов.

Сравнивать нужно три значения: размер GGUF на диске, среднюю плотность в bpw и реальный расход памяти при выбранном контексте. Если эти показатели не соответствуют ожиданию от имени, причина может находиться в fallback-тензорах.

Практическое сравнение низких режимов и их потерь качества описано в материале о Q2 и Q3 для Qwen 3.8 27B: когда Q2 имеет смысл и что теряется по сравнению с Q3.

Какие модели сильнее зависят от ограничений размерностей

Роль нестандартных размерностей и отдельных блоков

Риск fallback связан с формой тензоров, а не с одной короткой меткой архитектуры. Внутри одной модели могут встречаться матрицы внимания, FFN, выходных проекций, MoE-экспертов и дополнительных голов с разными размерностями.

Особенно внимательно нужно проверять модели с нестандартными блоками, разреженными или гибридными компонентами, дополнительными выходами и необычными размерами проекций. Это не означает, что каждая такая архитектура обязательно даст fallback. Совместимость определяется конкретными формами тензоров и поддержкой выбранного типа.

Один и тот же тип квантизации может успешно применяться к одной версии модели и частично заменяться fallback-типом в другой. Отличаться могут число слоев, размер промежуточного представления, конфигурация экспертов и сама версия конвертера.

Почему нельзя составить вечный список проблемных архитектур

Список «проблемных моделей» быстро устаревает. Разработчики меняют правила упаковки, добавляют поддержку новых форм и исправляют обработку отдельных тензоров. Репозиторий может распространять файлы, созданные разными версиями llama.cpp.

Название семейства модели дает ориентир, но не подтверждает итоговый состав GGUF. Для спорного файла нужно проверить его метаданные и типы тензоров тем инструментом, который совместим с используемой версией runtime.

Как проверить фактический bpw и типы тензоров GGUF

Проверить размер файла и заявленную маркировку

Начните с размера GGUF на диске. Сопоставьте его с числом параметров модели и ожидаемой плотностью. Это быстрый фильтр, который выявляет явное несоответствие: файл с меткой IQ1 может оказаться слишком большим для заявленного режима.

Размер файла не доказывает наличие fallback. На него влияют служебные данные, словарь, тензоры embeddings, выходные головы и правила упаковки. Он показывает повод для дополнительной проверки, а не окончательный диагноз.

Посмотреть метаданные и распределение типов тензоров

Используйте совместимый инспектор GGUF или утилиту из той же экосистемы, что и ваш runtime. В выводе ищите:

  • архитектуру и число параметров;
  • размерности основных тензоров;
  • тип хранения каждого тензора или сводку по типам;
  • сведения о квантизации и оценочной плотности;
  • версию или признаки инструмента, создавшего файл, если они записаны в метаданные.

Названия полей и формат вывода меняются между версиями. Команда, которая работает в одной сборке, может отсутствовать в другой. Перед анализом сверяйте утилиту с версией llama.cpp, которой планируете загружать модель.

Оценить фактический bpw перед загрузкой

Если инспектор показывает bpw, используйте это значение как основу для оценки веса модели. Если такого поля нет, разделите размер части файла, относящейся к весам, на число параметров и переведите байты в биты. Грубая оценка для всего файла будет выше из-за метаданных и дополнительных тензоров.

После оценки добавьте запас под KV-кэш и рабочую память. Для длинного контекста этот запас может стать сопоставимым с разницей между двумя квантизациями. Одинаковый файл при коротком и длинном контексте потребляет разный объем VRAM.

Проверка на диске экономит время: модель может не загрузиться на GPU, хотя ее имя выглядит подходящим. Для multi-GPU-системы учитывайте распределение слоев и объем памяти на каждой карте, а не только суммарную VRAM.

Что делать, если название и содержимое расходятся

Ориентируйтесь на фактический размер, bpw и список типов тензоров. Сравните файл с альтернативной сборкой той же модели, у которой плотность и состав описаны прозрачнее.

Переименование GGUF ничего не исправит. Оно меняет только текстовую метку, но не типы хранения внутри файла. Если происхождение сборки неизвестно, сохраните сведения о версии квантизатора и параметрах, с которыми файл создали.

Для оценки качества смотрите на конкретную квантизацию, а не на минимальную цифру в имени. Бенчмарки локальных LLM полезны именно в таком сравнении, когда размер, качество и скорость рассматриваются вместе: сравнение локальных моделей и их квантизаций.

Как выбирать между низкобитным квантом и честно названным файлом

Когда имеет смысл смотреть на фактический bpw, а не на имя

bpw нужно ставить на первое место, когда модель подбирается под ограниченную VRAM. Сравните несколько GGUF одной модели и проверьте, сколько параметров, весов и служебных данных приходится на каждый файл.

Одинаковый bpw не гарантирует одинаковое качество. Две сборки с близким размером могут по-разному распределять точность между чувствительными и менее чувствительными тензорами. Поэтому после проверки памяти сравнивайте качество на собственных задачах.

Когда более высокая, но честно обозначенная квантизация предсказуемее

Файл с более высокой, но прозрачной плотностью удобнее для планирования. Его размер проще сопоставить с доступной памятью, а риск неожиданного fallback ниже, если состав типов заранее описан и подтверждается инспекцией.

Предсказуемость особенно полезна для постоянного локального сервиса, домашнего AI-сервера и рабочих процессов с фиксированным лимитом VRAM. Срыв загрузки из-за нескольких гигабайт может свести на нет выгоду от более привлекательной низкобитной метки.

Как учитывать качество и назначение модели

Для разового теста при жестком ограничении памяти низкобитный файл с fallback может оказаться приемлемым, если он действительно загружается и дает нужное качество. Для регулярной работы с кодом, длинными документами или агентными задачами разумнее оценивать стабильность, контекст и запас памяти.

Выбор складывается из четырех показателей: фактический bpw, размер GGUF, качество конкретной сборки и совместимость с runtime. Отдельно учитывайте контекст, KV-кэш и скорость на своей GPU. Универсально лучшего типа квантизации здесь нет.

Ограничения текущего поведения llama.cpp и итоговый чек-лист

Что нельзя надежно определить по одному имени GGUF

  • точный набор типов хранения всех тензоров;
  • фактический средний bpw;
  • объем VRAM после загрузки весов и KV-кэша;
  • пригодность файла для конкретной GPU;
  • качество ответов и устойчивость на длинном контексте;
  • версию инструмента, создавшего GGUF, если она не записана отдельно.

Fallback связан с применимостью выбранного типа к отдельным тензорам. Точный результат зависит от архитектуры, форм весов, версии llama.cpp и параметров сборки. Поэтому маркировка IQ1 или IQ2 не дает гарантии минимального размера.

Чек-лист перед загрузкой модели

  1. Уточните версию runtime и инструментов анализа GGUF.
  2. Сверьте имя файла с его фактическим размером и числом параметров.
  3. Прочитайте метаданные модели.
  4. Проверьте распределение типов хранения по тензорам.
  5. Найдите отображаемый или расчетный фактический bpw.
  6. Оставьте запас VRAM под KV-кэш, контекст и рабочие буферы.
  7. Сравните файл с альтернативной сборкой, если размер расходится с ожиданием.
  8. Не пытайтесь исправить состав кванта простым переименованием GGUF.

Имя GGUF остается полезной подсказкой, но окончательное решение принимайте по содержимому файла. Для выбора под GPU сначала проверяйте фактический bpw и размер весов, затем добавляйте расходы контекста и runtime. Такой порядок снижает риск выбрать модель, которая формально выглядит компактной, но не помещается в доступную память.

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