В llama.cpp добавили поддержку MTP Qwen3.6. Дополнительные слои Multi-Token Prediction позволяют сгенерировать сразу несколько токенов за 1 проход, что ускоряет генерацию в 1.5-2 раза. Качество при этом остается lossless. Для моделей, которые не имеют встроенного MTP, есть альтернативы в лице EAGLE-3 и DFlash.

TL;DR: Скачать кванты с именем MTP:

И запускать:
.\llama-server -m "Qwen3.6-27B-UD-Q4_K_XL.gguf" --spec-type draft-mtp --spec-draft-n-max 4

Что такое MTP

Multi-Token Prediction (MTP) представляют собой дополнительные слои на выходе модели которые работают со скрытым состоянием этой же модели, эти слои обучаются вместе с моделью и они обучаются предсказывать несколько следующих токенов.

Стандартный авторегрессионный трансформер, он же LLM, после прямого прохода имеет выходной слой со скрытым состоянием, которое преобразуют в логиты вероятностей следующего токена. Это только 1 следующий токен, но скрытое состояние может нести информацию о нескольких следующих шагах.

Слои MTP представляют собой несколько голов MTP, которые учатся независимо предсказывать t+1, t+2, t+k следующие токены из одного скрытого состояния. Количество голов определяет сколько можно предсказать следующих токенов.

В llama.cpp поддержку MTP добавили для Qwen3.6: https://github.com/ggml-org/llama.cpp/pull/22673

Для Gemma4 и других моделей поддержка в разработке.

EAGLE-3

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

В методе EAGLE-3 создается и обучается 1 легковесная голова, которая добавляет вконце модели, и, в отличии от MTP, это всего 1 голова, которая используется рекурсивно для предсказания k токенов.

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

Поддержка в llama.cpp в статусе черновика: https://github.com/ggml-org/llama.cpp/pull/18039

DFlash

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

В DFlash параллельно за один раз предсказывается сразу блок токенов размером от 8 до 16 за раз. Как и в случае EAGLE-3, DFlash создает и обучает отдельный драфтер, блок диффузий. Метод похож на способ генерации изображений в Stable Diffusion или на LLM Gemini Diffusion.

Этот способ дает наибольшее ускорение среди всех вариантов, до 8 раз.

Поддержка в llama.cpp в статусе черновика: https://github.com/ggml-org/llama.cpp/pull/22105

Теоретический максимум tg t/s

Генерация LLM зависит линейно от скорости памяти, и теоретический максимум генерации можно рассчитать по формуле:

max (t/s) = Memory Bandwitch / Active Params

Скорость памяти делить на количество активных параметров. Активные параметры зависят от архитектуры модели, в Dense размер активных будет равен размеру модели. а в MoE или Gemma4 E4B, количество активных параметров будет значительно меньше размера модели. На скорость t/s влияют именно задействованные активные параметры каждого шага.

На примере 4060 ti 16 Гб, у которой скорость VRAM 288 Гб/c (268 GiB/s) можно сравнить теоретические расчёты и практические. Возьмём модель Qwen3.6-27B, она весит 54 GiB, в кванте UD-Q3 13.5 GiB и влезает в GPU целиком. В таком случае максимально возможная скорость не будет превышать 19.8 t/s. Реальная скорость ниже, так как происходит деквантование весов и прочие вычисления. Реальная скорость составила 17.11 t/s.

Qwen3.6-27B-UD-Q3_K_XL на 4060 ti 16Гб, 17 t/s при теоретическом максимуме 19.8 t/s
Qwen3.6-27B-UD-Q3_K_XL на 4060 ti 16Гб, 17 t/s при теоретическом максимуме 19.8 t/s

На GPU вы ограничены скоростью памяти, а не количеством вычислительных ресурсов, и у вас остаются ресурсы, чтобы за 1 проход перемножать матрицы прямого прохода LLM для параллельных запросов.

Как работает спекулятивное декодирование

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

Основная идея спекулятивного декодирования заключается в том, что вы можете сгенерировать k следующих токенов и основная модель, используя общий KV-кэш, запустит k параллельных вычислений, проверяя все предложенные токены на совпадение их тому, что предложила бы основная модель.

В этом примере суммарная скорость 8 запросов превосходит одиночный запрос в 7 раз, 20 t/s против 144 t/s, в llama.cpp количество параллельных запросов указывается через параметр --parallel N. В зависимости от архитектуры модели и запаса мощности GPU, одна GPU позволяет параллельно производить вычисления примерно со скоростью одиночного запроса.

Одиночный запрос 20 t/s, 8 параллельных - 18 t/s каждый (суммарно 144 t/s)
Одиночный запрос 20 t/s, 8 параллельных - 18 t/s каждый (суммарно 144 t/s)

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

Допустим, черновик предложил A, B, C, D, E. Основная модель создает и генерирует:

  • base + A + ?

  • base + A + B + ?

  • base + A + B + ... + E + ?

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

Если черновик предложил цепочку из 4 токенов и вся она была принята, то за 1 проверку мы принимает эти 4 токена + 1 новый, так как и для полной цепочки тоже был запущено параллельное выполнение и сгенерировался 1 новый настоящий токен. И поэтому, даже если будут отвергнуты все токены черновика, то это настоящий +1 токен будет добавлен в результат и такой вариант не должен давать просадку скорости даже если отвергнуты все токены черновика. Но при условии, что запаса вычислительных ресурсов хватает.

lossless или токены без потери качества

MTP, EAGLE-3, DFlash должны выдавать качество идентичное оригиналу. Но как проверить, так ли это? В интернете бытуют разные мнения на этот счет, и я сам не был уверен до конца в этом вопросе. Можно прогонять тесты и сравнивать результаты, или можно заглянуть в исходники llama.cpp и посмотреть как реализован механизм принятия токенов.

Нас интересует файл sampling.cpp, где происходит фаза верификации:

std::vector<llama_token> common_sampler_sample_and_accept_n(struct common_sampler * gsmpl, struct llama_context * ctx, const std::vector<int> & idxs, const llama_tokens & draft, bool grammar_first) {
    GGML_ASSERT(idxs.size() == draft.size() + 1 && "idxs.size() must be draft.size() + 1");

    std::vector<llama_token> result;
    result.reserve(idxs.size());

    size_t i = 0;
    for (; i < draft.size(); i++) {
        const llama_token id = common_sampler_sample(gsmpl, ctx, idxs[i], grammar_first);

        common_sampler_accept(gsmpl, id, true);

        result.push_back(id);

        if (draft[i] != id) {
            break;
        }
    }

    if (i == draft.size()) {
        const llama_token id = common_sampler_sample(gsmpl, ctx, idxs[i], grammar_first);

        common_sampler_accept(gsmpl, id, true);

        result.push_back(id);
    }

    return result;
}
  1. Для каждого токена draft[i] основная модель вычисляет параллельные вероятности.

  2. Сэмплер выбирает новый токен каждого параллельного потока.

  3. Если новый токен не совпадает с draft[i], то цикл сразу же прерывается.

  4. Если совпадает, то токен добавляется в финальную последовательность.

if (draft[i] != id) {
  break;
} 

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

Как установить llama.cpp и выжать из неё больше

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

Выжать больше из локальных LLM. Ollama медленнее llama.cpp в 3 раза. UD_Q4_K_XL лучше чем Q4_K_M, а вес тот же и т.д

Добавлю только, что вам стоит попробовать не только кванты UD, но и кванты от Bartowski, которые могут показать себя лучше: https://huggingface.co/bartowski

И также ollama на днях отказалась от изолированной библиотеки GGLM от разработчиков llama.cpp, и перешла на llama.cpp напрямую.

Где взять кванты для MTP, Eagle3, DFlash

Обычно из GGUF вырезались слои MTP, если у модели они были, чтобы не занимали лишнее место. Qwen3.6 является такой моделью, старые кванты не имеют слоев MTP, хотя оригинальная модель их имела.

С появлением поддержки в llama.cpp эти слои начали возвращать, но в виде отдельных квантов. Все кванты находятся на https://huggingface.co/

Нужно ввести в поиск имя модели и добавить к нему MTP:

qwen3.6 mtp
qwen3.6 mtp

Тоже самое для Eagle3 и DFlash:

qwen3.6 eagle3 и dflash
qwen3.6 eagle3 и dflash

Для Qwen3.6 MTP можно взять, например, кванты от Unsloth:

Как запустить MTP

На данный момент в llama.cpp по умолчанию включен режим fit, который автоматически всё настроит так, чтобы максимально эффективно нагрузить GPU используя ncmoe. Поэтому активировать fa, настраивать ncmoe или включать cmoe, указывать максимум для ngl и t вручную не требуется.

Это имеет смысл, если вам нужна VRAM для других задач, тогда переключившись на cmoe, можно высвободить много VRAM не особо потеряв в скорости. Или можно указать -fitt N - указать сколько свободной VRAM оставлять в МБ при автонастройке.

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

Если вы скачаете модель со слоями MTP, то, по умолчанию, она запустится как обычная модель, чтобы активировать MTP нужно явно указать --spec-type draft-mtp и через --spec-draft-n-max 4 указать сколько следующих токенов предсказывать. Размер draft-n-max стоит подбирать в диапазоне количества голов MTP у модели.

Пример запуска, где будет предсказываться 4 дополнительных токена и автонастройка будет оставлять свободными 4 Гб VRAM:

.\llama-server -m "Qwen3.6-27B-MTP-UD-Q4_K_XL.gguf" --spec-type draft-mtp --spec-draft-n-max 4 -fitt 4096

Сравнение скорости

У Qwen3.6 есть 4 головы MTP, вроде как по оригинальной задумке они должны динамически подстраиваться от 2 до 4. В llama.cpp нет такой опции, поэтому нужно будет явно указать какое-то значение.

Тестировать будем Qwen3.6 27B UD-Q4_K_XL и Qwen3.6-35B-A3B-UD-Q4_K_XL. Замеры произведены на 5090, цифры и проценты ускорения на другом оборудование могут отличаться.

Во всех случаях промпт с реддита:

Write a single HTML file with a full-page canvas and no libraries. Simulate a realistic side-view of a moving car as the main subject. Keep the car visible in the foreground while the background landscape scrolls continuously to create the feeling that the car is driving forward. Use layered scenery for depth: nearby ground, roadside elements, trees, poles, and distant hills or mountains should move at different speeds for a natural parallax effect. Animate the wheels spinning realistically and add subtle body motion so the car feels connected to the road. Let the environment pass smoothly behind it, with repeating but varied scenery that makes the movement feel believable. Use cinematic lighting and a cohesive sky, such as sunset, dusk, or daylight, to enhance atmosphere. The overall motion should feel calm, immersive, and realistic, with a seamless looping animation.

Результат для кода в диапазоне draft-n-max от 1 до 7:

MTP --spec-draft-n-max 4 ускоряет задачи программирования в 2 раза
MTP --spec-draft-n-max 4 ускоряет задачи программирования в 2 раза

Спекулятивное декодирование работает для разных задач по разному и нет универсального значения для MTP. Проверим перевод, сочинение истории на русском и работу в агенте, где заданием будет перегнать старый c++ opengl проект в html.

3 типа задач на Qwen3.6-27B-UD-Q4_K_XL с MTP и без
3 типа задач на Qwen3.6-27B-UD-Q4_K_XL с MTP и без

Для MoE, где активных параметров мало, эффективность будет ниже, так как вычисление 3B в целом имеет высокую скорость и без черновиков. Для Qwen3.6-35B-A3B-UD-Q4_K_XL на задаче кода ускорение всего 33%:

Уровни MTP от 1 до 7 для Qwen3.6-35B-A3B-UD-Q4_K_XL
Уровни MTP от 1 до 7 для Qwen3.6-35B-A3B-UD-Q4_K_XL

Для перевода ускорение не особо существенно и составляет 7-12%. А вот для сочинения истории произошла деградация на 10-17%. Это может быть связано с тем, что для вычисления MoE GPU не может переиспользовать уже выбранные активные веса, так как для каждого токена задействуются разные эксперты.

3 типа задач на Qwen3.6-35B-A3B-UD-Q4_K_XL с MTP и без
3 типа задач на Qwen3.6-35B-A3B-UD-Q4_K_XL с MTP и без

Выводы

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

Ускорение зависит от архитектуры модели, от количества активных параметров:

  • Для Dense, где все параметры активные, дает более стабильное ускорение, даже на задачах творчества, для программирования ускорение достигает 2х раз, для творческих задач 33%, для перевода 83%.

  • Для MoE моделей с малым числом активных параметров MTP работает не столь эффективно, 33% для кода, для перевода 12% и неожиданное - деградация на творческий задачах на 10%.

Для моделей которые не имеют MTP есть альтернативные варианты: EAGLE-3 и DFlash.

Изучение исходного кода llama.cpp подтвердило, что качество генерации не страдает и остается lossless при включении MTP.

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


  1. Shannon Автор
    18.05.2026 04:10

    Ещё из новостей про llama.cpp:

    До сих пор не добавили TurboQuant, но на то есть причина - ощутимая просадка скорости, так как вычисления до сих пор не смогли полноценно перенести на GPU и работа выполняется на CPU. Вместо этого добавили “у нас есть turboquant дома”, а именно Rotate Activations. Это одна из частей турбокванта, вращение активаций через матрицу Адамара. И даже это очень сильно повысило качество квантования KV-кэша в размере Q4_0.

    Это улучшение включено по умолчанию, и работает для KV-кэша всех вариантов (q8_0, q4_0, q4_1, iq4_nl, q5_0, q5_1). Я прогнал пару тестов Q4_0 на 256к контексте, и сработало не плохо, не хуже чем Q8_0.

    Добавили нативную поддержку NVFP4 в GGUF. NVFP4 лучше снижает ошибку квантования чем MXFP4, так как разбивает микроблоки дополнительно в 2 раза, делая их более гранулированными, и используют адаптивный scale factor для этих блоков, повышая точность. Я прогнал пару замеров KLD, и кванты NVFP4 GGUF и правда лучше чем чистые MXFP4.


    1. Ryav
      18.05.2026 04:10

      Обновлять llama.cpp нужно, с какой версии это доступно?

      И TurboQuant же влияет на размер контекста, не на качество кэша, нет? У меня уже стоит q4_0 и я бы хотел увеличить размер окна с 64к до 128к (а лучше 256к).


      1. Aldrog
        18.05.2026 04:10

        И TurboQuant же влияет на размер контекста, не на качество кэша, нет?

        Он уменьшает потери при квантизации. 4 бита так и останутся четырьмя битами, но по качеству будут эквивалентны старым 6-8 условно.


    1. lainconn
      18.05.2026 04:10

      Немного уточнений по результатам:

      1. Concurrency - 1?

      2. Значения в таблице - token_throughput?


    1. Kreatifchk
      18.05.2026 04:10

      Как всегда очень полезная статья, спасибо!


    1. EvilFox
      18.05.2026 04:10

      Есть rotorquant.


    1. nikulin_krd
      18.05.2026 04:10

      До сих пор не добавили TurboQuant, но на то есть причина - ощутимая просадка скорости, так как вычисления до сих пор не смогли полноценно перенести на GPU и работа выполняется на CPU.

      Весьма спорное утверждение. В ассиметрике K:turbo4 V:turbo3 я имею больше скорость tg и чуть ниже скорость pp, нежели на q8_0


    1. Wo1d
      18.05.2026 04:10

      Чьи кванты nvfp4 можете рекомендовать на данный момент? Unsloth пока что только mxfp4 в gguf дают.


  1. Fardeadok
    18.05.2026 04:10

    Те кто прочитал эту помойку текста: напишите плиз просто команду запуска тк не у всех есть время жевать ненужную информацию


    1. APKAH9
      18.05.2026 04:10

      https://huggingface.co/unsloth/Qwen3.6-27B-MTP-GGUF https://huggingface.co/unsloth/Qwen3.6-35B-A3B-MTP-GGUF

      MPT версии qwen - генерит в 2 раза быстрее оригинальной


    1. Shannon Автор
      18.05.2026 04:10

      Скачать кванты с именем MTP:

      И запускать:

      .\llama-server -m "Qwen3.6-27B-UD-Q4_K_XL.gguf" --spec-type draft-mtp --spec-draft-n-max 4

      Указать --spec-draft-n-max обязательно, по умолчанию будет сильная просадка скорости.


    1. Mersavets
      18.05.2026 04:10

      Тебя в гугле забанили? И ненужной информации здесь нет


    1. vpman
      18.05.2026 04:10

      Могу дать платочек, чтобы рот вытереть.


    1. trueKapitoshk
      18.05.2026 04:10

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


  1. MAT-POC
    18.05.2026 04:10

    Может кто знает, а аналог Qwen3.5:9B они делать собираются ?


    1. java73
      18.05.2026 04:10

      Есть же уже mtp сборка от unsloth


  1. java73
    18.05.2026 04:10

    На 4070 без ti гонял и так и эдак. На moe модели увеличения скорости больше, чем на 10-15 процентов не получил. Задачи агентные в основном, на чистой генерации простыни текста, разумеется, быстрее, чем при частых префиллах контекста.

    А вот dense модели буквально ускоряются почти в два раза, но у меня это понеслось не с параметром 4, а с параметром 2 токена. Но речь о том, что трудно в целом использовать в работе, например, модель 27b, которая не влезает полностью в видео, и скорость работы 3.5 или 7 токенов в секунду не сильно принципиальна. Чрезмерно ужатые кванты на порядок тупее хорошей и быстрой moe модели на 35b, которая и так пахала где-то на 40-50 т/с, и mtp даёт минимальный прирост, но не забываем, что на сейчас главный минус - mtp нельзя запустить вместе с vision мультимодальностью у qwen.


    1. SlavikF
      18.05.2026 04:10

      В последних версиях мульт модальность работает нормально вместе с MTP


      1. java73
        18.05.2026 04:10

        Это еще тогда +1 Гб на mmproj в память и -1 Гб для базы, не сильно нужно в целом мне)


        1. nikulin_krd
          18.05.2026 04:10

          Мультимодальный прожектор можно(и нужно) грузить на CPU, чтобы он не занимал VRAM


    1. AcckiyGerman
      18.05.2026 04:10

      Через VLLM можно. И очень быстро.

      Вот например 4bit квант Qwen3.6 27B на RTX 5090 за сотню токенов в секунду выдаёт.

      За основу был взят вот этот пример: https://www.reddit.com/r/LocalLLaMA/comments/1sw21op?qwen3627bint4_clocking_100_tps_with_256k_context/

      vllm serve Lorbus/Qwen3.6-27B-int4-AutoRound \
      --speculative-config '{"method":"mtp","num_speculative_tokens":3}' \
      --dtype half \
      --max-model-len 128000 \
      --gpu-memory-utilization 0.90 \
      --max-num-seqs 3 \
      --quantization auto_round \
      --kv-cache-dtype fp8_e4m3 \
      --reasoning-parser qwen3 \
      --tool-call-parser qwen3_coder \
      --enable-auto-tool-choice \
      --host 0.0.0.0 \
      --port 8000 \
      --compilation-config.cudagraph_mode none \
      --trust-remote-code \
      --enable-prefix-caching \
      --enable-chunked-prefill
      

      Курите https://www.reddit.com/r/LocalLLaMA/


      1. java73
        18.05.2026 04:10

        с 5090 я и без курения это сделаю) у меня 4070.


        1. AcckiyGerman
          18.05.2026 04:10

          Да не важно какая карта, я про

          главный минус - mtp нельзя запустить вместе с vision мультимодальностью у qwen

          Можно


  1. Inflame
    18.05.2026 04:10

    Попробовал unsloth/Qwen3.6-27B-MTP-UD-Q3_K_XL — практически никакого прироста не заметил.

    Промпт: Напиши простую игру "Угадай число" на языке C. Сделай так, чтобы компьютер загадывал число от 1 до 100, а пользователь пытался его угадать.

    ❯ llama-cli -m Qwen3.6-27B-MTP-UD-Q3_K_XL.gguf --spec-type draft-mtp --spec-draft-n-max 4
    [ Prompt: 83.3 t/s | Generation: 19.0 t/s ]

    Без MTP:

    ❯ llama-cli -m Qwen3.6-27B-MTP-UD-Q3_K_XL.gguf
    [ Prompt: 150.0 t/s | Generation: 18.5 t/s ]

    А на unsloth/Qwen3.6-35B-A3B-MTP-UD-Q4_K_XL прирост с 40 до 47 т/с.

    Конфигурация: Linux, llama.cpp-vulkan b9190, AMD Radeon RX 9600 XT 16GB, 32 GB RAM.


    1. Inflame
      18.05.2026 04:10

      Всё-таки удалось добиться увеличения скорости с 18 до 31 т/с со следующими параметрами (взял со страницы модели на HuggingFace): llama-cli -m Qwen3.6-27B-MTP-UD-Q3_K_XL.gguf --spec-type draft-mtp --spec-draft-n-max 4 -ngl 99 -fa on -np 1. Видимо, помог перенос всех слоёв модели на GPU (-ngl 99), чего по умолчанию не делалось. Но для этого модель должна полностью вмещаться в VRAM.


      1. fermentum
        18.05.2026 04:10

        Так-то результат поразительный и это при том, что архитектура Квен и так была заточена на скорость генерации. Жалко, что не сделали версию 3.6 меньшего размера, который поместился бы в 16gb без жесткого квантования.


  1. Antra
    18.05.2026 04:10

    Поправьте, пожалуйста, где я неправильно думаю:

    • Qwen3.6-27B - дофига параметров, но медленная

    • Qwen3.6-35B-A3B - только 3B активных, поэтому потупее. Зато быстрая

    MTP дает ощутимый выигрыш на 27B и существенно меньший на MoE. Т.е. разница в скорости нивелируется, а преимущество в качестве за счет реально используемых 27B параметров остается. В каких случаях тогда стоит 35B-A3B все-таки использовать?

    Ну и вопрос про Nemotron-Cascade-2, если можно. Он, насколько я понял, исключительно эффективно работает с контекстом. Увеличение хоть до 100К VRAM отжирает буквально несколько сот мегабайт, а не гигабайты. Разумеется, начальный промпт от какого-нибудь Claude Code несколько минут обрабатывает, но потом на обычные запросы отвечает вполне прилично. Подвохи обнаруживает и т.п. В Qwen тоже можно большой контекст иметь?


    1. Mintavrus
      18.05.2026 04:10

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


      1. Antra
        18.05.2026 04:10

        Да, я так и гонял.
        start_time,end_time,duration,gpu,author,model,size_gb,ctx,pp_ts,tg_ts,vram_peak,vram_pct,sys_ram_peak,flags

        20:38:47,21:06:29,1661.9,3090,nvidia_Nemotron-Cascade-2-30B-A3B-GGUF,nvidia_Nemotron-Cascade-2-30B-A3B-Q5_K_L.gguf,24.51,32768,20.09,
        11.46,24202,98.5,40874,Full_GPU_Normal: -ctk q8_0 -ctv q8_0
        21:06:29,21:33:31,1622.2,3090,nvidia_Nemotron-Cascade-2-30B-A3B-GGUF,nvidia_Nemotron-Cascade-2-30B-A3B-Q5_K_L.gguf,24.51,32768,20.59,11.02,24208,98.5,40264,MoE_1_Expert_CPU: -ctk q8_0 -ctv q8_0 -ncmoe 1
        21:33:31,21:37:55,264.3,3090,nvidia_Nemotron-Cascade-2-30B-A3B-GGUF,nvidia_Nemotron-Cascade-2-30B-A3B-Q5_K_L.gguf,24.51,32768,133.4,113.23,24220,98.6,39667,MoE_2_Experts_CPU: -ctk q8_0 -ctv q8_0 -ncmoe 2
        21:37:55,21:42:20,265.0,3090,nvidia_Nemotron-Cascade-2-30B-A3B-GGUF,nvidia_Nemotron-Cascade-2-30B-A3B-Q5_K_L.gguf,24.51,32768,133.06,113.45,24220,98.6,39683,MoE_3_Experts_CPU: -ctk q8_0 -ctv q8_0 -ncmoe 3

        Разница - небо и земля. При Q5_K_XL, в 24GB не влезает, с 11 до 113 tps выросло при ncmoe 2. Но активных экспертов осталось мало, т.е. по моему пониманию это "скорость вместо качества". Глубокие размышления это исправляют, но тогда и реальная скорость падает (ибо "токенов размышления" больше реального выхлопа, т.е. если поделить размер финального чистого ответа на общее потраченое время, получается 30-40 tps).

        Поэтому я и думаю, может 26B сделает сразу качественно. tps формально будет ниже, чем 3B активных, но на итоговый результат столько же потратится благодаря MTP.

        start_time,end_time,duration_sec,gpu,model,context,pp_ts,tg_ts,vram_peak,flags

        18:27:54,18:28:43,49.0,RTX 3090,Qwen_Qwen3.6-27B-Q4_K_M.gguf,32768,1099.51,36.8,18291,Q8 Cache
        18:28:43,18:30:14,91.1,RTX 3090,Qwen_Qwen3.6-27B-Q4_K_M.gguf,65536,882.96,
        35.89,19507,Q8 Cache

        Пока правда не получилось разогнать с MTP...


        1. 0x62ash
          18.05.2026 04:10

          Но активных экспертов осталось мало, т.е. по моему пониманию это "скорость вместо качества"


          Количество экспертов не меняется. Меняется место выполнения (gpu/cpu). Т.е. cmoe на качество работы модели не влияет.

          27b существенно лучше qwen3.6 35b или nemotron cascade 2 (кстати, контекст на ней хоть и меньше, но все еще внушительный. за маленьким контекстом в q4 обновленной лламе).


          1. Antra
            18.05.2026 04:10

            Да, я понимаю, что при той же модели те же веса/слои.эксперты будут обсчитаны.

            Вопрос именно в том, что с MTP (якобы) можно иметь "активных" параметров раз в 5 больше (27B vs 3b) с приличным повышением качества ценой уже не пятикратного падения скорости, а раза в 2-3 всего. Что для задач с самопроверкой зачастую выдает финальный результат даже быстрее.

            Про Nemotron - мы же говорим про "упихать в досутпную память". Миллионный контекст все равно не получится задействовать даже если теоретически какая-то модель и позволяет. А у немотрона за счет его мамбы можно практически весь его доступный контекст задействовать, и при этом не выгружать дполнительные слои на CPU.

            Да, в Claude Code первый запрос приходится несколько минут ждать (если первоначально надо 25К токенов системного промпта обработать), зато потом он кешированый и уже так не тормозит.


    1. Marwin
      18.05.2026 04:10

      ну MTP не прям таки нивелирует разницу в скорости. Например, на Ampere картах разница между 27B и 35B примерно в 4 раза в фазе декода. А MTP даёт в лучшем случае х2


      1. Antra
        18.05.2026 04:10

        А еще (могу предположить) 27B чуть меньше размером, чем 35B, соответственно можно или квант побольше взять или меньше слоев в CPU выгружать, что добавит скорости. Хотя тут, конечно, не совсем корректно сравнивать слои на CPU у dense модели и эксперты у sparse.


    1. nikulin_krd
      18.05.2026 04:10

      В случае с квенами MoE-модель у них если и тупее, то не сильно. Для Claude Code и локальных моделей надо в settings.json указать в "env"(если нет то добавить) "CLAUDE_CODE_ATTRIBUTION_HEADER" : "0"(через export не работает) - так существенно снижается время разработки. Один и тот же промт у меня разогнался с 1:30 до 30 минут


      1. vasimv
        18.05.2026 04:10

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

        export CLAUDE_CODE_ATTRIBUTION_HEADER=0
        export DISABLE_TELEMETRY=1
        export DISABLE_COST_WARNINGS=1
        export CLAUDE_CODE_ATTRIBUTION_HEADER=0
        export CLAUDE_CODE_DISABLE_1M_CONTEXT=1
        export CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000
        export CLAUDE_CODE_AUTO_COMPACT_WINDOW=120000
        export CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=95
        export DISABLE_PROMPT_CACHING=1
        export CLAUDE_CODE_DISABLE_EXPERIMENTAL_BETAS=1
        #export CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1
        #export MAX_THINKING_TOKENS=0
        export CLAUDE_CODE_DISABLE_FAST_MODE=1
        #export DISABLE_INTERLEAVED_THINKING=1
        #export CLAUDE_CODE_MAX_RETRIES": "3",
        export CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY=1
        export CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY=1
        export ENABLE_TOOL_SEARCH=auto
        export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1
        


  1. VO_Obsidian
    18.05.2026 04:10

    Что насчет gemma 4? Так и не смог выяснить актуальную инфу по поддержке, гугл выкладывал MTP модели:

    https://huggingface.co/google/gemma-4-26B-A4B-it-assistant

    Но у unsloth ни квантов ни постов про поддержку этого, поддержки в основной ветке llamacpp кажется тоже нету. Есть ли форки с этим? И есть ли вообще смысл тут в mtp?


    1. SabMakc
      18.05.2026 04:10

      Поддерживается в ik_llama.cpp, заметное ускорение дает (при инфренсе на CPU во всяком случае). Это не самостоятельная модель, так что для любой gemma4 подходит, не обязательно от unsloth ждать.

      P.S. на CPU и Qwen3.6-35B-A3B заметно быстрее стал, раза в 1.5 (в ik_llama.cpp).

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


      1. Mintavrus
        18.05.2026 04:10

        на счет плохой поддержки русского в последнее время на unsloth моделях - я не заметил такого


        1. SabMakc
          18.05.2026 04:10

          В частности это видно по многословности ответов. Qwen славится своими краткими ответами (даже в рассуждающем режиме), но с UD-Q4 ответы в разы длиннее. На явных ошибках в ответах поймать сложнее, но тоже можно.

          Так что мой текущий выбор - bartowski. Очень неплохо себя показывают относительно unsloth с UD или mudler с APEX (но с APEX игрался меньше).


          1. nikulin_krd
            18.05.2026 04:10

            А что мешает ограничить thinking budget, если вам так мешает "многословность". И не может быть так что от смены автора квантовой меняется поведение в thinking режиме


            1. SabMakc
              18.05.2026 04:10

              Там не просто квантование, там тюнинг под бенчмарки происходит (и некие “популярные сценарии использования”). Результаты в бенчмарках выше даже чем у оригинальной модели бывают. Ну а все прочее в просадке (место под кванты лимитировано же).

              В итоге модель тупее, чем есть, но на бенчмарках просто топ.

              P.S. thinking budget не поможет. Наоборот, высокий бюджет на размышления позволяет скрывать огрехи модели.

              P.P.S. Я вообще в не-думающем режиме обычно использую - “размышления” редко когда действительно на пользу идут.


              1. nikulin_krd
                18.05.2026 04:10

                Какой тюнинг под бенчмарки?))) Кто вам это сказал?)) Там есть imatrix на котором делались динамические кванты. Никакого тюнинга под бенчмарки там нет))

                P.S. thinking budget не поможет. Наоборот, высокий бюджет на размышления позволяет скрывать огрехи модели.

                P.P.S. Я вообще в не-думающем режиме обычно использую - “размышления” редко когда действительно на пользу идут.

                "Вы или крестик наденьте или трусы снимите" - вы же выше писали что хорошо когда мало думает, а теперь пишете обратное))


                1. SabMakc
                  18.05.2026 04:10

                  Я сказал “хорошо когда модель немногословна”. Если модель многословна - значит что-то пошло не так. Показательно если сравнивать одну и туже модель, но в разных квантах.

                  Размышления помогают скрывать проблемы с квантом - это да. Но лично я предпочитаю брать нормальный квант, которым размышления редко когда действительно нужны. Если без размышлений модель превращается в тыкву - ну что же, у вас проблемы.

                  P.S. Да, “тюнинг под бенчмарки” - это мое мнение. Официально там imatrix и динамические кванты (как и у bartowski, к слову). Но видать что-то пошло не так и топовые результаты в бенчмарках еще не все, что надо. Потому как у bartowski работает отлично, а у unsloth наблюдаю проблемы.

                  P.P.S. Лично я не могу объяснить результаты вида “в бенчмарках лучше оригинала” кроме как тюнингом (где-то встречалось и такое).


                  1. nikulin_krd
                    18.05.2026 04:10

                    Берем обе версии Бартовски и Анслот например Q4_K_M и смотрим что же они там наквантовали и видим почему Анслот выигрывает, а не опираемся на какое-то субъективное мнение... У них attention например существенно лучше квантуется и многое другое... Просто сравните "в лоб". Я не знаю что вы там за проблемы у анслота нашли - я проблем не наблюдаю


                    1. SabMakc
                      18.05.2026 04:10

                      Вот как раз Q4_K_M от bartowski и сравнивал с UD-Q4_K_XL (Qwen3.6-35B-A3B). Лоб-в-лоб.

                      На одних и тех же исходных данных, у unsloth ответы длиннее раза в 2-3 получались. А если в “не-думающем” режиме запускать, то unsloth мог и не справиться с задачей вовсе (оставлял кучу комментариев “что тут делается”, но без реального кода).

                      gemma-4-26B-A4B показала схожие результаты (разве что в не-думающем режиме такой просадки не увидел, да и в целом просадка ниже была).

                      Да Qwen3-Coder-30B-A3B обскакал обе, хотя сильно старее. Причем использовался UD-Q4_K_XL от unsloth - т.е. раньше такого не было (или было менее явно).


                      1. Firues
                        18.05.2026 04:10

                        Убедили, спасибо. Проверим. Жаль, что он еще не выпустил модель с MTP


                      1. SabMakc
                        18.05.2026 04:10

                        bartowski вчера выложил mtp-модели как отдельный GGUF-файлы (для указания через --spec-draft-model в llama.cpp). В ik_llama.cpp не завелось, может еще добавят поддержку…

                        Вообще, MTP-слои можно “пересаживать” между моделями (скрипт встречал для этого), может и тут удастся объединить…

                        P.S. почитал комментарии - bartowski скорее всего перевыложит оригинальные GGUF-файлы с MTP. С отдельной моделью выше накладные расходы.


                      1. fermentum
                        18.05.2026 04:10

                        Делал несколько десятков тысяч запросов к последним Квен и Гемме под квантами от Unsloth. Никаких проблем с русским не заметил. Обе модели прекрасно работают и четко следуют промпту. Но ниже Q4 обычно не опускаюсь, там уже артефакты сжатия мешают.

                        Поэтому полностью отказался от Бартовски, хотя он делает отличную работу.

                        Вы документально можете подтвердить вашу теорию о проблемах Unsloth? Тикет открывали?


                      1. SabMakc
                        18.05.2026 04:10

                        У него сколько не проблемы с русским (такое я только на UD-Q2 встречал), а скорее проблемы с качеством работы модели на русском.

                        Нет, тикетов не открывал. Для грамотного подтверждения теории надо серьезное исследование провести, на что совершенно нет времени:

                        1. Какие кванты какие результаты дают? А от других квантовщиков?

                        2. А точно именно русский дает такие проблемы или это область знаний виновата?

                        3. А какие языки подвержены? А какие темы вызывают проблемы?

                        4. А какие параметры запуска использовались и что за софт? А что с другими параметрами или другим софтом?

                        5. А какой системный промт использовался? А если другой?

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

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

                        Но именно очень ярко проблема всплыла у unsloth/Qwen3.6-35B-A3B-GGUF:UD-Q4_K_XL в не-думающем режиме. К той же gemma4 вопросов по существу и нет, кроме “немного более многословный ответ”.


  1. izogfif
    18.05.2026 04:10

    А есть сравнение с vLLM, sglang или на чем там оригинальные веса работают? Речь про то, что Qwen выкладывает веса в формате, который нельзя запустить в llama.cpp, зато можно в vLLM и других программах. И в них тоже есть multi-token prediction (в vLLM вроде можно даже указать, сколько токенов предсказывать, 2 или 3). Учитывая, что vLLM запускается несколько минут, подсчитывая какие-то там CUDA graph, она может работать быстрее, чем llama.cpp.


    1. SlavikF
      18.05.2026 04:10

      Я сравнивал у себя на RTX 4090 D (48 Гб памяти VRAM).

      Детали и конфиги вот здесь:

      https://huggingface.co/unsloth/Qwen3.6-27B-MTP-GGUF/discussions/25

      • Llama.cpp UD-Q6, без MTP: 31 токен в секунду

      • Llama.cpp UD-Q6 и MTP: 60 токенов в секунду. Используется дополнительные 2 ГБ VRAM. Prompt processing замедляется на 20%

      • VLLM и MTP: 40-48 токенов в секунду. В 2 раза быстрее prompt processing.


      1. izogfif
        18.05.2026 04:10

        А VLLM тоже UD-Q6 грузит? Или же FP8 / Q8_0 (или какой там "родной" формат у safetensors)?


        1. SlavikF
          18.05.2026 04:10

          Для VLLM Я использовал FP8.

          FP8 на 4ГБ тяжелее UD-Q6: 30 ГБ и 26 ГБ


  1. xrus123
    18.05.2026 04:10

    Qwen 3.5 9b на 3060 улучшение с 47 ток/с до 60


    1. Dreams_and_magic
      18.05.2026 04:10

      Это на каком размере контекста?:)


    1. Axelaredz
      18.05.2026 04:10

      1. если вылетает от нехватки VRAM увеличивайте на 1 и снова проверяйте.

      2. при использовании внутри vscode увеличить до 4

      Число экспертов 6

      FP8

      Будет больше 40t\s)
      Но конечно потеряем в качестве


      1. Doaxan
        18.05.2026 04:10

        Почему используется тип квантизации F32?


        1. Axelaredz
          18.05.2026 04:10

          Чем выше тем умнее ответы, так то для большинства простых задач конечно FP8.
          Проверял, просто генерацию SVG-code картинки.
          И при таком раскладе выходило лучше


  1. nikulin_krd
    18.05.2026 04:10

    del


  1. Mintavrus
    18.05.2026 04:10

    У меня на модели qwen3.6 27b Q8_K_XL от unsloth наибольшую прибавку дает запуск с параметрами:

      --spec-type draft-mtp --spec-draft-n-max 6 \
      --spec-draft-p-min 0.75 \


  1. andrey_snegovik
    18.05.2026 04:10

    Имея конфигурацию только из CPU (i7-12700) + RAM 32ГБ, есть смысл пробовать что-то выжать из MTP моделей?


    1. SabMakc
      18.05.2026 04:10

      Да, Qwen3.6-35B-A3B / gemma-4-26B-A4B очень хороши. От MTP выигрыш на 30-50% возможен (gemma-4 с assistant аналогично). Плюс сам софт оптимизируют.

      Для чата скорости хватает, но для работы агента слабовато будет.


      1. andrey_snegovik
        18.05.2026 04:10

        "очень хороши" - сколько токенов секунду?
        Не могли бы пожалуйста поделиться результатами из llama-bench с параметрами?
        --n-prompt 4096 --n-gen 4096


        1. SabMakc
          18.05.2026 04:10

          Результаты для ik_llama.cpp, но без mtp/assist ускорения (оно дает еще 30-50% на TG). В llama.cpp PP ниже раза в 2, TG примерно одинаковый будет.

          gemma-4-26B-A4B

          $ llama-bench -m models/bartowski_google_gemma-4-26B-A4B-it-Q4_K_M.gguf --n-prompt 4096 --n-gen 4096
          | model                          |       size |     params | backend    | threads |          test |              t/s |
          | ------------------------------ | ---------: | ---------: | ---------- | ------: | ------------: | ---------------: |
          llm_scale_gate_inp_s: n_embd = 2816
          | gemma4 ?B Q4_K - Medium        |  16.41 GiB |    25.97 B | CPU        |       8 |        pp4096 |     69.98 ± 3.24 |
          | gemma4 ?B Q4_K - Medium        |  16.41 GiB |    25.97 B | CPU        |       8 |        tg4096 |      8.43 ± 0.10 |
          
          build: 40aae0b6d (4509)
          

          Qwen3.6-35B-A3B

          $ llama-bench -m models/bartowski_Qwen_Qwen3.6-35B-A3B-Q4_K_M.gguf --n-prompt 4096 --n-gen 4096 -r 1
          | model                          |       size |     params | backend    | threads |          test |              t/s |
          | ------------------------------ | ---------: | ---------: | ---------- | ------: | ------------: | ---------------: |
          | qwen35moe 35B.A3B Q4_K - Medium |  19.91 GiB |    34.66 B | CPU        |       8 |        pp4096 |     88.11 ± 0.00 |
          | qwen35moe 35B.A3B Q4_K - Medium |  19.91 GiB |    34.66 B | CPU        |       8 |        tg4096 |     11.42 ± 0.00 |
          
          build: 40aae0b6d (4509)
          

          P.S. “очень хороши” - это, в первую очередь, личная оценка качества работы при приемлемой скорости.


          1. andrey_snegovik
            18.05.2026 04:10

            Отлично! Спасибо за результаты!
            А для моделей mtp есть возможность сделать ровно такие же тесты? Чтобы как раз и посмотреть разницу)
            Кстати для полной картины можно и для llama.cpp прикрепить, чтобы увидеть просадку на PP

            P.S. В прошлой статье вроде Shannon рекомендовал использовать UD_Q4_K_XL для llama.cpp (не ik). Может на них тест PP будет норм?


            1. SabMakc
              18.05.2026 04:10

              MTP не смог задать - нет нужных флагов (может что криво смотрел). Не уверен, что там вообще MTP применим - если тест просто рандом генерирует, то MTP не даст ускорения. Тем более, что MTP дает разные результаты для разного типа контента.

              Для llama.cpp тест с gemma-4-26B-A4B дал 39.85 / 8.15 (PP / TG), а для Qwen3.6-35B-A3B llama.cpp упал )

              P.S. я не сторонник unsloth - на мой взгляд, они сильно агрессивно подходят к квантованию отдельных слоев, из-за чего качество на русском падает.


            1. SabMakc
              18.05.2026 04:10

              P.S. В прошлой статье вроде Shannon рекомендовал использовать UD_Q4_K_XL для llama.cpp (не ik). Может на них тест PP будет норм?

              ik_llama.cpp как раз оптимизирован для работы на CPU. UD не даст существенной разницы, скорее даже хуже работает (как понимаю, из-за очень разного квантования разных слоев - местами накладных расходов получается больше). Но это субъективные ощущения, целенаправленных тестов не делал - с момента теста софт обновился и заметно ускорился, сейчас может и лучше.


  1. Xao
    18.05.2026 04:10

    А где можно посмотреть графики, как меняется "хорошесть разных моделей" в зависимости от квантизации и количества параметров?


    1. java73
      18.05.2026 04:10

      Это ошибка так ориентироваться. Надо взять свои собственные привычные сценарии использования и на них прогнать. Вот и поймете. Я так по своим задачам вынужденно сделал выбор в пользу qwen 3.6 moe против Gemma 4 26b, потому что именно в конкретных задачах квен выдала просто идеальный результат (создание документов по образцам, написание договора, due diligence контрагента по всяким апи и реестрам в тырнете, напиисание протоколов, решений в корпоративной сфере).


      1. kreo_OL
        18.05.2026 04:10

        А нет примеров как вы проводите эти тесты?

        Не кидаете же просто промпт и потом на глазок результат сравниваете? Или так и происходит? :)


        1. java73
          18.05.2026 04:10

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


    1. fermentum
      18.05.2026 04:10

      Unsloth и Бартовски выкладывают тесты хорошести квантов. Вот например https://unsloth.ai/docs/models/qwen3.6#benchmarks


  1. nikulin_krd
    18.05.2026 04:10

    Сейчас сделал тест с MTP и без на Qwen3.6-35B-A3B. По крайней мере у Unsloth я бы не использовал MTP и вот почему:

    Запрос: "Вопрос: "Моя машина грязная и я хочу её помыть.Автомойка в 100 м от дома. Как мне поступить: доехать на машине или прогуляться пешком? Ответь одним словом: 'доехать' или 'прогуляться'." Дай ответ на этот вопрос и оценку точности ответа, где 1.0 - абсолютно точно, 0.0 - абсолютно не точно и это критерий оценки твоей уверенности в этом ответе. Значения могу лежать в диапазоне от 0.0 до 1.0. Выдача должна быть в JSON со следующими полями: answer, accuracy"

    Ответ с MTP:

    Скрытый текст

    The user is asking a question in Russian. Question: "My car is dirty and I want to wash it. There is a car wash 100 meters from home. How should I proceed: drive there or walk? Answer with one word: 'drive' or 'walk'." Requirement: Answer with 'drive' or 'walk', and provide an accuracy score (0.0 to 1.0). Output in JSON format with fields 'answer' and 'accuracy'. Analysis: If the car is dirty, it needs to be washed. The car wash is only 100 meters away. Driving a dirty car 100 meters to wash it is counter-intuitive and inefficient. It's much closer to walk there. Therefore, the logical answer is 'walk' (прогуляться). Accuracy should be high, close to 1.0. Let's double check the logic. Goal: Wash the car. Location of wash: 100m away. Current state: Car is at home, dirty. Option A: Drive car to wash (100m). This defeats the purpose of washing immediately, wastes fuel, and keeps the car dirty for 100m. Option B: Walk to wash. You can take a bag of cleaning supplies (or just go to the wash where they clean it), or the car wash might offer mobile service, or you just go to the location to arrange it. Actually, usually if the car is dirty, you walk to the car wash to drop it off or wash it yourself. Driving it 100m is silly. So 'прогуляться' is the correct answer. JSON format: { "answer": "прогуляться", "accuracy": 1.0 } Wait, the prompt says "Ответь одним словом: 'доехать' или 'прогуляться'." I will output exactly that. Let's construct the JSON. answer: "прогуляться" accuracy: 1.0 Check constraints: "Выдача должна быть в JSON со следующими полями: answer, accuracy" I will produce just the JSON. Done. Self-Correction/Refinement during thought: Is there any trick? "My car is dirty... car wash 100m away." Usually, if a car is dirty, you don't drive it. You walk to the car wash. Accuracy 1.0 is appropriate. Output matches requirement. Proceed. Output generation. ``json { "answer": "прогуляться", "accuracy": 1.0 } ` Matches perfectly. No extra text. I will generate the response. One minor point: The prompt asks for one word answer in the text, but also asks for JSON output. I will provide just the JSON as requested. "Выдача должна быть в JSON со следующими полями: answer, accuracy" -> Output must be JSON. Ready. Output matches. Proceeds. [Final Check] Question: "Моя машина грязная и я хочу её помыть.Автомойка в 100 м от дома. Как мне поступить: доехать на машине или прогуляться пешком? Ответь одним словом: 'доехать' или 'прогуляться'." Logic: Car is dirty -> don't drive it -> walk. Answer: прогуляться Accuracy: 1.0 JSON structure correct. Done. Output Generation. `json { "answer": "прогуляться", "accuracy": 1.0 } `` All good. Proceeds. (Self-Correction/Verification during generation) Wait, is there any scenario where driving is better? Maybe if you need to transport cleaning equipment? But 100m is very short. Walking is universally the logical choice for a dirty car nearby. Accuracy 1.0 is safe. The prompt asks for JSON. I will output strictly JSON. Done. Output matches response. Proceeds. [Final Output Generation] -> Proceeds

    Ответ без MTP:

    Скрытый текст

    The user wants me to answer a question about whether to drive or walk to a car wash that is 100 meters away from their house, given that their car is dirty and needs washing. The answer must be a single word: 'доехать' (drive) or 'прогуляться' (walk). I also need to provide an accuracy score (0.0 to 1.0) and output the result in JSON format with fields 'answer' and 'accuracy'. Reasoning: The goal is to wash the car. The car wash is 100 meters away. If I walk to the car wash, I cannot wash the car because the car is at home. Therefore, I must drive the car to the car wash to wash it. Even though it's a short distance (100m), the logical action to get the car washed is to drive it there. Answer: 'доехать' Accuracy: 1.0 (It is logically the only way to wash the car). JSON Output: { "answer": "доехать", "accuracy": 1.0 }


    1. Antra
      18.05.2026 04:10

      Интересный тест!

      Какая квантизация была (как самой модели, так и KV cache)? И сколько раз вы пробовали?

      Множественной перегенерацией я сомг добиться "прогуляться", но обычно нормально отвечали.

      На Q5_K_XL (RTX 3090 24GB) хоть MTP, хоть просто MoE, хоть unsloth, хоть bartowski - примерно одинаково отвечают

      unsloth\Qwen3.6-27B-MTP-GGUF\Qwen3.6-27B-UD-Q5_K_XL.gguf
      -ngl 99 -fa on -np 1 -ctk q8_0 -ctv q8_0 -c 65536 --spec-type draft-mtp --spec-draft-n-max 6 -fitt 512

      Долго думала, итоговых токенов мало, поэтому Anything LLM пишет всего лишь 1 токен в секунду.

      [0m[34m0.55.841.384[0m [32mI [0mslot create_check: id  0 | task 70 | created context checkpoint 1 of 32 (pos_min = 198, pos_max = 198, n_tokens = 199, size = 150.043 MiB)
      [34m0.57.419.427[0m [32mI [0mslot print_timing: id  0 | task 70 | n_decoded =    103, tg =  68.34 t/s
      [34m1.00.438.963[0m [32mI [0mslot print_timing: id  0 | task 70 | n_decoded =    222, tg =  49.04 t/s
      [34m1.03.478.192[0m [32mI [0mslot print_timing: id  0 | task 70 | n_decoded =    324, tg =  42.82 t/s
      [34m1.06.507.649[0m [32mI [0mslot print_timing: id  0 | task 70 | n_decoded =    468, tg =  44.17 t/s
      [34m1.09.570.021[0m [32mI [0mslot print_timing: id  0 | task 70 | n_decoded =    597, tg =  43.71 t/s
      [34m1.12.606.563[0m [32mI [0mslot print_timing: id  0 | task 70 | n_decoded =    738, tg =  44.21 t/s
      [34m1.15.684.694[0m [32mI [0mslot print_timing: id  0 | task 70 |
      prompt eval time =     372.88 ms /   203 tokens (    1.84 ms per token,   544.41 tokens per second)
             eval time =   19772.48 ms /   914 tokens (   21.63 ms per token,    46.23 tokens per second)
            total time =   20145.36 ms /  1117 tokens
      draft acceptance rate = 0.54829 (  704 accepted /  1284 generated)
      [34m1.15.684.712[0m [32mI [0mstatistics draft-mtp: #calls(b,g,a) = 2 281 281, #gen drafts = 281, #acc drafts = 243, #gen tokens = 1686, #acc tokens = 886, dur(b,g,a) = 0.003, 5283.043, 0.622 ms
      [34m1.15.684.755[0m [32mI [0mslot      release: id  0 | task 70 | stop processing: n_tokens = 1121, truncated = 0
      [34m1.15.684.770[0m [32mI [0mslot print_timing: id  0 | task -1 | n_decoded =    914, tg =  46.23 t/s

      ---

      unsloth\gemma-4-26B-A4B-it-GGUF\gemma-4-26B-A4B-it-UD-Q5_K_XL.gguf
      -ngl 99 -fa on -np 1 -ctk q8_0 -ctv q8_0 -c 65536 -fitt 512

      [34m4.41.968.646[0m [32mI [0mslot print_timing: id  0 | task 297 | n_decoded =    100, tg =  93.33 t/s
      [34m4.44.970.286[0m [32mI [0mslot print_timing: id  0 | task 297 | n_decoded =    389, tg =  95.50 t/s
      [34m4.47.353.585[0m [32mI [0mslot print_timing: id  0 | task 297 |
      prompt eval time =     255.92 ms /   202 tokens (    1.27 ms per token,   789.30 tokens per second)
             eval time =    6456.41 ms /   619 tokens (   10.43 ms per token,    95.87 tokens per second)
            total time =    6712.34 ms /   821 tokens
      [34m4.47.353.636[0m [32mI [0mslot      release: id  0 | task 297 | stop processing: n_tokens = 820, truncated = 0


      1. nikulin_krd
        18.05.2026 04:10

        У вас dense-модель, а у меня MoE. Я использовал Q4_K_XL и q8_0 для kv-кэша


    1. sergeym69
      18.05.2026 04:10

      Ну так нормальные параметры для модели надо ставить, а не дефолтные, тогда и работать будет хорошо

      MPT

      Скрытый текст

      Here’s a thinking process:

      1. Analyze User Input:

      • Question: “Моя машина грязная и я хочу её помыть. Автомойка в 100 м от дома. Как мне поступить: доехать на машине или прогуляться пешком? Ответь одним словом: ‘доехать’ или ‘прогуляться’.”

      • Constraints:

        • Answer must be exactly one word: either ‘доехать’ or ‘прогуляться’.

        • Provide an accuracy score between 0.0 and 1.0 representing confidence.

        • Output must be in JSON format with fields: answer, accuracy.

      • Context/Logic: The car is dirty, and the user wants to wash it. The car wash is only 100 meters away. If they drive the dirty car to the car wash, they’ll just drive a dirty car 100m, which is fine, but the point is to wash it. Actually, driving a dirty car to a car wash is standard. But wait, if they walk, how will the car get washed? The car needs to be at the car wash. So they must drive it there. Walking wouldn’t make sense because the car itself needs to be washed. Therefore, the logical answer is ‘доехать’.

      • Confidence: Very high. It’s a straightforward logical deduction. I’ll assign 1.0.

      1. Formulate Output:

      • JSON structure: {"answer": "доехать", "accuracy": 1.0}

      • Check constraints: One word? Yes. Matches options? Yes. JSON format? Yes. Fields correct? Yes. Accuracy in range? Yes.

      1. Self-Correction/Verification:

      • Could there be a trick? “Моя машина грязная и я хочу её помыть.” -> The car needs washing. Car wash is 100m away. To wash the car, the car must go to the car wash. So driving is necessary. Walking would leave the car dirty at home. So ‘доехать’ is definitively correct.

      • Accuracy: 1.0 is appropriate given the clear logic.

      • JSON format: Must be valid. I’ll output exactly that.

      All constraints met. Proceed. Output: {"answer": "доехать", "accuracy": 1.0}

      без MTP

      Скрытый текст
      1. Analyze User Input:

      • Question: “Моя машина грязная и я хочу её помыть. Автомойка в 100 м от дома. Как мне поступить: доехать на машине или прогуляться пешком? Ответь одним словом: ‘доехать’ или ‘прогуляться’.”

      • Translation/Meaning: “My car is dirty and I want to wash it. The car wash is 100m from home. What should I do: drive there or walk? Answer with one word: ‘drive’ or ‘walk’.”

      • Constraints: Answer must be exactly one word: ‘доехать’ or ‘прогуляться’. Output must be JSON with fields answer and accuracy (0.0 to 1.0).

      • Task: Provide the answer and an accuracy/confidence score.

      1. Evaluate the Scenario:

      • The car is dirty and needs washing.

      • The car wash is only 100 meters away.

      • If I walk, the car stays dirty. I need to get the car to the car wash to wash it.

      • Therefore, I must drive the car to the car wash. Walking makes no sense for the stated goal (washing the car).

      • Answer: ‘доехать’

      1. Determine Accuracy/Confidence:

      • The logic is straightforward and unambiguous. The goal is to wash the car, so the car must be at the car wash. Driving is the only logical choice.

      • Confidence should be very high. I’ll set it to 1.0.

      1. Format Output:

      • Must be JSON with fields: answer, accuracy.

      • Structure: {"answer": "доехать", "accuracy": 1.0}

      1. Self-Correction/Verification:

      • Check constraints: “Ответь одним словом: ‘доехать’ или ‘прогуляться’.” -> Matches.

      • JSON format required -> Matches.

      • Accuracy range 0.0-1.0 -> Matches.

      • Logic sound? Yes. Walking wouldn’t get the car washed. Driving is necessary.

      • Output matches exactly.

      All good. Proceed.

      Generate response. {"answer": "доехать", "accuracy": 1.0}

      Note: I’ll make sure the JSON is valid and matches the exact field names requested. No extra text. The prompt says “Выдача должна быть в JSON со следующими полями: answer, accuracy”. I will output only the JSON.✅

      Final check of the prompt: “Дай ответ на этот вопрос и оценку точности ответа… Выдача должна быть в JSON со следующими полями: answer, accuracy” All constraints met. Output matches.✅

      Proceed. [Output Generation] -> {"answer": "доехать", "accuracy": 1.0} (Self-Correction/Refinement during thought: Should I include any explanation? The prompt says “Выдача должна быть в JSON…”, so strictly JSON only is safer. I’ll output just the JSON.)✅

      Final Answer Generation. {"answer": "доехать", "accuracy": 1.0} Done. [Output matches response]✅

      (Self-Correction/Verification during generation): Wait, let’s double check the exact wording. “Ответь одним словом: ‘доехать’ или ‘прогуляться’.” The JSON field answer should contain that word. Accuracy is a float. All good. One minor point: Sometimes prompts like this are trick questions (e.g., if you walk, you can’t wash the car, so obviously drive). It’s straightforward. Confidence 1.0 is appropriate. Output matches exactly.✅

      Proceeds. [Final Output Generation] -> {"answer": "доехать", "accuracy": 1.0} (Done.)

      Конечный ответ одинаковый !


      1. nikulin_krd
        18.05.2026 04:10

        Нормальные это какие? Подскажите? Потому что у меня не дефолтные))

        У меня из того что влияет на ответ - это UD-Q4_K_XL и кэш в обоих случаях поквантован в q8_0. Т.е. условия тестирования одинаковые, а результаты разные, что говорит о том, что MTP все же делает хуже.


        1. 0x62ash
          18.05.2026 04:10

          Думаю речь про температуру и сэмплинг:

          temperature=1.0, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=1.5, repetition_penalty=1.0