TensorRT multi-device в Dynamo-Triton: генерация видео на восьми GPU

Генеративные модели растут быстрее, чем одна видеокарта успевает их обслуживать: вычислений и памяти в одном ускорителе уже не хватает. NVIDIA предложила решение — TensorRT multi-device inference, при котором одна сеть TensorRT исполняется сразу на нескольких GPU через распределённые коллективы на базе NCCL, сохраняя при этом оптимизации вывода TensorRT. Полноценная поддержка появилась начиная с TensorRT 11.0.

Включить этот режим можно в NVIDIA Dynamo-Triton (бывший NVIDIA Triton Inference Server) начиная с релиза 26.07. Один экземпляр KIND_MODEL получает в распоряжение несколько GPU, создаёт для каждого ранга свой контекст исполнения TensorRT, поток CUDA и коммуникатор NCCL, а затем запускает ранги вместе на каждый запрос. Приложение при этом обращается к одной именованной модели через gRPC-эндпоинт и не координирует GPU-ранги самостоятельно.

Что это даёт на практике

Для команд, разворачивающих генеративный ИИ, интеграция закрывает разрыв между много-GPU-ускорением и готовым сервисом вывода. Можно обменять дополнительные GPU на меньшую задержку запроса, не меняя интерфейс приложения и окружающий рабочий процесс, упаковать движок в версионированную модель Triton и убрать из клиента код управления жизненным циклом рангов и коммуникаторов. Для медиазадач, чувствительных к задержке, более быстрый результат сокращает ожидание пользователя и ускоряет цикл «сгенерировал — посмотрел — поправил».

Как устроена демонстрация на Cosmos 3 Nano

Пример построен на генерации видео моделью NVIDIA Cosmos 3 Nano — это длинносеквенсная нагрузка. Diffusers продолжает оркестрировать промпты, латенты, classifier-free guidance (CFG), планировщик, декодирование VAE и постобработку кадров. Dynamo-Triton обслуживает 36-слойный трансформер шумоподавления, а TensorRT multi-device распределяет его 44 160 видеотокенов максимум на восемь GPU с помощью Ulysses context parallelism.

Распределённый граф компилируется в каждый план TensorRT ещё до развёртывания. Бэкенд TensorRT в Dynamo-Triton загружает версионированный план, создаёт состояние исполнения для нескольких рангов и открывает один gRPC-эндпоинт модели. Клиент отправляет запрос трансформеру на этот эндпоинт и не занимается координацией участвующих рангов.

Трансформер занимает 93,4% времени генерации на одной GPU — именно поэтому его ускорение даёт наибольший эффект. Каждый из 35 шагов шумоподавления требует одного негативного (безусловного) предсказания и одного обусловленного промптом предсказания для CFG. Поэтому прокси Diffusers делает два последовательных вызова Triton на шаг — всего 70 RPC к трансформеру за одну генерацию. Каждый запрос несёт подготовленные тензоры и возвращает noise_patches в рабочий процесс приложения.

Конфигурация контекстно-параллельного плана

Dynamo-Triton не превращает одно-девайсный движок в распределённый: распределённый граф уже скомпилирован в контекстно-параллельный план, а конфигурация лишь активирует его. Базовый вариант использует стандартный экземпляр GPU-модели на GPU 0. Варианты на два, четыре и восемь GPU применяют KIND_MODEL, включают путь multi-device бэкенда TensorRT и перечисляют участвующие ранги.


name: "cosmos3_cp8"
backend: "tensorrt"
max_batch_size: 0

instance_group [
  { kind: KIND_MODEL count: 1 }
]
parameters [
  { key: "enable_multi_device" value: { string_value: "true" } },
  { key: "multi_device_gpus" value: { string_value: "0,1,2,3,4,5,6,7" } }
]

Ulysses context parallelism: как делятся токены

Фиксированный профиль Cosmos 3 Nano в этом примере даёт 44 160 видеотокенов. При размере контекстного параллелизма восемь (CP8) каждый ранг обрабатывает 5 520 видеотокенов вне внимания. Более короткий текстовый путь на 2 992 токена остаётся реплицированным. Внутри каждого из 36 слоёв трансформера Ulysses меняет ось разбиения вокруг внимания так, чтобы каждый ранг обрабатывал полную видеопоследовательность для своего непересекающегося подмножества голов.

Движок экспортируется из PyTorch и компилируется через Torch-TensorRT. Три локальных конвертера понижают операции-носители экспорта до публичного распределённого коллективного слоя TensorRT: reduce-scatter, all-to-all и all-gather. Каждый принятый контекстно-параллельный план содержит два начальных reduce-scatter, три all-to-all в каждом из 36 слоёв трансформера и один финальный all-gather. Итоговая топология — два reduce-scatter плюс 108 all-to-all плюс один all-gather.

Замеры сквозной задержки

Все четыре варианта запускались на одной и той же исправной системе с восемью GPU. Базовый одно-девайсный вариант использовал одну видеокарту, CP2, CP4 и CP8 — соответственно два, четыре и восемь рангов. Каждый прогон: вывод 1280×720, 189 кадров при 24 FPS, 35 шагов шумоподавления. Результат включает один прогрев и пять измеренных полных генераций; время покрывает работу с промптом, 70 вызовов Dynamo-Triton, обновления CFG и планировщика, декодирование VAE и постобработку кадров. Загрузка модели и кодирование в mp4 из замера исключены.

Вариант GPU E2E, среднее Ускорение E2E RPC, среднее Ускорение RPC Доля RPC
SD 1 156,595 1,00x 146,192 1,00x 93,4%
CP2 2 87,999 1,78x 77,548 1,89x 88,1%
CP4 4 53,093 2,95x 42,661 3,43x 80,4%
CP8 8 34,183 4,58x 23,993 6,09x 70,2%

Сквозная задержка падает со 156,595 секунды на одной GPU до 34,183 секунды на восьми, а ускорение RPC трансформера достигает 6,09x. На одной GPU RPC трансформера занимают 93,4% времени генерации, на CP8 их доля снижается до 70,2%. Время вне измеряемого RPC-пути остаётся в диапазоне 10,2–10,5 секунды во всех конфигурациях, поэтому работа с промптом, обновления планировщика, декодирование VAE, постобработка и прочие накладные расходы клиента начинают занимать большую часть общего времени.

Проверка качества результата

Каждый вариант использовал один и тот же seed и профиль генерации. Валидация отбирала кадры 0, 47, 94, 141 и 188, проверяла формат и временную вариативность, а затем сравнивала результат контекстно-параллельного запуска с одно-девайсным. CP2, CP4 и CP8 прошли заданные пороги: средняя абсолютная ошибка (MAE) ≤ 25 и пиковое отношение сигнал/шум (PSNR) ≥ 18 дБ.

Пиксельной идентичности результатов не заявляется. CP2 и CP4 показали MAE 12,759 и PSNR 21,111 дБ, CP8 — MAE 16,316 и PSNR 19,400 дБ. Контактный лист также демонстрирует одно и то же связное действие по всему клипу: роборука моет тарелку.

Что осталось за рамками бенчмарка

Для продуктовых команд это практичный вариант, когда время отклика ценнее, чем минимизация числа GPU на один запрос: полная генерация Cosmos 3, которая раньше занимала больше двух с половиной минут, теперь завершается примерно за 34 секунды, а приложение продолжает пользоваться обычным интерфейсом сервинга моделей.

При этом выбор всё равно остаётся за командой и определяется компромиссом «ресурсы против задержки». Бенчмарк не измеряет пропускную способность при одновременных запросах, стоимость одного сгенерированного видео и совокупную стоимость владения (TCO) — эти метрики стоит оценивать против собственных SLO и экономики развёртывания.

Воспроизвести результаты можно, скачав NVIDIA Dynamo-Triton 26.07 из NGC и используя ресурсы TensorRT, Torch-TensorRT, Diffusers и Cosmos. Дополнительные материалы — руководство по multi-device для бэкенда TensorRT, документация TensorRT Multi-Device и документация по репозиторию моделей Dynamo-Triton.

Для российских команд, работающих с генеративным видео, вывод практический: если узкое место — время ожидания пользователя, а не число занятых карт, много-GPU-сервинг через знакомый gRPC-интерфейс Triton позволяет ускориться без переписывания клиентского кода. Правда, доступность самих карт и NGC в условиях ограничений придётся оценивать отдельно, а реестровые ОС здесь ни при чём — речь о стеке NVIDIA.

Частые вопросы

Кого касается эта новость?

Команд, которые разворачивают генеративные модели на нескольких GPU и хотят отдавать результат быстрее. Особенно тех, кто уже использует Triton или Dynamo-Triton как сервинг-слой и не готов менять клиентский код.

С какой версии доступна поддержка?

TensorRT multi-device полностью поддерживается начиная с TensorRT 11.0. Со стороны сервера возможность включается в NVIDIA Dynamo-Triton релиза 26.07.

Нужно ли перекомпилировать модель?

Да, если речь о распределённом плане. Распределённый граф компилируется в каждый контекстно-параллельный план TensorRT до развёртывания; Dynamo-Triton не преобразует одно-девайсный движок в распределённый, а лишь активирует готовый план.

Как клиент узнаёт о нескольких GPU?

Никак — и это главное удобство. Приложение обращается к одной именованной модели через один gRPC-эндпоинт и не координирует ранги. Создание контекстов TensorRT, потоков CUDA и коммуникаторов NCCL, а также совместный запуск рангов берёт на себя сервер.

Какой выигрыш по задержке в примере?

Сквозная задержка упала со 156,595 секунды на одной GPU до 34,183 секунды на восьми — ускорение 4,58x. Ускорение самих RPC к трансформеру выше — 6,09x, потому что часть времени уходит на работу вне трансформера.

Почему ускорение RPC и сквозное ускорение различаются?

Потому что ускоряется не вся цепочка. Вне RPC-пути остаётся от 10,2 до 10,5 секунды: работа с промптом, обновления планировщика, декодирование VAE, постобработка кадров. Чем больше GPU, тем заметнее эта фиксированная часть в общей доле.

Результаты на разных числах GPU идентичны?

Пиксельной идентичности NVIDIA не заявляет. Валидация сверяла кадры 0, 47, 94, 141 и 188 с одно-девайсным результатом: CP2 и CP4 дали MAE 12,759 и PSNR 21,111 дБ, CP8 — MAE 16,316 и PSNR 19,400 дБ при порогах MAE ≤ 25 и PSNR ≥ 18 дБ.

Что именно измерял бенчмарк и что осталось за кадром?

Измерялась сквозная задержка одной генерации: 1280×720, 189 кадров при 24 FPS, 35 шагов шумоподавления, один прогрев и пять замеров. Не измерялись пропускная способность при параллельных запросах, стоимость одного видео и совокупная стоимость владения — их нужно проверять на своих SLO.

Как воспроизвести результаты?

Скачать NVIDIA Dynamo-Triton 26.07 из NGC, затем использовать ресурсы TensorRT, Torch-TensorRT, Diffusers и Cosmos. Конкретные параметры конфигурации описаны в руководстве по multi-device для бэкенда TensorRT, а API и варианты использования — в документации TensorRT Multi-Device.

Где посмотреть смежные материалы по теме?

Про запуск крупных моделей на нескольких ускорителях мы писали в разборе Qwen3.8-2.4T-A95B на GB300 NVL72, а про локальный запуск моделей — в заметке о Hermes Desktop.

Источник: developer.nvidia.com