Русские новости
Последний
ИИ и технологии

CUDA Graphs, модели рассуждений и разобщённый сервинг

Иллюстративные телекоммуникационные волоконно-оптические кабели в наземном боксе, а не GPU-оборудование.
Иллюстративные телекоммуникационные волоконно-оптические кабели в наземном боксе, а не GPU-оборудование.

Современная ИИ-инфраструктура доводит производительность до физических пределов кремния и кластеров за счёт устранения накладных расходов CPU, циклов рассуждений во время инференса и маршрутизации GPU-кластеров со специализацией по фазам. Эти три техники обеспечивают работу самых быстрых и умных производственных ИИ-систем сегодняшнего дня.

1. CUDA Graphs и слияние ядер: устранение накладных расходов CPU и памяти

По мере того как современные GPU (вроде H100 и B200) становились экспоненциально быстрее, выполнение одного лёгкого ядра GPU может занимать всего от 2 до 5 микросекунд. Однако CPU часто тратит от 10 до 20 микросекунд только на подготовку, проверку и запуск этого ядра через драйвер PCIe — оставляя многомиллионный GPU полностью простаивать в ожидании инструкций CPU.

  • Слияние ядер (объединение операций для экономии памяти и запусков).
  • Узкое место без слияния. Стандартный слой Transformer последовательно выполняет десятки мелких операций (например, LayerNorm → Linear → Add Residual → GeLU). Без слияния GPU запускает отдельные ядра для каждого шага, записывая промежуточные тензоры в медленную HBM (VRAM) и сразу же считывая их обратно для следующего шага.
  • Слитное выполнение. Компиляторы вроде torch.compile (TorchInductor) и TensorRT-LLM сливают несколько поэлементных и редукционных операций в одно пользовательское ядро CUDA/Triton. Значения загружаются из HBM один раз, преобразуются внутри сверхбыстрых внутрикристальных регистров/SRAM и записываются обратно в HBM только в самом конце — резко сокращая и трафик пропускной способности памяти, и количество запусков ядер.
  • CUDA Graphs (воспроизведение целых конвейеров выполнения за один раз).
  • Запись и воспроизведение. Даже после слияния ядер прямой проход LLM всё ещё требует сотен запусков ядер на каждый генерируемый токен. CUDA Graphs решают это, захватывая целую последовательность операций GPU — ядра, копии памяти и зависимости — во время прогревочного запуска и компилируя их в статический граф выполнения, хранящийся непосредственно в памяти GPU.
  • Нулевое вмешательство CPU. Во время инференса в реальном времени вместо того, чтобы CPU запускал 300 отдельных ядер одно за другим, CPU выдаёт один единственный вызов API (cudaGraphLaunch), который автономно запускает весь прямой проход на GPU.
  • Работа с динамическими формами. Поскольку CUDA Graphs требуют статических адресов памяти и форм тензоров, движки инференса дополняют входящие батчи до фиксированных размеров корзин (например, размеры батчей 1, 2, 4, 8, 16) и обновляют указатели входных данных на месте перед воспроизведением заранее захваченного графа.

2. Вычисления во время тестирования и модели рассуждений (o1/o3 и DeepSeek-R1)

Исторически ИИ-лаборатории масштабировали интеллект строго за счёт увеличения вычислений на предобучение (более крупные модели, обученные на большем объёме интернет-текста). Модели рассуждений вроде OpenAI o1/o3 и DeepSeek-R1 открыли вторую ось масштабирования: вычисления во время тестирования (масштабирование во время инференса), позволяя моделям «думать» дольше перед ответом.

  • Обучение с подкреплением для цепочки рассуждений (CoT).
  • Вместо того чтобы полагаться исключительно на написанные людьми примеры пошаговых рассуждений, эти модели обучаются с помощью крупномасштабного обучения с подкреплением (RL) (такого как GRPO — Group Relative Policy Optimization в DeepSeek-R1) на проверяемых областях вроде математики, программирования и формальной логики.
  • Модель генерирует множество кандидатных путей рассуждения, получает объективные награды только когда её итоговый ответ проходит модульные тесты или математическую проверку, и самостоятельно открывает эмерджентные когнитивные поведения — включая самопроверку, откат при достижении тупика и разбиение сложных задач на подцели.
  • Как масштабируются вычисления инференса.
  • При получении сложного промпта модель генерирует тысячи внутренних «токенов размышления» в скрытом блокноте, прежде чем выдать финальный ответ. Точность улучшается логарифмически по мере того, как модель тратит больше токенов инференса на исследование гипотез.
  • Сдвиг вычислительного компромисса. В традиционных LLM инференс дёшев и быстр (генерация ~50 выходных токенов). В моделях рассуждений один запрос может генерировать от 10 000 до 50 000 токенов размышления, превращая инференс в массивную, продолжительную нагрузку пакетной генерации, где доминируют рост KV-кэша и эффективность attention на длинном контексте.

3. Разобщённые Prefill и Decode

Обслуживание LLM состоит из двух принципиально противоположных вычислительных фаз. Выполнение обеих фаз на одном и том же GPU создаёт серьёзные конфликты планирования и недоиспользование оборудования.

ФазаХарактер нагрузкиАппаратное узкое местоМетрика задержки
Prefill (обработка промпта)Обрабатывает все токены промпта (например, 10 000 токенов) параллельно за один прямой проход.Ограничена вычислениями (насыщает тензорные ядра GPU огромными матричными умножениями).TTFT (Time-To-First-Token)
Decode (генерация токенов)Генерирует выходные токены по одному последовательно, считывая весь KV-кэш на каждом шаге.Ограничена пропускной способностью памяти (тензорные ядра в основном простаивают в ожидании чтений из VRAM).TPOT (Time-Per-Output-Token)
  • Проблема интерференции при совместном размещении.
  • При традиционном едином сервинге, если один пользователь отправляет огромный документ на 32 000 токенов на Prefill, пока 50 других пользователей находятся в середине потоковой генерации Decode, массивная матричная математика prefill монополизирует тензорные ядра GPU — вызывая заметные зависания и всплески задержки («заикания») у всех 50 потоковых пользователей.
  • Более того, Prefill требует высокой вычислительной мощности во FLOPS, тогда как Decode требует огромной пропускной способности и ёмкости памяти HBM для хранения больших пакетных KV-кэшей.
  • Разделение кластера (разобщённая архитектура).
  • Современные гипермасштабные системы инференса (такие как Mooncake, DistServe и NVIDIA Dynamo) делят GPU-кластер на два выделенных пула:
  • 1. Пул Prefill: Оптимизирован под сырую вычислительную пропускную способность (высокая загрузка тензорных ядер, меньший тензорный параллелизм), чтобы быстро обрабатывать длинные промпты и достигать агрессивных целей Time-To-First-Token (TTFT).
  • 2. Пул Decode: Оптимизирован под высокую пропускную способность памяти и большую ёмкость KV-кэша (более широкий тензорный/экспертный параллелизм, большие размеры батчей), чтобы плавно транслировать токены на пиковом значении токенов в секунду.
  • Высокоскоростная передача KV-кэша. Как только GPU Prefill завершает обработку промпта и строит начальный KV-кэш, он передаёт этот KV-кэш напрямую по сверхбыстрым соединениям NVLink или InfiniBand RDMA в VRAM GPU Decode, который немедленно принимает генерацию токенов без какой-либо интерференции.

Больше новостей: ИИ и технологии