Seer: онлайн-контекстное обучение, сокращающее хвостовые задержки rollout в RL и увеличивающее пропускную способность
'Seer перестраивает синхронный rollout, снижая хвостовые задержки и увеличивая пропускную способность до 97% с помощью разделения запросов, контекстного планирования и спекулятивного декодирования.'
Проблема узкого места в фазе rollout
Обучение с подкреплением для крупных моделей рассуждения часто тормозит, потому что синхронные on policy системы ждут завершения всех ответов rollout перед переходом к следующей итерации. Современные задачи с цепочкой мыслей генерируют очень длинные отклики, и несколько отстающих запросов могут занять большую часть времени итерации. Исследователи из Moonshot AI и Tsinghua предложили Seer, чтобы решить эту системную проблему без изменения самого алгоритма RL.
Почему синхронные rollout работают медленно для моделей рассуждения
В экспериментах Seer использовали модели Moonlight, Qwen2 VL 72B и Kimi K2. Задачи запускались на 32 узлах по 8 H800 GPU на узел, с суммарным числом GPU от 32 до 256 и сотнями промптов на итерацию. Максимальная длина генерации огромна: Moonlight до 65 536 токенов, Qwen2 VL 72B до 40 960, Kimi K2 до 98 304 токенов. В ходе декодирования использование KVCache для одного запроса может вырасти от сотен мегабайт до десятков гигабайт.
Такой рост памяти вынуждает инстансы снижать параллелизм или прерывать запросы, что ведет к дорогостоящему повторному префиллу. Команда определяет хвостовые запросы как последние 10 процентов, завершившиеся в rollout. В базовой синхронной системе этот хвост может съедать непропорционально большую часть времени итерации и напрямую замедлять обучение.
Архитектура Seer
Seer сохраняет синхронный GRPO алгоритм и on policy гарантии. Тренировка по прежнему использует данные только текущего rollout, а распределенная оптимизация выполняется с Megatron. Фаза инференса использует внутреннюю реализацию vLLM. Ключевой инфраструктурный компонент это Global KVCache Pool на базе Mooncake, разъединенной KVCache архитектуры с двухуровневым DRAM и SSD хранилищем, доступным для всех нод. Это позволяет мигрировать запросы между инстансами без пересчета префилла.
На этой основе Seer вводит три согласованных механизма, оркеструемых Request Buffer, Context Manager и пулом Inference Engine:
- Divided Rollout
- Context Aware Scheduling
- Adaptive Grouped Speculative Decoding
Разделенный rollout и тонкое планирование
Традиционный синхронный rollout назначает целые группы запросов, которые разделяют промпт, одному инстансу. Из за большой дисперсии в длинах выводов это приводит к разбалансу нагрузки и долгим отстающим задачам. Seer декомпозирует группу на отдельные запросы и дополнительно разбивает каждый запрос на чанки по длине генерации. Планировщик отправляет чанки с небольшим лимитом токенов, например 8000 токенов. После каждого чанка запрос переходит в очередь заново до тех пор, пока не встретит токен конца последовательности или не достигнет исходного лимита.
Поскольку KVCache хранится в Global KVCache Pool, чанки разделенных запросов могут мигрировать между инстансами на границах чанков без повторного префилла. Планировщик контролирует уровень параллелизма, чтобы поддерживать высокую загрузку памяти и избегать прерываний. Такой подход выравнивает использование KVCache и снижает потери GPU времени.
Контекстно-зависимое планирование с использованием статистики длины групп
Исследователи заметили, что запросы в одной группе часто имеют скоррелированные длины выводов. Seer использует это как онлайн контекст. Для каждой группы промпта Seer назначает один запрос спекулятивным. Спекулятивные запросы попадают в очередь высокого приоритета и обслуживаются по принципу наименьшего количества сгенерированных токенов. Короткие запросы завершаются быстро и освобождают ресурсы, длинные остаются и помечают группы как потенциальный хвост.
Context Manager ведет оценку длины для каждой группы, обновляя ее максимумом построенных длин среди завершенных запросов. Если ни один запрос не завершился, используется исходный max tokens как консервативная оценка. После запуска и завершения спекулятивных запросов Seer планирует оставшиеся запросы примерно в порядке longest first на уровне группы. Такой подход дает поведение, близкое к оракулу, который заранее знал бы длины выводов.
Адаптивное групповое спекулятивное декодирование
Чтобы ускорить декодирование длинных хвостовых запросов Seer добавляет Adaptive Grouped Speculative Decoding и распределенный сервер черновиков DGDS. DGDS хранит сжатое суффиксное дерево для каждой группы и агрегирует последовательности токенов всех запросов группы. Инстансы асинхронно добавляют сгенерированные токены, периодически получают обновленные деревья и выполняют локальную спекулятивную декодуальную работу, опираясь на общую статистику паттернов.
Система настраивает длину черновика и число путей в зависимости от архитектуры модели, размера батча и измеренной длины принятия. Для плотных и Mixture of Experts моделей заранее вычисляются пороги спекуляции, ограничивающие глубину черновика для каждого батча. На поздних стадиях хвоста, когда параллелизм низкий, Seer увеличивает глубину черновика и включает мультипутевую спекуляцию, чтобы повысить число принятых токенов за шаг.
Влияние на обучение RL
Абаляционные эксперименты показывают, что только divided rollout дает до 35 процентов улучшения пропускной способности по сравнению с базовым синхронным решением на vLLM. Добавление Context Aware Scheduling повышает улучшение до 47 процентов, а включение grouped speculative decoding дает суммарный прирост 77–87 процентов в тестируемых итерациях.
В полном тесте на задачах Moonlight, Qwen2 VL 72B и Kimi K2 Seer повышает пропускную способность rollout на 74–97 процентов относительно сильного синхронного basline veRL на vLLM и уменьшает хвостовые задержки на 75–93 процента. Для задач с ограничением памяти, где базовая система тратила до половины времени итерации на последние 10 процентов запросов, Seer устраняет большую часть этого хвоста через разделение, миграцию и адаптивную спекуляцию поверх Global KVCache Pool.
Основные выводы
- Фаза rollout часто доминирует во времени итерации синхронного RL и определяется длиннохвостыми запросами и фрагментацией KVCache.
- Seer сохраняет on policy гарантии, перестраивая rollout с помощью divided rollout, context aware scheduling и adaptive grouped speculative decoding.
- Глобальный разъединенный KVCache позволяет мигрировать чанки без повторного префилла и поддерживать высокую загрузку GPU.
- Онлайновый групповой контекст позволяет аппроксимировать оракульный порядок выполнения и значительно снижает хвостовые задержки.
Подробности и результаты доступны в статье на arXiv: https://arxiv.org/pdf/2511.14617
Switch Language
Read this article in English