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

For clean Markdown content of this page, append .md to this URL. For the complete documentation index, see https://docs.nvidia.com/dynamo/llms.txt. For full content including API reference and SDK examples, see https://docs.nvidia.com/dynamo/llms-full.txt.

Руководство по Planner

简体中文

Planner Dynamo - это контроллер автоскейлинга, который в реальном времени изменяет число реплик prefill- и decode-engine, чтобы выдерживать SLA по задержке. Он читает сигналы трафика (метрики Prometheus или вывод предиктора нагрузки) и профили производительности engine, чтобы решать, когда масштабироваться вверх или вниз.

Для краткого обзора см. обзор Planner. Для внутренних аспектов архитектуры см. Design Planner.

Режимы масштабирования

Planner поддерживает четыре целевых режима оптимизации, которые определяют, как принимаются решения о масштабировании:

  • throughput (по умолчанию): использует статические пороги глубины очереди и утилизации KV cache. Не требует SLA-целей или профилирования. Работает сразу после установки.
  • latency: тот же подход, что и throughput, но с более агрессивными порогами - масштабируется раньше и допускает меньше очереди. Подходит для workload'ов, чувствительных к задержке.
  • load: использует заданные пользователем пороги токенов в очереди prefill и утилизации decode KV для реактивного масштабирования на основе load.
  • sla: использует модели производительности на основе регрессии с конкретными целями TTFT/ITL. Поддерживает как масштабирование на основе throughput (предиктивное), так и на основе load (реактивное). Для опытных пользователей, которым нужен точный контроль SLA.

Когда что использовать:

  • Начните с throughput (по умолчанию) - он работает сразу и не требует настройки.
  • Переключитесь на latency, если у workload строгие требования к задержке и вы предпочитаете резервировать ресурсы, а не ставить запросы в очередь.
  • Используйте load, когда нужен прямой контроль через пороги очереди prefill и утилизации decode KV.
  • Используйте sla, когда у вас есть данные профилирования до развертывания и нужно целиться в конкретные значения TTFT/ITL.

Справочник PlannerConfig

Planner настраивается через JSON/YAML-объект PlannerConfig. При использовании profiler'а он размещается в секции features.planner спецификации DGDR:

features:
planner:
mode: disagg
backend: vllm
# optimization_target по умолчанию равен "throughput" - работает сразу после установки

Для масштабирования на основе SLA:

features:
planner:
optimization_target: sla
enable_throughput_scaling: true
enable_load_scaling: false
pre_deployment_sweeping_mode: rapid
mode: disagg
backend: vllm

Чтобы оценить поведение Planner без изменения числа реплик, включите advisory mode:

features:
planner:
advisory: true

Advisory mode работает только как рекомендация. Planner вычисляет рекомендуемое число реплик, логирует его, экспортирует как диагностику и показывает в HTML-отчетах. Эти рекомендации не применяются как решения о масштабировании: Planner не выполняет действия масштабирования и не изменяет deployment.

Целевой режим оптимизации

ПолеТипЗначение по умолчаниюОписание
optimization_targetstringthroughputthroughput: масштабирование по порогам очереди/утилизации. latency: агрессивные пороги для низкой задержки. load: заданные пользователем пороги очереди prefill и утилизации decode KV. sla: масштабирование на основе регрессии с целями ttft_ms/itl_ms.

Когда optimization_target равен throughput, latency или load, масштабирование на основе load включается автоматически, а масштабирование на основе throughput отключается. Поля ttft_ms/itl_ms игнорируются.

Поля режима масштабирования (режим SLA)

ПолеТипЗначение по умолчаниюОписание
enable_throughput_scalingbooltrueВключает масштабирование на основе throughput (требуются данные производительности до развертывания). Используется только при optimization_target: sla.
enable_load_scalingboolfalseВключает масштабирование на основе load. Используется только при optimization_target: sla.

При использовании optimization_target: sla должен быть включен хотя бы один режим масштабирования.

Прогон до развертывания

ПолеТипЗначение по умолчаниюОписание
pre_deployment_sweeping_modestringrapidКак генерировать данные производительности engine: rapid (симуляция AIC, ~30s), thorough (реальные GPU, 2-4h) или none (пропустить).

Когда включено масштабирование на основе throughput, Planner нужны данные производительности engine. При запуске он сначала пытается получить результаты self-benchmark из конечной точки Dynamo get_perf_metrics (см. PR #7779). Если они недоступны, он переходит к данным, сгенерированным profiler'ом (npz или JSON) в profile_results_dir. Оба источника преобразуются в ForwardPassMetrics и передаются в модель регрессии FPM.

Настройки масштабирования на основе Throughput

ПолеТипЗначение по умолчаниюОписание
throughput_adjustment_interval_secondsint180Количество секунд между решениями о масштабировании на основе throughput.
throughput_metrics_sourcestringfrontendИсточник traffic-метрик Prometheus для масштабирования на основе throughput: frontend читает метрики dynamo_frontend_* из публичного Frontend; router читает метрики dynamo_component_router_* из LocalRouter. Используйте router для pool-local Planner в развертываниях GlobalPlanner.
min_endpointint1Минимальное число endpoint'ов engine, которое нужно сохранять.
max_gpu_budgetint8Максимальное общее число GPU, которое Planner может выделить.
ttft_msfloat500.0Цель SLA по TTFT (мс) для решений о масштабировании.
itl_msfloat50.0Цель SLA по ITL (мс) для решений о масштабировании.

Настройки масштабирования на основе Load

ПолеТипЗначение по умолчаниюОписание
load_adjustment_interval_secondsint5Количество секунд между обновлениями регрессии FPM и решениями о масштабировании на основе load. Даже если включено только масштабирование на основе throughput, живые наблюдения FPM подаются в регрессию с этим интервалом. Должно быть меньше throughput_adjustment_interval_seconds.
max_num_fpm_samplesint64Максимальное число сохраняемых наблюдений FPM для регрессии.
fpm_sample_bucket_sizeint16Количество bucket'ов для удаления устаревших наблюдений (должно быть полным квадратом).
load_scaling_down_sensitivityint80Чувствительность масштабирования вниз от 0 до 100 (0=никогда, 100=агрессивно).
load_metric_samplesint10Количество сэмплов метрик, собираемых для каждого решения.
load_min_observationsint5Минимальное число наблюдений перед принятием решений о масштабировании.

Общие настройки

ПолеТипЗначение по умолчаниюОписание
modestringdisaggРежим Planner: disagg, prefill, decode или agg.
backendstringvllmBackend: vllm, sglang, trtllm или mocker.
environmentstringkubernetesОкружение выполнения: kubernetes, virtual или global-planner.
namespacestringenv DYN_NAMESPACENamespace Kubernetes для deployment.
advisoryboolfalseРежим только рекомендаций. Вычисляет, логирует, экспортирует и показывает рекомендованное число реплик, не выполняя действий масштабирования и не изменяя deployment.

Настройки прогнозирования трафика

ПолеТипЗначение по умолчаниюОписание
load_predictorstringarimaМетод прогнозирования: constant, arima, kalman или prophet.
load_predictor_log1pboolfalseПрименять преобразование log1p к данным нагрузки перед прогнозированием.
prophet_window_sizeint50Размер окна (в секундах) для предиктора Prophet.
load_predictor_warmup_tracestringnullПуть к trace-файлу warm-up для bootstrapping'а прогнозов.

Настройки фильтра Калмана

ПолеТипЗначение по умолчаниюОписание
kalman_q_levelfloat1.0Шум процесса для компонента уровня.
kalman_q_trendfloat0.1Шум процесса для компонента тренда.
kalman_rfloat10.0Шум измерения.
kalman_min_pointsint5Минимальное число точек данных до активации прогнозов Kalman.

Отчеты диагностики

ПолеТипЗначение по умолчаниюОписание
report_interval_hoursfloat or null24.0Генерировать HTML-отчет диагностики каждые N часов (симулированного времени). Установите null, чтобы отключить периодическую генерацию отчетов.
report_output_dirstring./planner_reportsКаталог для HTML-отчетов диагностики.
live_dashboard_portint8080Порт HTTP-сервера live dashboard диагностики. Установите 0, чтобы отключить. Если включено, откройте http://host:port/, чтобы увидеть real-time Plotly-отчет накопленных снимков.

Те же диагностические сигналы, которые показываются в этих отчетах, также экспортируются как метрики Prometheus с префиксом dynamo_planner_* - например, оцененные TTFT/ITL (dynamo_planner_estimated_ttft_ms, dynamo_planner_estimated_itl_ms), рекомендуемое число реплик (dynamo_planner_predicted_num_prefill_replicas, dynamo_planner_predicted_num_decode_replicas), емкость по каждому engine и глубины очередей FPM, а также enum'ы решений о масштабировании load/throughput.

График Replica Counts накладывает фактические реплики prefill/decode на дискретные маркеры рекомендаций для рекомендованных Planner'ом реплик prefill/decode. Когда advisory: true, эти значения являются только рекомендациями; Planner записывает, что он сделал бы, но не применяет изменение.

Интеграция с Profiler

Когда profiler запускается с включенным Planner, он:

  1. Выбирает лучшие конфигурации prefill и decode engine
  2. Генерирует данные производительности engine (prefill TTFT vs ISL, decode ITL vs KV-cache utilization)
  3. Saves the PlannerConfig and performance data into separate Kubernetes ConfigMaps
  4. Добавляет service Planner в сгенерированный DGD, настроенный на чтение этих ConfigMap'ов

Planner получает конфигурацию через --config /path/to/planner_config.json, который монтируется из ConfigMap planner-config-XXXX. Данные профилирования монтируются из ConfigMap planner-profile-data-XXXX.

См. Profiler Guide для полного workflow профилирования и настройки pre-deployment sweeping.

Иерархические deployment'ы

Если нужен один публичный endpoint для модели, но несколько приватных DGD, оптимизированных под разные классы запросов, используйте иерархический deployment:

  • один control DGD с Frontend, GlobalRouter и GlobalPlanner
  • один или несколько DGD prefill pool
  • один или несколько DGD decode pool

В текущем workflow профилирование нужно запускать независимо для каждого целевого pool, а затем вручную собрать итоговый control DGD вместе с pool DGD. См. Global Planner Guide.

См. также

  • обзор Planner — почему для LLM inference нужен другой autoscaler
  • Design Planner — архитектура и внутренности алгоритмов
  • Planner Examples — примеры YAML DGDR, образцы конфигураций, продвинутые паттерны
  • Global Planner Guide — координация нескольких DGD, общий GPU budget, multi-pool deployment с одним endpoint
  • Profiler Guide — как генерируются данные профилирования