Перейти к основному содержимому

Чтобы получить чистое Markdown-содержимое этой страницы, добавьте .md к этому URL. Полный индекс документации см. на https://docs.nvidia.com/dynamo/llms.txt. Полное содержимое, включая справочник API и примеры SDK, см. на https://docs.nvidia.com/dynamo/llms-full.txt.

Дезагрегация

В этом документе объясняется, как работает дезагрегированная архитектура prefill-decode в SGLang: как в самостоятельном режиме, так и внутри Dynamo.

Обзор

Дезагрегированное обслуживание разделяет фазы prefill и decode при инференсе LLM между разными workers. Такая архитектура позволяет:

  • Независимо масштабировать ресурсы prefill и decode
  • Эффективнее использовать ресурсы: prefill ограничен вычислениями, а decode - пропускной способностью памяти
  • Эффективно передавать KV cache между workers с помощью RDMA

Как Dynamo интегрируется с дезагрегацией SGLang

Самостоятельный подход SGLang:

  1. Балансировщик нагрузки получает запрос от клиента
  2. Из пула доступных workers выбирается случайная пара (prefill, decode)
  3. Запрос отправляется и prefill, и decode workers через задачи asyncio
  4. Внутри дезагрегация выполняется в направлении prefill → decode

Подход Dynamo:

Поскольку в Dynamo есть механизм обнаружения, балансировщик нагрузки не используется. Вместо этого:

  1. Сначала выполняется маршрутизация к decode worker
  2. Prefill worker выбирается по round-robin или с учетом KV
  3. Запрос отправляется обоим workers
  4. Bootstrap-сервер SGLang (часть tokenizer_manager) используется совместно с NIXL/Mooncake для обработки передачи KV

Поток дезагрегации

На следующей диаграмме показан полный поток запроса при дезагрегированном обслуживании:

sequenceDiagram
participant Client
participant Decode
participant Prefill

Note over Decode,Prefill: 0. Setup Phase (One-Time)
Decode->>Prefill: Register RDMA connection info (base GPU memory pointers)
Note over Client,Prefill: Per-Request Phase
Client->>Decode: 1. Send request
Decode->>Prefill: 2. Forward request + get bootstrap_room
Prefill-->>Decode: Return bootstrap_room ID
Note over Decode: 3. Allocate GPU memory for KV cache
Decode->>Prefill: Send allocation info (page indices, metadata buffer)
Note over Prefill: 4. Prefill forward pass
par Decode polls
loop Poll transfer
Note over Decode: 5. Poll for KV arrival
end
and Prefill transfers
Note over Prefill: 6. RDMA write KV to decode
Prefill->>Decode: Transfer KV cache + metadata
end
Note over Prefill: 7. Poll RDMA handles
Note over Prefill: Transfer complete, deallocate metadata
Note over Decode: 8. KV received, start decode
loop Generate tokens
Note over Decode: Decode forward pass
Decode-->>Client: Stream output token
end

Объяснение ключевых шагов

Фаза настройки (однократная)

  • Decode workers регистрируют данные RDMA-подключения у prefill workers
  • В эти данные входят базовые указатели GPU memory для прямого доступа к памяти

Поток для каждого запроса

  1. Инициация запроса: клиент отправляет запрос decode worker
  2. Выделение bootstrap room: decode пересылает запрос в prefill и получает ID bootstrap_room для координации
  3. Выделение памяти: decode выделяет страницы GPU memory для входящего KV cache
  4. Выполнение prefill: prefill worker обрабатывает prompt и формирует KV cache
  5. Передача KV: prefill использует RDMA, чтобы записать KV cache напрямую в GPU memory decode, пока decode опрашивает состояние завершения
  6. Очистка: prefill освобождает метаданные передачи после подтверждения завершения
  7. Фаза decode: decode worker генерирует токены с использованием переданного KV cache
  8. Стриминг: токены по мере генерации потоково отправляются обратно клиенту

Характеристики производительности

  • Передача RDMA: передача GPU-to-GPU без копирования и с минимальным участием CPU
  • Параллельные операции: decode может выполнять опрос, пока prefill передает данные
  • Однократная настройка: RDMA-подключения устанавливаются один раз и повторно используются для всех запросов