Локальные LLM в 2026: какие модели и на каком железе
Что такое локальная LLM?
Локальная LLM - языковая модель с открытыми весами, которая работает на вашем компьютере без облачного API. Веса скачиваются и считаются в вашей памяти, поэтому выбор модели определяют объём памяти (веса плюс KV-кэш контекста), лицензия и то, что важнее для задачи: скорость или качество.
TL;DR
- -Память под модель считается из двух частей: веса (параметры × бит на вес / 8) и KV-кэш контекста. По документации llama.cpp квантизация Q4_K_M занимает около 4,9 бита на вес, Q8_0 около 8,5, F16 - 16.
- -KV-кэш растёт с контекстом и сильно зависит от архитектуры. У qwen3:8b это 144 KiB на токен, и расчёт совпал с замером в Ollama с точностью 0,2 ГБ. У Qwen3.8-27B с гибридным вниманием по конфигу выходит около 64 KiB на токен.
- -Открытые веса не означают, что модель запустится на одной машине. DeepSeek V4.1 Flash и Mistral Large 4 выложены под открытыми лицензиями, но в Ollama доступны только как облачные модели, а локально им нужен кластер GPU.
- -На Mac видеоядро получает не всю память: на M4 Max с 36 ГБ Ollama видит 28,1 ГиБ. В замере на этой машине MoE gemma4:26b-a4b генерировала 49,8 tok/s, а плотная qwen3.8:27b в GGUF Q4_K_M 10,6 tok/s при одинаковом файле около 18 ГБ.
- -Лицензии различаются. Qwen3.8-27B, Gemma 4, gpt-oss и Muse Glimmer 30B выпущены под Apache 2.0, DeepSeek V4.1 Flash под MIT, а у Qwen3.8-Flash-Next, Llama 4 и Mistral Large 4 собственные лицензии, текст которых нужно читать перед коммерческим использованием.
Локальная LLM - языковая модель с открытыми весами, которая работает на вашем компьютере без облачного API. Веса скачиваются и считаются в вашей памяти, поэтому выбор модели определяют три вещи: объём памяти (веса плюс KV-кэш контекста), лицензия и то, что важнее для задачи, скорость или качество.
Выбор обычно начинают с рейтинга «лучших моделей», а заканчивают тем, что модель не помещается в память или помещается, но с контекстом на 4 тысячи токенов. На карточке Qwen3.8-27B написано 262 144 токена контекста, на странице тега в Ollama файл весит 18 ГБ, а сколько памяти модель займёт на конкретной машине, не указано ни там, ни там. На Mac к этому добавляется лимит видеопамяти, для которого нет официальной формулы, а у одного и того же тега Ollama на Mac и на Linux оказываются разные файлы.
Статья о том, как выбирать локальную модель расчётом вместо рейтинга: формула памяти «веса + KV-кэш» со сверкой по замерам в Ollama, таблица «сколько памяти - какие модели» с контекстом и лицензиями, обзор семейств Qwen, Gemma 4, gpt-oss, DeepSeek, Mistral и Muse, раннеры и замеры на Mac с Apple M4 Max и 36 ГБ памяти. Установка Ollama, API и Modelfile разобраны отдельно в гайде по Ollama.
Что такое локальная LLM и когда она оправдана
Локальную модель запускает раннер: Ollama, llama.cpp, LM Studio, vLLM или MLX. Он загружает веса в видеопамять (на Mac в unified memory), держит KV-кэш контекста и отдаёт API, чаще всего OpenAI-совместимый. Приложения и агенты подключаются к нему так же, как к облачному провайдеру, только base_url указывает на localhost.
| Локальная модель | Облачный API | |
|---|---|---|
| Данные | Остаются на машине | Уходят провайдеру |
| Стоимость | Железо и электричество | Оплата за токены |
| Качество | Ниже фронтирных моделей, растёт с размером | Фронтирные модели: Opus 5.5, Sonnet 5.5, Fable 5.1 |
| Контекст | Ограничен памятью, а не карточкой модели | Сотни тысяч токенов и больше |
| Работа без сети | Да, после загрузки весов | Нет |
Где локальная модель оправдана:
- данные нельзя отправлять наружу: персональные данные, внутренние логи, код под NDA. В FAQ Ollama сказано, что при локальном запуске Ollama не видит промпты и данные;
- задача массовая и простая: классификация, извлечение полей, черновые саммари, эмбеддинги для поиска;
- нужна работа офлайн или эксперименты без счёта за токены;
- нужен предсказуемый резерв на случай, когда облачный провайдер недоступен.
Где не оправдана: многошаговые агентные задачи и сложный рефакторинг. В тесте с OpenCode локальные 7-8B модели выполняли короткие правки, но многошаговую задачу стабильно не решила ни одна, подробности в гайде по OpenCode. В production локальная модель обычно становится одним из провайдеров рядом с облачными. Как распределять между ними задачи и строить fallback, разобрано в статьях про провайдеров LLM в production и Production LLM Stack.
Сколько памяти нужно локальной LLM: формула
Память под модель складывается из весов, KV-кэша контекста и рабочих буферов раннера. Первые две части считаются по формуле, третью видно только в замере.
Веса и квантизация
Веса = число параметров × бит на вес / 8. Квантизация уменьшает число бит на вес. Названия вроде «Q4» и «Q8» округлены: в квантизациях llama.cpp часть тензоров хранится с большей точностью, и реальная цифра выше. Таблица из документации llama-quantize на примере Llama 3.1 8B:
| Квантизация | Бит на вес | Размер для 8B |
|---|---|---|
| Q4_K_M | 4,89 | 4,58 ГиБ |
| Q5_K_M | 5,70 | 5,33 ГиБ |
| Q6_K | 6,56 | 6,14 ГиБ |
| Q8_0 | 8,50 | 7,95 ГиБ |
| F16 | 16,0 | 14,96 ГиБ |
Отсюда быстрое правило для Q4_K_M: около 0,6 ГБ на миллиард параметров. Для 27B это ~17 ГБ, и файл qwen3.8:27b-q4_K_M на ollama.com весит 18 ГБ: в нём ещё vision-энкодер. Q8_0 почти вдвое больше, у той же модели 30 ГБ, BF16 - 56 ГБ.
Кроме GGUF-квантизаций llama.cpp, на Apple Silicon встречаются форматы MLX. В библиотеке Ollama это теги с суффиксами nvfp4, mxfp8 и mlx. NVFP4 - 4-битный формат NVIDIA, по размеру файл близок к Q4_K_M: qwen3.8:27b-nvfp4 тоже 18 ГБ. По данным блога Ollama, на Gemma 4 12B потеря качества относительно BF16 (по перплексии) у NVFP4 примерно вдвое меньше, чем у q4_K_M. Это измерение вендора на одной модели.
KV-кэш контекста
На каждый токен контекста модель хранит ключи и значения (K и V) во всех слоях с полным вниманием:
KV на токен = 2 × слои_с_полным_вниманием × KV-головы × head_dim × байт_на_элемент
KV всего = KV на токен × токены контекста
Параметры берут из config.json модели на Hugging Face. По умолчанию Ollama хранит кэш в f16, это 2 байта на элемент. Сверка с замерами из гайда по Ollama (Ollama 0.40.14, контекст 32768, M4 Max):
| Модель | Слои / KV-головы / head_dim | KV на токен | KV при 32k | Память минус файл (ollama ps) |
|---|---|---|---|---|
| qwen2.5-coder:7b | 28 / 4 / 128 | 56 KiB | 1,75 ГиБ | 6,6 − 4,7 = 1,9 ГБ |
| qwen3:8b | 36 / 8 / 128 | 144 KiB | 4,5 ГиБ | 9,9 − 5,2 = 4,7 ГБ |
Для обычного трансформера с grouped-query attention расчёт сходится с замером в пределах 0,2 ГБ. У qwen3:8b KV-кэш при 32k почти равен весам. У qwen2.5-coder:7b, где KV-голов вдвое меньше, а слоёв 28 вместо 36, он в 2,5 раза меньше, хотя модели почти одного размера.
Сверять расчёт по ollama ps получается не для всех моделей. В замере ниже у моделей на раннере llamacpp колонка SIZE оказалась несопоставима с файлом: 1,6 ГБ у gemma4:26b-a4b при файле 18 ГБ. Перед сверкой посмотрите RUNNER в ollama ps, а для llama.cpp-моделей считайте занятость как файл плюс footprint процесса раннера.
256K на карточке не равно 256K в вашей памяти
Новые архитектуры держат полное внимание только в части слоёв, поэтому их контекст дешевле. Расчёт в таблице сделан по config.json моделей на Hugging Face и замером не подтверждён:
| Модель | Устройство внимания | KV на токен (оценка) | При 32k | При максимуме |
|---|---|---|---|---|
| Qwen3.8-27B | 64 слоя: 16 с полным вниманием (4 KV-головы, head_dim 256), 48 Gated DeltaNet с постоянным состоянием | 64 KiB | ~2 ГиБ | ~16 ГиБ при 256K |
| Gemma 4 31B | 10 глобальных слоёв (4 KV-головы, head_dim 512) + 50 со скользящим окном 1024 токена | 40-80 KiB + ~0,8 ГиБ на окна | ~2-3,3 ГиБ | ~11-21 ГиБ при 256K |
| Gemma 4 26B-A4B | 5 глобальных слоёв (2 KV-головы, head_dim 512) + 25 со скользящим окном | 10-20 KiB + ~0,2 ГиБ | ~0,5-0,8 ГиБ | ~2,7-5,2 ГиБ при 256K |
| gpt-oss-20b | 12 слоёв полного внимания (8 KV-голов, head_dim 64) + 12 со скользящим окном 128 | 24 KiB | ~0,75 ГиБ | ~3 ГиБ при 128K |
Вилка у Gemma 4 появляется из-за флага attention_k_eq_v в конфиге: в глобальных слоях ключи и значения общие, и если раннер это использует, кэш вдвое меньше.
На Mac с 36 ГБ, где GPU видит 28,1 ГиБ, эта разница становится практической. Qwen3.8-27B в 4 битах (18 ГБ) с полным окном 256K потребовала бы ещё ~16 ГиБ под кэш и в лимит не поместится. С 32k контекста она помещается, но впритык. В замере 7 ноября qwen3.8:27b-nvfp4 при контексте 32768 работала на 100% GPU и занимала в ollama ps 18 ГБ сразу после загрузки, а после прогонов с промптом на 8,9K токенов уже 25 ГБ. KV-кэш на все 32k по расчёту занимает около 2 ГиБ, так что основную часть прироста дают рабочие буферы MLX-раннера: раскладку по частям Ollama не показывает. Поэтому запас «сверху» нельзя назначить одной цифрой, его проверяют на своей машине и на своих длинных промптах.
Квантизация KV-кэша и Flash Attention
Кэш можно хранить в меньшей точности. По FAQ Ollama:
OLLAMA_KV_CACHE_TYPE=q8_0занимает примерно половину памяти f16,q4_0примерно четверть;- квантизация кэша работает только с включённым Flash Attention (Ollama включает его сама, если бэкенд поддерживает);
- настройка глобальная и действует на все модели сервера;
- память растёт пропорционально
OLLAMA_NUM_PARALLEL × OLLAMA_CONTEXT_LENGTH, поэтому каждый параллельный поток получает свой кэш.
Описание в FAQ относится к движку Ollama на основе llama.cpp. Действует ли переменная на MLX-раннер, для этой статьи не проверялось.
Железо для локальных LLM: Mac, NVIDIA, CPU
Скорость генерации у локальной модели упирается в память: на каждый новый токен раннер читает из памяти все активные веса. Отсюда оценка сверху: пропускная способность памяти, делённая на объём активных весов в байтах. Это потолок, реальная скорость обычно ниже. Выше него поднимает спекулятивное декодирование, когда за одно чтение весов модель принимает больше одного токена. У тестового M4 Max с 36 ГБ пропускная способность 410 ГБ/с, и для qwen2.5-coder:7b с файлом 4,7 ГБ потолок около 87 токенов в секунду, а в замере на Ollama 0.40.14 вышло 69,5, примерно 80% от потолка. Обработка промпта (prefill) считает все токены параллельно и зависит в первую очередь от вычислительной мощности GPU.
Apple Silicon
У Mac память общая для CPU и GPU (unified memory), поэтому на нём помещаются модели, которым на дискретной карте понадобилось бы 24-48 ГБ видеопамяти. M4 Max выпускается с объёмом до 128 ГБ и пропускной способностью до 546 ГБ/с, у M4 Pro до 64 ГБ и 273 ГБ/с (Apple Newsroom). 546 ГБ/с относится к старшей версии M4 Max с 16-ядерным CPU. Конфигурация на 36 ГБ, на которой сняты замеры в статье, бывает только с 14-ядерным CPU и 32-ядерным GPU, у неё 410 ГБ/с.
GPU получает не всю память. На M4 Max с 36 ГБ сервер Ollama пишет в лог total_vram=28.1 GiB, около 78% от объёма. Официальной формулы этой доли у Apple и Ollama нет, на машинах с другим объёмом её нужно смотреть в логе сервера. Системный лимит iogpu.wired_limit_mb на тестовой машине не переопределён (значение 0). Менять его для этой статьи не пробовали, и советовать это без проверки нельзя.
От total_vram зависит и контекст по умолчанию в Ollama (docs.ollama.com/context-length): меньше 24 GiB - 4k токенов, 24-48 GiB - 32k, от 48 GiB - 256k. Mac с 36 ГБ попадает в средний диапазон и получает 32768.
Второй путь на Mac - MLX, фреймворк Apple для машинного обучения. Ollama показала движок на MLX для Apple Silicon в версии 0.19 (30 марта 2026, превью) и требовала для него Mac с unified memory больше 32 ГБ. Вендорский замер на Qwen3.5-35B-A3B: генерация 58 → 112 tok/s, обработка промпта 1154 → 1810 tok/s при переходе с Ollama 0.18 (Q4_K_M) на 0.19 (NVFP4). Чип в посте не указан, переносить эти цифры на свою машину нельзя. LM Studio на Apple Silicon запускает модели через llama.cpp или MLX (документация LM Studio).
Практическое следствие проверено на тестовой машине: на момент замера 7 ноября (Ollama 0.40.14) тег qwen3.8:27b на Mac скачивает MLX-сборку. ollama show показывает квантизацию nvfp4, формат safetensors и минимальную версию Ollama 0.32.12, а ollama ps - раннер mlx. GGUF в Q4_K_M на той же машине приходится запрашивать явным тегом qwen3.8:27b-q4_K_M. Манифест того же тега qwen3.8:27b, запрошенный не с Mac, указывает на GGUF. Один и тот же тег на разных платформах даёт разные файлы, и сравнивать скорость между машинами нужно по явным тегам с квантизацией.
NVIDIA и AMD
На NVIDIA ограничение жёстче: модель и кэш должны поместиться в видеопамять карты. По документации Ollama нужны compute capability 5.0+ и драйвер 550 и новее (для карт с compute capability 5.0-6.2 - 570+). RTX 5090 несёт 32 ГБ GDDR7 на 512-битной шине (NVIDIA). Для других карт ориентируйтесь на классы видеопамяти 8, 12, 16, 24 и 32 ГБ и проверяйте объём в спецификации своей модели карты.
AMD поддерживается через ROCm v7 на Linux и Windows. На Windows и Linux есть Vulkan-бэкенд, он включён по умолчанию, если установлен.
Если модель не помещается в видеопамять целиком, llama.cpp и Ollama делят слои между GPU и оперативной памятью. В ollama ps колонка PROCESSOR тогда показывает разделение вида 48%/52% CPU/GPU вместо 100% GPU. Скорость при этом падает, потому что часть весов читается из более медленной памяти. Для MoE разделение обычно обходится дешевле, потому что на токен читается малая часть весов. Насколько падает скорость в обоих случаях, для этой статьи не измерялось.
CPU-only
llama.cpp - «plain C/C++ implementation without any dependencies» по README, он считает модель на CPU, если GPU нет, и умеет гибридный CPU+GPU режим для моделей больше видеопамяти. На CPU генерацию ограничивает пропускная способность оперативной памяти, а у обычного ПК она ниже, чем у видеопамяти или unified memory Mac. Для чата на моделях 1-4B этого хватает, для агентов и длинного контекста нет. Собственных замеров на CPU в статье нет, а цифры из обзоров в сети приводятся без методики.
Сколько памяти - какие модели
Таблица собрана по страницам тегов ollama.com/library на 7 ноября 2026. Размеры - размеры файлов в 4 битах (Q4_K_M, QAT или MXFP4), к ним прибавляется KV-кэш и буферы раннера. Столбец «Память» - сколько видит GPU: на Mac это примерно три четверти unified memory (наблюдение на одной машине), на NVIDIA - объём видеопамяти.
| Память GPU | Модели (тег, размер файла) | Тип | Контекст | Лицензия |
|---|---|---|---|---|
| 8 ГБ | gemma4:e2b-it-qat (4,3 ГБ), qwen3.5:4b (3,3-4,0 ГБ) | dense | 128K / 256K | Apache 2.0 |
| 12-16 ГБ | gemma4:e4b-it-qat (6,1 ГБ), qwen3.5:9b (6,6-7,6 ГБ), gemma4:12b-it-qat (7,2 ГБ) | dense | 128K / 256K | Apache 2.0 |
| 16 ГБ, на пределе | gpt-oss:20b (14 ГБ) | MoE, 3,6B активных | 128K | Apache 2.0 |
| 24 ГБ | qwen3.8:27b-q4_K_M (18 ГБ), gemma4:26b-a4b-it-q4_K_M (18 ГБ), muse-glimmer:30b (18 ГБ), gemma4:31b-it-q4_K_M (20 ГБ) | dense; Gemma 26B - MoE, 3,8B активных | 128K-256K | Apache 2.0 |
| 28-32 ГБ (Mac 36 ГБ, RTX 5090) | то же с контекстом 32-64k, qwen3.6:35b-a3b (23 ГБ) | Qwen3.6 35B - MoE, 3B активных | 256K | Apache 2.0 |
| 48-64 ГБ | qwen3.8:27b-q8_0 (30 ГБ), gemma4:31b-it-q8_0 (34 ГБ), qwen3.6:35b-a3b-q8_0 (39 ГБ) | dense и MoE в 8 битах | 256K | Apache 2.0 |
| 80-128 ГБ | gpt-oss:120b (65 ГБ), llama4:scout (67 ГБ), qwen3.5:122b (81 ГБ), BF16-версии 27-31B (56-64 ГБ) | MoE и dense BF16 | 128K-10M | Apache 2.0; Llama 4 - своя |
| Кластер GPU | DeepSeek V4.1 Flash, Mistral Large 4, Muse Spark Open | MoE, сотни миллиардов и больше | до 1M | MIT; у Mistral и Muse свои |
Как читать таблицу:
- У тегов с диапазоном размеров (
qwen3.5:9b,gemma4:e4b) разные файлы под разные платформы. Диапазон не означает, что на Mac придёт MLX:gemma4:e4bна тестовом M4 Max скачал GGUF на 9,6 ГБ с раннером llamacpp. Какой файл достался вам, показываетollama show. gpt-oss:20bв карточке OpenAI заявлена как модель, которая работает «within 16GB of memory». На Mac с 16 ГБ GPU видит меньше 16 ГБ, так что на такой машине модель окажется на пределе.- На Mac с 36 ГБ
qwen3.8:27b-q8_0(30 ГБ) не помещается в 28,1 ГиБ GPU-лимита даже без контекста. Это вывод из размеров, не замер. - Плотная модель и MoE с одинаковым файлом занимают одинаковую память, но MoE на каждый токен читает в несколько раз меньше весов и поэтому генерирует быстрее: в замере 49,8 tok/s у
gemma4:26b-a4bпротив 10,6 уqwen3.8:27b-q4_K_M.
Отдельные таблицы по Qwen и короткий ориентир «память → модели» для Ollama есть в гайде по Ollama.
Семейства открытых моделей на ноябрь 2026
Даты ниже - даты публикации весов на Hugging Face или анонса вендора. Номера меняются каждые несколько месяцев, поэтому перед выбором откройте карточку модели и страницу тегов.
Qwen
Самое широкое семейство по размерам. Все перечисленные локальные модели принимают картинки и поддерживают tool calls и режим рассуждения (метки vision, tools, thinking в Ollama).
- Qwen3.8-27B (август 2026, Apache 2.0) - плотная модель на 27B с гибридным вниманием: 48 слоёв Gated DeltaNet и 16 слоёв обычного внимания. Нативный контекст 262 144 токена, расширяемый до 1M. В Ollama:
qwen3.8:27b(18 ГБ; на Mac это MLX-сборка),q4_K_M(18 ГБ),q8_0(30 ГБ),bf16(56 ГБ), MLX-вариантыnvfp4(18 ГБ) иmxfp8(32 ГБ). - Qwen3.8-Flash-Next (август 2026) - MoE на 125B параметров с 6B активных. Лицензия
qwen-community-1.0, это не Apache 2.0. В библиотеке Ollama тега на 7 ноября не было. - Qwen3.6 (апрель 2026, Apache 2.0) - плотная 27B и MoE 35B-A3B (3B активных), контекст 256K. В Ollama есть теги с суффиксом
coding; что изменено в этих сборках, на странице модели не расшифровано. - Qwen3.5 (февраль 2026, Apache 2.0) - линейка от 0.8B до 122B-A10B, в ней есть размеры для машин на 8-16 ГБ.
Gemma 4
Google анонсировала Gemma 4 2 апреля 2026 под Apache 2.0: «эффективные» E2B и E4B для телефонов и edge-устройств (контекст 128K), MoE 26B-A4B (3,8B активных) и плотная 31B (256K). В мае на Hugging Face появилась 12B. По словам Google, 26B и 31B в BF16 помещаются на один H100 на 80 ГБ, а квантизованные версии работают на потребительских GPU. В Ollama у Gemma 4 есть QAT-теги (квантизация с дообучением, файлы меньше обычных Q4) и MLX-варианты.
gpt-oss
Открытые веса OpenAI августа 2025 года под Apache 2.0. gpt-oss-20b - MoE на 21B параметров с 3,6B активных, gpt-oss-120b - 117B с 5,1B активных (карточка). Веса экспертов хранятся в MXFP4, контекст 128K, уровень рассуждения задаётся в системном промпте (low, medium, high). По карточке 20b работает в 16 ГБ памяти, 120b - на одном GPU на 80 ГБ. В Ollama это gpt-oss:20b (14 ГБ) и gpt-oss:120b (65 ГБ), MLX-тегов у модели нет.
DeepSeek
DeepSeek V4.1 Flash (сентябрь 2026, MIT, контекст 1M) - MoE на сотни миллиардов параметров. Веса открыты, но в Ollama модель есть только как облачная, без размеров файлов. То же у DeepSeek-V4-Pro. Локально из DeepSeek запускают R1 и его дистилляты (deepseek-r1 от 1.5b до 70b, 94,8 млн загрузок в Ollama). Дистилляты построены на базовых моделях Qwen и Llama, их лицензию проверяйте по карточке конкретного размера.
Mistral и Devstral
- Mistral Small 4 (январь 2026, обновление
2603в марте, Apache 2.0) - MoE на 119B с 6,5B активных, контекст 256K. В библиотеке Ollama на 7 ноября под этим именем не было. - Devstral Small 2 (ноябрь 2025, Apache 2.0) - 24B для кода, контекст 256K. В карточке вендор пишет, что модель работает на одной RTX 4090 или Mac с 32 ГБ.
- Mistral Large 4 (30 сентября 2026) - MoE около 1T параметров с ~52B активных, контекст 1M. Примеры запуска в карточке рассчитаны на 8 GPU, в Ollama модель облачная. Лицензия - Mistral Ecosystem Open-Weight License, её текст нужно читать перед использованием.
Llama и Muse
Последняя линейка под брендом Llama в организации meta-llama на Hugging Face - Llama 4 (апрель 2025): Scout (17B активных, 16 экспертов, 109B всего) и Maverick (128 экспертов). В Ollama llama4:scout весит 67 ГБ, llama4:maverick 245 ГБ. Лицензия Llama 4 Community License, доступ к весам на HF по запросу. По загрузкам в Ollama до сих пор лидируют llama3.1 и llama3.2, но это модели 2024 года.
Свежие открытые веса Meta выходят под брендом Muse. Muse Glimmer 30B (август 2026, Apache 2.0) - 29,6B с vision-энкодером, контекст 131 072+. В карточке указаны цели по железу 24, 32 и 64 ГБ видеопамяти, в Ollama модель есть как muse-glimmer:30b (18 ГБ). Muse Spark Open (816B-A42B, сентябрь 2026) выложена под собственной лицензией с ручным одобрением доступа, в Ollama облачная.
Открытые, но не локальные
У части моделей веса открыты, но на одной машине их не запустить. Это DeepSeek V4.1 Flash и V4-Pro, Mistral Large 4, Muse Spark Open и флагман Qwen3.8 на 2,4T параметров. Для читателя с одним Mac или одной видеокартой это облачные модели: через облако Ollama, API вендора или агрегатор. Для собственного запуска нужен сервер с несколькими GPU и серверный раннер: карточка Mistral Large 4, например, рекомендует vLLM и SGLang и приводит примеры на 8 GPU.
Dense против MoE: память и скорость
Обозначение вида 35B-A3B значит: 35 миллиардов параметров всего, 3 миллиарда активных на токен. MoE-модель (mixture of experts) держит в памяти все веса, но на каждый токен роутер выбирает несколько экспертов, и считаются только они.
Для выбора отсюда два следствия:
- Память определяет, что поместится.
gemma4:26b-a4b-it-q4_K_Mиqwen3.8:27b-q4_K_Mвесят по 18 ГБ, и места в памяти им нужно одинаково. - Активные параметры определяют скорость генерации. На токен MoE читает из памяти около 3,8B параметров вместо 27B. По оценке «пропускная способность / активные байты» потолок у неё в несколько раз выше, чем у плотной модели того же размера: на тестовом M4 Max (410 ГБ/с) около 23 tok/s для 27B dense в Q4 против примерно 180 для 26B-A4B. Это теоретические потолки. В замере GGUF-сборки дали 10,6 и 49,8 tok/s: разрыв в 4,7 раза, меньше теоретического, но того же порядка.
Качество у MoE и плотной модели одного размера файла разное, и по самоотчётам вендоров с разными харнессами их честно не сравнить. Для своих задач сравнивайте модели на своих промптах. Скорость пяти моделей на одной машине собрана в разделе «Замеры на M4 Max 36 ГБ».
Чем запускать локальные модели
| Инструмент | Что это | Лицензия | Когда брать |
|---|---|---|---|
| Ollama | CLI и сервер, REST и OpenAI-совместимый API, библиотека моделей, MLX на Apple Silicon | MIT | Локальный API для своего кода и агентов |
| LM Studio | Десктопное приложение и headless-сервер llmster, OpenAI-совместимые эндпоинты, llama.cpp и MLX | условия смотрите на сайте | Работа без CLI, подбор моделей в GUI |
| llama.cpp | Основа многих раннеров, GGUF, llama-server с OpenAI-совместимым API, 17 бэкендов | MIT | Полный контроль над квантами и сборкой |
| vLLM | Серверный раннер для GPU с батчингом запросов | Apache 2.0 | Сервер на NVIDIA для нескольких пользователей |
| Jan | Десктопное приложение | смотрите в репозитории janhq/jan | GUI-альтернатива LM Studio |
| MLX / mlx-lm | Фреймворк Apple и пакет для запуска LLM | MIT | Apple Silicon, когда нужен Python и свои эксперименты |
Номера версий в таблицу не вынесены: раннеры обновляются чаще, чем имеет смысл переписывать таблицу, а у llama.cpp сборки вообще нумеруются тегами bNNNN. Установка, API и настройки Ollama - в гайде по Ollama, сравнение двух самых популярных десктопных вариантов - в статье LM Studio vs Ollama.
Замеры на M4 Max 36 ГБ
Цель замера - проверить два вывода статьи на одной машине: насколько MoE быстрее плотной модели того же размера файла и что даёт MLX-путь Ollama против GGUF на одной и той же модели.
Проверено: 7 ноября 2026 года, Ollama 0.40.14, Mac с Apple M4 Max (14-ядерный CPU, 32-ядерный GPU, 410 ГБ/с) и 36 ГБ unified memory, GPU видит 28,1 ГиБ, macOS 27.2, питание от сети. Тяжёлые приложения перед замером закрыты, открытыми остались Claude и системные процессы, около 17 ГБ памяти без модели. Swap к началу был занят на 7 ГБ из 8 после предыдущих прогонов и до конца не освобождался.
Методика:
- контекст 32768 (
num_ctx) для всех моделей, temperature 0, рассуждение выключено (think: false), до 400 токенов ответа; - два промпта: короткий (~55 токенов, «объясни KV-кэш примерно в 200 словах») и длинный (~8,9K токенов текста с просьбой пересказать его в 5 пунктах);
- 5 прогонов на промпт, в таблице медиана, в скобках минимум и максимум;
- перед каждым прогоном уникальный префикс, чтобы кэш промпта не завышал скорость обработки;
- скорости из полей ответа сервера: генерация по
eval_count / eval_duration, обработка промпта поprompt_eval_count / prompt_eval_duration; TTFT - время до первого токена в стриме; - между моделями все модели выгружались, для каждой считался прирост
Pageouts + Swapoutsвvm_statза время замера (страница 16 КБ), чтобы видеть, ушла ли система в swap.
| Модель (тег) | Тип | Формат / RUNNER | Генерация, короткий промпт, tok/s | Генерация, длинный промпт, tok/s | Обработка промпта (~8,9K), tok/s | TTFT, длинный промпт, с | Swap за замер |
|---|---|---|---|---|---|---|---|
qwen3.8:27b-nvfp4 | dense 27B | safetensors nvfp4 / mlx | 32,4 (30,4-35,5) | 19,4 (14,2-19,7) | 104 | 85,7 | ≈ 11 ГБ |
qwen3.8:27b-q4_K_M | dense 27B | GGUF Q4_K_M / llamacpp | 10,6 (9,6-10,7) | 10,1 (9,3-10,2) | 115 | 77,2 | ≈ 0,8 ГБ |
gemma4:26b-a4b-it-q4_K_M | MoE 26B, 3,8B активных | GGUF Q4_K_M / llamacpp | 49,8 (48,7-52,0) | 49,3 (48,7-50,5) | 706 | 13,0 | ~0 |
gpt-oss:20b | MoE 21B, 3,6B активных | GGUF MXFP4 / llamacpp | 45,3 (44,7-47,9) | 47,2 (46,2-47,6) | 862 | 11,7 | ~0 |
gemma4:e4b | dense, 4,5B эффективных | GGUF / llamacpp | 75,3 (49,5-76,1) | 46,9 (45,5-50,0) | 679 | 13,4 | ~0 |
Длинный промпт у моделей разной длины из-за токенизаторов: 8 887 токенов у Qwen, 9 044 у Gemma 4 26B, 8 344 у gpt-oss, 9 040 у gemma4:e4b. Почему один и тот же текст даёт разное число токенов, разобрано в статье о токенах и их подсчёте. Широкий разброс у gemma4:e4b на коротком промпте дал первый прогон (49,5 tok/s), остальные шли около 75.
Тег qwen3.8:27b без суффикса на этой машине указывает на ту же MLX-сборку, что и qwen3.8:27b-nvfp4, поэтому GGUF для сравнения запрашивался явным qwen3.8:27b-q4_K_M.
Память: почему ollama ps не годится для оценки
В Ollama 0.40.14 колонка SIZE в ollama ps для моделей на раннере llamacpp с файлом несопоставима: 1,6 ГБ у gemma4:26b-a4b при файле 18 ГБ, 1,1 ГБ у gemma4:e4b при 9,6 ГБ. Причина в том, как раннеры держат веса. llama.cpp отображает файл весов в память (mmap), и эти страницы не входят в footprint процесса. MLX держит веса в памяти самого процесса, и у MLX-сборки SIZE ближе к реальности, но растёт по ходу работы.
Footprint процесса раннера (phys_footprint из утилиты footprint в macOS) после короткого запроса при контексте 32768:
| Модель | Файл модели | Footprint раннера | Оценка занятости | ollama ps |
|---|---|---|---|---|
qwen3.8:27b-nvfp4 (mlx) | ~18 ГБ | 17 ГБ | 17 ГБ, веса внутри процесса | 18 ГБ, после длинных прогонов 25 ГБ |
qwen3.8:27b-q4_K_M | 16,8 ГБ + 0,9 ГБ vision-проектор | 3,5 ГБ | ≈ 21,2 ГБ | 17 ГБ |
gemma4:26b-a4b | 18,0 ГБ | 2,4 ГБ | ≈ 20,4 ГБ | 1,6 ГБ |
gpt-oss:20b | 13,8 ГБ | 0,9 ГБ | ≈ 14,7 ГБ | 12 ГБ |
gemma4:e4b | 9,6 ГБ | 1,7 ГБ | ≈ 11,3 ГБ | 1,1 ГБ |
Для llama.cpp-моделей реальная занятость примерно равна размеру файла плюс footprint раннера, в котором сидят KV-кэш и буферы. Для MLX смотрят footprint раннера или Activity Monitor. Решать по SIZE в ollama ps, влезет ли модель, на этой версии нельзя.
У MLX-сборки Qwen память выросла с 18 ГБ после загрузки до 25 ГБ после длинных прогонов при том же контексте. Вместе с 17 ГБ открытых приложений это больше 36 ГБ, и за замер система вытеснила в swap около 11 ГБ (676 тысяч страниц). GGUF-сборка той же модели почти не трогала swap (0,8 ГБ), хотя по оценке занимает не меньше. Объяснение, которое сходится с устройством раннеров: страницы mmap-файла система может сбросить и потом перечитать с диска без записи в swap, а память MLX-процесса приходится вытеснять.
Что показал замер
MoE против dense подтвердилось с запасом. При одинаковом файле около 18 ГБ gemma4:26b-a4b генерирует 49,8 tok/s, а qwen3.8:27b-q4_K_M в том же формате и на том же раннере 10,6 tok/s, разница в 4,7 раза. На длинном промпте разрыв ещё больше: обработка 706 против 115 tok/s, TTFT 13,0 против 77,2 секунды. gpt-oss:20b ведёт себя так же. Память решает, поместится ли модель, активные параметры - как быстро она отвечает.
MLX против GGUF на одной модели дал выигрыш, но только при запасе памяти. На коротком промпте nvfp4 быстрее q4_K_M втрое: 32,4 против 10,6 tok/s. На длинном выигрыш сократился до 1,9 раза (19,4 против 10,1), а разброс прогонов вырос до 14,2-19,7: MLX-сборке не хватило памяти, и система ушла в swap. Обработку длинного промпта MLX-путь на этой модели не ускорил: 104 против 115 tok/s.
32,4 tok/s выше оценки сверху для файла 18 ГБ на 410 ГБ/с (около 23 tok/s), и причина видна в логе сервера Ollama. MLX-раннер сам включает для qwen3.8:27b спекулятивное декодирование MTP (multi-token prediction): за прогон медиана acceptance 0,67, а avg_accepted 1,29 токена за итерацию сверх основного. У раннера llama.cpp MTP нет, поэтому выигрыш nvfp4 над q4_K_M складывается из формата, движка и MTP, и разделить их вклад этот замер не позволяет.
На Mac с 36 ГБ плотная 27B в 4 битах помещается в GPU-лимит, но с открытыми приложениями работает на грани, и на длинных промптах MLX-сборка теряет большую часть выигрыша. MoE того же размера файла здесь быстрее в разы и swap не трогает. На Mac с памятью больше 32 ГБ начинать с MLX-тегов имеет смысл, если модель помещается с запасом в несколько гигабайт.
Цифры относятся к одной машине на 36 ГБ с открытыми приложениями и занятым swap, к Ollama 0.40.14 и контексту 32K. На Mac с 64 ГБ и больше, на других чипах и на NVIDIA расклад может быть другим, это не проверялось. Не проверялись и параллельные запросы, скорость при контексте 64K, работа агентов с этими моделями и тепловой режим при долгой нагрузке.
Какую модель выбрать под задачу
Рейтинга «лучшая модель» здесь нет: сравнений, которые можно проверить, у вендоров нет, а бенчмарки из карточек сняты с разными харнессами. У каждого типа задач свои требования к памяти, контексту и возможностям модели.
Чат и работа с текстом. Подойдёт самая большая модель, которая помещается в память с нужным контекстом. На 16 ГБ это 4-12B (Qwen3.5, Gemma 4), на 24-36 ГБ - 26-31B в 4 битах.
Код в чате. Нужен длинный контекст: файлы и диффы съедают десятки тысяч токенов. В Ollama есть отдельные кодовые теги (qwen3.6:*-coding, qwen3-coder), у Mistral - Devstral Small 2. Качество на своих задачах проверяйте сами.
Агенты. Модель для кода и модель для агента - разные требования. Агенту нужны стабильные tool calls в правильном формате и контекст от 64000 токенов, этот порог для агентов и инструментов для кода рекомендует документация Ollama. В тесте с OpenCode qwen2.5-coder:7b с меткой tools печатала вызовы инструментов текстом, а 8B-модели проходили задачу нестабильно (гайд по OpenCode). Подключение Claude Code к локальной модели через Ollama описано в статье Claude Code в России, Anthropic такую связку официально не поддерживает.
Эмбеддинги и RAG. Чат-модель для этого не нужна: в Ollama есть отдельные модели с меткой embedding, например nomic-embed-text и qwen3-embedding. Как выбирать эмбеддинги и строить retrieval, разобрано в гайде по RAG, когда хватает длинного контекста без RAG - в статье Context Engineering vs RAG.
Картинки. Изображения на входе принимают Qwen3.5-3.8, Gemma 4 и Muse Glimmer 30B. Метку vision смотрите на странице модели в библиотеке.
Лицензии: что проверить перед коммерческим использованием
«Открытые веса» и «open source» - разные вещи: веса можно скачать, а условия использования задаёт лицензия конкретной модели. Лицензии ниже взяты из поля license и текста карточек на Hugging Face. Это не юридическая консультация.
| Лицензия | Модели |
|---|---|
| Apache 2.0 | Qwen3.8-27B, Qwen3.6, Qwen3.5, Gemma 4, gpt-oss, Mistral Small 4, Devstral Small 2, Muse Glimmer 30B |
| MIT | DeepSeek V4.1 Flash, DeepSeek-V4-Pro, DeepSeek R1 (у дистиллятов проверяйте базовую модель) |
| Собственная лицензия вендора | Qwen3.8-Flash-Next (qwen-community-1.0), флагман Qwen3.8 2,4T, Llama 4 (Llama 4 Community License), Mistral Large 4 (Mistral Ecosystem Open-Weight License), Mistral Medium 3.5, Muse Spark Open |
Что сделать перед продуктом на локальной модели:
- Открыть карточку конкретной модели и конкретного размера: у Qwen3.8 27B и Flash-Next лицензии разные.
- Для моделей из третьей строки прочитать полный текст лицензии и сверить его со своим сценарием: внутренний инструмент, продукт для клиентов, модель как сервис.
- Проверить, на чём построена производная модель: дистиллят или файнтюн наследует условия базовой.
- Записать версию модели и ссылку на лицензию в документацию проекта.
Локальная и облачная модель вместе
Частая схема: простые и чувствительные задачи идут в локальную модель, сложные - в облачную, а при недоступности локального сервера запрос уходит в облако. Строить такую схему можно на трёх уровнях:
- в коде приложения - роутинг по типу задачи, ретраи и fallback, разобранные в статье про провайдеров LLM в production;
- через self-hosted шлюз - LiteLLM описывает Ollama и облачных провайдеров в одном
config.yamlс fallback между ними; - через облачный агрегатор - OpenRouter даёт один ключ на облачные модели, в том числе на открытые модели, которые не запустить локально.
Как связать это с наблюдаемостью, бюджетами и evals, описано в Production LLM Stack.
Ограничения и подводные камни
Контекст по умолчанию зависит от видеопамяти
На машинах, где GPU видит меньше 24 GiB, Ollama по умолчанию ставит контекст 4k. Системный промпт агента туда не помещается, и Ollama молча обрежет вход. Перед подключением агента проверьте колонку CONTEXT в ollama ps.
Контекст не поднимается выше нативного окна
num_ctx больше окна, на котором обучена модель, не работает: у qwen3:8b при запросе 65536 Ollama выставила 40960. Ошибки при этом нет, реальное значение видно только в ollama ps. Подробности в гайде по Ollama.
Один тег - разные файлы
qwen3.8:27b на Mac и на Linux - разные сборки (MLX nvfp4 и GGUF Q4_K_M). Цифры скорости и памяти из чужих замеров сравнимы только при одинаковом явном теге, версии раннера и контексте.
ollama ps занижает память llama.cpp-моделей
В Ollama 0.40.14 у моделей на раннере llamacpp колонка SIZE может быть в разы меньше файла: 1,6 ГБ у gemma4:26b-a4b при 18 ГБ. Веса отображаются из файла через mmap и в счёт процесса не попадают. Оценивайте занятость как файл плюс footprint раннера, у MLX-моделей смотрите footprint или Activity Monitor.
Лимит GPU-памяти на Mac не документирован
28,1 ГиБ из 36 ГБ - наблюдение на одной машине. На Mac с 16, 64 или 128 ГБ доля может быть другой, смотрите total_vram в логе сервера Ollama.
Чужие цифры скорости не переносятся
Вендорские замеры MLX сняты на других чипах и моделях. Даже на одной машине скорость меняется от версии раннера: в гайде по Ollama та же qwen2.5-coder:7b при переходе с Ollama 0.24.0 на 0.40.14 стала занимать 6,6 ГБ вместо 8,2 ГБ.
Таблица устаревает за месяцы
Qwen выпустил 3.5, 3.6 и 3.8 за полгода, а у тегов в библиотеке Ollama встречаются обновления недельной давности. Цифры в этой статье привязаны к дате проверки (7 ноября 2026) и версии Ollama 0.40.14. Пример реальной малой модели на Mac в продукте разобран в постмортеме Ambient AI.
С чего начать
- Узнайте, сколько памяти видит GPU: на NVIDIA это объём видеопамяти, на Mac -
total_vramв логе сервера Ollama. - Вычтите память под контекст: для агента нужно от 64k токенов, KV-кэш посчитайте по
config.jsonмодели. - Выберите модель из таблицы «память - модели», предпочитая MoE, если важна скорость генерации.
- Проверьте лицензию в карточке модели на Hugging Face.
- Скачайте модель явным тегом с квантизацией и запустите
ollama run <тег> --verbose. - Сверьте
ollama ps: CONTEXT, RUNNER и100% GPUв PROCESSOR. Память для моделей на llama.cpp считайте как файл плюс footprint раннера: SIZE вollama ps0.40.14 для них несопоставим с файлом. - Если модель не справляется с задачей, подключите облачную модель через fallback. Модель крупнее доступной памяти частично уйдёт на CPU и потеряет в скорости.