Семь ядер замерли у невидимого барьера. Восьмое задержалось на чужом процессе — и весь инференс LLM завис. Именно так выглядит главная беда совместной жизни задач машинного обучения и обычных процессов на одном процессоре. Инференс-ганг требует, чтобы все ядра ударили в такт одновременно — иначе тишина. Но операционная система не может просто заморозить одно ядро посреди токена: барьер никогда не дождётся опоздавшего, а самовольное подключение нового участника незаметно исказит результат. Статическое выделение «инференсных» ядер решает проблему лишь наполовину: в паузах между генерациями эти ядра простаивают, а общие процессы задыхаются на оставшихся. Особенно остро проблема стоит на edge-устройствах без GPU, где процессор — единственный вычислитель, а каждый ватт на счету. Нужен механизм, позволяющий ядрам перетекать между популяциями без нарушения корректности — словно музыкантам входить в оркестр и выходить из него между тактами, не сбивая ритм.
Протокол ACK-latch реализован в ядре Anima OS — операционной системе на Rust, запущенной на AMD Ryzen 9 9800X3D (архитектура Zen 5). Инференс-движок загружает квантованные модели SmolLM2-135M и Qwen2.5-7B и выполняет вывод, разбивая каждый токен на волны матрично-векторных операций, разделённые барьерами (около 226 на токен). Перед началом генерации выставляется флаг активности и увеличивается номер эпохи; каждое ядро, способное одолжиться, подтверждает (ack) текущую эпоху, предварительно сохранив состояние своего процесса — словно музыкант ставит инструмент на паузу и кивает дирижёру. Состав участников для очередного токена фиксируется в одном атомарном слове: битовая маска формируется из пересечения ядер, запрошенных гангом, и ядер, чей ack совпадает с эпохой на момент фиксации. Это слово публикуется перед стартом токена, и все точки барьерного ожидания читают именно его. Ядро, не успевшее подтвердиться, просто не включается в текущий токен — никто его не ждёт, а его работу крадут соседи по гангу. С уходом эпохи (по окончании генерации или при старте новой) все старые подтверждения аннулируются, так что опоздавшие или покинувшие группу ядра уже не смогут повлиять на следующие токены. Перемещение вытесняемых процессов выполняется планировщиком: арендатор мигрирует с одолженного ядра и продолжает работу на другом, а по возвращении ядра мгновенно подхватывают свои очереди.
Эластичный ганг протестировали на двух моделях: лёгкой SmolLM2-135M (0.75 мс на токен, агрессивно проверяющей протокол) и тяжёлой Qwen2.5-7B (79 мс на токен, упирающейся в пропускную способность памяти). При 25%-ной загрузке инференса (четверть времени ядра заняты генерацией) общая пропускная способность для обычных процессов составила 574 служебных кванта в секунду — в 1.75 раза выше, чем у статического разбиения (327). На 50% нагрузки эластичный ганг дал прирост в 1.52×, на 75% — 1.28×, нигде не уступив по скорости самого инференса. На 100% нагрузке показатели сравнялись, как и предсказывала теория. Важнее всего: выход моделей остался побитово идентичен фиксированному запуску. Хеш финальных логитов 0x9a2917eca1a62bd1 не изменился ни в одном из сценариев, включая стресс-тест с реальным кредитованием ядер без изменения целевой ширины ганга — лендинг доказал свою безопасность. Задержка возврата ядра после окончания генерации составила 0.22 мкс (медиана) — практически мгновенно. Захват же занятого ядра, по намеренно консервативной политике, длится один квант планировщика (около 16 мс): процесс-арендатор не прерывается посреди своего кванта, а ядро присоединяется к гангу только по его истечении.
Работа ломает устоявшееся представление о том, что жёстко-барьерные вычисления несовместимы с динамическим перераспределением ядер. Протокол ACK-latch превращает инференс-группу в полноправный объект планирования, способный делиться ресурсами с остальной системой без потери корректности. Это открывает путь к операционным системам, где инференс — не изолированная задача, а рядовая служба ядра, эластично подстраивающаяся под текущую нагрузку.
Механизм может быть перенесён в пользовательское пространство для Linux-систем с использованием планировщика SCHED_DEADLINE, а также адаптирован к гетерогенным архитектурам (big.LITTLE) и топологиям с одновременной многопоточностью (SMT). Возможна интеграция с политиками энергосбережения для точного дозирования заимствуемых ядер.
Повлияет на проектирование ОС для встраиваемых и edge-устройств, где CPU-инференс становится основной нагрузкой, а также на инфраструктуру для агентов LLM, повышая утилизацию процессоров без ущерба для отзывчивости.
Исследование поведения протокола на процессорах с разным числом физических ядер, а также изучение варианта с прерыванием занятого ядра для ускорения захвата (сейчас это запрещено политикой).
Так эластичный ганг, подобно оркестру без дирижёра, синхронизируется по единому слову-партитуре, допуская смену состава только между токенами-тактами. Это шаг к решению фундаментальной проблемы мирного сосуществования синхронных и асинхронных вычислений в одной системе, а также к пониманию минимальных инвариантов для безопасной миграции членов барьерной группы.
Этот раздел адресован автору работы и его коллегам. Соседние работы нашёл смысловой поиск по нашему архиву — не по совпадению слов, а по смыслу. Мы не рецензируем: мы показываем поле вокруг.
Что сделано в работе
В работе предложен протокол ACK-latch для эластичного распределения ядер между LLM-инференсом и обычными процессами в Anima OS. Протокол позволяет ядрам динамически входить и выходить из инференс-банды между токенами без нарушения барьерной синхронизации, что подтверждено экспериментами на моделях SmolLM2-135M и Qwen2.5-7B. Показан прирост пропускной способности для фоновых процессов до 1.75× по сравнению со статическим разделением ядер.
В чём сила
Сильная сторона — атомарная фиксация состава банды через битовую маску и эпохи, что гарантирует корректность при динамическом перераспределении ядер без ожидания опоздавших. Это позволяет эффективно использовать простаивающие ядра в паузах инференса и сохранять отзывчивость системы.
Куда можно двигаться
Что можно попробовать
Почему это может быть важно
Эластичное распределение ресурсов для LLM-инференса на edge-устройствах без GPU может существенно повысить общую отзывчивость и энергоэффективность, что важно для повсеместного внедрения локальных нейросетевых ассистентов. Предложенный протокол открывает путь к более гибким ОС, способным динамически балансировать между инференсом и фоновыми задачами без ущерба для корректности.
Работы рядом в нашем архиве
Вокруг этой работы в архиве пусто: ближайший разбор всего на 0.56, при обычных 0.64. Похоже, рядом почти не бурили.
как её написали авторы, на английском arXiv:2607.04668
On-device LLM decoding is a hard-barriered CPU-SIMD computation that wants every core for milliseconds per token, while the rest of the OS wants those same cores continuously. A barriered gang cannot simply be dropped into a preemptive scheduler: an unannounced departure deadlocks a barrier, and an unannounced arrival silently corrupts logits. I present the elastic gang of Anima OS, a bare-metal x86-64 Rust kernel in which the inference gang is a first-class schedulable entity whose core membership may change between any two tokens. The core mechanism is an ACK-latched epoch protocol that never waits on a named core: a seqlock-style generation-tagged latch composed with RCU/epoch-style membership consent, so each token's participant set is the intersection of the cores the gang requested and the cores that acked the current epoch. An un-acked core is outside this token and joins at most one token later. Displaced general processes migrate and keep running; cores return to them the moment a generation ends. On a real AMD Zen 5 machine (8C/16T), inference output is bit-exact under verified per-token membership change on both a 135M and a 7B model, the property that makes elasticity safe in a kernel whose safety gate reads logits. Against fair static core partitions, elastic membership Pareto-dominates: at intermediate inference duty cycles it delivers 1.75x (25%), 1.52x (50%), and 1.28x (75%) the general throughput of a static 8-core split at equal or better inference throughput, recovers all eight stranded cores when inference is idle, and converges to the split at saturation. Returning a lent core costs 0.22 us (p50); acquiring a busy, tenant-occupied core costs one scheduling quantum (~16 ms): a running tenant is never preempted mid-slice. Decode throughput saturates at gang width 8, so ceding cores past the knee is nearly free: elasticity auto-sizes the gang online.
Даже при 301 миграции процессов за 10-секундное окно инференс оставался побитово точным, а разброс измерений пропускной способности не превышал 0.9%.