Эфир 18.11 · Поток 318 ноября в 19:00 МСК — бесплатный практический эфир по ИИ-агентам · Живой Поток 3 стартует 23.11Эфир 18 ноября →Поток 3 (23.11)
РелизРазбор · На радарHabr AI→ оригинал

Пять приёмов ускорить MoE на GTX 1070: автопрефикс срезал задержку с 13,3 до 6,1 с

Разработчик движка Strata гоняет большую MoE-модель на GTX 1070 с 8 ГБ VRAM и собрал пять способов её ускорить. Четыре уже есть в движке, но часто выключены: спекулятивное декодирование, KV-кэш в RAM, батчинг и адаптивный кэш экспертов. Пятый — собственный патч с автоопределением общего префикса, он сократил время до первого токена с 13,3 до 6,1 секунды.

AI-обработка оригинала Habr AI; редакция Hamidun News
Пять приёмов ускорить MoE на GTX 1070: автопрефикс срезал задержку с 13,3 до 6,1 с
Источник: Habr AI. Коллаж: Hamidun News.
Слушать статью
Паспорт материала и цифры
ПараметрДанные
ПервоисточникHabr AI ↗
Главный редактор
Ключевой факт #1--spec/--mtp даёт 1,3–1,6x к генерации, особенно на коде
Ключевой факт #2--kv-resident отдаёт освобождённую VRAM кэшу экспертов
Ключевой факт #3Адаптивный кэш экспертов быстрее статичного в 1,5–2 раза

Если вы пытаетесь запустить большую MoE-модель на домашней видеокарте, то упираетесь не в вычисления, а в память. Веса экспертов не помещаются в VRAM, часть уходит в RAM и на SSD, а каждое обращение к «холодному» эксперту стоит драгоценных миллисекунд. Автор движка Strata, который крутит Qwen3.8-Flash-Next на GTX 1070 с 8 ГБ, собрал пять приёмов, которые помогают с этим бороться. Четыре из них уже встроены в движок, пятый он написал сам и показал замеры.

Четыре приёма, которые уже есть в движке

Первый — спекулятивное декодирование (--spec N --mtp <путь>). Маленький черновой слой предсказывает несколько токенов вперёд, а большая модель проверяет их за один проход. Если черновик угадал, вы получаете несколько токенов по цене одного. Выигрыш обычно составляет 1,3–1,6x. Код и повторяющиеся паттерны черновик угадывает хорошо, свободную прозу хуже. Цена — немного VRAM под черновой слой и буферы.

Второй — --kv-resident N. В VRAM остаётся только скользящее окно внимания на N токенов, а весь KV-кэш уходит в pinned RAM. Само внимание от этого не ускоряется. Выигрыш в другом: освободившаяся память достаётся кэшу экспертов. Для MoE лишний гигабайт под резидентные эксперты обычно полезнее, чем экономия на KV. Проверить просто: сравните долю попаданий expert cache в логе до и после.

Третий — батчинг (--batch, --parallel). Это continuous batching: несколько диалогов декодируются в общих окнах, и общие веса читаются один раз на всех. На одной карте throughput на одного пользователя даже чуть падает. Зато никто не ждёт в очереди, пока обслуживают соседа. Если у вас несколько GPU с layer-split или параллельные агенты, смотрите docs/BATCHING.md.

Четвёртый — адаптивная резидентность экспертов (--adapt-every, --adapt-swaps). Кэш сам перекладывает веса между VRAM, RAM и SSD по частоте обращений прямо во время генерации. По замерам автора, разница между статичным и «живым» кэшем составила от 1,5x до 2x, в зависимости от однородности потока промптов.

Пятый приём: автоматический общий префикс

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

Автор добавил серверный слой (STRATA_AUTO_PREFIX=1, по умолчанию выключен). Он хранит radix-trie по id токенов недавних промптов и ведёт бюджет на число одновременных «пинов». Каждый пин забирает VRAM у кэша экспертов, бесплатных пинов не бывает. Если запрос пришёл без явного префикса, сервер сам находит совпадение и подставляет границу. Движок разницы не замечает.

Замер: Strata 0.2.12, одна GTX 1070 8 ГБ, Qwen3.8-Flash-Next UD-IQ4_XS, два клиента с одним длинным документом.

  • Медиана перечитанных токенов: 886 → 468.
  • Медиана токенов из кэша: 0 → 413.
  • Медиана времени до первого токена: 13,3 с → 6,1 с.

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

Ограничения и что делать

Сразу про оговорки. Все цифры получены на одной конфигурации и одном сценарии с двумя клиентами, а прирост от автопрефикса зависит от того, сколько у ваших запросов общего начала. Патч лежит в ветке форка, в апстрим он не принят. Автор открыл issue, а не PR, потому что CONTRIBUTING.md требует сначала согласовать scope. Пины конкурируют с кэшем экспертов за VRAM, поэтому бюджет придётся подбирать.

Практический порядок такой. Если у вас MoE на скромной карте, начните с --kv-resident и --spec/--mtp: это самый быстрый выигрыш без единой строки кода. Затем проверьте, что включена адаптация экспертов. Если у вас RAG или агенты с длинным общим системным промптом, автопрефикс стоит протестировать на своём трафике. Главный урок шире одного движка: на ограниченной VRAM почти любая оптимизация сводится к вопросу, на что потратить каждый гигабайт. Проверять это надо замерами, а не интуицией.

Сюжет

Вопросы и ответы по материалу

Что известно по теме: четыре приёма, которые уже есть в движке?

Первый — спекулятивное декодирование (--spec N --mtp <путь>). Маленький черновой слой предсказывает несколько токенов вперёд, а большая модель проверяет их за один проход. Если черновик угадал, вы получаете несколько токенов по цене одного. Выигрыш обычно составляет 1,3–1,6x. Код и повторяющиеся паттерны черновик угадывает хорошо, свободную прозу хуже. Цена — немного VRAM под черновой слой и буферы. Второй — --kv-resident N.

Что известно по теме: пятый приём: автоматический общий префикс?

У Strata есть механизм strata_prefix: клиент явно указывает, где в промпте кончается общая часть, и движок запоминает чекпоинт на этой границе. Следующие запросы с тем же началом не перечитывают его заново. Проблема в том, что почти ни один клиент, ни чат-бот, ни агентный фреймворк, этого не делает. Автор добавил серверный слой (STRATA_AUTO_PREFIX=1, по умолчанию выключен). Он хранит radix-trie по id токенов недавних промптов и ведёт бюджет на число одновременных «пинов».

Что известно по теме: ограничения и что делать?

Сразу про оговорки. Все цифры получены на одной конфигурации и одном сценарии с двумя клиентами, а прирост от автопрефикса зависит от того, сколько у ваших запросов общего начала. Патч лежит в ветке форка, в апстрим он не принят. Автор открыл issue, а не PR, потому что CONTRIBUTING.md требует сначала согласовать scope. Пины конкурируют с кэшем экспертов за VRAM, поэтому бюджет придётся подбирать. Практический порядок такой.

ЖХ
Жемал Хамидун — CPO Alpina Digital, продакт-менеджер AlpinaGPT. Делает AI-продукты с 2019 года. Hamidun News — pet project, который вырос в production-агрегатор с 6000+ читателей.
✦ Единое AI-пространство · Nomad

Протестируйте новые LLM и мультимодальные модели в одном окне

Платформа Nomad AI (nomadnet.ai) даёт прямой доступ к Claude Opus 5.5, GPT-6, Gemini 3.1, DeepSeek и автономным агентам без VPN, зарубежных карт и зоопарка подписок.

Открыть Nomad AI →Автономный Nomad Agent
Что вы думаете?
Загружаем комментарии…