- BrainTools - https://www.braintools.ru -
Я не претендую на оригинальность – мне много попадаются статьи про разный локальный инференс в целом и про Strata в частности, и решил рассказать свою историю (со своим железом и цифрами на реальных Кейсах использования – а не “запустил и выбил 100-500 генерации токенов”) и историю развития использования своего локального инференса и в целом немного про ИБ, вдруг кому то будут полезны цифры и примеры настроек.
Требование ИБ – не каприз. Для постановок, кода и данных Заказчиков у облачных API в чистом виде хода нет. Маскирование – обязательный слой гигиены, но частичное решение: реконструкция по косвенным признакам, падение качества на замаскированном контексте, немаскируемые код и конфиги, метаданные.
Локальный контур перестал быть игрушкой. 125B MoE + специализированный движок = рабочая скорость на самом обычном железе – и за очень скромную его стоимость: 22-25 t/s генерации и 500+ t/s префилла с качеством топ-кванта (93.1% согласия с 8-битным эталоном).
Практика тюнинга, если соберетесь повторять [1]: квант выбирает не качество, а раскладку VRAM; версия движка – самый дешевый апгрейд (+79% decode, после каждого апдейта – перекалибровка); на Windows смотрите на commit, а не на RAM (+48% за pagefile); KV-кеш почти бесплатен, а параллельные слоты – нет; спекулятивный декодер – must have.
Результат определяет подготовка, а не только модель. Скиллы с отточенными процессами, заранее собранные знания по продуктам (факт-базы, чек-листы), верифицируемый результат (тесты, гейты, e2e) – при комфортной скорости генерации и префилла и подготовленном харнессе агентные волны идут на локальной модели как надо: расследования, ревизии беклога, реализация по отревьюенному дизайну – это уже сегодня.
Локальный контур – это еще и резервный канал. Настроенные ИИ-процессы переживают пропажу подписок, снятие deployment’ов и даже пропажу интернета – а для чувствительных данных он вообще единственный путь.
И это лаборатория с полигоном. Свой инференс дает реальный опыт [2] – как режимы и параметры движка ведут себя под живой нагрузкой (та же «карусель» слотов) – и полигон для обкатки навыков агентов: что стабильно работает на локальной модели, на облачных топах работает тем более. Прогноз (ИМХО): гибрид – облако для дизайна и сложных решений, локально – массовые волны и всё чувствительное – станет нормой для команд разработки уже в ближайший год-два. А в энтерпрайсе уже сейчас «агенты живут внутри контура» будет базовым условием внедрения, как сегодня «реестр отечественного ПО».
Мои Заказчики – госкорпорации, банки, промышленные холдинги. Это мир, где «коммерческая тайна» стоит на каждом втором документе, контуры разделены физически, а слово «ФСТЭК» в требованиях – не украшение (да у нас есть и сертифицированное СЗИ на 4 уровень доверия ФСТЭК – и в 2026 мы проходили сертификацию по новому процессу). Когда приносишь туда «мы подключим вам ИИ», первый же вопрос не «сколько стоит», а «куда уходят данные» – и это правильный вопрос.
Посмотрим честно, что уходит в облачный API, когда работают агенты:
постановка задачи – со названиями проектов, контрагентами, суммами, сроками, ФИО ответственных;
куски кода и конфигов, CICD – с URL-ами внутренних систем, именами серверов, схемами данных, а часто и ключами доступа;
логи и фрагменты данных, которые агент подгребает как контекст для расследования;
КТ, перс данные и , перекрестился, ДСП документы – с ИБ заказчиков или ФСТЭК шутки плохи.
и всё это – с метаданными: кто, когда, сколько и о чем спрашивал.
Список проблем, который я собрал из практики (свой и чужой):
Данные физически покидают периметр. Не «копируются куда-то для анализа», а уходят на чужую инфраструктуру, в чужую юрисдикцию, под чужие регламенты.
Retention и политики конфиденциальности меняются анонсом. Сегодня «промпты не используются для обучения», завтра – «для улучшения качества сервиса». Облачным провайдерам выгодно называть это безопасным – спросите, что происходит с вашими запросами через 30 дней.
152-ФЗ и персональные данные – для иностранных API это отдельный класс риска, который юрист Заказчика разруливает дольше, чем длится проект.
Rate limits и пики. Настоящая агентная работа – это не один запрос, а дюжина параллельных субагентов, каждый из которых тащит контекст на десятки тысяч токенов. Облачный лимит на такие залпы рассчитан на человека, а не на орду.
Счета. Агентные циклы кушают токены нелинейно: один расследователь за вечер спокойно съедает миллионы входных токенов и скушанный лимит у подписки.
Итого: для задач, где в контекст попадает что-то ценное, нужен контур, из которого данные не выходят в принципе. Но тут историческая засада – «локальный LLM» в представлении большинства до сих пор означает «медленно и плохонько». Чем меньше модель – тем хуже она держит формат, tool calling и длинный контекст, то есть всё то, что и делает агента агентом.
Первое, что предлагают вместо локального запуска – маскирование: имена, ИНН, суммы и прочие критичные сущности заменяются плейсхолдерами перед отправкой в облако. Это правильно, это надо делать, и это реально снижает риск. Но полной гарантией это НЕ является, и вот почему:
реконструкция по косвенным признакам. Идентификатор задачи, структура JSON, имена полей, остатки контекста – часто достаточно, чтобы понять, о каком контракте и о каком Заказчике речь, даже без прямых имен;
качество падает. Замените в постановке отрасль на ORG_1 и продукт на PRODUCT_2 – и половина отраслевой специфики для модели исчезла. Замаскированный контекст рвет смысловые связи, и агент начинает путаться ровно там, где нужна точность;
код и конфиги не маскируются. Регэкспом убрать «Росатом» из текста можно; убрать ценное из интеграционного конфига или из куска схемы БД – уже нет;
метаданные остаются. Кто, когда, сколько и в каком ритме спрашивает – это тоже информация, и она уходит целиком;
конвейер маскировки – это свой код. Со своими багами, своими правилами и своей поддержкой. Я как ответственный за развитие внутренних платформ знаю, чем заканчиваются «простые» конвейеры посередине =)
Так что маскирование – обязательный слой гигиены и это закрывает ряд проблем, но оно решает задачу лишь частично. Определенный класс задач – а у меня это как раз агентные волны с кодом и внутренними данными – должен считаться только локально.
Промежуточные станции я тоже пробовал: модели класса 30-35B на локальном инференсе – это «точечно ок, полноценно агентами – нет». Для агентной работы, где нужен длинный контекст, строгое следование формату и tool calling, они сыплются. Значение имеет класс модели, и вот тут помогла архитектура.
Модель: Qwen3.8-Flash-Next (архитектура qwen4exp). Это MoE на 125 млрд параметров, из которых на каждый токен активно ~6 млрд. Плотная 125B на потребительском десктопе – это единицы токенов в минуту даже в 4 бита (~65 ГБ весов, которые надо проходить целиком). MoE меняет сам вопрос: большинство экспертов в данном токене не участвуют, значит их можно держать в RAM и трогать по востребованности.
А еще у qwen4exp есть особенность, о которой часто забывают [3]: помимо 125B «основных» весов модель несет ~51 млрд параметров n-gram/PLE-таблиц – 20 миллионов биграмм/триграмм с ключами и значениями в каждом слое. Эти тензоры не живут в VRAM и не участвуют в матричных умножениях – они читаются построчно из RAM. Плюс отдельный MTP-слой (Multi-Token Prediction) для спекулятивного декодирования. Именно поэтому 125B в принципе работает на 16-гигабайтной видеокарте: в VRAM нужно положить только внимание [4], shared-слои и горячих экспертов. На диске модель в моих квантах занимает 87-104 ГБ – и это нормальная цена вопроса.
Мое железо – домашний комп:
GPU: RTX 5060 Ti 16 ГБ (Blackwell)
CPU: Xeon E5-2640 v3 – 8 физических ядер / 16 потоков, AVX2
RAM: 128 ГиБ DDR4 ECC (да я покупал их еще по 7к за плашку в 32 гб – ИХУ)
Диски: SSD 954 ГБ под модели, HDD под бекапы
Ключевой факт: DDR4 на этом Xeon дает ~25 ГБ/с эффективных на MoE-паттернах доступа (рандомные чтения экспертов, а не линейные). Это главный тормоз всей связки, и почти вся моя история тюнинга – борьба именно с этим.
Станция начиналась с LM Studio, и первый замер был удручающим: ~60 t/s префилл, ~3 t/s генерации – модель целиком жила на CPU (тогда LM Studio еще не поддерживал нормально архитектуру qwen4). Из llama.cpp я выжал всё: -ngl 99 -ncmoe 999 (не-экспертное на GPU, эксперты на CPU) – 7.4 t/s; -ot-правила, которые кладут 4-5 слоев экспертов целиком в VRAM (важна очерёдность: срабатывает первое совпадение, поэтому частные blk.[0-3].ffn_.*_exps.=CUDA0 обязаны идти до общей .ffn_.*_exps.=CPU), плюс -ub 4096 – префилл 44 → 144 t/s, генерация 9.2 t/s, упор в потолок DDR4. MTP-драфты unsloth при этом не грузились ни одной официальной сборкой llama.cpp 2.30-2.48 (в них нет тензора output_hc_norm) – спекулятивное декодирование отпадало.
Методологический момент, который сэкономит вам время: prefill в MoE-схеме растет с длиной промпта (амортизация чтения экспертов): 635 токенов – 44 t/s, 5080 – уже 144. Сравнивать конфигурации можно только на одинаковой длине промпта, дальше я везде использую свежий промпт ~10k (потом ~16.9k) токенов.
Strata [5] (MIT) – движок, написанный специально под qwen4exp, в отличие от универсального llama.cpp: адаптивный кэш горячих экспертов в VRAM (~700 экспертов на гигабайт), CPU и GPU считают экспертов параллельно (пул воркеров на CPU работает одновременно с GPU), встроенный спекулятивный декодер (сначала MTP-слой, позже собственный DFlash2), префилл чанками по 8192 токенов и KV-streaming (KV-кеш в pinned RAM, в VRAM – только горячее окно). У Strata и кванты свои: родная линейка ISTA-DASLab GSQ-RCO (2.4-3.5 bpw – четвертого бита в ней просто нет) плюс семейство Unsloth UD, которое движок научился читать с версии 0.1.39.
Установка с квантом IQ3_S и калибровка --calibrate под мое железо дали сразу:
|
Метрика |
llama.cpp (тюнинг) |
Strata IQ3_S, калиброванная |
|---|---|---|
|
Prefill (промпт ~10k) |
144 t/s |
437 t/s (×3) |
|
Генерация EN / RU |
9.2 t/s |
28.0 / 24.8 t/s (×3) |
Дальше – контекст. Стартовал со 131072, переехал на нативные 262144: генерация просела до 20.4 t/s, префилл держит ~500 t/s – лёгкий штраф за KV-резерв, приемлемо. Отдельно промерил vision-энкодер во всех трех режимах: GPU-вариант обрабатывает фото за 6.2 с против 14.1 с на CPU при штрафе ~5-9% к текстовой скорости – выбрал GPU.
Про воркеры: интуиция [6] «больше потоков – лучше» здесь не работает, и движок это знает – из лога старта видно прямо:
CPU pool: 7 workers by default (8 physical cores, 16 logical processors;
bounded by every physical core but the host's)
7 pool workers on logical processors 2,4,6,8,10,12,14, the host thread on 0
Пул – 7 воркеров по одному на физическое ядро, восьмое ядро отдано хост-потоку (диспетчеризация GPU, стриминг по PCIe). На HT-потоки пул сознательно не лезет: узкое место – пропускная способность памяти [7], а не ALU, и два потока на одном ядре просто дерутся за контроллер DDR4 (наши же замеры в llama.cpp это подтвердили – 16 HT-потоков не быстрее 8 физических). Главный рычаг калибровки – --pcie-frac, доля экспертов, которую выгоднее скопировать по PCIe в VRAM, чем посчитать на CPU; для моего медленного DDR4-камня копирование часто дешевле вычислений. Нам калибровка выдала: IQ3_S – 0.19-0.20 (+13-20% к скорости против дефолта), тяжелому UD-IQ4_XS – 0.35: чем больше байт на эксперта, тем выгоднее копировать. Плюс она же подбирает параметры адаптивного кэша (adapt-every 1 / swaps 160 / decay 0.97) и порог спекуляции spec-min-p 0.70. Всё это – перебором за 20-30 минут; на нестандартном железе калибровка обязательна.
KV-кеш у 125B-модели – второй по важности потребитель памяти после экспертов, и Strata подходит к нему интереснее llama.cpp. На слой в VRAM лежит только окно, остальной кеш – в закрепленной RAM. Вот лог старта с контекстом 524288 и KV int8:
KV streaming: 32768 of 524288 cells per QSA layer in VRAM,
the K/V in 6.19 GiB of pinned RAM
Звучит как «будет медленно», но рабочая нагрузка почти целиком попадает в VRAM-окно – вот реальная строка из сессии:
KV streaming: 99.49% of 215868 block reads hit VRAM, 4.4 MiB read from RAM
99.49% чтений KV-блоков – из VRAM, вытеснение в RAM стоило 4.4 МиБ на всю сессию. На практике большой контекст почти не замедляет генерацию: decode на 262k и 512k профилях различался на единицы t/s.
Мы перемерили профили «контекст × число слотов» (медленный IQ4_XS на движке 0.1.41; для 0.1.56 умножьте decode примерно на 1.7):
|
Профиль |
Decode, t/s |
Слотов эксперт-кэша |
|---|---|---|
|
262k × 1 |
17-21 |
3198 |
|
512k × 1 |
15.6 → на 0.1.56+DFlash2 25.6 |
1607 |
|
512k × 2 |
10.7 соло / 4.5 попарно |
784 |
|
512k × 4 |
не стартует – VRAM сессий |
0 |
Правило, которое здесь видно: каждый слот и каждый контекст отъедает VRAM у эксперт-кэша, второй слот ≈ −50% к decode на запрос. Контекст при этом почти бесплатен (KV живет в RAM), а слоты – нет (сессии живут в VRAM). Остановился на 512k×1. Эксперимент с 1M не включал: конфиг yarn×4 поверх нативных 262144 лежит готовый (KV на 1M ≈ 12.4 ГиБ pinned против 3.06 ГиБ на 262k), по бенчам сообщества на быстром железе префилл не падает, но у нас ожидаемо ~13-17 t/s decode – рабочий сценарий того не требует.
Отдельно честный тест с параллельными запросами: бенчмарк с четырьмя запросами одной темы показал «×3.6» – но это оказался прогрев кэша экспертов (до 96% hit, отдельные запросы 70-90 t/s), а не параллелизм. Разные темы дали правду: Strata держит одну последовательность за раз (FIFO), параллельные клиенты получают ~+50% агрегата за счет оверлапа префилла и декода. Полезно, но не решающий фактор.
|
Квант |
Экспертов, ГиБ |
top-1 vs Q8 |
Decode, t/s |
Prefill, t/s |
Роль |
|---|---|---|---|---|---|
|
IQ3_S |
~50 |
– |
~25.6* |
~610* |
удален с диска |
|
UD-IQ4_XS |
59.5 |
88.9% |
24.7 |
612 |
быстрая альтернатива |
|
UD-Q4_K_XL |
66 |
93.1% |
22.0-23.5 |
528 |
основная |
Переход с «трешки» на квадробит сначала стоил мне -40% генерации (28 → 17 t/s) – и это оказалось не «плохим квантом», а ограничения физики железа: +19% байт на токен (59.5 против 50 ГБ экспертов) и на четверть меньше горячих экспертов в том же объеме VRAM – 3198 слота кэша против 4192 у легкого IQ3_S → больше стриминга по PCIe и DDR4. Подтверждается логом: все эксперты резидентны в RAM (blob reads from the file: 0) – дело не в диске и не в RAM-бюджете. Калибровка подняла квадбит с 11-15 до 14-17 t/s, дальше – потолок моего DDR4. Зато качество топ-кванта – согласие с 8-битным эталоном 93.1% против 88.9%. Разницу в 10% decode между «быстрым» и «качественным» квадбитами я готов платить за 4.2 процентных пункта качества: основная модель у меня – UD-Q4_K_XL, IQ4_XS остался переключаемым конфигом на один ряд ниже.
Отдельная история – сам движок: за полтора месяца я прошел три версии, и каждая меняла картину заметнее, чем любой мой тюнинг.
Обновление 0.1.30 → 0.1.41 (вместе с поддержкой unsloth-квантов) само по себе ничего не ускорило – но перекалибровка на нем дала другие параметры и +20%: IQ3_S пошел 34.4 t/s против прежних 28.6. С этим связана неочевидная грабля: меню --calibrate при нескольких конфигах сортирует их по mtime, и piped-ответ легко калибрует не ту модель – лечится сверкой pack в cmdline процесса.
Апдейт 0.1.41 → 0.1.56 дал скачок, которого не ждешь от «минорной» версии: цепочка замеров IQ4_XS в один день – 14.3 t/s (0.1.41 + MTP) → 24.4 (0.1.56 + MTP) → 25.6 t/s и 616 t/s prefill с новым драфтером DFlash2. Итого +79% decode и +53% prefill. Часть дала сама новая версия (в том числе выход из той самой WDDM LOW-зоны – на 0.1.41 резерв VRAM после загрузки оставался маленьким), еще ~+5% – DFlash2, собственный спекулятивный декодер Strata: окна до 6 токенов, у меня принимается 89% драфтов (130 из 146 в контрольном прогоне), и это на тяжелом Q4_K_XL дает hit rate эксперт-кэша 47-53%. Спекулятивный декодер – must have: это разница между 17 и 23 t/s «на том же железе».
Самая неочевидная находка. Strata резидентит экспертов в RAM по бюджету --resident-budget-gib 75, но при 80 ГиБ свободной физической памяти получала лишь 59.8 – и честно писала об этом в лог:
--resident-budget-gib 75.00 exceeds available commit (64.04 GiB minus
4 GiB headroom and a 0.25 GiB margin): 59.79 GiB
Ограничитель – Windows commit limit (RAM + pagefile), а не физическая RAM. С системным pagefile commit-лимит был ~136 ГиБ, и хвост экспертов уходил в file tier – читался с диска на каждом проходе. Фикс – фиксированные pagefile F: 48 ГБ + C: 16 ГБ → commit ~192 ГБ. Результат на Q4_K_XL: decode 15.1 → 22.3 t/s (+48%), prefill 407 → 528, резидентность 70.3 из 70.3 ГиБ, file tier 0.0 GiB, blob reads from the file: 0. На IQ4_XS эффекта почти не было – он и раньше влезал целиком; pagefile нужен только как commit-размен, сам файл почти не читается. Грабли по пути: pagefile на USB-диске Windows молча не создает (диск с моделями у меня как раз USB SSD – пришлось задействовать внутренний), и «pagefile на HDD – жесть» здесь не аргумент: это страховка commit-лимита, а не рабочий своп.
WDDM: если после загрузки модели свободно меньше 256 МиБ VRAM – decode замедляется примерно в 7 раз, драйвер уходит в LOW-режим. Диагноз по строке VRAM free в логе; лечение – --vram-reserve-mib. Я держу резерв ~1.8 ГиБ.
Деградация на долгом аптайме: через ~18 часов свежий префилл падал 565 → 52 t/s (×10.9) – кэш-тиры движка деградируют, лечится перезагрузкой модели. Правило: свежий старт сессии медленнее ~450 t/s – рестарт сервера, не ждать.
|
Конфигурация |
Prefill |
Gen/Decode |
|---|---|---|
|
LM Studio дефолт |
~60 |
~3 |
|
llama.cpp, |
144 |
9.2 |
|
Strata IQ3_S, 0.1.30, калибровка |
437 |
25-28 |
|
Strata IQ3_S, 0.1.41, перекалибровка |
~470 |
30-34 |
|
Strata UD-IQ4_XS, 0.1.41 (качество ↑) |
474 |
14-17 |
|
Strata UD-IQ4_XS, 0.1.56 + DFlash2 + pagefile |
616 |
25.6 |
|
Strata UD-Q4_K_XL, 0.1.56 + DFlash2 + pagefile (осн.) |
528 |
22.0-23.5 |
Финальный профиль: UD-Q4_K_XL, контекст 524288, 1 слот, KV int8 + resident-окно 32768, DFlash2, pcie-frac 0.35, 7 воркеров, vision на GPU, резерв VRAM ~1.8 ГиБ, все 70.3 ГиБ экспертов page-locked в RAM. Сервер доступен и локально, и через rathole-туннель наружу – туннель, к слову, скорость не режет: 17.4 t/s по публичному URL против тех же 17.4 локально. Приватное «облако» из одного человека =)
Скорость без пользы – игрушка. У меня агентный харнесс – opencode v2 (+ КАПАЙ – скоро будет его анонс в ПРИИСК), и модель подключена туда как обычный провайдер: те же сессии, те же субагенты, те же инструменты. Вот три кейса за октябрь, все цифры – из логов.
31 октября у меня отработала типовая промпт-команда «аудит трассировок и итогов работы команды аудита»: смотрим ошибки [8] в трассировках прода платформы, ищем корневые причины, чиним. Вся волна – от первого промпта до коммитов – прошла на локальной qwen3.8-flash-next:
Лид-сессия (62k токенов на выходе) разобрала журнал аудита, распределила блоки.
Субагент-расследователь (47k токенов, read-only) по SQL-выборкам прод-трассировок нашел корневые причины: узкое место – процесс гейта, а не хост – eventLoopDelayMaxMs=95563, «process was frozen ~84354ms», 25 freeze-событий по 60-293 секунд за окно; триггеры – config hot reload на 84-96 секунд (12:15:15 reload detected → 12:16:51 applied – вот вам и «быстрый патч конфига») и хронический heap-голод (606 critical memory-pressure за 3 дня, heap 951 из 960 MiB в момент заморозки).
Рефери-гейт (11k токенов) отревьюил дизайн фиксов – два варианта были отвергнуты ДО кода, принят третий. Рефери окупается, зафиксировано.
Субагент-исполнитель (46k токенов) реализовал 6 фиксов с тестами: маппинг ошибок API (400/404/401/403/503/502 по классам), пре-валидация координат без похода на апстрим, single-flight для circuit breaker с Retry-After, каскад резолвера и прочее. Итог из отчета субагента: «все 6 фиксов реализованы, гейты зеленые» – с перечнем файлов и количеством тестов по каждому фиксу.
E2E-спеки (21k токенов) – приемочные сценарии классов на эти фиксы.
Закрытие волны: рефлексия сессии, живые уроки, 8 локальных коммитов – все с pathspec, чужое не захвачено (в параллельных сессиях это отдельная дисциплина).
Один рабочий день: инцидент на проде → корневая причина → отревьюенный дизайн → 6 фиксов с тестами → e2e-спеки → коммиты.
29 октября отработала промпт-команда «доработки» по модулю распознавания документов: список моделей по ключам, перераспознавание, критерии «проблемных» страниц. Вся волна – от постановки до кнопок в UI – прошла на локальной qwen3.8-flash-next:
Лид-сессия (~20k токенов) приняла постановку, назначила блоки: R1-R4 – исследования, B1-B4 – реализация.
Три субагента-исследователя (~73-81k токенов каждый, read-only) собрали факты по коду: R1 – какие модели реально доступны по ключу и где фиксировать список (вплоть до сценария «полностью локально» на уровне Шаблона); R2 – перераспознавание и мультимодельность; R3 – критерии «проблемных» документов.
Исполнители R1-R4 (по 8-11k токенов) закрыли исследовательские блоки решениями с факт-базами.
Рефери-гейт (17k токенов) отревьюил план реализации B1-B4 – до кода, а не после.
Субагент-исполнитель B1 (22k токенов) сделал активный ключ пользователя в Профиле: поле в схеме Prisma, каскад резолвера «явный выбор сессии > активный ключ > новейший», два новых POST-роута с аудитом и владением, бейдж активного ключа и кнопки в UI. Вечером того же дня – следующий блок (B2a, мультивыбор способов OCR).
Тесты (133k токенов) – приемочные e2e сценарии классов на эти доработки + автоесты + само тестирование через playwrigth.
Один рабочий день: постановка → три исследования → отревьюенный план → схема БД + миграция + API + фронт, тесты и всё под моим ревью.
1 из постоянных треков – октябрь целиком прошел на локальной qwen3.8-flash-next: 60 сессий, из них больше половины – субагентные волны. По составу работ месяц был такой:
Ревизия беклога (9 шт) – дюжина параллельных read-only субагентов, каждый проверял свою группу задач tech-debt и выносил вердикт «актуальна / уже исправлена» с доказательствами файл:строка.
Доработки аудита документов (3 шт) – пример кейс 2 выше.
Волна traces (~2 раза в неделю) – пример кейс 1 выше.
Уборка md (~2 раза в неделю) – проверка статусов рабочих md файлов и привдение всего в порядок.
Эксперименты – 26 сессий разных доработок.
Один месяц: 60 сессий → 90.2 млн входных и 4.2 млн выходных токенов → 963 млн прочитано из кеша → счет только за электричество (порядка 300 Вт, сотни рублей). Ноль рублей за токены, ноль байт за периметр.
Про деньги – вскользь, и тема закрыта: сама станция стоит очень скромных денег (списанный серверный Xeon, одна потребительская видеокарта и много б/у ECC-памяти – по бюджету обычный рабочий ПК, а не «ИИ-сервер»), а те же объемы в облаке у flash-класса стоили бы единицы долларов – экономия тут не главный аргумент, а приятный фон.
Главных аргумента три, и все – не про деньги.
Первый – чувствительные данные. Постановки с бюджетами и контрагентами, код с внутренними URL-ами, логи прода, КТ, перс данные, ДСП, документы наших Заказчкиов и другая чувствительная информация – всё это работает на машине и не покидает её вообще.
Второй – резервный канал для настроенных ИИ-процессов. Облачная зависимость ломается по-разному: у провайдера кончился лимит или бюджет, deployment сняли с обслуживания (у меня на шлюзах облачные модели «выбывают» буквально за дни – то исчерпан лимит, то 404), сменились условия, и наконец – просто пропал интернет. Настроенные процессы – скиллы, промпт-команды, конвейеры субагентов – при этом продолжают работать на локальном контуре: он сам себе и модель, и шлюз. Не самый умный режим из доступных, но рабочий – а это уже управление непрерывностью, а не эксперимент.
Третий – лаборатория для реального опыта. Когда инференс стоит под столом, движки, режимы и их параметры можно щупать руками – и узнавать, как всё реально ведет себя под нагрузкой, а не из документации. Свежий пример – «карусель» слотов и потеря контекста, ноябрь. Симптом: агентная сессия с контекстом 300-400K токенов работает нормально, пока между ходами агента не проскочат чужие мелкие вызовы (другой клиент, tool-запрос) – и следующий ход выглядит как «модель зависла». Разбор по логам показал: метрика переиспользования контекста (доля KV-префикса, взятая из кеша) падала в ноль, и сервер молча перечитывал весь промпт с нуля – 300-400K токенов, 540-730 секунд, в течение которых генерации нет вообще. Клиент смотрит на «зависание», а сервер честно трудится – просто над чтением, а не над генерацией. Причин оказалось две: вытеснение кэша диалогов в однопоточном режиме и «карусель» слотов в параллельном – сессия попадала не в «свой» слот, KV чужой, свой контекст утерян. В свежей версии движка слоты сделали «липкими» (97-98% попаданий в свой контекст), но параллельный режим заплатил 41% скорости декода. Итог – осознанный выбор профиля под нагрузку: редкие длинные сессии – один режим, частые короткие (heartbeat-агент, ход раз в 5-10 минут, по wall time выходит в 2.3 раза быстрее) – другой, переключение одной строкой конфига. Такой опыт на облачном API не купишь: там ты видишь «модель молчит», а здесь – видишь почему, с метрикой reuse в каждой serve-строке лога.
И неожиданный бонус лаборатории: это идеальный полигон для обкатки навыков агентов. Скиллы и промпт-команды, которые стабильно работают на локальной модели – медленнее, капризнее к контексту, с очередью параллельных субагентов – на облачных топах работают тем более. Правило простое: если «тут» не накосячили – «там» точно не накосячат. Все кейсы этой статьи обкатаны именно так.
И отдельно про скорость, потому что именно она делает всё выше не теорией. При достаточно комфортной скорости генерации – 22-25 t/s decode и 500+ t/s префилла это именно комфортно: агент заглатывает контекст на десятки тысяч токенов за секунды, ответ “отвлекся и не успеваешь читать” в реальном времени, волна субагентов не растягивается на сутки – локальная модель перестает ощущаться «запасной». Она просто еще один рабочий инструмент в конвейере.
Где локальная модель все еще хуже облачных топов: самые сложные дизайнерские развилки и длинные многошаговые рассуждения «на пустом контексте» – облачная модель старшего класса рассуждает точнее. Но главное наблюдение за месяц: результат в кейсах выше дала не «умность» модели, а подготовка харнесса – скиллы с отточенными процессами, заранее собранные знания по продуктам (факт-базы с готовыми файл:строка-выжимками, чек-листы валидации, паспорта блоков), контекст, который не надо собирать с нуля. При комфортной скорости генерации и префилла и достаточно подготовленном харнессе положительный результат получается и с локальной моделью – в отдельных сценариях уже без разницы, какая модель под капотом. Оркестрация и дисциплина промптов решают сИльно больше, чем «еще +10% умности».
И напоследок: эксперименты на этом не закончились и вообще продолжаются постоянно. Есть еще один сервер – полная противоположность Windows-станции: бездисплейный Linux-риг на списанном майнинговом железе (плата из майнинг-ферм с кучей PCIe-слотов, двухъядерный Celeron без AVX, 8 ГБ RAM без свопа и четыре экс-майнинговые P104-100 8 ГБ (Pascal, sm_61) по 2-3 тысячи рублей за штуку – итого все обошлось в ~20к), который круглосуточно крутит 35B MoE-модель для агентов и бота – «еще одна» для других экспериментов Cyber-Tiel-Coder-35B-A3B – 27-30 t/s генерации, префилл до 785 t/s, контекст 262K, раздача по HTTPS наружу. Видеоподсистема всего рига стоит меньше одной б/у RTX 3060. А еще за ним полтора месяца железной драмы: Xid 79 «GPU fallen off the bus» восемь раз за месяц, зомби-сервер с «health: ok» при мертвой генерации, SSD, который умудрялся читать одну и ту же область по-разному.
Интересно – пишите в комментариях – сделаю вторую часть =)
ЗЫ – Иногда полезно не отбиваться слайдами про «безопасность облаков», а разобраться =) и показывать реальные логи и личные кейсы. ЗЫЫ – И конечно фактуру для этой статьи помогала собирать все та же Qwen3.8-Flash-Next =). ЗЫЫЫ – И само собой внутри нашего корпоративного контура в ПРИИСК у нас много других разных локальных моделей. Картинки делала – одна, мои замечания голосом и превращала в текст и постановку для Qwen вторая, а проверку на орфографию – третья.
Автор: 4KAP
Источник [9]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/38484
URLs in this post:
[1] повторять: http://www.braintools.ru/article/4012
[2] опыт: http://www.braintools.ru/article/6952
[3] забывают: http://www.braintools.ru/article/333
[4] внимание: http://www.braintools.ru/article/7595
[5] Strata: https://github.com/Niko1221/Strata
[6] интуиция: http://www.braintools.ru/article/6929
[7] памяти: http://www.braintools.ru/article/4140
[8] ошибки: http://www.braintools.ru/article/4192
[9] Источник: https://habr.com/ru/articles/1107310/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1107310
Нажмите здесь для печати.