Материал подготовлен автоматически по первоисточникам: ссылки на них — в конце статьи.
Мобильного GUI-агента — модели, которая читает экран и выбирает следующее действие, — научились быстрее запускать локально, не выгружая модель между задачами. В работе Zhuomin Chen и коллег Tandem сократил задержку текстового шага на 30%, хотя препринт не рецензирован и числа получили сами авторы. Это делает локальную обработку практичнее там, где экран нельзя отправлять в облако, а агент выполняет длинную цепочку действий.
Обычный кэш сохраняет состояние не в тех местах
GUI-агент строит новый запрос после каждого нажатия, прокрутки или ввода текста. Инструкция и описание задачи обычно остаются прежними, но недавняя история и содержимое экрана меняются.
В модели с полным вниманием сервер может сохранить кэш ключей и значений до последнего общего токена, отбросить изменившуюся часть и продолжить вычисления. Гибридные модели устроены иначе: большинство их слоёв сворачивает прочитанный контекст в одно рекуррентное состояние фиксированного размера. Чтобы вернуться к середине запроса, сервер должен заранее сохранить там контрольную точку состояния.
llama.cpp размещает такие точки под продолжение чата: на границах сообщений и рядом с концом запроса. Для агента это неудобно, потому что следующий запрос часто расходится с предыдущим внутри истории действий или описания экрана. В трассировке стандартная политика повторно обрабатывала в среднем 111 общих токенов на каждом следующем шаге.
Вторая проблема возникает при генерации с черновыми токенами. Небольшая часть модели предлагает сразу несколько продолжений, а основная модель проверяет их одним проходом. Если предложение отклонено, вычисления нужно откатить к последнему принятому токену.
Стандартный путь llama.cpp сохраняет промежуточные состояния так, что предварительная обработка запроса уходит с матричного блока NPU на последовательное выполнение по одному токену. Для короткого ответа агента в формате JSON выигрыш не успевает окупить подготовку: включение этого режима добавляло 0,67 секунды на текстовый шаг.
Tandem разделяет долгоживущий кэш и короткий откат
Tandem сохраняет состояние там, где два последовательных запроса впервые расходятся. Такая точка лучше предсказывает общий префикс следующего шага, чем фиксированное расстояние от конца сообщения. Система также объединяет обработку входных данных в крупные пакеты: каждая лишняя граница требует нового прохода по модели и копирования примерно 50 МиБ рекуррентного состояния.
Для генерации Tandem оставляет основную часть запроса на матричном блоке NPU. Состояния для возможного отката создаёт только короткий последовательный хвост. При проверке черновых токенов отдельное ядро читает каждый блок весов один раз и применяет его сразу ко всем предложениям, а сокращённый словарь уменьшает работу черновой части модели.
Между сериями запросов runtime снимает запросы на активный режим питания NPU, но сохраняет веса модели в памяти. Следующая задача возобновляет вычисления без повторной загрузки модели. Реализация встроена в сервер и серверную часть Hexagon проекта llama.cpp.
Замеры охватывают набор из 21 экрана приложений и трассировку ещё из 40 последовательных шагов. Основные опыты провели с Qwen3.5 разных размеров на Snapdragon 8 Elite, затем проверили переносимость на следующем поколении Snapdragon, а политику контрольных точек — также на LFM2 и Granite.
Менять архитектуру стоит только для локального гибридного агента
Для запросов со скриншотами задержка снизилась на 16%: кодировщик изображения остаётся общей крупной статьёй расходов и ограничивает эффект повторного использования текста. На текстовых шагах расход энергии уменьшился на 33%, а потребление в ожидании при загруженной модели упало с 0,76 до 0,22 Вт. На следующем поколении Snapdragon ускорение текстового шага сохранилось на уровне 27%.
Команде с локальным агентом на гибридной модели имеет смысл пересмотреть три части runtime: где сохраняется рекуррентное состояние, как создаются состояния для отката и удерживает ли простаивающая сессия NPU в активном режиме. Размещение контрольных точек, объединение пакетов и освобождение ресурсов питания можно внедрять независимо от специальных ядер Tandem.
Спекулятивный путь переносится хуже: он использует устройство рекуррентных слоёв Qwen3.5, встроенную голову для черновой генерации и особенности Hexagon. Для другого ускорителя потребуются собственные матричные и векторные ядра.
Работа не даёт оснований менять облачный агент или модель с полным вниманием: их кэш и профиль задержек устроены иначе. Результаты относятся к локальному последовательному агенту с короткими ответами; в проверенных запросах оптимизации сохраняли выбранные действия, хотя иногда меняли формулировку свободного текстового резюме.
Источники
Похоже на вашу задачу?
Расскажите, что собираете. За полчаса разложим на этапы и назовём сроки — это бесплатно и ни к чему не обязывает.



