ctrllife.ru/ctrllife

Локальные LLM: как выбрать модель, посчитать железо и запустить

Локальные LLM: как выбрать модель, посчитать железо и запустить
Содержание28 разделов

Разбор имени файла, арифметика железа, настройки вывода. Всё, на чём обычно спотыкаются при переходе с облачных API на локальную инфраструктуру.

Материал закрывает три вопроса, ответы на которые не пишут в карточках моделей: что означает каждый сегмент имени файла, какую скорость даст конкретное железо и почему одна и та же модель у разных пользователей ведёт себя по-разному.

Имя Qwen3-30B-A3B-Instruct-2507-UD-Q4_K_XL.gguf кодирует шесть независимых характеристик. Их постоянно смешивают: обсуждают, «что лучше — GGUF или Q4», хотя это разные оси. Формат контейнера и метод квантизации не конкурируют между собой.

1. Модальность: что модель принимает и выдаёт

Текстовые (LLM)

Основной случай. Текст на входе, текст на выходе. Дальнейший материал посвящён преимущественно им.

Со зрением (VLM)

Qwen-VL, Llama Vision, MiniCPM-V, Pixtral, InternVL, Gemma Vision.

Речь

  • Распознавание (ASR): Whisper (в экосистеме ggml — whisper.cpp), Parakeet, Canary.
  • Синтез (TTS): Kokoro, XTTS, F5-TTS, Orpheus, Piper.
  • Речь-в-речь: Moshi, Qwen-Omni — принимают и выдают звук без промежуточного текста.

Обслуживаются отдельными движками, llama.cpp их в основном не запускает.

Векторизаторы (эмбеддинги)

Не генерируют текст вообще. Превращают фрагмент в вектор для семантического поиска: bge-m3, multilingual-e5, nomic-embed, jina-embeddings, GTE, mxbai.

Размер 100–600 млн параметров, на процессоре работают с минимальной latency. Для русского применяют bge-m3 или multilingual-e5-large — одноязычные английские векторизаторы на кириллице проседают катастрофически.

Реранкеры

Второй этап поиска. Векторизатор быстро достаёт сотню кандидатов, реранкер (bge-reranker-v2-m3, jina-reranker) медленно и точно переупорядочивает их по релевантности.

Классификаторы и защитные

Llama Guard, ShieldGemma, Prompt Guard — оценка текста на опасное содержание. Плюс определение языка, тональности, спама.

Изображения и видео

Stable Diffusion, Flux, SDXL, Wan, HunyuanVideo — диффузионные модели. Другая архитектура, другие движки (ComfyUI, stable-diffusion.cpp), другие форматы. К llama.cpp отношения не имеют.

2. Архитектура и размер

Плотные и разреженные

Плотные (dense). Обозначаются одним числом: 7B, 27B, 70B. На каждый токен работают все веса.

Разреженные, смесь экспертов (MoE). Запись 35B-A3B, 235B-A22B, 8x7B: всего 35 млрд параметров, активны на токен около 3 млрд. Маршрутизатор на каждом слое выбирает два-три эксперта из десятков.

Опознание MoE, если в названии не указано явно:

  • буква A со вторым числом: 30B-A3B, 235B-A22B;
  • запись через x: Mixtral 8x7B;
  • никак — GLM-4.5-Air, gpt-oss-20b, DeepSeek-V3. Здесь помогает только карточка модели.

Надёжная проверка: в config.json у MoE присутствуют поля num_experts и num_experts_per_tok.

Шкала размеров

Диапазон

Практическое применение

0,1–1 млрд

Черновики, классификаторы, векторизаторы, автодополнение

1–4 млрд

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

7–14 млрд

Рабочая лошадка. 8–12 ГБ памяти в Q4

20–35 млрд

Заметный скачок качества. 16–24 ГБ

70–120 млрд

Две видеокарты либо очень много ОЗУ

200 млрд+

Только MoE, только серверная инфраструктура

Механизм внимания

Определяет, сколько памяти съедает контекст:

  • MHA — классика, кэш растёт быстро.
  • GQA (grouped-query) — стандарт с 2024 года, кэш в 4–8 раз меньше.
  • MLA (multi-head latent) — семейство DeepSeek, сжимает кэш ещё сильнее.
  • Скользящее окно — Mistral, Gemma: часть слоёв смотрит только на ближайшие 4096 токенов. Дёшево по памяти, хуже на очень длинном контексте.

3. Стадия обучения

Одна архитектура существует в нескольких состояниях.

Базовая (Base, Pretrained)

Умеет только предсказывать следующий токен. Диалог вести не может: на вопрос продолжит его вопросами. Нужна тем, кто дообучает самостоятельно.

Инструктивная (Instruct, Chat, IT)

Дообучена следовать указаниям, имеет шаблон диалога с ролями. Требуется в 95% сценариев.

Рассуждающая (Reasoning, Thinking)

Сначала рассуждает в блоке <think>, потом отвечает. Большой прирост в математике, логике и коде ценой в 3–10 раз большего числа токенов и соответствующей задержки.

Гибридные (Qwen3 и подобные) переключаются флагом или командой /no_think в запросе.

Дообученные под задачу

  • Coder (Qwen-Coder, DeepSeek-Coder, Codestral). Отдельный подвид FIM (fill-in-the-middle) обучен дописывать в середину файла — именно он нужен для автодополнения в редакторе, обычная чат-модель для этого не годится.
  • Math, медицинские, юридические — дообучение на отраслевых корпусах.
  • Роль и творчество (MythoMax, Magnum, Cydonia).
  • Function calling / tool use — натасканы на вызов внешних инструментов и строгий JSON. Критично для автоматизации.

Дистилляты (Distill)

Маленькая модель, обученная повторять большую. DeepSeek-R1-Distill-Qwen-7B — это Qwen 7B, обученная на рассуждениях R1. Это не R1, несмотря на название. Путаница здесь массовая.

Слияния (Merge)

Механическое смешивание весов без обучения (SLERP, TIES, DARE, task arithmetic). Названия вроде Fusion, Genesis, Nemotron-Mix, любые красивые собственные имена — почти всегда это.

Качество лотерейное. Иногда слияние лучше составляющих, чаще незаметно хуже, но с более выраженным «характером». Проверяемых замеров у авторов обычно нет.

Расцензуренные (Uncensored, Abliterated, Heretic)

  • Abliterated / orthogonalized — в пространстве активаций вычисляется направление, отвечающее за отказ, и вычитается из весов. Дообучения нет, вмешательство хирургическое.
  • Uncensored / dolphin-подобные — дообучение на выборке без отказов.

Псевдо-именованные

Сборки вида Claude-…-Deckard, GPT-…-Distill — дообучение открытой модели на выходах закрытой. К соответствующим компаниям отношения не имеют, название маркетинговое.

4. Формат весов

Формат описывает упаковку файла, а не качество модели.

Формат

Движок

Особенности

safetensors

Transformers, vLLM

Исходные веса в 16 битах. Эталон, из которого делают остальное

GGUF

llama.cpp, Ollama, LM Studio

Один файл, метаданные внутри, работа на процессоре и смешанная

EXL2 / EXL3

ExLlamaV2/V3

Только видеокарта, высокая скорость, гибкая битность (возможны 3,5 бита)

AWQ

vLLM, TensorRT

4 бита, ориентирован на пакетную обработку на сервере

GPTQ

старый стандарт

Вытесняется AWQ и EXL

MLX

MLX

Под единую память Apple Silicon

ONNX

ONNX Runtime

Кроссплатформенный вывод, встраиваемые устройства

Правило выбора: один пользователь на домашнем железе — GGUF (или MLX на Apple Silicon). Много одновременных запросов в production — vLLM с AWQ или FP8.

5. Квантизация

Исходные 16 бит сжимаются до 2–8.

Классические

Q4_0, Q4_1, Q5_0, Q8_0 — равномерное сжатие всех блоков. Устарели, кроме Q8_0 (потери неразличимы) и Q4_0 (совместимость и ускорение на некоторых процессорах).

K-кванты

Q3_K_S, Q4_K_M, Q5_K_M, Q6_K — разные слои сжимаются по-разному: внимание и важные матрицы бережнее, остальное сильнее. Суффиксы S / M / L — градация внутри разряда.

Q4_K_M — выбор по умолчанию. Оптимум по соотношению размера и качества, проверенный годами эксплуатации.

I-кванты

IQ2_M, IQ3_XXS, IQ4_XS — метод с кодовыми книгами. При равном размере файла качество выше, особенно на малых битностях. Плата: больше вычислений на распаковку. На видеокарте разница не видна, на слабом процессоре I-квант может оказаться медленнее K-кванта того же размера.

Матрица важности (imatrix)

Не тип квантизации, а способ подготовки: на калибровочном тексте измеряется, какие веса влияют на результат сильнее, и они сохраняются точнее. Сборки с пометкой imatrix или i1 при том же имени кванта заметно лучше — особенно ниже 4 бит.

Шкала квантизации

Q8_0     8 бит   потери неразличимы, файл вдвое больше нужного
Q6_K     6 бит   потери на уровне погрешности измерения
Q5_K_M   5 бит   отличный выбор, если память позволяет
Q4_K_M   4 бита  ЗОЛОТАЯ СЕРЕДИНА
IQ4_XS   4 бита  чуть меньше и лучше Q4_K_M, требовательнее к процессору
IQ3_M    3 бита  заметная деградация, оправдано ради большой модели
IQ2_M    2 бита  для очень крупных моделей работает, для мелких ломает

Главное правило: крупная модель в Q4 почти всегда лучше мелкой в Q8. 27B в Q4_K_M (17 ГБ) обыгрывает 9B в Q8_0 (9,5 ГБ) при сопоставимом расходе памяти.

Квантизация кэша контекста

Отдельная настройка, о которой забывают. Кэш ключей и значений при длинном контексте занимает гигабайты. Флаги --cache-type-k q8_0 --cache-type-v q8_0 уменьшают его вдвое почти без потерь. Ниже 8 бит для кэша опускаться не рекомендуется.

6. Служебные варианты

Черновик (Draft)

Маленькая модель (0,5–1,5 млрд) для спекулятивного декодирования: она быстро генерирует несколько токенов вперёд, большая проверяет их одним проходом. Ускорение в 1,5–2,5 раза без потери качества — результат математически идентичен обычной генерации.

Условие: общий словарь токенов с основной моделью, то есть одно семейство. Подключается параметром --model-draft, основную модель не заменяет.

Именно поэтому в каталоге под именем «27B» может лежать файл на 2,6 ГБ — это черновик к ней.

MTP / NoMTP

Multi-token prediction — дополнительная голова, предсказывающая несколько токенов сразу. Встроенное ускорение, но поддерживается не всеми версиями движков. Сборка NoMTP — без неё, компактнее и совместима шире.

Адаптеры (LoRA, QLoRA)

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

Расширенный контекст

128k, 1M, YaRN, RoPE-scaled — модель растянута на длинный контекст. Следует различать объявленный и рабочий объём: модель может принимать 128 тысяч токенов, но надёжно находить информацию только до 32 тысяч.

7. Лицензии

  • Apache 2.0 / MIT — полная свобода, включая коммерческое применение. Qwen, часть Mistral, DeepSeek.
  • Llama Community License — коммерция разрешена с ограничением по числу пользователей и требованием указывать происхождение.
  • Gemma Terms — собственные ограничения по допустимому применению.
  • CC-BY-NC, «только исследования» — коммерция запрещена.

8. Как читать имя файла

Qwen3-30B-A3B-Instruct-2507-UD-Q4_K_XL.gguf
│    │  │    │        │    │  │
│    │  │    │        │    │  └─ квантизация
│    │  │    │        │    └──── сборщик и метод (UD = Unsloth Dynamic)
│    │  │    │        └───────── дата версии
│    │  │    └────────────────── стадия обучения
│    │  └─────────────────────── активных параметров (MoE)
│    └────────────────────────── всего параметров
└─────────────────────────────── семейство и поколение

Дополнительные маркеры: -00001-of-00003 (файл разбит на части, нужны все), -i1- (собрано с матрицей важности), -abliterated, -draft, mmproj- (проектор для зрения).

9. Формула скорости

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

токенов/с ≈ пропускная способность памяти / объём активных весов

Практический коэффициент полезного действия — 60–75% от пиковой пропускной способности.

Память

Пик

Реально в llama.cpp

DDR4-3200, два канала

51 ГБ/с

25–35

DDR5-5600, два канала

90 ГБ/с

55–70

LPDDR5x-7467 (ноутбук)

120 ГБ/с

70–90

LPDDR5x-9600 (ноутбук 2026)

154 ГБ/с

95–115

Apple M-Pro

270 ГБ/с

200+

Apple M-Max

400–550 ГБ/с

350+

Серверный EPYC, 8–12 каналов

300–500 ГБ/с

250–400

RTX 3060 12 ГБ

360 ГБ/с

300+

RTX 4090 / 5090

1000–1800 ГБ/с

несопоставимо выше

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

10. Почему MoE меняет расклад

Расчёт для 70 ГБ/с — обычный настольный компьютер с DDR5:

Модель

Активно на токен

Скорость

4B dense Q4

~2,5 ГБ

20–28 т/с

8B dense Q4

~4,7 ГБ

12–15 т/с

14B dense Q4

~8,5 ГБ

6–8 т/с

27B dense Q4

~17 ГБ

3–4 т/с

70B dense Q4

~40 ГБ

1,5 т/с

30B-A3B MoE Q4

~1,8 ГБ

20–30 т/с

120B-A5B MoE Q4

~3 ГБ

12–18 т/с

Перелом наступает на 8–14 млрд параметров: дальше плотная модель превращается в переписку с задержкой. MoE на 30 млрд читает на токен меньше, чем плотная 4B.

Три оговорки к таблице:

  1. Память нужна вся. 30B-A3B в Q4_K_M — это ~18 ГБ в ОЗУ плюс контекст. Экономится время, не место.
  2. Каналы важнее частоты. Одноканальный ноутбук с DDR4 даёт ~20 ГБ/с — значения таблицы делятся на три.
  3. Разбор входа считается отдельно. Разбирается в следующем разделе.

11. Две скорости, которые путают

Генерация (decode) — упор в память, рассмотрена выше.

Разбор входа (prefill) — упор в вычисления. Здесь видеокарта и даже встроенная графика обгоняют процессорные ядра в разы.

Железо

Разбор входа

Генерация

Процессор

100–600 т/с

по формуле выше

Встроенная графика

500–2000 т/с

почти как процессор

Дискретная видеокарта

3000–20000 т/с

высокая

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

12. Смешанный режим

Самый практичный способ запустить большую модель на скромной видеокарте.

Для плотных моделей применяется выгрузка слоёв:

llama-server -m model-Q4_K_M.gguf -ngl 24 -c 8192

-ngl N кладёт на видеокарту первые N слоёв. Выигрыш пропорционален доле выгруженного: половина слоёв — примерно вдвое быстрее.

Для MoE применяется выгрузка экспертов, приём заметно эффективнее:

llama-server -m Qwen3-30B-A3B-Q4_K_M.gguf \
  -ngl 99 \
  --n-cpu-moe 99 \
  -c 16384 \
  --cache-type-k q8_0 --cache-type-v q8_0

-ngl 99 отправляет все слои на видеокарту, --n-cpu-moe 99 возвращает на процессор именно матрицы экспертов — самую объёмную и самую редко используемую часть. На карте с 8 ГБ так запускается модель на 30 млрд параметров со скоростью 15–25 т/с. Уменьшение числа в --n-cpu-moe переносит часть экспертов на карту, значение подбирается по остатку видеопамяти.

13. Сколько памяти нужно на самом деле

Память = вес файла + кэш контекста + служебное (0,5–1 ГБ)

Кэш контекста для модели среднего размера с GQA — примерно 0,5–2 ГБ на 8 тысяч токенов, при q8_0 вдвое меньше. Для моделей с MHA (старые поколения) — в разы больше.

Плюс операционная система: Windows с браузером занимает 6–9 ГБ.

14. Ориентиры по железу

Железо

Разумный выбор

8 ГБ видеопамяти

7–9B в Q4_K_M, контекст 8–16k

12 ГБ

12–14B в Q4_K_M

16 ГБ

24–27B в IQ4_XS либо 14B в Q6_K

24 ГБ

27–32B в Q5_K_M либо MoE 30B-A3B

32–48 ГБ

70B в Q4_K_M

Ноутбук, 32 ГБ ОЗУ, без дискретной карты

до 14B dense либо MoE 30B-A3B

Ноутбук, 64 ГБ ОЗУ

MoE до 35B свободно, 70B dense медленно, но работает

Процессор + 64 ГБ ОЗУ

MoE — единственный вариант с приемлемой скоростью

Apple Silicon

MLX-сборки, доступно ~75% общей памяти

Отдельно про тонкие ноутбуки: базовое потребление 25 Вт, турбо до 80 Вт, но долгий вывод упирается в теплоотвод. Устойчивая производительность оказывается ближе к 30–40 Вт. Замеры проводятся при подключённом питании и в режиме максимальной производительности, иначе результаты расходятся вдвое.

15. Чем запускать локальную модель

Инструмент

Сценарий

llama-server

Полный контроль над флагами. Интерфейс, совместимый с OpenAI, из коробки

Ollama

Простота, автозагрузка моделей. Обёртка над llama.cpp, часть флагов недоступна

LM Studio

Графический интерфейс, поиск моделей, подбор кванта под железо

vLLM

Сервер с видеокартами, много одновременных запросов, пакетная обработка

ExLlamaV3

Максимальная скорость на одной видеокарте, если модель влезает целиком

Ollama и LM Studio внутри используют тот же llama.cpp. Установка Ollama — это установка обёртки над ним.

Рабочая команда llama-server

llama-server \
  -m /models/Qwen3-30B-A3B-Instruct-Q4_K_M.gguf \
  --host 0.0.0.0 --port 8080 \
  -c 16384 \
  -ngl 99 \
  --n-cpu-moe 99 \
  --cache-type-k q8_0 --cache-type-v q8_0 \
  --flash-attn \
  --temp 0.7 --min-p 0.05 --top-p 1.0 --top-k 0 \
  --jinja \
  -t 8

Назначение флагов:

  • -c — размер контекста в токенах;
  • -ngl — слоёв на видеокарту (99 = все);
  • --n-cpu-moe — экспертов обратно на процессор;
  • --cache-type-k/v — сжатие кэша;
  • --flash-attn — экономит память и ускоряет длинный контекст;
  • --jinja — брать шаблон диалога из метаданных GGUF (без этого частая причина поломок);
  • -t — число потоков, ставится по числу производительных ядер, не по общему числу. На гибридных процессорах Intel добавление E-ядер часто замедляет вывод.

Со спекулятивным декодированием добавляются:

  --model-draft /models/Qwen3-0.6B-Q8_0.gguf \
  --draft-max 16 --draft-min 4

Подключение к n8n и прочей автоматизации

llama-server отдаёт /v1/chat/completions в формате OpenAI. В узле OpenAI достаточно подменить базовый адрес на http://<IP>:8080/v1, ключ поставить любой непустой. Код менять не нужно — внешний поставщик заменяется на локальный подстановкой адреса.

16. Параметры вывода

Раздел, который важнее выбора между Q4_K_M и Q5_K_M. Неверная температура портит ответ сильнее, чем лишний бит квантизации.

Параметр

Что делает

Разумное значение

temperature

Разброс выбора. 0 — всегда самый вероятный токен

0,7 общее; 0,1–0,3 код и извлечение данных

min_p

Отсекает токены с вероятностью ниже доли от лучшего. Современная замена top_p

0,05

top_p

Ядро выборки: берутся токены до накопленной вероятности p

1,0 при использовании min_p

top_k

Только k самых вероятных

0 (выключено) или 40

repeat_penalty

Штраф за повтор токена

1,0–1,1. Выше 1,15 ломает связность

repeat_last_n

Окно, в котором ищутся повторы

64–256

presence_penalty

Штраф за само появление токена

0–0,5

DRY

Умный штраф за повторы: гасит длинные повторяющиеся последовательности, не трогая обычные слова

Хорошая замена repeat_penalty

XTC

Иногда выбрасывает самый вероятный токен ради разнообразия

Только для творческих задач

mirostat

Автоподстройка температуры под целевую «неожиданность»

Устарел, изредка полезен

Готовые наборы

Извлечение данных, JSON, классификация

temp 0.1, min_p 0.05, top_p 1.0, repeat_penalty 1.0

Повторы здесь не проблема — в JSON структура и должна повторяться, штраф её ломает.

Код

temp 0.2, min_p 0.05, repeat_penalty 1.0

Общий диалог

temp 0.7, min_p 0.05, top_p 1.0, top_k 0, repeat_penalty 1.05

Рассуждающие модели — почти всегда есть рекомендации автора в карточке, приоритет за ними. Типичный набор: temp 0.6, top_p 0.95, top_k 20, min_p 0. Штрафы за повторы для них не выставляются, они мешают цепочке рассуждений.

Творческий текст

temp 0.9–1.1, min_p 0.03, DRY 0.8

Диагностика по симптомам

Симптом

Причина

Действие

Зацикливается, повторяет фразу

Штраф за повторы выключен, температура слишком низкая

repeat_penalty 1.05–1.1 или включить DRY

Бессвязность, случайные слова

Температура слишком высокая, нет отсечки

Понизить temp, поставить min_p 0.05

Отвечает и продолжает за пользователя

Неверный шаблон диалога или токены остановки

См. следующий раздел

Обрывается на полуслове

Достигнут n_predict или ложный токен остановки

Увеличить лимит, проверить шаблон

Игнорирует инструкции

Взята базовая модель вместо instruct, либо квант ниже 3 бит

Сменить модель или квант

Ломается только на русском

Слишком низкий квант

Не опускаться ниже Q4_K_M

Забывает начало разговора

Контекст переполнен, старое вытесняется

Увеличить -c или сжимать историю

17. Шаблон диалога и токены остановки

Причина большинства сообщений «модель сломалась».

У каждого семейства свой формат разметки ролей: ChatML (<|im_start|>user), Llama-3 (<|start_header_id|>), Gemma (<start_of_turn>), Mistral ([INST]). GGUF хранит шаблон в метаданных, но в кустарных сборках, слияниях и расцензуренных вариантах он часто прописан неверно или потерян.

Симптомы неверного шаблона: модель отвечает и тут же пишет реплику за пользователя; бесконечно продолжает сама себя; обрывается после первого слова; игнорирует системное указание.

Порядок устранения:

  1. Запуск с --jinja — берётся шаблон из метаданных.
  2. Проверка содержимого: llama-server печатает шаблон в журнале при старте.
  3. Если пусто или неверно — подстановка вручную: --chat-template chatml (либо llama3, gemma, mistral).
  4. Проверка токенов остановки. При бесконечной генерации добавляется --reverse-prompt "<|im_end|>".

Ориентир: определяется семейство, на котором построена сборка, и берётся его шаблон. Слияние на основе Qwen — ChatML.

18. Контекст: объявленный и рабочий

Модель может заявлять 128 тысяч токенов и надёжно работать до 16–32 тысяч. Дальше начинается вымывание: детали из середины перестают учитываться.

Проверяется задачей «иголка в стоге сена»: в длинный текст помещается факт в разных позициях, затем задаётся вопрос о нём. Провал обычно приходится на середину контекста, не на конец.

Практические следствия:

  • Значение -c не выставляется в максимум «на всякий случай» — это расходует память впустую.
  • Для работы с документами надёжнее поиск по фрагментам (векторизатор плюс реранкер), чем загрузка всего документа в контекст.
  • Сжатие кэша до q8_0 на качество почти не влияет, до q4_0 — влияет заметно.

19. Токенизация кириллицы

Раздел, которого нет в англоязычных инструкциях, а он меняет все расчёты.

Кириллица кодируется хуже латиницы. Одно русское слово — часто 2–4 токена против 1–2 у английского аналога. Коэффициент по тексту в среднем 2–2,5 раза.

  • Контекст сжимается вдвое. Объявленные 32 тысячи токенов — это примерно 13–16 тысяч слов английского текста и 6–8 тысяч русского по объёму содержания.
  • Скорость падает вдвое. 15 токенов в секунду на русском воспринимаются как 7 на английском, поскольку на тот же объём смысла требуется вдвое больше токенов.
  • Стоимость выше при сравнении с облачными поставщиками.

Поколения токенизаторов различаются: у Qwen 3 и Llama 3 кириллица кодируется заметно экономнее, чем у Llama 2 и старых Mistral.

20. Квантизация и русский язык

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

Практический эффект: русский деградирует раньше английского. Модель, которая в IQ3_M ещё уверенно отвечает по-английски, на русском уже путает падежи и вставляет английские слова.

21. Какие семейства реально держат русский

Формально многоязычными называют себя почти все. Реально различаются:

  • Qwen — лучший баланс для русского среди открытых моделей, особенно от 14 млрд параметров.
  • Gemma — хороший русский, аккуратный стиль.
  • Mistral Large / Nemo — приемлемо.
  • Llama — заметно слабее в русском, чем в английском, при равном размере.
  • Модели с дообучением на русском корпусе — стоят проверки, но многие устарели относительно свежих Qwen.

Расцензуренные и слитые сборки теряют русский первыми. Абляция и слияние бьют по редким языкам сильнее, чем по основному. Ухудшение работы сборки на русском относительно исходной модели — воспроизводимый эффект, а не субъективное впечатление.

Проверка простая: запрос на пересказ абзаца по-русски и на письмо в деловом стиле. Английские вставки, кальки и сбитые падежи видны сразу.

22. Числовые методы проверки качества

Открытые рейтинги перенасыщены подгонкой под них. Проверка ведётся на собственных данных.

Перплексия

Показывает, насколько модель «удивляется» тексту:

llama-perplexity -m model-Q4_K_M.gguf -f test.txt -c 4096

Само число бессмысленно, сравнивать имеет смысл разные кванты одной модели на одном тексте. Рост перплексии на 2–3% относительно Q8_0 — норма, на 15% — квант выбран слишком низкий.

Расхождение с исходной моделью (KL divergence)

Более чувствительный показатель, чем перплексия: показывает, насколько распределение вероятностей квантованной модели разошлось с исходной. llama.cpp считает его через --kl-divergence.

Иголка в стоге сена

Проверка реального контекста, описана в разделе 18.

23. Свой набор задач

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

  1. Отобрать 15–25 задач, которые действительно решаются на практике, включая сложные.
  2. Зафиксировать ожидаемый результат хотя бы в общих чертах.
  3. Прогнать через кандидатов с одинаковыми параметрами вывода.
  4. Оценивать вслепую, без информации о том, какая модель что выдала.

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

Отдельно проверяются:

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

24. Доверие к сборщику

GGUF-файлы готовят энтузиасты, и качество сборок различается.

  • Предпочтение известным аккаунтам сборщиков либо официальным сборкам авторов модели.
  • Проверка, указана ли матрица важности и на каком корпусе велась калибровка.
  • Сверка заявленной архитектуры с исходной моделью.
  • Чтение карточки: добросовестный автор описывает, что именно сделано и какие замеры получены. Отсутствие любых замеров — сигнал само по себе.

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

25. Ограничения подхода

Раздел для перечитывания перед внедрением в рабочий процесс.

Выдумки. Локальная модель выдумывает не реже облачной, а меньшие модели — заметно чаще. Особенно опасны правдоподобные детали: номера законов, даты, названия. Всё проверяемое подлежит проверке.

Отсечка знаний. Модель знает мир на момент обучения. Для актуальных данных требуется поиск или подключение к внешним источникам.

Квантизация не бесплатна. Даже Q4_K_M — это потеря. На простых задачах незаметна, на длинных цепочках рассуждений накапливается.

Расцензуренные модели хуже исходных. Это измеримый факт, а не оценочное суждение. Для рабочих задач берётся официальный instruct.

Слияния — лотерея. Красивое название не заменяет замеров.

26. Порядок действий

  1. Определить класс задачи. Диалог — LLM. Поиск по документам — векторизатор плюс реранкер, а не крупная LLM. Изображения — VLM с проектором.
  2. Посчитать бюджет памяти. Общий объём минус система минус контекст. На 32 ГБ реально доступно около 20.
  3. Выбрать тип. Слабая память — MoE. Есть видеокарта — плотная модель, влезающая целиком.
  4. Взять самую крупную модель в Q4_K_M, которая помещается. Не наоборот.
  5. Проверить свежесть. Поколение важнее хитрой сборки: модель годовой давности того же размера обычно заметно слабее новой.
  6. Начать с официального instruct. Слияния и расцензуренные варианты сравниваются с ним как с точкой отсчёта.
  7. Проверить шаблон диалога сразу после загрузки.
  8. Настроить параметры вывода под задачу, не оставляя умолчания интерфейса.
  9. Прогнать собственный набор из двадцати задач.
  10. Замерить скорость на своём железе: llama-bench -m model.gguf.

Частые вопросы

Что лучше — большая модель в Q4 или маленькая в Q8?

При сопоставимом расходе памяти крупная модель в Q4_K_M почти всегда выигрывает. 27B в Q4 занимает около 17 ГБ и превосходит 9B в Q8_0 на 9,5 ГБ по качеству ответов. Исключение — сценарии, требующие точного следования формату при квантах ниже 3 бит.

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

В формате GGUF такая модель состоит из двух файлов. Без отдельного mmproj-*.gguf проектор отсутствует, и картинки молча игнорируются. Загружаются оба файла, проектор подключается параметром запуска движка.

Сколько оперативной памяти нужно для модели 30B?

MoE-модель 30B-A3B в Q4_K_M занимает около 18 ГБ плюс кэш контекста. С учётом операционной системы комфортный минимум — 32 ГБ ОЗУ, при этом контекст ограничивается 16 тысячами токенов со сжатием кэша до q8_0.

Почему на русском языке скорость ниже?

Кириллица требует в 2–2,5 раза больше токенов на тот же объём содержания. Пропускная способность памяти при этом не меняется, поэтому воспринимаемая скорость падает примерно вдвое, а полезный объём контекста сокращается в те же 2–2,5 раза.

Стоит ли брать расцензуренные сборки для работы?

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

Ollama или llama-server?

Ollama — обёртка над тем же llama.cpp с автозагрузкой моделей и упрощённой конфигурацией. llama-server даёт доступ ко всем флагам, включая --n-cpu-moe, сжатие кэша и спекулятивное декодирование. Для тонкой оптимизации под конкретное железо применяется второй вариант.

Как ускорить обработку длинного запроса на ноутбуке?

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

Что даёт спекулятивное декодирование?

Ускорение генерации в 1,5–2,5 раза без потери качества: результат математически идентичен обычному выводу. Требуется черновая модель того же семейства с общим словарём токенов, подключается через --model-draft.

Заключение

Локальный вывод перестал быть экспериментом и стал предсказуемой инженерной задачей: пропускная способность памяти определяет скорость, архитектура MoE снимает потолок по размеру модели на скромном железе, а Q4_K_M с матрицей важности остаётся опорной точкой по соотношению качества и объёма. Основные потери качества в 2026 году возникают не из-за железа, а из-за неверного шаблона диалога, оставленных по умолчанию параметров вывода и выбора слияний вместо официальных instruct-сборок. Расчёт бюджета памяти до загрузки, проверка шаблона сразу после неё и собственный набор из двадцати задач вместо публичных рейтингов дают инфраструктуру, которая работает автономно, без внешних поставщиков и с предсказуемой latency.

Оцените запись