Разборы · Статья: · Видео:
Как уместить 5 млн токенов контекста на одном узле H100: стек оптимизаций памяти при обучении LLM
Технический доклад Max Ryabinin (Together AI): послойное наложение приёмов (FSDP, Ulysses context parallelism, activation checkpointing, offload, Arctic-tiling) доводит контекст LLM до 3 млн токенов на одном узле H100, а авторский U-Pipe — до 5 млн почти без потери throughput.
Коротко
Доклад показывает, как послойным наложением известных приёмов (FSDP, context parallelism через DeepSpeed Ulysses, activation checkpointing, offload, Arctic-tiling) удаётся обучать LLM с контекстом до 3 млн токенов на одном узле H100. Главный вклад авторов — U-Pipe: он переиспользует буферы между чанками голов внимания и дотягивает контекст до 5 млн токенов почти без потери пропускной способности.
Оценка видео
Чем выше — тем больше пользы на минуту
средняя из 5
Длинный контекст под агентов и видео-генерацию — живая тема 2025–2026; упоминается flash attention вплоть до v4.
Внятная последовательность бутылочных горлышек и приёмов, но всё на уровне обзора: ни цифр throughput, ни кода, ни конфигов; ключевой U-Pipe объяснён за минуту.
90% — компиляция чужих известных техник (Ulysses от Microsoft, checkpointing, Unsloth-offload, Arctic). Своё — только U-Pipe (переиспользование буферов между чанками голов).
Это маркетинговый обзор перед статьёй: даёт карту приёмов и куда копать (PyTorch Profiler, их paper), но без деталей повторить нельзя.
Инсайты
Нажми, чтобы раскрыть — то, что меняет взгляд на тему
01 Главный барьер длинного контекста — память на активациях, а не квадратичные вычисления
Интуитивно все боятся квадратичного compute, но именно линейно растущая память от активаций внимания «коварнее»: модель не влезает в GPU даже после шардинга параметров и побеждается не одной хитростью, а целым каскадом приёмов хранения и пересчёта.
02 Одной головы внимания уже достаточно, чтобы загрузить GPU под завязку — отсюда U-Pipe
Если на GPU запланировано несколько голов, их можно бить на чанки и прогонять по очереди во времени, переиспользуя один маленький буфер вместо огромного. Понимание, что вычислитель насыщается раньше, чем кажется, превращает «параллелизм в пространстве» в «параллелизм во времени» и даёт ещё одну экономию памяти почти без потери throughput.
03 Память — это валюта, которую можно реинвестировать
Сэкономленную приёмами память не обязательно тратить на ещё больший контекст: её можно вложить в скорость, в распределение по стадиям пайплайна или в другие части обучения. Контекст и скорость — это ручка одного и того же бюджета, а не отдельные задачи.
04 Есть осязаемый компромисс «размер чанка ↔ память vs скорость», которым можно управлять явно
Больше чанк (больше голов за раз) — выше пик памяти, но быстрее прогон; меньше чанк — наоборот. Это не чёрный ящик, а настраиваемая ручка под конкретное железо и цель.
Полезные советы
Что можно применить уже сегодня. Разверни совет — сколько займёт, что даст и что конкретно делать
Бери не одну технику, а стек — и накатывай по нарастающей, измеряя память после каждого слоя
Порядок важен: каждый слой даёт свой множитель экономии (порядка ×8), и только их сумма доводит LLaMA-3B до 3M токенов на одной H100-ноде. Останавливайся, как только нужный контекст влезает.
Включай Ulysses context parallelism, чтобы GPU держал одну голову внимания, а не всю последовательность по всем головам
Активации голов пересылаются между GPU по мере надобности; это снижает память примерно в 8 раз и позволяет использовать самый быстрый flash attention для самого внимания.
Не храни все активации — пересчитывай их (activation checkpointing) и оффлоадь входы блоков на CPU
Checkpointing доступен почти во всех фреймворках; включай аккуратно, чтобы не получить лишний пересчёт. Оффлоад входов на CPU почти не бьёт по скорости, если делать prefetch заранее, к моменту backward по этому слою.
Тайли element-wise вычисления вдоль последовательности
Loss и MLP можно считать кусками, чтобы не аллоцировать гигантские буферы размером 3M вдоль одной оси (Arctic Long Sequence Training) — это убирает один из самых неожиданных источников OOM.
Профилируй, прежде чем оптимизировать — узкое место не там, где кажется
Запускай PyTorch Profiler и смотри, куда реально уходит память; даже если ты не на масштабах миллионов токенов, найденную память можно реинвестировать в ускорение обучения.
Логика повествования
Как устроена аргументация видео — пройди по шагам
-
Предпосылка Зачем длинный контекст: агенты и видео-генерация
Растёт спрос на обучение LLM с очень длинным контекстом — под агентов и под генерацию видео. Значит, надо уметь расширять контекст трансформера.
-
Аргумент Расширение контекста упирается сразу в две разные проблемы
Боттлнек 1 — квадратичные вычисления self-attention (попарные взаимодействия). Боттлнек 2 — линейный рост памяти на активациях. Лечатся они разными приёмами.
-
Аргумент Даже параметры не влезают на GPU → FSDP
Шардим параметры по 8 GPU узла (FSDP). Это необходимо, но недостаточно: основную память «съедают» активации attention, а не параметры.
-
Пример Ulysses context parallelism: голова на GPU
DeepSpeed Ulysses распараллеливает не по последовательности, а по головам: GPU считает свою голову над всей последовательностью, перекидывая активации по мере надобности. ~8x экономии памяти + можно взять самый быстрый flash attention.
-
Пример Checkpointing + CPU-offload + Arctic-tiling → 3 млн токенов
Activation checkpointing пересчитывает активации на backward; оффлоад входов блоков на CPU с prefetch почти не бьёт по скорости; тайлинг element-wise операций (loss, MLP) убирает гигантские буферы. Стек доводит LLaMA-3B до 3M токенов на узле.
-
Аргумент U-Pipe: чанкуем головы во времени и переиспользуем буфер → 5 млн
Авторский приём: раз одного набора голов уже хватает, чтобы насытить GPU, остальные головы режем на чанки и прогоняем последовательно во времени, переиспользуя один небольшой буфер. Контекст растёт до 5M токенов почти без потери throughput.
-
Вывод Вывод: боттлнеки там, где не ждёшь — профилируй и реинвестируй память
Масштабирование контекста — задача коварная: узкие места возникают неожиданно. Нужен PyTorch Profiler и стек приёмов, а не одна «серебряная пуля»; высвобожденную память можно вкладывать в скорость.
Подробный разбор
Полный разбор — разверни, если нужно глубже
Развернуть подробный разбор Свернуть подробный разбор
Стоит ли смотреть целиком
Достаточно этой заметки — суть в перечне приёмов и в идее U-Pipe. Доклад идёт как маркетинговый обзор перед статьёй: даёт карту техник (FSDP, Ulysses, checkpointing, offload, Arctic-tiling) и куда копать, но без цифр throughput, кода и конфигов повторить по нему нельзя. За конкретикой — в их paper и тред Together AI.
Кому полезно
Инженерам, которые сами обучают или дообучают LLM на длинном контексте и упираются в OOM; всем, кто хочет иметь карту приёмов оптимизации памяти (что за чем накатывать и какой множитель даёт). Для остальных это скорее справочное знание о том, как вообще «влезают» миллионы токенов, чем руководство к действию.
План внедрения
С чего начать — отмечай шаги, прогресс сохранится
Выполнено 0 из 4
Проверь себя
Ответь на вопросы, чтобы материал закрепился
-
1. Почему расширение контекста в стандартном трансформере упирается сразу в две разные проблемы?
-
2. В чём основная идея DeepSpeed Ulysses (Ulysses context parallelism)?
-
3. Чем «U-Pipe» — главная оптимизация авторов — отличается от обычного Ulysses?
-
4. Что делает activation checkpointing и какой ценой достигается экономия?
-
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-авторизация), но половина «обязательных инструментов» — его же платные продукты.
Читать →