Блог AST-SoftPro
Strata: инференс-движок для Qwen3.8-Flash-Next — как локальная модель научилась работать с инструментами
Введение
Ещё два года назад модель на 125 миллиардов параметров означала серверную стойку, облачный счёт и ежемесячный платёж за API. Сегодня такую модель можно запустить на обычном игровом ПК — благодаря инференс-движку Strata с GitHub (репозиторий Niko1221/Strata), который гоняет Qwen3.8-Flash-Next на видеокарте от 12 ГБ и 32–64 ГБ оперативной памяти. Движок бесплатный, с открытым кодом и отдаёт локальный API, совместимый одновременно с OpenAI- и Anthropic-протоколом, — то есть к нему можно подключить Claude Code, Codex CLI, Cursor и любой собственный агент.
Но между «модель отвечает на вопросы» и «модель работает агентом» лежит пропасть из одной конкретной проблемы: вызов инструментов (tool calling). Именно она чаще всего ломает локальные агентные пайплайны — модель пишет вызов не в том формате, выдаёт пустой tool call или вовсе игнорирует объявленные инструменты. В этой статье разберём, как устроен Strata, как он решает проблему с tools и каких скоростей следует ожидать на практике: prompt processing 1500–2000 токенов/с, генерация около 50 токенов/с и контекст 116 000 токенов — цифры реального рабочего окружения автора статьи.
💡 Если вы рассматриваете локальную модель для агентной работы (кодинг-ассистент, автоматизация документов, внутренний ассистент компании), статья даст вам и критерии выбора железа, и конкретные настройки движка, и понимание границ применимости.
Что такое Strata и как он упаковывает 125B-модель в домашний ПК
Qwen3.8-Flash-Next — большая MoE-модель («смесь экспертов») от лаборатории Qwen: около 125 миллиардов параметров суммарно, но для каждого токена активируется лишь малая часть сети. Ключ к запуску такой модели на потребительском железе — именно разреженность: модель представляет собой команду из 24 576 небольших «специалистов» (экспертов), и каждому слову нужны только десять из них.
Strata распределяет работу по всему компьютеру, а не пытается запихнуть модель целиком в видеопамять:
-
Видеокарта держит несколько тысяч самых востребованных экспертов — они участвуют в расчётах чаще всего.
-
Оперативная память хранит всех экспертов целиком; процессор параллельно считает тех, кто не поместился на GPU.
-
SSD содержит большую поисковую таблицу (n-gram таблица фиксированного качества 4.5 байт на символ), по которой движок предсказывает, каких экспертов запросит следующий токен.
Второй приём — спекулятивное декодирование «угадал, потом проверил». Встроенный лёгкий draft-слой (MTP-голова самой модели) предлагает несколько следующих токенов за раз, а большая модель проверяет их одним проходом и принимает корректные. По данным документации Strata, это даёт те же ответы на 1.6–1.8 раза быстрее. Третий приём — чтение длинных промптов крупными блоками (до 8 192 токенов за проход), что и обеспечивает скорость предзаполнения свыше тысячи токенов в секунду.
Отдельно стоит отметить архитектуру внимания модели: линейный компонент Gated DeltaNet делает декодирование O(1) на токен, поэтому скорость генерации почти не падает с ростом контекста — важное свойство для агентных сценариев, где история разговора постоянно растёт.
Аппаратные требования
| Компонент | Минимум | Комментарий |
|---|---|---|
| Видеокарта | NVIDIA RTX 20/30/40/50 или AMD RX 7800 XT и новее, от 12 ГБ видеопамяти | Поддерживаются и старые карты (Tesla P40/V100, GTX 10) — через сообщество |
| Оперативная память | 32 ГБ | Определяет, какой размер модели влезет; 64 ГБ — все размеры |
| Диск | ~80 ГБ свободно | Желательно NVMe SSD: первый старт заметно быстрее |
| ОС | Windows 10/11 или Linux (Ubuntu) | Один и тот же установщик для NVIDIA и AMD |
Установка предельно простая: запустите START-HERE.bat на Windows или ./setup.sh на Linux. Установщик сам определяет карту, предлагает размер модели и длину контекста; скачивание модели (~70 ГБ) продолжается с места обрыва при повторном запуске. Есть и режим «пусть ИИ установит»: в Claude Code, Cursor или Copilot достаточно вставить ссылку на репозиторий с просьбой следовать docs/AI_SETUP.md — ассистент сам подберёт конфигурацию под ваше железо.
Вызов инструментов: почему локальная модель «не умеет» вызывать инструменты
Вызов инструментов — это протокол взаимодействия: приложение объявляет модели список инструментов (чтение файла, запись, запуск команды, поиск и т. д.), а модель обязана вернуть структурированный вызов — имя инструмента и аргументы. Облачные флагманы делают это нативно. С локальными квантованными моделями возникают четыре типовые проблемы.
1. Модель пишет вызов «не тем форматом». Qwen-семейство в чат-шаблоне использует XML-подобный синтаксис (теги вызова инструмента и имени функции), тогда как OpenAI API ожидает JSON-массив вызовов в ответе, а Anthropic API — специальные блоки вызова. Квантованная модель, обученная на «родном» шаблоне, нередко выдаёт XML внутри текстового ответа. Клиент (Claude Code, Codex) такой вызов не видит: агент считает, что модель просто ответила текстом, и цикл ломается. Это общая беда локальных агентов — сообщество vLLM, например, лечит её отдельными парсерами (параметр выбора парсера со значением qwen3_xml).
2. Пустые tool calls. Характерная жалоба владельцев Qwen3.x-серий: модель иногда возвращает вызов с пустыми аргументами — агентный цикл при этом завершается или зацикливается. Особенно заметно на агрессивных квантах и при длинном контексте, где модель «теряет» часть инструкции.
3. Потеря аргументов при спекулятивном декодировании. Быстрая генерация JSON-аргументов зависит от качества draft-подсказок. Изначально MTP-draft слой Strata предлагал токены только из англо-кодового подмножества словаря (40 525 id) — на русском, французском и CJK-текстах принятых подсказок было мало, и агентные ответы шли заметно медленнее.
4. «Пустые» ходы в истории. Серверная обвязка Strata до версии 0.1.40 сохраняла в истории assistant-ходы без текста; следующая модельная реплика начинала копировать эти пустые повороты, что сбивало агентный ритм (issue #843).
Как Strata решает эти проблемы
Разработчик пошёл не путём «дообучения модели», а путём исправления движка — и это важный архитектурный выбор для локального инференса.
Восстановитель вызовов инструментов (tool_call_recovery). В конфиг strata-<model>.json добавляется параметр включения восстановления вызовов. После этого сервер распознаёт вызов объявленного инструмента, даже если модель записала его нестандартно: как JSON вида «имя + аргументы» внутри блока кода, как XML-блок в начале строки или как второй вызов внутри одного тега (причём параметры второго вызова не «сливаются» с первым). Всё остальное, написанное в этих формах, остаётся обычным текстом — то есть восстановление работает точечно и не превращает случайный JSON в теле статьи в команду. Модель при этом по-прежнему не может вызывать «системные» инструменты вроде веб-поиска — только те, что объявлены в запросе.
Унифицированный API под два протокола. Strata одновременно отдаёт OpenAI-совместимый эндпоинт (базовый путь /v1 на локальном сервере), Anthropic-совместимый путь /v1/messages (для Claude Code достаточно указать базовый адрес сервера через переменную ANTHROPIC_BASE_URL) и OpenAI Responses API для Codex CLI. Конвертация между XML-шаблоном модели и JSON-схемой клиента происходит на стороне сервера — приложение видит корректные вызовы инструментов, даже если «под капотом» модель рассуждала в своём формате.
Расширение draft-словаря. Начиная с версии 0.1.27 MTP-draft слой умеет работать с расширенными подмножествами словаря: полная кириллица (флаг --draft-vocab cyrillic, 58 963 id) подняла скорость русских ответов со 83 до 109 токенов/с на RTX 5090; французский subset (fr, версия 0.1.39) повысил долю принятых подсказок во французских ответах с 0.51 до 0.60 без потери скорости на английском и коде. Для русскоязычных агентных проектов это прямо влияет на отзывчивость инструментов.
Мелкие, но важные исправления агентного цикла. С 0.1.40 пустые реплики ассистента по умолчанию исключаются из истории (возврат к старому поведению — через переменную окружения STRATA_KEEP_EMPTY_TURNS). Для клиентов вроде Claude Code, которые шлют много коротких служебных запросов, добавлен режим «рассуждать только по запросу» (anthropic_thinking: on_request) — рассуждение включается только когда клиент явно просит, а не на каждый вспомогательный вызов.
⚠️ Важно понимать границы: локальная квантованная модель остаётся чувствительной к качеству промпта и длине контекста. Даже с
tool_call_recoveryагентные цепочки на 20+ последовательных вызовов инструментов будут заметно «человечнее» в ошибках, чем облачный флагман. Для критичных бизнес-процессов (доступ к реальным данным, платёжные операции) такие риски должен оценивать специалист — выбор движка лишь половина задачи, вторая половина — корректная реализация с учётом edge-кейсов и безопасности.
Скорость на практике: PP 1500–2000, TG ~50, контекст 116K
Документация Strata приводит замеренные таблицы на RTX 5070 (12 ГБ), Ryzen 5 7600, 64 ГБ DDR5 — Windows, движок 0.1.26 с настройками установщика (предзаполнение в авто-режиме, 8-битный кэш внимания выше 4K, стриминг кэша от 64K). Для кванта IQ3_XXS (того самого формата GSQ-RCO от ISTA DASLab):
| Длина промпта | Prompt processing, токенов/с |
|---|---|
| 1K | 482 |
| 4K | 1007 |
| 32K | 1745 |
| 64K | 1609 |
| 128K | 1602 |
| Длина контекста | Output (генерация), токенов/с |
|---|---|
| 1K | 61.9 |
| 4K | 61.6 |
| 32K | 58.5 |
| 64K | 57.2 |
| 128K | 49.0 |
Как эти цифры соотносятся с реальным рабочим окружением автора этой статьи? Статья написана моделью qwen3.8-flash-next-iq3_xxs (квант GSQ-RCO от ISTA DASLab, 75.8 ГБ: 47 ГБ резидентно + 28.8 ГБ на диске) под управлением Strata на Ubuntu-сервере (плата X99, два процессора Intel Xeon E5-2680v4, 64 ГБ регистровой ECC-памяти) с двумя NVIDIA RTX 4070 (по 12 ГБ каждая) и контекстом 116 000 токенов. Замеренные там показатели: prompt processing 1500–2000 токенов/с, генерация ~50 токенов/с. Это ровно та зона, где находятся табличные значения IQ3_XXS на 32–128K (1600–1745 PP и 49–58 TG): две видеокарты в мульти-GPU конфигурации Strata держат верхнюю границу PP-диапазона, а более скромные по объёму памяти карты 12 ГБ дают нижнюю границу генерации.
Что из этого следует для планирования рабочего места:
-
Предзаполнение (PP) — сильная сторона движка. Промпт на 30–40 тысяч токенов (большой файл, длинная история агента) обрабатывается за 20–30 секунд. Для сравнения: README Strata оценивает чтение первого сообщения чата примерно в одну минуту на 30 000 токенов — последующие реплики стартуют за секунды благодаря кэшу промпта.
-
Генерация (TG) ~50 токенов/с — быстрее скорости чтения, но заметно медленнее облачных API (те же таблицы дают Q2_0 до 93 токенов/с). Для агентных задач это приемлемо: tool call — короткий JSON, его «узкое место» не генерация, а предзаполнение обновлённой истории.
-
Контекст 116K для IQ3_XXS на 64 ГБ оперативной памяти — комфортный режим: установщик сам рекомендует до 128K для этого кванта (эксперты 43 ГБ + кэш внимания). На сервере с 128 ГБ и двумя GPU запас ещё больше.
Что ещё ускоряет движок (и когда это нужно)
-
KV-стриминг (с 0.1.5): при контексте от 64K кэш внимания хранится в оперативной памяти, в видеопамяти остаётся только читаемая вниманием часть — больше экспертов помещается на GPU (+6% на 128K, +23% на 262K для Q2_0).
-
Гибридный кэш внимания K8V4 (PR #120): ключи 8 бит, значения ротированные 4 бита — на 23% меньше памяти, на RTX 3090 с Coder-версией генерация выросла с 85 до 99 токенов/с при контексте 198K.
-
Fused int8-ядра (0.1.36): предзаполнение Q2_0 ускорилось на 16–22% на картах RTX 30 и новее.
-
Связанные драфты со случайным выбором (opt-in через переменные окружения
STRATA_SPEC_COUPLEDиSTRATA_SPEC_GUMBEL): при температуре выше нуля доля принятых подсказок выросла с 52.8% до 59.9%, генерация +9% — актуально для «креативных» агентных прогонов.
💡 Практический совет: для агентной работы на русском языке сразу включайте расширенный словарь подсказок с кириллицей (флаг
--draft-vocab cyrillic) и восстановление вызовов инструментов в конфиге. Это два переключателя, которые напрямую влияют на скорость и надёжность вызовов инструментов в кириллических проектах — типичная ошибка новичков ограничиться настройками по умолчанию.
Сравнение с альтернативами: llama.cpp, vLLM, SGLang
Strata не единственный способ гонять Flash-Next локально — но у него своя ниша.
| Критерий | Strata | llama.cpp | vLLM / SGLang |
|---|---|---|---|
| MoE 125B на 64 ГБ оперативной памяти | Да (нативный многоуровневый кэш экспертов) | Частично (mmap + lazy mode, медленнее) | Нет (нужны сотни ГБ видеопамяти или offload с потерей скорости) |
| API-совместимость | OpenAI + Anthropic + Responses | OpenAI-подобный (через llama-server) | OpenAI |
| Кэш внимания «из коробки» | Да, с recovery-парсером XML/JSON | Зависит от чат-шаблона и парсера клиента | Нужен отдельный парсер вызовов (например qwen3_xml) |
| Установка для неквалифицированного пользователя | Один запуск: стартовый скрипт на Windows или Linux (см. раздел про установку) | Ручная сборка/запуск | Docker + конфигурация |
| Мульти-GPU | Да (документированный режим) | Ограниченно | Да, но для больших пулов видеопамяти |
Для задач «один ПК — один агент» Strata выигрывает именно связкой MoE-кэша и двойного API. Для сервера с 4×24 ГБ и одним промптом в батче vLLM может дать более высокую генерацию. Разница принципиальная: llama.cpp/vLLM оптимизируют dense-модели, а Strata спроектирован под сверхразреженные MoE — и это заметно по скоростям PP на длинном контексте.
Рекомендации по внедрению
-
Подбирайте квант под оперативную память, а не «максимальный». При 32 ГБ — Coder-версия (убраны половина экспертов, ~91% результата полной модели по SWE-bench Verified от авторов кванта); при 64 ГБ — IQ2_XS как баланс или IQ3_XXS/IQ3_S для качества; при 96+ ГБ — IQ3_S или Unsloth UD-IQ4_XS.
-
Не бойтесь первого запуска. Загрузка 35–55 ГБ в RAM может на 1–3 минуты подвесить ПК — это нормальное поведение движка, а не зависание.
-
Для агентов фиксируйте контекст разумно. 116–128K достаточно для большинства кодинг-сессий; гонка за 262K на 64 ГБ оперативной памяти упирается в память и замедляет декодирование.
-
Тестируйте вызовы инструментов до внедрения. Прогоните короткий агентный сценарий (5–10 вызовов инструментов) и посмотрите логи
strata-<model>.log— если модель систематически пишет XML, включайте восстановление вызовов инструментов в конфиге. -
Оценивайте риски перед продакшном. Локальный агент с доступом к файловой системе и сети — это поверхность атак (prompt injection через читаемые документы, некорректные вызовы инструментов). Для бизнес-внедрений архитектуру изоляции агента стоит проектировать со специалистом: команды, которые доверяют критичные задачи опытным разработчикам, экономят время на исправлении ошибок, предотвратимых на этапе проектирования.
Заключение
Strata показывает, что граница «локальный ИИ — облачный ИИ» сдвигается не столько квантованием, сколько инженерией движка: многоуровневый кэш экспертов, спекулятивное декодирование и честный парсинг вызовов инструментов превращают 125-миллиардную MoE-модель в рабочего агента на обычном ПК. Скорости prompt processing 1500–2000 токенов/с при генерации ~50 токенов/с и контексте 116K (замерено на Ubuntu-сервере, X99, 2×Xeon E5-2680v4, 2×RTX 4070 12 ГБ, квант IQ3_XXS от ISTA DASLab) означают, что агент с десятками тысяч токенов истории отвечает практически без пауз между шагами.
При этом важно сохранять трезвость: локальная модель — это компромисс по качеству длинных многошаговых цепочек, и настройка tool calling требует проверки на вашем сценарии. Вайб-кодинг даёт быстрый старт, но надёжный агентный пайплайн — это проектирование форматов вызовов, обработка отказов и безопасность. Если проект требует глубокой экспертизы от архитектуры до интеграции — профессиональная помощь окупается снижением рисков и ускорением выхода на рынок.