Чтобы получить чистое 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:
- Балансировщик нагрузки получает запрос от клиента
- Из пула доступных workers выбирается случайная пара
(prefill, decode) - Запрос отправляется и
prefill, иdecodeworkers через задачи asyncio - Внутри дезагрегация выполняется в направлении prefill → decode
Подход Dynamo:
Поскольку в Dynamo есть механизм обнаружения, балансировщик нагрузки не используется. Вместо этого:
- Сначала выполняется маршрутизация к decode worker
- Prefill worker выбирается по round-robin или с учетом KV
- Запрос отправляется обоим workers
- 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 для прямого доступа к памяти
Поток для каждого запроса
- Инициация запроса: клиент отправляет запрос decode worker
- Выделение bootstrap room: decode пересылает запрос в prefill и получает ID bootstrap_room для координации
- Выделение памяти: decode выделяет страницы GPU memory для входящего KV cache
- Выполнение prefill: prefill worker обрабатывает prompt и формирует KV cache
- Передача KV: prefill использует RDMA, чтобы записать KV cache напрямую в GPU memory decode, пока decode опрашивает состояние завершения
- Очистка: prefill освобождает метаданные передачи после подтверждения завершения
- Фаза decode: decode worker генерирует токены с использованием переданного KV cache
- Стриминг: токены по мере генерации потоково отправляются обратно клиенту
Характеристики производительности
- Передача RDMA: передача GPU-to-GPU без копирования и с минимальным участием CPU
- Параллельные операции: decode может выполнять опрос, пока prefill передает данные
- Однократная настройка: RDMA-подключения устанавливаются один раз и повторно используются для всех запросов