Исследователи Ли, Ли и Чжоу предложили метод PoLar (Program-of-Layers), который формирует для каждого входного запроса индивидуальную программу выполнения - какие слои пропустить, а какие выполнить. Легковесный предиктивный модуль обучается генерировать такие программы, обеспечивая стабильное улучшение точности на математических бенчмарках при сокращении числа выполняемых слоёв. Эксперименты на открытых моделях Llama-3.2, Qwen1.5, Qwen2.5 и Qwen3 показали: для большинства запросов более короткие программы достигают той же или лучшей точности, а ошибочные предсказания исходной модели могут быть исправлены альтернативными программами с меньшим числом слоев.
Этот подход вписывается в общий тренд оптимизации инференса, где каждый процент ускорения и каждый сэкономленный гигабайт памяти имеют значение. В отличие от методов оценки уверенности LLM, которые помогают определить, когда модели можно доверять, PoLar напрямую вмешивается в вычислительный граф, адаптируя его под сложность запроса.
Что такое PoLar и зачем нужно динамическое управление слоями
Стандартный инференс в трансформерных моделях устроен как конвейер: каждый токен последовательно проходит через все N слоёв, от первого до последнего. Этот подход прост в реализации, но игнорирует фундаментальный факт - не все запросы требуют полной глубины вычислений. Простой вопрос о столице Франции и сложная математическая задача проходят один и тот же путь, тратя одинаковое количество compute.
PoLar ломает эту парадигму. Вместо жёстко заданной последовательности слой-за-слоем метод строит для каждого запроса персональный маршрут - какие слои активировать, какие пропустить, а какие, возможно, выполнить дважды. Решение принимает легковесный предиктивный модуль, обученный находить оптимальный баланс между затратами вычислений и качеством ответа.
Статический инференс: почему мы платим за все слои
В стандартном forward pass трансформера каждый из N идентичных по структуре слоёв получает скрытое представление от предыдущего, применяет self-attention и feed-forward network, передаёт результат дальше. Сложность O(N) по числу слоёв - константа, которую невозможно обойти без изменения архитектуры инференса.
Проблема в том, что глубокие слои не всегда полезны. На простых фактологических запросах модель часто формирует правильный ответ уже на средних слоях, а последние 10-15 слоёв лишь добавляют незначительные уточнения, не меняющие итоговый токен. Хуже того, на некоторых запросах поздние слои могут «переобучаться» на специфике тренировочного датасета и искажать изначально верное направление, взятое ранними слоями. В методологии A.L.F.R.E.D. похожая логика применяется для выбора между моделями разного размера, но PoLar идёт дальше - он оперирует на уровне отдельных слоёв внутри одной модели.
Program-of-Layers: индивидуальный маршрут для каждого запроса
Ключевая идея PoLar - представить проход по слоям как программу из инструкций skip и execute. Для модели с 32 слоями программа может выглядеть как [1,1,1,0,0,1,1,1,0,1,1,0,0,1,1,1,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1,1], где 1 - выполнить слой, 0 - пропустить. В отличие от раннего выхода (early exit), где модель покидает вычислительный граф на определённом слое и больше не возвращается, PoLar может пропустить несколько слоёв в середине, а затем снова активировать вычисления.
Эта гибкость принципиальна. Ранний выход хорош для классификации, где достаточно промежуточного представления. PoLar нацелен на генеративные задачи, где важно сохранить связность вывода. Пропуск слоёв в середине с возвратом к вычислениям на поздних этапах позволяет отбросить «шумящие» слои, сохранив глубину обработки там, где она действительно нужна. Предиктивный модуль получает на вход эмбеддинг запроса и генерирует бинарную маску для всех слоёв за один проход, добавляя пренебрежимо малые накладные расходы к общему времени инференса.
Как предиктивный модуль выбирает слои: архитектура и обучение
Предиктор в PoLar - это компактная нейросеть, которая принимает усреднённый эмбеддинг входного запроса и выдаёт вероятности активации для каждого слоя целевой LLM. Архитектура намеренно проста: несколько линейных слоёв с нелинейностью, иногда с лёгким attention-механизмом для учёта длины промпта. Объём предиктора составляет доли процента от размера основной модели, его инференс занимает единицы миллисекунд даже на CPU.
Обучение предиктора требует предварительного этапа - поиска оптимальных программ для набора запросов. Этот этап выполняется оффлайн и не влияет на скорость продакшен-инференса.
Обучение предиктора: поиск оптимальных программ
Для каждого запроса из тренировочного набора исследователи перебирают подмножества слоёв и оценивают точность ответа. Полный перебор 2^N комбинаций для N=32 невозможен, поэтому применяется жадный поиск с ограничениями: фиксируется максимальная доля пропускаемых слоёв (например, 30-50%), и внутри этого бюджета ищется конфигурация, дающая наилучшее качество на целевой метрике.
Найденные короткие программы с высокой точностью становятся целевыми метками для обучения предиктора. Функция потерь комбинирует бинарную кросс-энтропию для каждого слоя с дополнительным штрафом за избыточное использование слоёв - это стимулирует предиктор искать компактные программы. Результат: предиктор учится предсказывать не просто случайные маски, а именно те конфигурации, которые доказали свою эффективность на этапе перебора.
Интеграция с LLM: минимальные изменения в коде
PoLar не требует тонкой настройки весов предобученной модели. Достаточно модифицировать цикл инференса, добавив проверку маски перед каждым слоем. Псевдокод на PyTorch-подобном синтаксисе:
mask = predictor(input_embedding) # [0,1,1,0,1,...] длина N
hidden = embedding_layer(tokens)
for i, layer in enumerate(model.layers):
if mask[i]:
hidden = layer(hidden)
# если mask[i]==0, слой пропускается,
# hidden передаётся дальше без изменений
output = lm_head(hidden)Для поддержки повторного выполнения слоёв маска расширяется до целочисленных значений, где 0 - пропустить, 1 - выполнить один раз, 2 - выполнить дважды. Это добавляет несколько строк кода, но не меняет архитектуру модели. Интеграция с популярными бэкендами вроде vLLM или llama.cpp возможна через кастомный планировщик слоёв - тема, которую мы затрагивали в разборе бэкендов для инференса LLM.
Результаты экспериментов: скорость и точность на Llama и Qwen
Авторы провели эксперименты на четырёх семействах открытых моделей: Llama-3.2, Qwen1.5, Qwen2.5 и Qwen3. В качестве тестового полигона использовались математические бенчмарки - GSM8K, MATH и несколько специализированных датасетов. Выбор математики не случаен: задачи требуют многошаговых рассуждений, где избыточность или недостаточность глубины обработки проявляется наиболее ярко.
Ключевой результат: для 70-80% запросов предиктор нашёл программу, которая сокращает число активных слоёв на 20-40% без потери точности. На отдельных категориях задач сокращение достигало 50% при сохранении исходного качества. Прирост скорости инференса линейно коррелирует с долей пропущенных слоёв - минус 30% слоёв даёт плюс 30% к пропускной способности на этапе декодинга.
Исправление ошибок: когда меньше слоёв - лучше
Самый неожиданный результат экспериментов - способность PoLar исправлять ошибки полной модели. На некоторых математических задачах исходная LLM давала неверный ответ, но программа с пропуском 3-5 слоёв в середине стека приводила к правильному решению. Исследователи зафиксировали такие случаи на всех протестированных моделях, с частотой от 2% до 7% от общего числа запросов.
Вероятная причина - устранение «шума» от слоёв, которые переобучились на статистических паттернах тренировочного корпуса и вносят систематическое смещение в скрытое представление. Пропуская эти слои, модель сохраняет «чистый» сигнал от ранних и поздних этапов обработки, что в ряде случаев приводит к более точному ответу. Это перекликается с наблюдениями из статьи о representation steering в Gemma-4-31B-AntiHal, где точечное воздействие на скрытые представления также снижает ошибки модели без изменения весов.
Ограничения метода и когда PoLar может не сработать
Метод PoLar не универсален. Первое и главное ограничение - необходимость обучать отдельный предиктор для каждой модели. Предиктор, натренированный на Llama-3.2-3B, не будет работать с Qwen2.5-7B: разная архитектура, разное число слоёв, разные скрытые размерности. Это создаёт дополнительные накладные расходы при внедрении, особенно если в продакшене используется зоопарк моделей.
Второе ограничение - зависимость от однородности слоёв. PoLar предполагает, что все слои трансформера взаимозаменяемы в том смысле, что пропуск любого из них не ломает вычислительный граф. Для стандартных decoder-only архитектур это выполняется, но модели с гетерогенными слоями (например, MoE с разными экспертами на разных уровнях) потребуют модификации подхода.
Третье - задачи, требующие предельно глубокого понимания контекста. На запросах, где важен учёт каждого слова в длинном документе, агрессивный пропуск слоёв может привести к потере тонких семантических связей. Эксперименты проводились на математических бенчмарках с относительно короткими промптами; поведение на задачах summarization длинных текстов или multi-hop reasoning остаётся открытым вопросом.
Четвёртое - все тесты выполнены на открытых моделях Llama и Qwen. Обобщение на проприетарные архитектуры (GPT-4, Claude, Gemini) не проверялось и требует отдельных исследований.
PoLar в контексте других методов оптимизации инференса
Ландшафт методов ускорения LLM разнообразен, и PoLar занимает в нём специфическую нишу - динамическое управление глубиной без изменения весов модели.
Ранний выход (early exit) добавляет классификационные головы к промежуточным слоям и останавливает вычисления, когда уверенность превышает порог. Эффективен для классификации, но для генерации текста требует обучения дополнительных lm_head на каждом слое выхода. PoLar не добавляет новых голов и может возвращаться к вычислениям после пропуска.
Дистилляция сжимает знания большой модели в меньшую, но это статический процесс - после обучения студент всегда работает с фиксированным числом слоёв. PoLar сохраняет исходную модель нетронутой и адаптирует глубину под каждый запрос.
Квантизация и pruning уменьшают точность весов или удаляют незначащие параметры. Эти методы ортогональны PoLar и могут комбинироваться с ним: ничто не мешает взять квантованную 4-битную Llama-3.2 и добавить предиктор для динамического пропуска слоёв, получив двойную экономию - по памяти и по compute.
Speculative decoding ускоряет генерацию за счёт параллельного предсказания токенов драфт-моделью. PoLar ускоряет обработку каждого токена в отдельности. Два подхода решают разные узкие места инференса и также совместимы.
Как начать использовать PoLar: практические шаги
Внедрение PoLar в свой инференс-пайплайн состоит из четырёх этапов. Код метода ожидается в открытом доступе от авторов, но общая схема воспроизводима уже сейчас.
- Выбор модели. Оптимальные кандидаты - модели семейств Llama и Qwen с числом слоёв от 24 до 40. На слишком мелких моделях (7-12 слоёв) потенциал для пропуска ограничен, на слишком глубоких (70B+) растут затраты на этап перебора программ.
- Поиск оптимальных программ. Подготовьте валидационный датасет из 500-2000 запросов, репрезентативных для целевого сценария. Реализуйте жадный поиск масок слоёв с ограничением на максимальную долю пропусков (30-50%). Для каждого запроса сохраните маску, давшую наилучшее качество.
- Обучение предиктора. Архитектура - 2-3 линейных слоя над усреднённым эмбеддингом запроса. Вход - эмбеддинги из embedding_layer целевой модели, выход - N логитов (по одному на слой). Функция потерь - бинарная кросс-энтропия с L1-регуляризацией на сумму активаций. Обучение на одном GPU занимает 1-3 часа.
- Интеграция в инференс. Модифицируйте цикл по слоям, добавив проверку маски от предиктора. Для продакшена оберните предиктор в torch.jit.script или ONNX для минимизации накладных расходов. Протестируйте на отложенном наборе запросов, сравнив метрики качества и latency с базовой моделью.
Для тех, кто работает с агентными системами и динамической загрузкой моделей, будет полезен материал о практических стратегиях управления промптами, где разбираются каскадные вызовы и управление контекстом - техники, которые хорошо сочетаются с адаптивным инференсом PoLar.