惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
宝玉的分享
宝玉的分享
I
InfoQ
P
Privacy International News Feed
V
V2EX
IT之家
IT之家
S
SegmentFault 最新的问题
D
Darknet – Hacking Tools, Hacker News & Cyber Security
V2EX - 技术
V2EX - 技术
C
CERT Recently Published Vulnerability Notes
C
Check Point Blog
The Register - Security
The Register - Security
爱范儿
爱范儿
博客园 - 三生石上(FineUI控件)
AWS News Blog
AWS News Blog
M
MIT News - Artificial intelligence
C
Cyber Attacks, Cyber Crime and Cyber Security
F
Fortinet All Blogs
B
Blog
N
Netflix TechBlog - Medium
B
Blog RSS Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Last Week in AI
Last Week in AI
T
Threatpost
Forbes - Security
Forbes - Security
U
Unit 42
A
Arctic Wolf
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
P
Palo Alto Networks Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Recorded Future
Recorded Future
L
Lohrmann on Cybersecurity
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
月光博客
月光博客
Spread Privacy
Spread Privacy
MongoDB | Blog
MongoDB | Blog
Jina AI
Jina AI
I
Intezer
V
Visual Studio Blog
阮一峰的网络日志
阮一峰的网络日志
The Hacker News
The Hacker News
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
L
LangChain Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
MyScale Blog
MyScale Blog
腾讯CDC
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
量子位

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Qwen3.6 MTP весит на 0.3 Гб больше, а даёт ускорение в ~2 раза. С 60 t/s до 130 t/s для Qwen3.6 27B без искажений
Shannon · 2026-05-18 · via Все публикации подряд на Хабре

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

Что такое 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

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

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

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

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

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

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

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

Допустим скорость VRAM GPU 288 Гб/с или 268 GiB/s (4060 Ti 16Гб), и модель Qwen3.6-27B, которая весит 54 GiB, а в кванте UD-Q3 13.5 GiB и влезает в GPU целиком, то максимальная скорость будет 19.8 t/s. Реальная скорость будет ниже, так как происходит деквантование и прочие вычисления, но выше 19.8 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 параллельных вычислений, проверяя все предложенные токены на совпадение их тому, что предложила бы основная модель.

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

Допустим, черновик предложил A, B, C, D, E.

Основная модель создает:

  • base + A

  • base + A + B

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

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

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

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

MTP, Eagle3, 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

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

До появления поддержки MTP, из моделей при создании GGUF квантов слои MTP вырезались, чтобы они не занимали лишнее место. Все кванты находятся на 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, поэтому настраивать fa, ncmoe, ngl не требуется.

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

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

\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, поэтому эффективное значение должно быть около 4.

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

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.

Qwen3.6 27B UD-Q4_K_XL. Результат для кода в диапазоне draft-n-max от 1 до 7:

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

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

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

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

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

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

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

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

На переводе ускорение незначительно, а вот на сочинении истории идет деградация:

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

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

Замеры проводились на 5090, на другом оборудовании цифры и проценты будут другими.

Выводы

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

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

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

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

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

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