Самый простой способ запустить локальную LLM - это установить ollama или LM Studio. Это быстро и просто, но вы теряете и в скорости, и в качестве. Почему UD_Q4_K_XL лучше при том же размере, почему квант Q3 может быть медленнее чем Q4. Хорошая ли идея взять REAP для вырезания ненужных экспертов из MoE. Кто быстрее, Linux или Windows. В общем как выжать больше из локальных LLM на домашнем железе.

Что означает 35B и что означает A3B

Для MoE моделей основной шаблон именования это Qwen3.6-35B-A3B.

Qwen3.6 - имя модели и её версия. Число до точки - это мажорное обновление, часто связано с каким-то существенным обновлением архитектуры, число после точки - обновление внутри архитектуры.

35B - общее количество параметров модели. B - это Billion, то есть 35 миллиардов параметров.

A3B - количество активных параметров, сокращение от Active 3B.

Чем больше параметров активно во время генерации нового токена, тем лучше качество результата, но требуется больше вычислений, значит медленнее генерация и ниже t/s.

У Dense моделей всегда активны все параметры, при прочих равных такие модели будут "умнее" MoE версий, но скорость генерации в разы ниже. У MoE наоборот, скорость работы выше, но качество ответов может плавать даже в рамках одной сессии.

При схожих размерах, качество Dense в разы выше, а скорость в разы ниже
При схожих размерах, качество Dense в разы выше, а скорость в разы ниже

Избыточный размер моделей, почему BF16 это FP32, а не FP16

LLM состоит из слоев, каждый слой состоит из набора чисел, числа сгруппированы в матрицы-тензоры, тензоры разделены на 2 блока: блок Внимания (Attention) и блок FFN. Параметры модели - это суммарное количество чисел из которых состоят матрицы.

Если числа нужно как-то хранить, если их хранить в формате float32, который занимает 32 бита или 4 байта, то если посчитать вес модели размером 35B, 35 млрд умножить на 32 бита, то такая модель будет весить 35.000.000.000 * 32 = 1.120.000.000.000 бит или 130 Гб.

И это маленькая модель 35B, а учитывая, что модели могут доходить до 700B (DeepSeek R1/V3.1, GLM-5.1) и даже до 1T (Kimi K2.5, Qwen3.6-Plus), то такой объем не просто большой, он огромен, нужно как-то его уменьшить.

GPU умеют быстро перемножать матрицы float32 и float16, а для LLM и нужно перемножать много таких матриц, поэтому выбор был из этих двух форматов. Но если float32 такой большой, то почему не взять за основу float16, что уменьшит размер моделей в 2 раза?

Для того, чтобы понять это, надо посмотреть как распределены биты в f32 и f16.

В f32 за диапазон отвечает экспонента размером в 8 бит, а за точность мантисса, которой отведено 23 бита.

В f16 экспонента урезана до 5 бит, а мантисса до 10 бит. Диапазон урезан, а точность сохранена высокой.

В этом и есть проблема. Для нейросетей важнее ширина диапазона значений, а не его точность. Во время обучения происходит перераспределение весов, создаются группы со значениями выше, а другая группа со значениями ниже, кроме этого происходят выбросы, во время градиентного спуска спускаемся до порядков 10^-7 или даже 10^-8. Функция активации не должна возвращать бесконечность если числа выходят за границы, и алгоритм backpropagation мог корректировать малыми шагами сдвиги весов.

Для того, чтобы это работало, числа должны иметь очень широкий диапазон принимаемых значений. В f32 за счет экспоненты в 8 бит обеспечивался нужный диапазон. В f16 экспоненту урезали до 5 бит, и во время обучения это приводило к тому, что обучение застревало, веса не корректировались, backpropagation не мог их сдвинуть, или они уходили в NaN из-за бесконечности на активации. Чтобы использовать f16 приходилось применять различные ухищрения, смешивать fp32 и fp16 обучаясь в Mixed Precision, что приводило к дополнительному увеличение расхода памяти даже выше чем было на fp32, скорость обучения падала. Снижался расход на инференс, так как веса теперь были в fp16, но сложность обучения вырастала.

Простым архитектурным решением этой проблемы было бы в том, что если в 16-битном формате сохранить экспоненту 8 бит, как и была в fp32, а урезать мантиссу, тогда бы точность осталась как и было в fp32, обучение бы проходило гладко, а размер уменьшился бы в 2 раза.

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

Квантование моделей

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

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

Так работал квант Q4_0 в llama.cpp, он не сохранял качество Q8, но работал очень быстро на CPU, поэтому такой квант до сих пор выпускают.

Если идти ещё дальше, то можно дойти до квантования уровня 1.58-бита, то есть будет всего 3 значения [-1, 0, 1]. Это тоже работает, есть целые проекты которые занимаются 1-битными моделями.

Примером такой 1-битной модели LLM Bonsai 8B 1-Bit.

1-bit Bonsai
1-bit Bonsai

Текст связный, код запускается, скорость для Dense 8B модели на 4060 высокая. Но вот над качеством нужно ещё поработать.

Результат работы 1-Bit Bonsai, не очень похоже на клон Марио
Результат работы 1-Bit Bonsai, не очень похоже на клон Марио

Квантовать в лоб не самое эффективное решение. В какой-то момент к проекту llama.cpp присоединился ikawrakow, создатель K-квантов и i-квантов, и он занялся этим вопросом, что в итоге перевело качество квантования на новый уровень.

Можно выделить 3 основные вещи, кроме самих алгоритмов квантования, которые позволяют сильнее сжимать модель, но сохранять качество:

  • Блочное квантование. Модель разбивается на блоки, в каждом блоке применяется свой коэффициент scale. Это повышает точность отдельных блоков, а так как модель не однородна, то это повышает точность всей модели.

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

  • Разделение уровня квантования тензоров attn и ffn. Качество "ума" модели напрямую зависит от качества Внимания, если attn квантовать слабее или оставлять оригинал, то несмотря на более агрессивное квантование ffn, общее качество сохраняется на высоком уровне.

ikawrakow добавил новые алгоритмы квантования, новые схемы квантования, и ввел смысловые обозначения таким квантам. Например, Q4_K_M или IQ4_XS:

Q4 - цифра рядом с Q означает какой битностью будет квантовано тело модели FFN.

K или I - это статичный квант или imatrix квант.

M - буква показывает на сколько выше будут квантованы тензоры внимания. Если S - то либо тот же уровень, либо на 1 шаг выше, и так далее. Встречаются обозначения S, M, L, XL.

XS - это алгоритм квантования внимания с использование imatrix. За счёт imatrix i-кванты весят меньше, и по качеству выше, но требуют в 2 раза больше вычислений на деквантование в момент инференса.

Качество квантов росло, улучшались математические алгоритмы, улучшались походы к созданию imatrix, но в какой-то момент ikawrakow рассорился с ggerganov, и ушел из проекта, он создал форк ik_llama.cpp, где продолжает создавать продвинутые SOTA кванты, и уже добился новых успехов. Новый IQK кванты весят меньше, качество выше, скорость лучше.

Такие кванты ik_llama особенно хорошо помогают, когда не хватает несколько Гб чтобы вместить модель целиком на GPU получая огромный буст скорости, так как если модель не влезает целиком в GPU хотя бы 1 слоем, происходит внушительное падение скорости. Или если надо вместить квант в 192 Гб RAM, запуская DeepSeek V3.2 или GLM-5.1 не залезая на диск.

Проблема Q4_K_M

Стандартный квант всегда и везде это Q4_K_M. Он будет предложен по умолчанию в любой среде, например, если запустить ollama run qwen3.6,то загрузится именно Q4_K_M квант.

Тоже самое в LM Studio, вначале будут их варианты квантов в стандартном виде, и по умолчанию будет загружаться Q4_K_M:

Классические кванты Q4_K_M устарели, они и там и там создаются по старой статичной схеме, которая когда-то не плохо работала, но с тех пор выработали более эффективные схемы квантования, которые позволяют либо снизить объем в Гб, либо в те же Гб засунуть больше качества.

Другая проблема ollama в том, что вы никогда не знаете, что именно вы загружаете. Например, выполнив команду ollama run gemma4 вы получите какую-то gemma4, которую они решили делать стандартной. Gemma4 представлена в 4 варианта: E2B, E4B, 26B-A4B, 31B, и в большинстве случаев интересна будет 26B-A4B, а не слабая E4B. Тоже касается и ollama run qwen3.5, так как qwen3.5 представлена в 7 вариантах.

Для конкретной версии нужно использовать команду ollama run gemma4:26b, но это не решает проблему с выбором кванта.

Динамическое квантование

Когда созданные кванты начали активно сравнивать по показателям PPL и KLD, то начали искать новые схемы квантования, основываясь не на четкую структуру создания квантов, а на динамичный подход. Теперь через один слой ffn_down может квантоваться сильнее, а ffn_up наоборот. Общие эксперты, которых в MoE моделях от 0 до 3-4 штук квантуются высоко, в Q6 или Q8, а MoE эксперты квантуются сильнее. И так далее.

Основные создатели квантов Unsloth, Ubergarm, Bartowski, mradermacher начали создавать свои рецепты и свои imatrix калибровочные датасеты, в то время как LM Studio, GGML, ollama придерживаются старой статичной схемы квантования.

Динамическое квантование позволяет зайти ниже квантов Q4, и дальше мы посмотрим на что способно квантование UD-Q2_K_XL.

UD-Q4_K_XL лучше чем Q4_K_M

Для замеров на сколько квант деградировал используют метрики KLD.

Сравнить нужно с BF16 версией, так как нам интересно на сколько кванты деградировали по сравнению с оригиналом, а не на сколько дрейфуют относительно друг друга.

Нужен какой-то тестовый бенчмарк из которого нужно извлечь все логиты:

.\llama-perplexity -m "Qwen3.6-35B-A3B-BF16-00001-of-00002.gguf" -f "prompt.txt" --save-all-logits "ref_logits.bin" --ctx-size 4096

Вместо prompt.txt можно использовать стандартный wiki.test.raw, либо свой датасет. Для BF16 нужно 65 Гб видеопамяти, запускать придется в режиме fit, который активирует ncmoe, из-за этого процесс создания логитов займет минут 25-30, а сам файл с логитами будет весить 70 Гб.

Само сравнение уже происходит быстрее, такой командой:

.\llama-perplexity -m "Qwen3.6-35B-A3B-UD-Q4_K_XL.gguf" -f "prompt.txt" --kl-divergence --kl-divergence-base "ref_logits.bin" --ctx-size 4096

Проведем сравнение интересующих нас квантов Qwen3.6 35B-A3B:

Qwen3.6-35B-A3B
Qwen3.6-35B-A3B
  • Классический Q4_K_M выступает на уровне UD-Q3_K_XL, который легче на 4.4 Гб.

  • UD-Q4_K_XL обходит классический Q4_K_M, но весит на 1.2 Гб больше.

  • UD-Q2_K_XL при равном весе показывает себя лучше чем IQ2_M.

Qwen3.6-35B-A3B сравнение разных квантов
Qwen3.6-35B-A3B сравнение разных квантов

Unsloth постоянно работают над оптимизацией своих квантов, у них собран хороший датасет для imatrix и гибкая схема динамического квантования Unsloth Dynamic 2.0.

Они ввели новую категорию XL (extra Large) для квантования attn, оставляя Внимание ближе к оригиналу, без сильного квантования. И добавляют к имени квантов UD там, где распределение квантования следует их рецепту создания, а не стандартному.

Так же провели масштабное исследование на Qwen3.5 по замерам качества квантов, чтобы найти лучший рецепт: https://unsloth.ai/docs/models/qwen3.5/gguf-benchmarks

Вначале, они выпускали UD квант только в размере UD-...-XL, но с недавнего времени они начали выпускать UD для всех вариантов квантования.

В LM Studio можно найти эти кванты, добавляя в строке поиска "unsloth", по умолчанию квант будет не XL, поэтому нужно будет выбрать его из списка. Не отключаемая функция в LM Studio это загрузка Vision, который нужен не всегда, но он будет занимать память.

Где скачать llama.cpp и как запустить на AMD и Nvidia

Ollama и LM Studio устанавливаются глобально в систему, а llama.cpp поставляется в виде portable архивов, поэтому нужно скачать и разархивировать, чтобы получить доступ к exe файлам.

Скачать в официальном репозитории: https://github.com/ggml-org/llama.cpp/releases

  • Для Nvidia можно скачать CUDA 12 и CUDA 12.4 DDLs для совместимости.

  • Для Nvidia 5000 серии надо качать CUDA 13 и CUDA 13.1 DDLs.

  • Для AMD и Intel нужно скачать Vulkan, DLL не требуются.

Для Nvidia стоит обновить драйвера, без этого могут быть просадки до 30-40% в генерации.

Для AMD всё проще, нужно скачать только Vulkan архив, для CUDA нужно скачать дополнительные DLL и разархивировать их в папку с llama.cpp.

Для RTX 5000 серии лучше использовать драйвера CUDA 12.8 и выше, там лучше поддержка архитектуры blackwell.

Когда вы скачали 2 архива для CUDA, один с llama.cpp, другой с DLL, то разархивировать их:

2 архива для CUDA, один с llama.cpp, другой с DLL
2 архива для CUDA, один с llama.cpp, другой с DLL

После чего перенести cublast DLLs в папке с llama.cpp

Дальше нужно открыть папку с llama.cpp в терминале, или открыть через Windows Terminal, либо в строке пути написать pwsh или cmd.

Все модели находятся на huggingface: https://huggingface.co/

Например, Qwen3.6-35B-A3B: https://huggingface.co/unsloth/Qwen3.6-35B-A3B-GGUF

Там будет список квантов, их размер и кнопка Use this model где будет список, среди которого будет llama.cpp, откуда можно взять команду для скачивания и запуска. Эта команда скачает модель по пути C:\Users\user\.cache\huggingface\hub\

.\llama-server.exe -hf unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_M

Либо можно запускать любые уже скачанные gguf файлы указывая -m путь

.\llama-server.exe -m "T:\models\Qwen3.6-28B-REAP20-A3B-Q4_K_M.gguf"

Либо указать путь ко всей папке, указав, что за раз нужна 1 модель (по умолчанию 4):

.\llama-server.exe --models-dir "T:\models\" --models-max 1

Сервер запускается в режиме OpenAI-compatible API, этот сервер теперь можно использовать в любом приложение где можно указать Custom URL для OpenAI.

Также запускается Web-клиент по адресу http://127.0.0.1:8080

В настройках можно выбрать тему, отображение статистики и настроить сэмплинг.

Веб клиент llama.cpp
Веб клиент llama.cpp

Нажатием на глазик рядом с кодом открывается предпросмотр html.

Одноглазый Марио для фанатов Футурамы, Qwen3.6-28B-REAP20-A3B Q4_K_M
Марио для фанатов Футурамы

Через параметр -c N задается размер контекста, через $env:CUDA_VISIBLE_DEVICES = "1" можно выбрать какая GPU будет работать с этим сервером, если GPU несколько.

OpenAI-compatible API доступен по стандартному адресу http://127.0.0.1:8080/v1

Помимо OpenAI API, поднимается Anthropic Messages API, так что этот сервер можно использовать с Claude Code. Другие агенты вроде OpenCode, Qwen Code, Pi Coding Agent работают по OpenAI-compatible API.

Почему llama.cpp быстрее чем ollama

Чтобы не повторяться, у меня уже есть статья где есть необходимые подробности как и за счет чего получается ускорение: Запускаем GPT-OSS-120B на 6 Гб GPU и ускоряем до 30 t/s. Вам нужна RAM, а не VRAM. Параметр -cmoe для ускорения MoE LLM

Таким же образом я запускал DeepSeek R1: Запускаем настоящую DeepSeek R1 671B на игровом ПК и смотрим вменяемая ли она на огромном контексте (160к)

Если коротко, то MoE модели разрежены, поэтому GPU будет простаивать, если эти "дыры" попали на GPU, нужно сделать так, чтобы GPU всегда была загружена на 100%, для этого надо перераспределить выгрузку тензоров.

Стандартный способ выгрузить слои, это способ ngl. Просто указывается количество слоев, которые попадут на GPU.

Способ который выгружает не слои, а точечно тензоры, перераспределяя то, что попадет на GPU можно назвать cmoe или ncmoe, от cpu-moe.

Если воспользоваться способом ngl, и выгрузить 10 слоев на GPU, то мы забьем всю память GPU, но её эффективность будет 30%, если воспользуемся способом ncmoe, то выгрузим 100% тензоров Внимания и 5 слоев на GPU. Тоже забьем всю память, но эффективность GPU будет 100%.

Есть 3 вариант, когда мы загружаем лишь 3гб VRAM, оставляя много памяти под контекст или другие задачи, и всё равно получаем ускорение в 2 раза, так как эффективность GPU будет 75%, что меньше 100%, но больше 30%. Это режим cmoe.

Итого есть 3 режима работы:

  • -ngl или --n-gpu-layers

  • -cmoe или --cpu-moe

  • -ncmoe или --n-cpu-moe

На сколько ollama медленнее llama.cpp

Проведем немного тестов и сравним скорость. Запускать будем на 4060 16 Гб модель Qwen3.6-35B-A3B, размер кванта Q4_K_M ~22 Гб, он не влезает целиком на GPU.

Для начала замерим выставив настройки на 4k контекста. В ollama можно запустить модель с ключом --verbose, чтобы увидеть статистику генерации.

ollama run qwen3.6 --verbose

Первое, что можно заметить, что ollama работает в режиме ngl, она пытается выгружать целые слои на GPU, и так как на GPU не хватает памяти, то выгружены будут только 26 слоев из 41 и все 16 Гб полностью забиты.

Теперь посмотрим на скорость:

ollama, qwen3.6 35B-A3B, 4060 16gb, 16 t/s
ollama, qwen3.6 35B-A3B, 4060 16gb, 16 t/s

Несмотря на то, что вся видеопамять занята, и кажется что GPU должна работать на полную, мы получаем всего 16 t/s. Это, в целом не плохая скорость, но ожидания были выше.

Теперь очередь llama.cpp, запустим UD-Q4_K_XL, контекст тоже 4k контекст. llama.cpp тоже занял все 16 Гб, но во время загрузки можно заметить, что он переключился на режим ncmoe, так как распознал, что перед нами MoE модель.

./llama-server -m Qwen3.6-35B-A3B-UD-Q4_K_XL.gguf -c 4096

Видно, что все слои загружаются, но VRAM занято всего ~13 Гб, признак ncmoe
Видно, что все слои загружаются, но VRAM занято всего ~13 Гб, признак ncmoe

Теперь посмотрим на скорость генерации:

llama.cpp, qwen3.6 35B-A3B, 4060 16gb, 45 t/s
llama.cpp, qwen3.6 35B-A3B, 4060 16gb, 45 t/s

И сходу 45 t/s. Это в 2.8 раза быстрее чем на ollama. Учитывая, что все 16 Гб заняты, а 4060 довольно медленная карта, это очень хороший результат, который не требует ни апгрейда, ни каких-то сложных шаманств.

4к контекста это мало, увеличим до 32000. В llama.cpp это делается через параметр -с 32000

ollama, qwen3.6 35B-A3B, 4060 16gb, 16 t/s
llama.cpp, qwen3.6 35B-A3B, 4060 16gb, 30к контекст, 36 t/s

Чем больше контекст, тем ниже скорость, это вполне нормальное поведение. В ollama на таком же размере скорость упала до 11 t/s, то есть скорость в llama.cpp выше уже в 3.2 раза.

Почему ollama в 3 раза медленнее

Ollama под капотом использует движок GGML от llama.cpp, поэтому у них есть возможность активировать режим ncmoe, но они этого не делают. Они используют режим ngl для любых моделей, будь то Dense, где ngl подходит лучше всего, и будь то MoE. Когда они добавят ncmoe, скорость увеличится и на ollama.

Режим -fit в llama.cpp

Для упрощения работы с режимами ngl, cmoe и ncmoe в llama.cpp добавили режим fit.

fit включен по умолчанию и сам определяет оптимальные параметры загрузки моделей. Для MoE он включает ncmoe, для Dense ngl, явным указанием -cmoe можно указать, что нужен cmoe, вместо ncmoe.

Этот режим сам рассчитает сколько памяти нужно под контекст и сколько под слои или тензоры, и оставит свободным 1 Гб VRAM. Параметром --fit-target 1024 можно указать, сколько видеопамяти нужно оставлять свободной после автоматического рассчета.

Например, сочетание -fit, которое не нужно указывать, и -cmoe вместе с -c 262144 выставленным на максимальный контекст в 256k, займет всего 8.5 Гб.

./llama-server -m Qwen3.6-35B-A3B-UD-Q4_K_XL.gguf -c 262144 -cmoe

256к контекста, cmoe, занято VRAM 8.4 Гб
256к контекста, cmoe, занято VRAM 8.4 Гб

Для 30к контекста нужно 3 Гб:

Почему UD-Q3_K_XL работает медленнее чем UD-Q4_K_XL

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

На днях возникла такая ситуация. Модель была загружена в режиме cmoe, значит все MoE параметры считались на процессоре i5-11600K, остальное работало на 3070 8 Гб, контекст 128к, квантование KV-кэша ctk и ctv Q8_0.

Скорость PP (prompt processing) не так важна, её можно разогнать через увеличение -ub -b параметров, а вот TG (token generation) на кванте Q3 оказался медленнее чем на Q4:

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

Видим, что квант UD-Q3_K_XL содержит i-кванты, в то время как UD-Q4_K_XL состоит только из статичных K-квантов.

Теперь всё ясно, i-кванты примерно в 2 раза сложнее для вычислений, и так как вся работа по MoE-эксперты осталась на 6 ядерном CPU, то у него не хватило мощности справиться с такой нагрузкой, отсюда и произошла просадка tg.

Попробуем повторить и провести эксперимент. Под рукой есть i7-14700, этот процессор мощнее, чем i5-11600K, поэтому искусственно зададим всего 2 ядра, вместо 6, с помощью -t 2 -cmoe

Скорость UD-Q4_K_XL оказалась и правда выше, чем UD-Q2_K_XL. 25 t/s против 18 t/s.

На что способно квантование UD-Q2_K_XL

Принято считать, что Q3 и, особенно, Q2 квантования не стоят внимания, слишком сильная деградация кванта и очень низкое общее качество. Это справедливо для классический стандартных квантов, но динамическое квантование или SOTA кванты позволяют использовать UD-Q2 или IQ2_KS.

Модель Qwen3.6-35B-A3B в кванте Q8 весит 36.9 Гб. Q4_K_M - 21.2 Гб, UD-Q3_K_XL - 16.8 Гб, UD-Q2_K_XL - 12.3 Гб.

4060 Ti 16 Гб медленная, скорость памяти всего 288 Гб/с, а скорость LLM напрямую зависит от скорости памяти. Квант UD-Q2_K_XL влезает в 4060 16 Гб целиком, что даст большой буст к скорости, и компенсирует общую медленность карты. Скорость tg составляет 68 t/s.

Сначала простое задание, змейка в стиле Plants Vs Zombie. Модель взяла шрифт в стиле игры, и это единственный внешний ресурс, остальное создала оформление из смеси эмодзи.

Теперь посложнее. Создать реплику Win 11. Результат выглядит похоже, весь интерактив присутствует, окна открываются, двигаются, закрываются, пуск с анимацией и так далее:

Qwen3.6-35B-A3B-UD-Q2_K_XL, 4060 16гб, 60 t/s
Qwen3.6-35B-A3B-UD-Q2_K_XL, 4060 16гб, 60 t/s

Усложняем сильнее. Рабочий клон Minecraft. Запрещено использовать внешние ресурсы, только процедурная генерация. Тут пришлось перейти из браузера в агента, так как потребуется модульная структура проекта, много файлов, много мелких правок.

На создание первичной структуры, модулей и первого прототипа у модели через агента ушло где-то 40 минут. В качестве агента qwen code подключенный к локальной llama.cpp.

Вначале было много багов:

Баги с текстурами во время разработки клона Minecraft
Баги с текстурами во время разработки клона Minecraft

У модели есть Vision, можно сделать скриншот и показать то, как она изобразила снег - не похоже на снег. Скриншот передается как base64, поэтому стоит его сжать или сохранить в jpg, это займёт меньше контекста:

По мнению игры это Снег. Видимо его летняя версия
По мнению игры это Снег. Видимо его летняя версия

На доработку, ремонт багов, создания различного функционала ушло ещё где-то 2 часа. В итоге модель Qwen3.6-35B-A3B в кванте UD-Q2_K_XL починила все баги и довела прототип до рабочего состояния.

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

Qwen3.6-35B-A3B. Выкопали проход вниз, сбоку снежный биом, алмазов нет
Qwen3.6-35B-A3B. Выкопали проход вниз, сбоку снежный биом, алмазов нет

Пещер и алмазов пока нет. Добавить их будет хорошим заданием для REAP версии.

REAP - вырезать лишних экспертов из модели и сбросить вес

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

REAP (Router-weighted Expert Activation Pruning) вырезает наименее активных экспертов, которые не нужны в конкретных сценариях. Сценарий определяется подготовленным датасетом, поэтому можно создать свою версию REAP заточенную под ваш конкретный сценарий вырезая 25%, 50%, 75% лишних экспертов.

В основном упор REAP делают на программирование, и готовые версии можно найти добавляя REAP к имени: https://huggingface.co/models?search=reap

Например, Qwen3.6 имеет параметры 35B-A3B, REAP 20 версия 28B-A3B, на 20% меньше.

REAP довольно новая техника, и не так распространена и пока для неё редко делают динамические кванты, поэтому для тестов Q4_K_M. В REAP 20 вырезали не так много, запросы и ответы работают на русском, хотя уже чувствуется, что не так хорошо, как оригинал:

REAP разучилась понимать, кто такой Чапай:

Несмотря на то, что русский язык работает, возможно, будет лучше работать с REAP на английском.

Task: create a 3D GTA-like experience in a single web page. The player should be able to walk around, and enter/leave/drive cars.
Task: create a 3D GTA-like experience in a single web page. The player should be able to walk around, and enter/leave/drive cars.

Результат:

GTA по мнению Qwen3.6-28B-REAP20-A3B Q4_K_M
GTA по мнению Qwen3.6-28B-REAP20-A3B Q4_K_M

Чтобы проверить агентный режим, продолжим работу над клоном Minecraft, нужно добавить пещеры и алмазы.

Инструменты REAP версия не разучилась вызывать. В задание позже добавил условие, чтобы алмазы были повыше, и шанс 12% - чтобы глубоко и долго не копать, и сгенерировать какое-нибудь строение.

Алмазы добавлены, пещера не глубокая, но можно поправить, и сгенерированный дом на фоне
Алмазы добавлены, пещера не глубокая, но можно поправить, и сгенерированный дом на фоне

В целом REAP работает, на сколько хорошо или плохо, нужно проводить больше тестов. Такие версии актуальны не только для небольших моделей, чтобы вместить их в GPU, но и для преобразования больших, например, GLM-5.1 744B-A40B в GLM-5.1 444B-A14B.

Маленькая модель как черновик, чтобы ускорить большую

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

Работает если разница между активными параметрами большой модели, особенно если это Dense модель, и размером черновой модели будет больше чем в 3 раза, чтобы накладные расходы на работу маленькой модели не съедали весь эффект.

Gemma4 31B UD-Q4_K_XL без черновика, скорость 62 t/s на задачи программирования:

.\llama-server -m "gemma-4-31B-it-UD-Q4_K_XL.gguf" -ngl 99

gemma-4-31B-it-UD-Q4_K_XL, 62 t/s
gemma-4-31B-it-UD-Q4_K_XL, 62 t/s

Подключим черновик gemma-4-E2B-it-UD-Q4_K_XL, теперь скорость 97 t/s:

.\llama-server -m "gemma-4-31B-it-UD-Q4_K_XL.gguf" -md "gemma-4-E2B-it-UD-Q4_K_XL.gguf" -ngl 99 -ngld 99 --parallel 1

--parallel 1 нужно указать 1, так как в авто режиме будет выделено в 4 раза больше памяти.

gemma-4-31B-it-UD-Q4_K_XL + gemma-4-E2B-it-UD-Q4_K_XL, 97 t/s
gemma-4-31B-it-UD-Q4_K_XL + gemma-4-E2B-it-UD-Q4_K_XL, 97 t/s

Процент принятия черновой модели ~55%. Для кода ускорение в 1.5 раза.

Для задачи перевода ускорение тоже работает, а для рассказа эффект отсутствует. Можно попробовать настроить draft-max и draft-min, это даст эффект, но особого смысла в этом нет.

Ускорение обработки контекста

Агенты постоянно подгружают в контекст содержимое многих исходных файлов, это не генерация новых токенов TG, а обработка контекст PP.

Если модель не влезает целиком на GPU и работает в режиме cmoe, то скорость обработки контекста PP будет не достаточно быстрой, её можно разогнать через указание размеров пакетов -ub -b, например -ub 4096 -b 4096

Сравним 2 команды бенчмарка:

.\llama-bench -m "Qwen3.6-35B-A3B-UD-Q4_K_XL.gguf" -p 4096 -ncmoe 24

.\llama-bench -m "Qwen3.6-35B-A3B-UD-Q4_K_XL.gguf" -ub 4096 -b 4096 -p 4096 -ncmoe 24

PP: 93 t/s vs 475 t/s
PP: 93 t/s vs 475 t/s

ik_llama

ik_llama не универсальный проект замены llama.cpp, например, тут кванты mxfp4 будут медленнее чем на llama.cpp, так как их поддержка не реализована в полной мере. Тоже самое касается vulkan и rocm, здесь они если и запустятся, то будет сильная просадка скорости.

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

Для Qwen3.6 пока нет квантов, поэтому протестируем модель Qwen3.5-35B-A3B, кванты:

  • Unsloth UD-Q4_K_XL

  • Ubergarm IQ4_KS

  • LM Studio Q4_K_M

Замеры KLD на разных квантах
Замеры KLD на разных квантах
  • IQ4_KS и UD-Q4_K_XL примерно равны по качество, но UD-Q4_K_XL весит больше на 1 Гб.

  • IQ4_KS и Q4_K_M весят одинаково, но Q4_K_M значительно хуже по качеству.

  • Q4_K_M имеет KLD в 3 раза хуже.

Квант IQ4_KS и меньше весит и имеет лучшее качество, и для больших моделей это становиться ещё более ощутимым, где выигрыш уже составляет 20-30+ Гб, что может быть очень кстати.

ik_llama: https://github.com/ikawrakow/ik_llama.cpp

Windows сборки ik_llama: https://github.com/Thireus/ik_llama.cpp

gguf кванты для ik_llama: https://huggingface.co/ubergarm

ik_llama не универсальная замена, какие минусы

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

В ik_llama основной упор делается на новые кванты и скорость PP и оптимизация расхода памяти на контекст, на длинном контексте скорость PP падает в разы меньше чем на llama.cpp, есть поддержка новых размеров квантования KV-кэша Q6, хорошая поддержка AVX512 и так далее.

При этом скорость TG может быть даже ниже, чем в llama.cpp, особенно для кванта mxfp4, где скорость будет в 2-3 раза ниже так как нет полной поддержки этого кванта. И родные для ik_llama кванты по скорости tg могут быть медленнее, чем аналогичные по размеру в llama.cpp. Это может зависеть от версии ОС, от конкретного процессора, и так далее. Также тут нет поддержки Vulkan и AMD видеокарт, они запустятся, но скорость на порядок будет ниже.

Я проводил сравнение на железе Intel i7-14700, DDR5-4800, Manjaro, Nvidia, но на вашем железе относительные цифры могут отличаться, так как в ik_llama делаются оптимизации под конкретное железо и процессоры, и на AMD всё может работать лучше. Не стоит сразу брать ik_llama не проверив скорость в llama.cpp.

ik_llama vs llama.cpp на 4060ti 16 Гб
ik_llama vs llama.cpp на 4060ti 16 Гб

Скорость PP в 4 раза выше при стандартных значениях -ub -b. На llama.cpp чтобы получить такую скорость нужно увеличить -ub -b, что приводит к расходу дополнительных 3 Гб VRAM.

Linux vs Windows замеры скорости. 4060 vs 5090

Для RTX 5000 серии для максимальной производительности надо ставить CUDA 12.8 и выше, лучше 13.1. В llama.cpp есть 2 версии, это cuda12.4 и cuda13.1 - вторая заработает только со свежими драйверами, те которые Windows по умолчанию устанавливает не подойдут, нужны с сайта Nvidia.

В linux нужно обновить cuda и драйвера, убедиться, что в toolkit и в драйверах нужная cuda.

> nvcc --version
Cuda compilation tools, release 13.1, V13.1.115
> nvidia-smi
NVIDIA-SMI 590.48.01 Driver Version: 590.48.01 CUDA Version: 13.1

Если нужна поддержка 4000 и 5000 серии, то добавить 2 архитектуры у компилятора:

cmake -B ./build -DGGML_CUDA=ON -DGGML_BLAS=OFF -DGGML_SCHED_MAX_COPIES=1 -DGGML_CUDA_IQK_FORCE_BF16=1 -DLLAMA_OPENSSL=ON -DCMAKE_CUDA_ARCHITECTURES="89;120"
cmake --build build --config Release -j20

Сравним модели MoE Qwen3.6-35B-A3B и Dense Qwen3.6-27B. Linux - Manjaro.

Linux vs Windows 11 vs Windows 10, llama.cpp, 4060 ti vs 5090
Linux vs Windows 11 vs Windows 10, llama.cpp, 4060 ti vs 5090

Использовать встройку чтобы высвободить VRAM

Windows под свою работу, браузеры под свою, клиенты под свою - все они тратят видеопамять, в общей сложности отбирая 2-3 Гб у нейросетей.

Благодаря системе общей памяти в Windows если немного выйти за пределы VRAM, то скорость упадет в разы или порядки, и очень сложно понять, что произошло: вчера всё работало быстро, а сегодня ничего не работает.

Если у вас есть встройка, переключите мониторы на неё. Для игр это не будет проблемой, так как современные Windows и Linux автоматически активируют GPU для тяжелых программ.

Без переключения тоже можно, можно вручную перекинуть конкретные приложения на встройку или наоборот, со встройки на GPU. В Windows надо найти в настройках дисплея "Настройки графики". Там будет небольшое меню, которое позволит указать путь до exe файла и явно указать где ему работать.

В диспетчере задач на вкладке "Подробности" можно посмотреть какие приложения используют VRAM и там же открыть расположение exe файла.

Windows 10
Windows 10

Если несколько видеокарт, то в Windows 11 есть возможность выбирать какая именно GPU будет по умолчанию, даже если мониторы подключены к другой:

Windows 11
Windows 11

Список локальных LLM начала 2026

Зачастую подборки списков вроде "Лучшие локальные модели LLM 2026" представляю собой не список новинок, а список очень старых моделей, которые были актуальны несколько лет назад.

И чаще всего в таких списках Mistral 7B, самая древняя из возможных моделей, древнее только GPT-2 и Llama 2. Даже в 2023, когда и вышла Mistral 7B, она была скорее качественной основой для файнтюнов, а сама по себе была слаба. Новые модели выходят каждые пол года или чаще, новые модели лучше удерживают контекст, лучше следуют промпту, в целом лучше справляются с заданиями. Поэтому правило выбора LLM - это посмотреть на дату выхода, вначале проверить год, а потом месяц.

Например модель qwen3 вышла вначале 2025 года, а летом они представили qwen3 2507, и 2507 была значительно лучше, чем просто qwen3. Сейчас тоже самое произошло с Qwen3.5, которая вышла 2 месяца назад, а неделю назад вышла Qwen3.6.

Новые модели, в отличии от старых, часто мультимодальные, умеют работать с изображениями. Некоторые модели умеют что-то дополнительное, например, Qwen умеет работать с видео, а Gemma4 E4B с аудио. Поддержку аудио недавно добавили в llama.cpp:

Gemma4 E4B отвечает на вопрос заданный в mp3 файле
Gemma4 E4B отвечает на вопрос заданный в mp3 файле

Вот небольшой список новинок начала 2026 или "лучшие локальные LLM 2026", потому что пока что-то новее не вышло:

Для дома:

Для дома+:

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

  • Gemma4 представлена в 4 вариантах: легкие E4B и E2B, MoE модель 26B-A4B, и Dense 31B

  • Qwen3.5 в 8 вариантах: 0.8B, 2B, 4B, 9B, 27B, 35B-A3B, 122B-A10B, 397B-A17B

Для слабых ПК или телефонов подходят новинки размером 4B (Qwen3.5 4B) или оптимизированные E4B (Gemma4 E4B и E2B). Эти новинки для своего размера не плохи.

Монолитная Gemma4 31B походит и для программирования и для творческих задач, а вот MoE Gemma4 26B-A4B, которая в программировании в разы хуже, уже не на столько универсальна, и тут лучше подойдет свежая Qwen3.6 35B-A3B, а на днях вышла Qwen3.6 27B.

Разница между Qwen3.6 27B и Qwen3.6-35B-A3B на бенчмарке программирования
Разница между Qwen3.6 27B и Qwen3.6-35B-A3B на бенчмарке программирования

Заключение

  • Ollama медленнее llama.cpp в 3 раз на 4060 для MoE модели.

  • Динамический квант UD-Q4_K_XL лучше чем стандартный Q4_K_M, а весит столько же.

  • Q4_K_M по уровню соответствует UD-Q3_K_XL.

  • Новый квант IQ4_KS ещё лучше, но работает только в ik_llama.

  • Квант UD-Q2_K_XL написал и отладил клон Minecraft с процедурно-генерируемой графикой.

  • Технология REAP работает, но не идеально, позволяет сэкономит >20% размера.

  • Спекулятивное декодирование ускоряет Dense модели в 1.5 раза в коде и переводе.

  • Переключение на встройку позволит высвободить 2-3 Гб VRAM.

  • ik_llama имеет минусы, но может сэкономить VRAM и ускорить PP

  • Сравнение скорости Linux vs Windows, 4060 vs 5090

Если у вас есть другие способы получить больше скорости или больше качества, то делитесь ими в комментариях, многим будет полезно и интересно.

Комментарии (25)


  1. stilet69
    23.04.2026 23:04

    Огромное спасибо за статью! Разжевали много супер полезной информации.


  1. korwin86
    23.04.2026 23:04

    Супер крутая статья! Спасибо.

    У меня к вам вопрос.

    Можно ли использовать 2 видеокарты под плотные и мое модели с llama.cpp? Конкретны кейс - две видюхи в PCIe x16\PCIe x4 дадут эффект или x4 убьет производительность и смысла нет? Тут надо именно практическую сторону) Теория говорит что смысла почти нет. Но теория говорит что 35-а3б на 4070 дает 5 т\с, а практика говорит что 30-50.


    1. vpman
      23.04.2026 23:04

      Можно. Pciex4 сильно не влияет на инференс, модель только грузится дольше. По сравнению с CPU скорость инференса выше. Кратность зависит от соотношения модели в VRAM и RAM. Но даже если 1 layer попадает в RAM то сразу минус 30% к скорости. И чем больше их в Ram тем хуже. У меня была одна карта на x16 4080 16гб и вторая х4 5060 16гб- с полным VRAM offload на две карты в разы быстрее для моделей с файлом от 16гб .


      1. korwin86
        23.04.2026 23:04

        А когда пользовались не тупило? Я это пытался выпытать из дипсика. Нейронка пишет что загрузиться всё ок, но при использовании будет гонять туда сюда слои между картами и оперативкой и за счет медленного Pciex4 будет даже хуже чем с просто оперативной памятью.

        Хочется попробовать что то типа qwen3.5 122b a10b на openclaw(и других) как будет. У меня сейчас 4070 и 32vram. Можно докупить 5070ti + RAM и получить место под Qwen3.5-122B-A10B-UD-IQ4_NL. Не понимаю стоит ли затрат.

        Вы не пробовали на своём железе сети размером Qwen3.5-122B-A10B?


        1. vpman
          23.04.2026 23:04

          Пользуюсь. У меня она сейчас в Q4_K_XL (70Gb файл) помещается полностью в VRAM 80Gb на 3 карты в режие x8+x8+x4. Скорость 60-70 t/s на простом запросе. Если чуть уйти в RAM на пару гигабайт, то падает до 40 t/s и чем больше выгрузка в RAM тем медленнее. Модель большая для домашнего компьютера, и мне кажется что ваша конфигурация не будет выдавать комфортную скорость(хотя бы 30 тс). Но я не пользовался cmoe и ncmoe, как написано в статье. Возможно они существенно ускоряют инференс для этой модели в RAM.


          1. korwin86
            23.04.2026 23:04

            А на сколько велика разница в выполнении задач между Qwen3.5-122B-A10B и более мелкой допустим Qwen3.5-35B-A3B, вы не проверяли?
            У меня друг на 15 т\с сидит и радуется. :)

            Я проверил разницу(свои тесты, плюс нейронку попросил сделать тесты агентские и общие) между Qwen3.5-35B-A3B и Qwen3.5-9B, разница очень большая для меня. Хотя видел на реддите что чувак сидит в openclaw с Qwen3.5-4B и ему норм.


            1. vpman
              23.04.2026 23:04

              122 всяко лучше в целом, т.к. в ней в 3.5 раза больше данных. Но последняя 3.6-35b тоже для многих задач очень даже неплоха. Надо смотреть в реальных применениях. В ютубах уже полно обзоров и сравнений.


        1. EriIaz
          23.04.2026 23:04

          Не верьте галюнам дипсика. То, что он вам пишет, было справедливо для EXL2, GPTQ и прочих старых GPU-only форматов. Там изначально подразумевается то, что вся модель и её кэши помещаются в видеопамять, а возможность перетекания весов в оперативку - это костыль, убивающий производительность. Конечно, зарезанные линии будут проблемой, но там и с PCIe 5.0 x16 сильно лучше не будет.

          Любой адекватный llamacpp-подобный движок изначально, ещё со стародавних времён GGML форматов, никуда не гоняет веса во время инференса. Ибо что старенький GGML, что современный GGUF может работать и на GPU, и на CPU, на них двоих одновременно. В современном llamacpp веса рационально распределяются по памяти в зависимости от железа и конфигурации, но никуда дальше не двигаются: то, что находится в RAM остаётся в RAM и просчитывается центральным процессором.

          Поэтому будь у вас хоть у вас одна линия PCIe, хоть вообще распределенные вычисления в локальной сети, на работе это слишком сильно не скажется. Только первоначальная загрузка модели будет дольше. И то, если скорость вашего SSD позволит ощутить эту разницу. Суть в том, что всё критичное сразу набивается в VRAM и никуда из неё не выгружается.


  1. Incognito4pda
    23.04.2026 23:04

    Рад приветствовать вас!

    Скажите пожалуйста, а точно ли надо скачивать библиотеки cudart-llama и помещать в довесок к основным файлам запуска? Всегда работало без них. Сейчас попробовал их тоже закинуть - разницы абсолютно никакой и по логам что-то не видно, что он хоть как то с ними взаимодействует...

    Пробовал с 5080 переезжать на 13 cuda и разницу в скорости генерации между cuda 12 и 13 не заметил - так и должно быть? Откатился обратно на 12 т.к. многие другие генераторы изображений и голоса пока ещё не работают с 13 версией.

    Пользуясь случаем, так-же хочу внести свой вклад в копилку знаний llama.cpp:

    То есть для комфортной работы запускаю через батник вот так:

    E:\llama-b8913-bin-win-cuda-12.4-x64\llama-server.exe -c 131072 --fit-target 3072 --host 172.16.0.7 --port 11434 --models-max 1 --sleep-idle-seconds 600 --webui-mcp-proxy --models-dir E:\gguf

    Здесь есть пару интересных параметров, не указанных в статье автора:

    --sleep-idle-seconds 600 - таймаут бездействия выгружает модель из памяти если не работаем с моделью в кеш, а сервер переводит в режим сна. При обращении к модели, всё это очень быстро восстанавливается в работу.

    --webui-mcp-proxy - обязательный параметр если подключаем свой mcp сервер, без него будут проблемы с cors.

    Есть у меня и второй батник с параметром –reasoning off , его я запускаю когда подключаю локальные модели к VSCode Github Copilot:

    E:\llama-b8913-bin-win-cuda-12.4-x64\llama-server.exe -c 131072 --fit-target 3072 --host 172.16.0.7 --port 11434 --reasoning off --models-max 1 --sleep-idle-seconds 600 --webui-mcp-proxy --models-dir E:\gguf

    --reasoning off - на любой модели отключает размышление (даже на неотключаемом gpt-oss вырубает). Я так понимаю для Copilot при работе с локальной моделью, размышление только мешает и после недолгой работы, начинает сыпать ошибками. Особо не разбирался, возможно быстро заканчивается окно контекста, но как по мне с моделью без размышления Copilot гораздо лучше "кодит" и конечно же в разы быстрее. ))


    1. KoIIIeY
      23.04.2026 23:04

      Без размышлений кодит дичь, потому что остановиться не может.


  1. igor_suhorukov
    23.04.2026 23:04

    Другая проблема ollama в том, что вы никогда не знаете, что именно вы загружаете. Например, выполнив команду ollama run gemma4 вы получите какую-то gemma4, которую они решили делать стандартной.

    Решается очень просто: ollama run gemma4:31b-it-q8_0

    Ищется нужный квант из доступных здесь https://ollama.com/library/gemma4/tags


  1. Visualynx
    23.04.2026 23:04

    Хотел бы что-то такое применительно к макам на м5 почитать, что лучше подходит, как запускать, как 36gb общей памяти можно использовать и т.д.


  1. PrivateStaticFinal
    23.04.2026 23:04

    Что и как посоветуете запускать только на cpu 32 Гб ram?


    1. KoIIIeY
      23.04.2026 23:04

      Ничего сколь либо полезного на таком пока не запустишь


    1. RigelGL
      23.04.2026 23:04

      MoE гемму, если 2-3 токена в секунду вас устроят. Либо другую MoE на 16-24 гб. Но в любом случае это будет медленно.


  1. cmyser
    23.04.2026 23:04

    /s

    Just download model with UD-Q4_K_XL

    Not with standard quant


  1. zzzzzzerg
    23.04.2026 23:04

    Крутая статья, спасибо!


  1. Liugger
    23.04.2026 23:04

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

    Последние qwen 3.5 - 3.6 справляются с кодингов вполне хорошо, запускал на своем железе (192 гб RAM + rtx 3090 ti) как плотные 27b, так и MoE 122b-A10B, 31b-a3. Удалось в q6 запустить модель на 122b с частичной выгрузкой в RAM, было 9-15 токенов - небыстро, но приемлемо.

    Проникся как качественно работает, решил добавить в систему еще 2 rtx 3090, думая что смогу меньше слоев выгружать в RAM и будет быстрее работать. Это была ошибка: либо я не смог понять как правильно загрузить несколько GPU при использовании n-cpu-moe, либо узкое горлышко в виде pci-e 4.0x4 делает частичную выгрузку в RAM бессмысленным

    Но зато 27b модель с контекстом в 262 тыс. токенов помещается на 3х3090 идеально и это без использования какого-либо квантования


    1. starfair
      23.04.2026 23:04

      Проникся как качественно работает, решил добавить в систему еще 2 rtx 3090, думая что смогу меньше слоев выгружать в RAM и будет быстрее работать. Это была ошибка: либо я не смог понять как правильно загрузить несколько GPU при использовании n-cpu-moe, либо узкое горлышко в виде pci-e 16 x4 делает частичную выгрузку в RAM бессмысленным

      Сам раздумывал над таким сетапом, чисто виртуально пока. Спросил GPT он мне рассоветывал, если только не использовать родной бридж (и то, не факт что даст уж очень существенный прирост). Или нужно покупать сами по себе не дешевые серверные платы с реальными PCI-E16 для каждой GPU и соответсвующие процессора и память. Можно найти конечно и б/у, но в целом выходит довольно дорогой сетап. Может стоит тогда думать об использовании каких нибудь достатончо дорогих серверных GPU с соизмеримыми VRAM но которые влазят в бытовую плату со всем сопутсвующим колхозом по охлажденю и питанию.


      1. Liugger
        23.04.2026 23:04

        На реддите писали, что получали максимальный буст от NVlink на двух rtx 3090 c 9 ток/сек до 14 ток/сек. Но вот деталей я уже не помню (что за модель, какой движок для инференса). Но большинство писало, что эффект от NVlink в пределах 10-20%

        Я добираю 4-ю rtx 3090 в свой сетап и на этом успокоюсь 122b-a10b в Q5 должна влезть, бюджет на хобби выбран и больше видюх не поместится в корпус.

        Дальше только переход на HEDT или серверные железки. Если смогу преобразовать это дорогое хобби в доход, то думаю над сборкой на основе threadripper 7965wx, там 128 линий и материнка есть с 6 шт. pci-e 5.0x16 + один pci-e 5.0x8. Но даже в этой сборке переходить к профессиональным картам не думал ибо бюджет улетает в космос.

        Blackwell 6000 на 96 гб выходит дороже четырех rtx 3090 и даже двух 4090 48gb.

        А скорость и на потребителском железе приемлемая


  1. itkuznetsov
    23.04.2026 23:04

    Пробую запустить Qwen3.5 MoE 122b-A10B Q4_K_M на ai395 128 - выглядит так что в 96gb памяти выделенной для встройки 8060s должно влезть с норм контекстом, но залезло еле еле контекст 4к токенов и вся память занята, качество ответов норм и скорость норм - но что я делаю не так :( почему не могу запихать контекст хотя бы 32к :( пока разбираюсь


    1. sfinks777
      23.04.2026 23:04

      В LM Studio я решаю этот вопрос выбором Flash Attention K/V Cache Quantization Type. По умолчанию F16, выбираю Q8_0 или ниже. Разница в 3Gb VRAM на максимальном контексте Qwen3.6 35B A3B.


  1. akakoychenko
    23.04.2026 23:04

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

    А ведь можно пойти ещё дальше, и вместо маленькой модели использовать что-то реально быстрое? Например, rag по истории старых сессий модели?

    Если так, то это вообще game changer для агентских задач, где, например агент по 100 тысяч раз в день переводит на другой язык карточки примерно одинаковых товаров, что даёт хороший кеш, но при этом должен не упустить какой-то нюанс, что требует тяжелой модели


  1. NeoCode
    23.04.2026 23:04

    Спасибо, очень мотивирующая статья! А скажите - какую нужно покупать видеокарту, чтобы со всем этим экспериментировать лично? Причем я подозреваю что видеокартой не отделаешься, у меня материнка GIGABYTE AM4 B450M H, проц AMD Ryzen 7 2700, 3200 MHz, 32 GB RAM и блок питания 600W. Я пытался выяснить у всяких бесплатных чатботов, они уверенно говорят что железо устарело:( Но для всех прочих задач мне этого железа более чем хватает.

    В связи с чем может подскажете - придумали ли сейчас что нибудь типа внешних видеокарт уже с блоком питания, ssd для хранения моделей, простейшим управляющим процессором с такой же простейшей операционкой, в задачу которой входила бы только работа с видеокартой и обмен по ethernet с основным компом?


  1. Sabin
    23.04.2026 23:04

    В каких именно случаях у Вас ik_llama.cpp оказывалась более экономной по памяти, чем llama.cpp? Я пробовал на Gemma, у меня наоборот она ещё пару Гб видеопамяти использовала. А следовательно переставала модель помещаться целиком либо ещё больше слоёв уходило на процессор. Разобраться и понять, когда ik версия эффективнее хочу.