Разборы · Статья: · Видео:

Как уместить 5 млн токенов контекста на одном узле H100: стек оптимизаций памяти при обучении LLM

Технический доклад Max Ryabinin (Together AI): послойное наложение приёмов (FSDP, Ulysses context parallelism, activation checkpointing, offload, Arctic-tiling) доводит контекст LLM до 3 млн токенов на одном узле H100, а авторский U-Pipe — до 5 млн почти без потери throughput.

Смотреть на YouTube

Road to 5 Million Tokens: Breaking Barriers in Long Context Training — Max Ryabinin

Together AI · Max Ryabinin

Коротко

Доклад показывает, как послойным наложением известных приёмов (FSDP, context parallelism через DeepSpeed Ulysses, activation checkpointing, offload, Arctic-tiling) удаётся обучать LLM с контекстом до 3 млн токенов на одном узле H100. Главный вклад авторов — U-Pipe: он переиспользует буферы между чанками голов внимания и дотягивает контекст до 5 млн токенов почти без потери пропускной способности.

Оценка видео

Чем выше — тем больше пользы на минуту

3.3

средняя из 5

Актуальность информации 5.0

Длинный контекст под агентов и видео-генерацию — живая тема 2025–2026; упоминается flash attention вплоть до v4.

Содержательность 3.0

Внятная последовательность бутылочных горлышек и приёмов, но всё на уровне обзора: ни цифр throughput, ни кода, ни конфигов; ключевой U-Pipe объяснён за минуту.

Инновационность идей 3.0

90% — компиляция чужих известных техник (Ulysses от Microsoft, checkpointing, Unsloth-offload, Arctic). Своё — только U-Pipe (переиспользование буферов между чанками голов).

Применимость на практике 2.0

Это маркетинговый обзор перед статьёй: даёт карту приёмов и куда копать (PyTorch Profiler, их paper), но без деталей повторить нельзя.

Инсайты

Нажми, чтобы раскрыть — то, что меняет взгляд на тему

01 Главный барьер длинного контекста — память на активациях, а не квадратичные вычисления

Интуитивно все боятся квадратичного compute, но именно линейно растущая память от активаций внимания «коварнее»: модель не влезает в GPU даже после шардинга параметров и побеждается не одной хитростью, а целым каскадом приёмов хранения и пересчёта.

02 Одной головы внимания уже достаточно, чтобы загрузить GPU под завязку — отсюда U-Pipe

Если на GPU запланировано несколько голов, их можно бить на чанки и прогонять по очереди во времени, переиспользуя один маленький буфер вместо огромного. Понимание, что вычислитель насыщается раньше, чем кажется, превращает «параллелизм в пространстве» в «параллелизм во времени» и даёт ещё одну экономию памяти почти без потери throughput.

03 Память — это валюта, которую можно реинвестировать

Сэкономленную приёмами память не обязательно тратить на ещё больший контекст: её можно вложить в скорость, в распределение по стадиям пайплайна или в другие части обучения. Контекст и скорость — это ручка одного и того же бюджета, а не отдельные задачи.

04 Есть осязаемый компромисс «размер чанка ↔ память vs скорость», которым можно управлять явно

Больше чанк (больше голов за раз) — выше пик памяти, но быстрее прогон; меньше чанк — наоборот. Это не чёрный ящик, а настраиваемая ручка под конкретное железо и цель.

Полезные советы

Что можно применить уже сегодня. Разверни совет — сколько займёт, что даст и что конкретно делать

1

Бери не одну технику, а стек — и накатывай по нарастающей, измеряя память после каждого слоя

Порядок важен: каждый слой даёт свой множитель экономии (порядка ×8), и только их сумма доводит LLaMA-3B до 3M токенов на одной H100-ноде. Останавливайся, как только нужный контекст влезает.

2

Включай Ulysses context parallelism, чтобы GPU держал одну голову внимания, а не всю последовательность по всем головам

Активации голов пересылаются между GPU по мере надобности; это снижает память примерно в 8 раз и позволяет использовать самый быстрый flash attention для самого внимания.

3

Не храни все активации — пересчитывай их (activation checkpointing) и оффлоадь входы блоков на CPU

Checkpointing доступен почти во всех фреймворках; включай аккуратно, чтобы не получить лишний пересчёт. Оффлоад входов на CPU почти не бьёт по скорости, если делать prefetch заранее, к моменту backward по этому слою.

4

Тайли element-wise вычисления вдоль последовательности

Loss и MLP можно считать кусками, чтобы не аллоцировать гигантские буферы размером 3M вдоль одной оси (Arctic Long Sequence Training) — это убирает один из самых неожиданных источников OOM.

5

Профилируй, прежде чем оптимизировать — узкое место не там, где кажется

Запускай PyTorch Profiler и смотри, куда реально уходит память; даже если ты не на масштабах миллионов токенов, найденную память можно реинвестировать в ускорение обучения.

Логика повествования

Как устроена аргументация видео — пройди по шагам

Предпосылка Аргумент Пример Вывод
  1. Предпосылка Зачем длинный контекст: агенты и видео-генерация

    Растёт спрос на обучение LLM с очень длинным контекстом — под агентов и под генерацию видео. Значит, надо уметь расширять контекст трансформера.

  2. Аргумент Расширение контекста упирается сразу в две разные проблемы

    Боттлнек 1 — квадратичные вычисления self-attention (попарные взаимодействия). Боттлнек 2 — линейный рост памяти на активациях. Лечатся они разными приёмами.

  3. Аргумент Даже параметры не влезают на GPU → FSDP

    Шардим параметры по 8 GPU узла (FSDP). Это необходимо, но недостаточно: основную память «съедают» активации attention, а не параметры.

  4. Пример Ulysses context parallelism: голова на GPU

    DeepSpeed Ulysses распараллеливает не по последовательности, а по головам: GPU считает свою голову над всей последовательностью, перекидывая активации по мере надобности. ~8x экономии памяти + можно взять самый быстрый flash attention.

  5. Пример Checkpointing + CPU-offload + Arctic-tiling → 3 млн токенов

    Activation checkpointing пересчитывает активации на backward; оффлоад входов блоков на CPU с prefetch почти не бьёт по скорости; тайлинг element-wise операций (loss, MLP) убирает гигантские буферы. Стек доводит LLaMA-3B до 3M токенов на узле.

  6. Аргумент U-Pipe: чанкуем головы во времени и переиспользуем буфер → 5 млн

    Авторский приём: раз одного набора голов уже хватает, чтобы насытить GPU, остальные головы режем на чанки и прогоняем последовательно во времени, переиспользуя один небольшой буфер. Контекст растёт до 5M токенов почти без потери throughput.

  7. Вывод Вывод: боттлнеки там, где не ждёшь — профилируй и реинвестируй память

    Масштабирование контекста — задача коварная: узкие места возникают неожиданно. Нужен PyTorch Profiler и стек приёмов, а не одна «серебряная пуля»; высвобожденную память можно вкладывать в скорость.

Подробный разбор

Полный разбор — разверни, если нужно глубже

Развернуть подробный разбор

Стоит ли смотреть целиком

Достаточно этой заметки — суть в перечне приёмов и в идее U-Pipe. Доклад идёт как маркетинговый обзор перед статьёй: даёт карту техник (FSDP, Ulysses, checkpointing, offload, Arctic-tiling) и куда копать, но без цифр throughput, кода и конфигов повторить по нему нельзя. За конкретикой — в их paper и тред Together AI.

Кому полезно

Инженерам, которые сами обучают или дообучают LLM на длинном контексте и упираются в OOM; всем, кто хочет иметь карту приёмов оптимизации памяти (что за чем накатывать и какой множитель даёт). Для остальных это скорее справочное знание о том, как вообще «влезают» миллионы токенов, чем руководство к действию.

План внедрения

С чего начать — отмечай шаги, прогресс сохранится

Выполнено 0 из 4

Проверь себя

Ответь на вопросы, чтобы материал закрепился

Отвечено: 0 / 5 Верно: 0
  1. 1. Почему расширение контекста в стандартном трансформере упирается сразу в две разные проблемы?

  2. 2. В чём основная идея DeepSpeed Ulysses (Ulysses context parallelism)?

  3. 3. Чем «U-Pipe» — главная оптимизация авторов — отличается от обычного Ulysses?

  4. 4. Что делает activation checkpointing и какой ценой достигается экономия?

  5. 5. Какой главный практический вывод делает спикер про обучение на длинном контексте?

Похожие разборы

Разбор

RAG не умер, а вырос в итеративный agentic-поиск: эмбеддинги как кэш вычислений

Простой «RAG = один вызов вектора в контекст» устарел, но сам retrieval жив и превратился в итеративный поиск агента с набором инструментов (вектор, BM25, grep). Эмбеддинги стоит понимать как кэш вычислений: разовая индексация экономит токены и поднимает точность ответов, что подтверждают метрики Cursor.

Читать →
Разбор

Diffusion Gemma: зачем диффузионная LLM ускоряет локальный инференс и чем платит за скорость

Энтузиаст запускает локально открытую диффузионную LLM Google (Apache 2.0) и на живых замерах показывает: для одиночного пользователя она выдаёт ~94 ток/с против ~61 у обычной Gemma при сопоставимом качестве. Главный поворот — диффузия выгодна именно домашнему юзеру, а не дата-центру, и прирост скорости честен только там, где небольшая просадка качества допустима.

Читать →
Разбор

Лупы вместо промптов в вайб-кодинге: цель со стоп-условием, которая крутится сама

Луп — это рекурсивная цель со стоп-условием: ставишь задачу один раз, и агент сам крутится «сделал → проверил → не готово → снова», пока условие не выполнится. Лупы не заменяют промптинг, а снимают ежедневную рутину — и, как признаёт сам автор, доступны уже в Claude Code и Codex через goals, а не только в его платформе.

Читать →
Разбор

Многоагентный вайб-кодинг: пошаговый workflow от идеи до продакшена

Автор показывает свой процесс вайб-кодинга: главный навык — не писать код, а оркестрировать рой агентов, масштабируя их число и планы под сложность задачи. За одно видео он вживую собирает полный стек (база, API, AWS, Discord-авторизация), но половина «обязательных инструментов» — его же платные продукты.

Читать →