llm-runner запускает модели в формате GGUF
Практически это значит:
- можно использовать любые совместимые
GGUF-веса (chat/instruct/code/embedding); - модель должна лежать в каталоге
model_path(изconfig.yaml) или в его подкаталогах; - выбор модели идёт по имени файла (
.gguf) или через YAML-манифест.
Проверка списка локальных моделей:
./build/gen-runner modelsПроверка у запущенного сервиса:
./build/gen-runner remote modelsB = billion (миллиард параметров модели).
8B= примерно 8 миллиардов параметров;14B= примерно 14 миллиардов;70B= примерно 70 миллиардов.
Общее правило:
- больше
B-> обычно выше качество/знания/стабильность; - но больше
B-> выше требования к RAM/VRAM и ниже скорость.
Это тип квантования: сколько бит выделяется на хранение весов модели.
Простая идея:
- чем меньше бит на вес -> меньше размер файла и ниже требования к памяти;
- чем меньше бит -> сильнее теряется точность -> может падать качество ответа;
- чем больше бит -> ближе к исходному качеству, но тяжелее по RAM/VRAM.
Q4~ около 4 бит на вес (сильная компрессия);Q5~ около 5 бит на вес;Q8~ около 8 бит на вес;FP16= 16-битные веса (почти "полноценная" точность относительно квантизированных вариантов).
Важно: в реальности там есть служебные данные, блоки и коэффициенты масштабирования, поэтому это не "идеальные" 4/5/8 бит на каждый параметр. Но как практичный ориентир это работает.
- Память:
Q4 < Q5 < Q8 < FP16; - Скорость: обычно легкие кванты (
Q4) быстрее на слабом железе; - Качество: обычно
Q8/FP16стабильнее на сложных задачах,Q4чаще упрощает/ошибается в деталях.
Q4_K_M- популярный баланс памяти/качества, хороший старт;Q5_K_M- немного тяжелее, обычно качественнее;Q8_0- ближе к высокому качеству, но заметно больше расход памяти.
Это подварианты схемы квантования (группировка блоков, внутренние коэффициенты, формат хранения).
Практически:
- смотрите на бенчмарки и свой сценарий, а не только на "красивость" суффикса;
- в одном и том же семействе обычно
Q5_K_MкачественнееQ4_K_M, но медленнее/тяжелее; Q8_0часто выбирают, когда памяти достаточно и нужен запас качества.
- Мало памяти -> начинайте с
Q4_K_M. - Память есть, качество не хватает -> пробуйте
Q5_K_M. - Нужен максимум качества и есть запас памяти ->
Q8_0(или менее сжатые варианты).
Пример:
Qwen2.5-7B-Instruct-Q4_K_M.gguf
Расшифровка:
Qwen2.5- семейство модели;7B- размер (параметры);Instruct- версия для диалога/инструкций;Q4_K_M- тип квантования;.gguf- формат файла.
Если хотите отправлять изображения, нужен не только основной .gguf, но и файл проектора mmproj (тоже обычно .gguf), который указывается в YAML-манифесте:
from: Qwen2.5-VL-7B-Instruct-Q4_K_M.gguf
mmproj: mmproj-Qwen2.5-VL-f16.ggufБез mmproj запросы с изображениями не заработают.
Быстрый ориентир:
- мало памяти (обычный ноутбук/CPU):
7B/8B+Q4_K_M; - средний ресурс:
7B/14B+Q5_K_M; - мощная GPU/много RAM:
14B+или32B/70B, квантыQ8или выше.
Практика:
- Начните с
7B/8BвQ4_K_M. - Если качество недостаточно - переходите на
Q5_K_Mили большийB. - Если хватает памяти - пробуйте
Q8_0для лучшего качества.
B(размер модели) иQ*(квантование) - это разные оси выбора.8B Q8может быть тяжелее, чем14B Q4- всегда смотрите фактический размер файла и расход памяти.- Для продакшена лучше протестировать 2-3 соседних варианта на ваших реальных запросах.
- Файл модели есть в
model_pathи имеет расширение.gguf. - Модель видна в
./build/gen-runner models. - Для vision добавлен
mmprojв YAML.
Ниже практичный способ оценить запуск до долгих экспериментов.
Размер файла - самый быстрый и полезный индикатор требований к памяти.
Правило для CPU/RAM:
- минимум нужен объем RAM больше размера файла;
- комфортно:
RAM >= размер модели x 1.5..2.0.
Примеры:
- модель 4 GB -> минимум около 6 GB свободной RAM, комфортно 8+ GB;
- модель 12 GB -> минимум около 16 GB свободной RAM, комфортно 24+ GB.
Почему не 1:1:
- кроме весов, память нужна на контекст (
n_ctx), KV-cache, служебные структуры и сам процесс.
Если модель частично или полностью оффлоадится на GPU (gpu_layers > 0), нужна свободная VRAM.
Базовое правило:
- для полного размещения модели на GPU обычно нужно примерно
размер gguf + запас 20..40%; - если VRAM мало - уменьшайте
gpu_layers, и часть модели уйдет в RAM.
Проверка в Linux/NVIDIA:
nvidia-smiПризнаки, что оффлоад идет:
- при загрузке модели растет занятая VRAM;
- во время генерации видна активность GPU.
Чем выше n_ctx, тем больше память под KV-cache.
n_ctx=4096- базовый безопасный старт;n_ctx=8192+- ощутимо тяжелее по памяти;- для слабого железа сначала снижайте
n_ctx, а не только размер модели.
В gen-runner контекст задается через:
- глобально -
max_context_tokens/ настройки раннера; - на модель -
num_ctxв YAML-манифесте.
На CPU модель может "запуститься", но быть слишком медленной.
На скорость влияют:
- размер модели (
B); - квантование (
Q4быстрее,Q8медленнее); - число потоков (
threads,threads_batch); - тип железа (частота, кэш, память).
Практичный критерий:
- если скорость слишком низкая, сначала переходите на более легкий квант (
Q5 -> Q4) или меньший размер (14B -> 7B/8B).
Для мультимодальных моделей дополнительно загружается mmproj.
Это значит:
- дополнительная память (RAM/VRAM);
- более медленная обработка;
- для слабого железа лучше text-only модель.
- Начните с
7B/8BвQ4_K_M. - Поставьте
n_ctx=4096. - Если есть GPU - выставьте умеренный
gpu_layersи проверьтеnvidia-smi. - Если упирается в память:
- уменьшите
n_ctx; - уменьшите
gpu_layers; - возьмите более легкий квант/меньший
B.
- уменьшите
- Если памяти хватает, но качество низкое:
- сначала
Q4 -> Q5/Q8, - затем
7B/8B -> 14B+.
- сначала
out of memory/ падение процесса:- модель слишком тяжелая для RAM/VRAM;
- уменьшайте
B, квант илиn_ctx.
- Модель грузится очень долго и "тормозит":
- слишком тяжелая модель для CPU;
- берите меньший размер или более легкий квант.
- GPU почти не используется:
- проверьте сборку с CUDA и параметр
gpu_layers; - смотрите логи и
nvidia-smi.
- проверьте сборку с CUDA и параметр
Показать доступные модели:
./build/gen-runner modelsПроверить, что раннер видит модели:
./build/gen-runner remote modelsПроверить состояние NVIDIA GPU:
nvidia-smi