Материал подготовлен автоматически по первоисточникам: ссылки на них — в конце статьи.
FoldAttention ускоряет генерацию токенов с длинным контекстом и сохраняет воспроизводимый результат при обучении. В нерецензированном препринте, где все числа получил сам автор Sriman Achanta, полный шаг декодирования Qwen3-8B выполнялся до 1,46 раза быстрее. Подход может сократить задержку на Hopper без смены модели, но требует заменить ядро внимания и формат KV-кэша.
Как фиксированный масштаб убирает пересчёты
При генерации модель выпускает по одному токену и на каждом шаге снова читает растущий кэш ключей и значений. На длинном контексте операция внимания упирается в пропускную способность памяти: ускорить вычисления уже недостаточно, нужно загружать меньше байтов.
Высокопроизводительные ядра обычно вычисляют нормализацию softmax за один проход. Они хранят текущий максимум оценок и меняют его, когда встречают более крупное значение. После такой смены приходится заново масштабировать уже накопленные числитель и знаменатель, поэтому вес ключа нельзя считать окончательным до конца прохода.
FoldAttention выбирает для каждой строки конечный опорный масштаб Z до чтения ключей. Вес сразу вычисляется как 2^(s-Z), где s — оценка связи запроса с ключом. Общий сдвиг всех оценок не меняет результат softmax: он одинаково умножает числитель и знаменатель, а затем сокращается при делении.
Полученные суммы можно складывать в любом порядке. Разные части KV-кэша, общий префикс нескольких запросов и отдельные блоки GPU возвращают пары из числителя и знаменателя, которые объединяются обычным сложением. Сравнивать локальные максимумы и повторно масштабировать готовые части не нужно.
Фиксированный масштаб также позволяет решить, какие данные загружать. Ключ хранится в двух INT8-плоскостях: первая даёт грубую оценку окончательного веса, после чего ядро при необходимости читает вторую плоскость и строку значения. Для малых весов значение можно пропустить, но сам вес остаётся в знаменателе; при BF16-значениях его вклад в числитель приближает модель блока.
Глубина отсечения задаётся при каждом вызове, а не при создании кэша. Один KV-кэш поэтому поддерживает как плотный режим, который читает все значения, так и более быстрые режимы с разным допустимым отклонением.
Декодирование ускорилось за счёт меньшего трафика
На H100 FoldAttention с выбранной глубиной отсечения выполнял операцию внимания в 1,36–2,30 раза быстрее самого быстрого BF16-ядра. В шести из семи запусков ошибка отличалась от минимальной ошибки BF16 не более чем на 1,5%.
Ускорение сохраняется за пределами отдельного ядра. Полный шаг декодирования Qwen3-8B стал до 1,46 раза быстрее, а правдоподобие текста, поиск информации в контексте и результаты LongBench совпали с BF16-ядрами. Это существеннее микротеста: служебные операции модели могли бы скрыть выигрыш более быстрого внимания.
Тот же принцип применили к обратному проходу. Частичные градиенты заранее округляются на общую целочисленную сетку, поэтому блоки GPU могут складывать их в любом порядке и получать те же биты. Такой обратный проход оказался до 1,84 раза быстрее детерминированных FlashAttention-3 и FlashAttention-4 и на 1,05 раза быстрее самого быстрого недетерминированного ядра.
Меняет ли FoldAttention планы команд
Работа относится прежде всего к системам, где длинный контекст уже сделал чтение KV-кэша заметной частью задержки. Если продукт использует стандартный сервер вывода и короткие запросы, менять архитектуру ради FoldAttention рано: выигрыш зависит от собственного ядра, нового формата кэша и возможности управлять глубиной отсечения.
Для команд с инфраструктурой на Hopper вывод практичнее. Можно оставить модель и семантику softmax, но заменить путь декодирования, чтобы загружать значения по окончательному весу. Аддитивные частичные результаты также упрощают разделение KV-кэша и повторное использование общего префикса несколькими запросами.
При обучении подход интересен там, где требуется побитовая воспроизводимость между запусками или разной упаковкой запросов. Обычно детерминированность заставляет фиксировать порядок сложения и ограничивает планировщик; целочисленная сетка FoldAttention снимает эту зависимость.
Проверки охватывают одну H100, модели Qwen3, gpt-oss и GLM, длинный контекст, обычное многоголовое внимание и внимание с группировкой запросов GQA. Ядро декодирования рассчитано на размер головы 64 или 128 и архитектуру Hopper; перенос раскладок на Blackwell оставлен как дальнейшая работа, а латентные кэши наподобие MLA не поддерживаются.
Поэтому FoldAttention пока не выглядит универсальной заменой FlashAttention. Он меняет планы команд, которые контролируют низкоуровневый стек вывода или платят за детерминированное обучение: фиксированный масштаб даёт им один механизм сразу для сокращения трафика, сложения частей KV-кэша и воспроизводимого обратного прохода.
Источники
Похоже на вашу задачу?
Расскажите, что собираете. За полчаса разложим на этапы и назовём сроки — это бесплатно и ни к чему не обязывает.



