Для чистого 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_BIN | python3 | Интерпретатор Python |
MODEL | FastVideo/LTX2-Distilled-Diffusers | Путь к модели HuggingFace |
NUM_GPUS | 1 | Количество GPU |
HTTP_PORT | 8000 | HTTP-порт 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 узлами |
Предварительные требования
- Установлена Dynamo Kubernetes Platform
- Kubernetes cluster с поддержкой GPU
- FastVideo runtime image загружен в ваш registry
- Опциональный 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:
- Укажите имя pull secret и image в
agg_user_workload.yaml. - Примените:
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
| Флаг | Значение по умолчанию | Описание |
|---|---|---|
--model | FastVideo/LTX2-Distilled-Diffusers | Путь к модели HuggingFace |
--num-gpus | 1 | Количество GPU для distributed inference |
--enable-optimizations | off | Включает FP4 quantization и torch.compile |
--attention-backend | TORCH_SDPA | Устанавливает FASTVIDEO_ATTENTION_BACKEND; доступные значения: FLASH_ATTN, TORCH_SDPA, SAGE_ATTN, SAGE_ATTN_THREE, VIDEO_SPARSE_ATTN, VMOBA_ATTN, SLA_ATTN, SAGE_SLA_ATTN |
Параметры запроса (nvext)
| Поле | Значение по умолчанию | Описание |
|---|---|---|
fps | 24 | Кадров в секунду |
num_frames | 121 | Общее число кадров; при задании переопределяет fps * seconds |
num_inference_steps | 5 | Шаги diffusion inference |
guidance_scale | 1.0 | Масштаб classifier-free guidance |
seed | 10 | Seed RNG для воспроизводимости |
negative_prompt | — | Текст, которого следует избегать при генерации |
Переменные окружения
| Переменная | Значение по умолчанию | Описание |
|---|---|---|
FASTVIDEO_VIDEO_CODEC | libx264 | Видеокодек для MP4 encoding |
FASTVIDEO_X264_PRESET | ultrafast | Preset скорости кодирования x264 |
FASTVIDEO_ATTENTION_BACKEND | TORCH_SDPA | Attention-бэкенд; 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_LOGGING | 1 | Включить логи времени по этапам |
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 s | Runtime caches всё ещё прогреваются | Стабильная производительность достигается начиная с третьего запроса |
| Более низкая пропускная способность, чем ожидалось, на B200/B300 | FP4/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.
См. также
- vLLM-Omni: видео из текста — генерация видео в vLLM-Omni через
/v1/videos - vLLM-Omni: изображения из текста — генерация изображений в vLLM-Omni
- SGLang Video Generation — worker для генерации видео в SGLang
- SGLang: диффузия изображений — worker для image diffusion в SGLang
- TRT-LLM Diffusion — quick start по diffusion в TensorRT-LLM
- Обзор diffusion — полная матрица поддержки backend'ов