How attention sinks keep language models stable
Почему модели ломаются на длинных диалогах
При удалении старых токенов для экономии памяти модель начинает выдавать бессмыслицу. Причина — «attention sinks»: первые токены собирают избыточное внимание, потому что softmax требует, чтобы веса суммировались в 1.
StreamingLLM
Оставляем первые 4 токена навсегда, остальное сдвигаем окном. Работает до 4 млн токенов; уже в HuggingFace, TensorRT-LLM и новых OpenAI-моделях.
OpenAI и attention sinks
В GPT-OSS-20B/120B добавлен обучаемый скаляр в softmax каждой головы, позволяющий «не обращать внимания» — прямое наследие StreamingLLM.
История открытия
Летом 2023 в Meta я решал задачу: как продолжать диалог длиннее обучающего окна. Казалось, что достаточно скользящего окна, но при удалении первых токенов перплексия взлетала до небес.
Визуализация
Внимание Llama-2 постоянно «сливается» в начало. Эти токены-«стоки» не передают внимание дальше, а лишь поглощают его, поэтому их нельзя выбрасывать.
Математика
Softmax обязывает каждую голову распределить ровно 1.0 внимания. Если нет полезного контекста, весь «бюджет» уходит в первые позиции, где чуть выше базовые скоры.
Комментарии (31)
- Участники обсуждают «attention sinks» — токены-«стоки», на которые модель направляет избыточное внимание, чтобы не «размывать» полезную информацию.
- Это поведение замечено и в BERT ([SEP], точки), и в ViT (фоновые патчи), и в GPT-OSS, где вместо добавления единицы к знаменателю обучают отдельный логит на каждую голову.
- Синк-токены работают как «pressure valve», предотвращая over-mixing и давая модели «нулевой» вектор для случаев «не найдено».
- Пользователи замечают, что первые слова («Hello», «Please») или CLS-подобные глобальные токены могут непреднамеренно служить такими стоками.
- FOSS-реализации уже поддерживают приём: llama.cpp принял PR, а Diff-Transformer и другие идеи быстро переиспользуются.
Running GPT-OSS-120B at 500 tokens per second on Nvidia GPUs 💬 Длинная дискуссия
-
В день выхода открытой модели вроде gpt-oss-120b мы сразу ускоряем её для клиентов, как партнёры запуска OpenAI. К концу дня запуска стали лидерами на NVIDIA по латентности и пропускной способности по данным OpenRouter.
-
Быстрая оптимизация обеспечена гибким стеком инференса и экспертизой команды; за время написания поста прибавили ещё ~100 ток/с при 100% аптайме.
-
Работы включали:
- Тесты и бенчмарки в TensorRT-LLM, vLLM и SGLang.
- Совместимость с архитектурами Hopper и Blackwell.
- Интеграцию с нашим стеком (в т. ч. NVIDIA Dynamo).
- Оптимизации: маршрутизация с учётом KV-кэша, спекулятивная генерация с Eagle.
Шаг 1: Первый инференс
- Запускаем базовый инференс в любом доступном фреймворке и на нужных GPU/серверных уровнях.
- Параллелим работу: одни пробуют vLLM и SGLang, другие — TensorRT-LLM; быстрее всего взлетел TensorRT-LLM.
- Важно обслуживать модель и на Hopper (H100), и на Blackwell (B200) для широкой доступности и максимальной скорости.
- Гибкость рантайма позволяет быстро переключать инструменты и обновлять матрицу поддержки.
Шаг 2: Исправление багов совместимости
- Новые архитектуры приводят к тонким несовместимостям; GPT OSS добавил, например, Harmony — новый формат ответов.
- Итеративно чиним и валидируем на скорость и корректность; по возможности контрибутим обратно в open source.
- Благодаря сообществу есть несколько отличных путей запуска GPT OSS, проблемы быстро выявляются и чинятся.
Шаг 3: Оптимизация конфигурации
- Хотя GPT OSS 120B можно запустить на одном H100, оптимально масштабировать на 4–8 GPU для лучшей латентности/throughput.
- Рассмотрены два подхода параллелизма для MoE: тензорный и экспертный. Тензорный даёт меньшую задержку, экспертный — выше системную пропускную способность. Мы выбрали тензорный, так как приоритет — латентность.
- Приняли MoE Backend в TensorRT-LLM (поддерживается на Blackwell, не на Hopper), который добавляет более быстрые CUDA-ядра и превосходит предыдущие решения.
Комментарии (151)
- Обсуждение крутится вокруг запуска и производительности GPT-OSS (20B/120B) на разном железе: от MacBook M-серии и RTX 4090/3050 до датацентровых H100/Blackwell и даже CPU.
- Многие отмечают, что скорость хороша при малых контекстах; при >10k токенов начинается существенная деградация скорости и рост задержек, особенно без MCP/веб-доступа.
- TensorRT-LLM часто даёт лучшую латентность/пропускную способность, но сложен в настройке; альтернативы вроде vLLM/SGLang проще, Llama/Оllama позволяют быстро поднять 20B локально и даже распределить по старым GPU.
- Идут споры о “доступности” H100: купить дорого, но аренда широко доступна и выгоднее для нерегулярных нагрузок; при этом Blackwell с FP4 обещает ещё больший буст, в экосистеме Rust добавляют FP8/FP4.
- Пользователи спрашивают про требования к VRAM, практичную локальную агентную разработку на потребительских GPU, и оптимальные настройки на Mac (например, iogpu.wired_limit_mb).
- Обсуждают техники ускорения (спекулятивное декодирование — вызывающее вопросы пользы), причины падения токен/с при длинных диалогах, и различие prefill vs decode по узким местам.
- Наряду с похвалами скорости есть критика: сложность стеков, неточности/галлюцинации ответов, «извиняльный» контент, и вопрос — зачем OpenAI выпускает OSS-модели и как это соотносится с доступностью железа.