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

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

FastVideo

Это руководство описывает развертывание генерации видео по тексту FastVideo в Dynamo с использованием пользовательского worker (worker.py), доступного через endpoint /v1/videos.

Dynamo также поддерживает diffusion через встроенные backend'ы: SGLang Diffusion (LLM diffusion, image, video), vLLM-Omni (генерация изображений из текста, генерация видео из текста) и TRT-LLM Diffusion (генерация изображений из текста, генерация видео из текста). См. Обзор diffusion для полной матрицы поддержки.

Обзор

  • Модель по умолчанию: FastVideo/LTX2-Distilled-Diffusers — дистиллированный вариант LTX-2 Diffusion Transformer (Lightricks), сокращающий вывод с 50+ шагов до 5.
  • Двухэтапный pipeline: На этапе 1 видео генерируется в целевом разрешении; на этапе 2 результат дорабатывается с помощью distilled LoRA для улучшения детализации и текстуры.
  • Оптимизированный inference: Квантование FP4 и torch.compile доступны через --enable-optimizations; выбор attention-бэкенда настраивается отдельно через --attention-backend.
  • Формат ответа: На каждый запрос возвращается один полный MP4 payload в data[0].b64_json (без streaming).
  • Параллелизм: Один запрос за раз на worker (VideoGenerator не re-entrant). Масштабируйте пропускную способность, запуская несколько worker.

worker.py по умолчанию использует --attention-backend TORCH_SDPA для более широкой совместимости между GPU, включая системы вроде H100. Для пути, ориентированного на B200/B300, включите FP4/compile через --enable-optimizations и, если нужно, явно выберите flash-attention через --attention-backend FLASH_ATTN.

Сборка Docker-образа

Локальный Docker-процесс собирает runtime-образ из Dockerfile:

  • Базовый образ: nvidia/cuda:13.1.1-devel-ubuntu24.04
  • Устанавливает FastVideo из GitHub
  • Устанавливает Dynamo из ветки release/1.0.0 (для поддержки /v1/videos)
  • Собирает fork flash-attention из исходников

Dockerfile экспортирует TORCH_CUDA_ARCH_LIST как build argument (по умолчанию 10.0 10.0a для Blackwell). Передайте --build-arg, чтобы нацелиться на другую архитектуру:

# Blackwell (по умолчанию)
docker build examples/diffusers/ --build-arg TORCH_CUDA_ARCH_LIST="10.0 10.0a"

# Hopper
docker build examples/diffusers/ --build-arg TORCH_CUDA_ARCH_LIST="9.0 9.0a"

MAX_JOBS (по умолчанию 4) управляет количеством параллельных задач компиляции для flash-attention. Уменьшите значение, если при сборке не хватает памяти:

docker build examples/diffusers/ --build-arg MAX_JOBS=2

При использовании Docker Compose задайте эти значения как переменные окружения перед запуском docker compose up --build:

# Hopper на сборочной машине с ограниченной памятью
TORCH_CUDA_ARCH_LIST="9.0 9.0a" MAX_JOBS=2 COMPOSE_PROFILES=4 docker compose up --build

Первая сборка Docker-образа может занять 20–40+ минут, потому что во время сборки компилируются FastVideo и компоненты, зависящие от CUDA. Последующие сборки будут намного быстрее, если кэш слоёв Docker сохранён. Компиляция flash-attention может потреблять значительное количество RAM — на машинах с малым объёмом памяти возможны ошибки out-of-memory. Если это произойдёт, уменьшите MAX_JOBS в Dockerfile, чтобы снизить потребление памяти при параллельной компиляции. В примечаниях по установке flash-attn это прямо рекомендуется для машин с менее чем 96 GB RAM и большим числом CPU-ядер.

Время прогрева

При первом запуске workers загружают веса модели. Когда включён --enable-optimizations, этапы compile/warmup могут увеличить время до первого готового ответа примерно до 10–20 минут (в зависимости от hardware). После первого успешного оптимизированного ответа второй запрос всё ещё может занимать около 35 секунд, пока кэши runtime завершают прогрев; стабильная производительность обычно достигается начиная с третьего запроса.

При использовании Kubernetes смонтируйте общий Hugging Face cache PVC (см. Развертывание в Kubernetes), чтобы веса модели загружались один раз и переиспользовались при перезапусках pod.

Локальное развертывание

Предварительные требования

Для Docker Compose:

  • Docker Engine 26.0+
  • Docker Compose v2
  • NVIDIA Container Toolkit

Для локального скрипта на хосте:

  • Python environment с установленными dependencies Dynamo + FastVideo
  • На хосте доступен CUDA-compatible GPU runtime

Вариант 1: Docker Compose

cd <dynamo-root>/examples/diffusers/local

# Запустить 4 worker на GPU 0..3
COMPOSE_PROFILES=4 docker compose up --build

Compose-файл собирается из Dockerfile и публикует API на http://localhost:8000. Оценки времени сборки см. в разделе Сборка Docker-образа.

Вариант 2: Локальный скрипт на хосте

cd <dynamo-root>/examples/diffusers/local
./run_local.sh

Environment variables:

ПеременнаяЗначение по умолчаниюОписание
PYTHON_BINpython3Интерпретатор Python
MODELFastVideo/LTX2-Distilled-DiffusersПуть к модели HuggingFace
NUM_GPUS1Количество GPU
HTTP_PORT8000HTTP-порт frontend
WORKER_EXTRA_ARGSДополнительные флаги для worker.py (например, --enable-optimizations --attention-backend FLASH_ATTN)
FRONTEND_EXTRA_ARGSДополнительные флаги для dynamo.frontend

Пример:

MODEL=FastVideo/LTX2-Distilled-Diffusers \
NUM_GPUS=1 \
HTTP_PORT=8000 \
WORKER_EXTRA_ARGS="--enable-optimizations --attention-backend FLASH_ATTN" \
./run_local.sh

--enable-optimizations и --attention-backend — это флаги worker.py, а не dynamo.frontend, поэтому передавайте их через WORKER_EXTRA_ARGS, когда нужен нестандартный конфигурируемый worker.

Скрипт записывает логи в:

  • .runtime/logs/worker.log
  • .runtime/logs/frontend.log

Развертывание в Kubernetes

Файлы

ФайлОписание
agg.yamlБазовое агрегированное развертывание (Frontend + FastVideoWorker)
agg_user_workload.yamlТо же развертывание с tolerations user-workload и imagePullSecrets
huggingface-cache-pvc.yamlОбщий HF cache PVC для весов модели
dynamo-platform-values-user-workload.yamlОпциональные Helm values для кластеров с помеченными user-workload узлами

Предварительные требования

  1. Установлена Dynamo Kubernetes Platform
  2. Kubernetes cluster с поддержкой GPU
  3. FastVideo runtime image загружен в ваш registry
  4. Опциональный HF token secret (для gated models)

При необходимости создайте Hugging Face token secret:

export NAMESPACE=<your-namespace>
export HF_TOKEN=<your-hf-token>
kubectl create secret generic hf-token-secret \
--from-literal=HF_TOKEN=${HF_TOKEN} \
-n ${NAMESPACE}

Развертывание

cd <dynamo-root>/examples/diffusers/deploy
export NAMESPACE=<your-namespace>

kubectl apply -f huggingface-cache-pvc.yaml -n ${NAMESPACE}
kubectl apply -f agg.yaml -n ${NAMESPACE}

Для кластеров с помеченными user-workload узлами и извлечением из private registry:

  1. Укажите имя pull secret и image в agg_user_workload.yaml.
  2. Примените:
kubectl apply -f huggingface-cache-pvc.yaml -n ${NAMESPACE}
kubectl apply -f agg_user_workload.yaml -n ${NAMESPACE}

Быстрое обновление образа

export DEPLOYMENT_FILE=agg.yaml
export FASTVIDEO_IMAGE=<my-registry/fastvideo-runtime:my-tag>

yq '.spec.services.[].extraPodSpec.mainContainer.image = env(FASTVIDEO_IMAGE)' \
${DEPLOYMENT_FILE} > ${DEPLOYMENT_FILE}.generated

kubectl apply -f ${DEPLOYMENT_FILE}.generated -n ${NAMESPACE}

Проверка и доступ

kubectl get dgd -n ${NAMESPACE}
kubectl get pods -n ${NAMESPACE}
kubectl logs -n ${NAMESPACE} -l nvidia.com/dynamo-component=FastVideoWorker
kubectl port-forward -n ${NAMESPACE} svc/fastvideo-agg-frontend 8000:8000

Тестовый запрос

Если это первый запрос после запуска, ожидайте, что он займёт больше времени, пока завершается прогрев. Подробности см. в разделе Время прогрева.

Отправьте запрос и декодируйте ответ:

curl -s -X POST http://localhost:8000/v1/videos \
-H 'Content-Type: application/json' \
-d '{
"model": "FastVideo/LTX2-Distilled-Diffusers",
"prompt": "A cinematic drone shot over a snowy mountain range at sunrise",
"size": "1920x1088",
"seconds": 5,
"nvext": {
"fps": 24,
"num_frames": 121,
"num_inference_steps": 5,
"guidance_scale": 1.0,
"seed": 10
}
}' > response.json

# Linux
jq -r '.data[0].b64_json' response.json | base64 --decode > output.mp4

# macOS
jq -r '.data[0].b64_json' response.json | base64 -D > output.mp4

Справочник по настройкам Worker

Флаги CLI

ФлагЗначение по умолчаниюОписание
--modelFastVideo/LTX2-Distilled-DiffusersПуть к модели HuggingFace
--num-gpus1Количество GPU для distributed inference
--enable-optimizationsoffВключает FP4 quantization и torch.compile
--attention-backendTORCH_SDPAУстанавливает FASTVIDEO_ATTENTION_BACKEND; доступные значения: FLASH_ATTN, TORCH_SDPA, SAGE_ATTN, SAGE_ATTN_THREE, VIDEO_SPARSE_ATTN, VMOBA_ATTN, SLA_ATTN, SAGE_SLA_ATTN

Параметры запроса (nvext)

ПолеЗначение по умолчаниюОписание
fps24Кадров в секунду
num_frames121Общее число кадров; при задании переопределяет fps * seconds
num_inference_steps5Шаги diffusion inference
guidance_scale1.0Масштаб classifier-free guidance
seed10Seed RNG для воспроизводимости
negative_promptТекст, которого следует избегать при генерации

Переменные окружения

ПеременнаяЗначение по умолчаниюОписание
FASTVIDEO_VIDEO_CODEClibx264Видеокодек для MP4 encoding
FASTVIDEO_X264_PRESETultrafastPreset скорости кодирования x264
FASTVIDEO_ATTENTION_BACKENDTORCH_SDPAAttention-бэкенд; worker.py задаёт это значение из --attention-backend и проверяет FLASH_ATTN, TORCH_SDPA, SAGE_ATTN, SAGE_ATTN_THREE, VIDEO_SPARSE_ATTN, VMOBA_ATTN, SLA_ATTN и SAGE_SLA_ATTN
FASTVIDEO_STAGE_LOGGING1Включить логи времени по этапам
FASTVIDEO_LOG_LEVELУстановите DEBUG для verbose logging

Устранение неполадок

СимптомПричинаИсправление
OOM во время сборки DockerКомпиляция flash-attention использует слишком много RAMУкажите --build-arg MAX_JOBS=2 (или меньше) во время сборки
no kernel image available for this GPU или ошибка CUDA arch во время выполненияОбраз был собран для другой архитектуры GPUПересоберите с корректным TORCH_CUDA_ARCH_LIST (например, 9.0 9.0a для Hopper)
Ожидание 10–20 минут при первом запуске с включёнными optimizationsЗагрузка модели и прогрев torch.compileЭто ожидаемое поведение; последующие запуски быстрее, если веса закешированы
Второй запрос занимает около ~35 sRuntime caches всё ещё прогреваютсяСтабильная производительность достигается начиная с третьего запроса
Более низкая пропускная способность, чем ожидалось, на B200/B300FP4/compile и flash-attention настраиваются отдельноПередайте --enable-optimizations и, если нужно, --attention-backend FLASH_ATTN
Ошибка запуска или импорта после включения optimizations или смены attention-бэкендаFP4 и некоторые attention-бэкенды зависят от конкретной поддержки hardware/softwareЗапустите worker.py снова без --enable-optimizations или используйте --attention-backend TORCH_SDPA

Исходный код

Исходный код примера находится в examples/diffusers/ в репозитории Dynamo.

См. также