Unreal Engine: сборки и рендер на облачных GPU

Задача страницы. Дать практический рецепт сборки проектов UE (Build/Cook/Package), headless‑рендера через Movie Render Queue (включая Path Tracer), организации фермы оффлайн‑рендера и удалённых интерактивных сессий. Разобрать VRAM/DDC‑кэш, наблюдаемость, экономику и типовые сбои.

TL;DR

  • **Два режима: — Оффлайн‑рендер (batch/Movie Render Queue): масштабируем по кадрам/шотам; Interruptible выгоден при разбиении на чанки ≤ 120 с, ретраи, локальный NVMe‑кэш. — Интерактив (artist/Pixel Streaming/Parsec): приоритет p95 input→pixel и FPS; стабильный On‑Demand, NVENC/AV1.
  • Path Tracer: рендерим через MRQ с конфигом высокого качества; один процесс = один GPU; масштабирование — параллелью кадров/шотов.
  • Хранилище и кэш: ассеты/Derived Data Cache (DDC)/Shader Cache держим на локальном NVMe. «Тёплое» хранилище для исходников, «холодное» для архивов. См. https://cloudcompute.ru/solutions/storage-data/
  • Профили GPU: 24 ГБ (Compact) — предпросмотры/1080p; 48 ГБ (Balanced) — основной рабочий профиль; 80 ГБ (HQ) — Path Tracer 4K/8K, тяжёлые материалы, Nanite/волюметрика.
  • Наблюдаемость: render_frame_seconds, fps_actual, gpu_utilization, gpu_memory_used_bytes, ddc_hit_rate, nvenc_utilization. См. https://cloudcompute.ru/solutions/monitoring-logging/
  • Экономика: Cost_per_frame = (c_gpu * t_frame / 3600) / U * r (batch), Cost_per_hour = c_gpu / U_session (интерактив). См. https://cloudcompute.ru/solutions/cost-planner/
  • Безопасность: секреты/ключи билд‑систем, приватные плагины, лицензии — через секрет‑хранилище и ограниченный egress. См. https://cloudcompute.ru/solutions/security/

Сценарии: когда что использовать

Оффлайн‑рендер (MRQ/Sequencer)
Интерактив (look‑dev/previz)
Гибрид

Архитектуры/пайплайны (ASCII) A. CI/CD сборки → Cook → MRQ‑рендер (batch)

[Git/LFS] -> [CI Build] -> [Cooked Content] -> [Warm Storage /cooked]
 -> [Prefetch -> NVMe DDC/Shader Cache] -> [Job Queue]
 |
 +---------------------+---------------------+
 | |
 [GPU Worker #1] [GPU Worker #N]
 (MRQ Path Tracer, 1 GPU) (MRQ Path Tracer)
 | |
 [Frames/Clips] [Frames/Clips]
 /
 +----------> [Stitch/Denoise/Transcode] -> [Cold Archive]

Ключи: фиксированные версии движка/плагинов, единый контейнер‑образ, DDC/Shader‑кэш на NVMe, ретраи по кадрам/шотам.

B. Удалённая рабочая станция (интерактив)

[Artist Input] -> [Remote UE Session on GPU] -> [NVENC Stream] -> [Viewer]
 | | |
 telemetry frame_time (p50/p95) nvenc_utilization

Цель: p95 input→pixel и стабильный FPS; сеть — приоритизация стрима.

Профили GPU/VRAM/ориентиры

**Профиль** **VRAM** **Типовые задачи UE** **Режим** **Отн. throughput (≈)** **Примечания**
**24 ГБ (Compact)** 24 ГБ 1080p предпросмотры, лёгкие шоты, тесты MRQ Interruptible / On‑Demand 1.0 Следить за VRAM; тайлинг/понижение качества при OOM
**48 ГБ (Balanced)** 48 ГБ 1080p/1440p, сложные материалы/Niagara Interruptible / On‑Demand 1.5–1.8 Базовый профиль фермы
**80 ГБ (HQ)** 80 ГБ Path Tracer 4K/8K, тяжёлые сцены/Nanite On‑Demand / Interruptible 2.2–2.6 Один процесс = один GPU; масштабируем количеством нод

Индексы относительны: итог зависит от сцены/сэмплов/поста.

Конфиги и скелеты

1) Build/Cook/Package (CI шаг, универсально)

# Windows
RunUAT.bat BuildCookRun ^
 -project="C:pProjectProject.uproject" ^
 -platform=Win64 -clientconfig=Shipping ^
 -cook -allmaps -build -stage -pak -archive ^
 -archivedirectory="C:outbuild" ^
 -ddc=CreateInstalledDDC
# Linux
./RunUAT.sh BuildCookRun 
 -project=/p/Project/Project.uproject 
 -platform=Linux -clientconfig=Shipping 
 -cook -allmaps -build -stage -pak -archive 
 -archivedirectory=/out/build 
 -ddc=CreateInstalledDDC

**Рекомендации: — DDC на локальном NVMe (/nvme/ddc) и шаринг между задачами; — фиксировать версии toolchain в контейнере. См. https://cloudcompute.ru/solutions/containers-ci-cd/

2) MRQ Path Tracer через Python (headless)

Запускаем редактор в командном режиме с Python‑скриптом, который формирует MRQ‑очередь и рендерит шот.

# Linux пример; для Windows используйте UnrealEditor-Cmd.exe с аналогичными ключами
/opt/UnrealEditor/UnrealEditor-Cmd 
 "/p/Project/Project.uproject" 
 -run=pythonscript -ExecutePythonScript="/p/scripts/render_mrq.py" 
 -log="/out/render.log"
render_mrq.py (минимальный рабочий скелет):
import unreal
# Базовые сущности
queue_subsys = unreal.get_editor_subsystem(unreal.MoviePipelineQueueSubsystem)
queue = queue_subsys.get_queue()
queue.delete_all_jobs()
# Конфиг рендера: существующий ассет с преднастройками Path Tracer
config_asset = unreal.load_asset("/Game/MRQ/Configs/PathTracer_HQ")
sequence = unreal.load_asset("/Game/Sequences/Shot010")
map_asset = "/Game/Maps/Shot010"
job = queue.allocate_new_job(unreal.MoviePipelineExecutorJob)
job.sequence = sequence
job.map = unreal.SoftObjectPath(map_asset)
job.job_name = "Shot010_PT"
job.set_configuration(config_asset)
# Примеры параметров через overrides (если нужно)
# cfg = job.get_configuration()
# setting = cfg.find_or_add_setting_by_class(unreal.MoviePipelinePathTracerSetting)
# setting.samples_per_pixel = 64
# Вывод
output_setting = job.get_configuration().find_or_add_setting_by_class(unreal.MoviePipelineOutputSetting)
output_setting.output_directory = unreal.DirectoryPath("/out/shot010")
output_setting.file_name_format = "shot010_{frame}"
output_setting.output_resolution = unreal.IntPoint(3840, 2160)
# Исполнитель
executor = unreal.MoviePipelinePythonHostExecutor()
queue_subsys.render(queue, executor)

Масштабирование: вместо увеличения сэмплов до бесконечности рендерьте несколько кадров параллельно на разных нодах. Один процесс MRQ обычно использует один GPU.

3) MRQ‑тайлинг для сверхвысоких разрешений (концепт)

# Добавляем тайлинг 2x2 (если включён соответствующий setting в MRQ)
cfg = job.get_configuration()
tiling = cfg.find_or_add_setting_by_class(unreal.MoviePipelineHighResSetting)
tiling.tile_count = unreal.IntPoint(2, 2) # 2x2
tiling.texture_sharpness_bias = 0.0

Тайлы собираются автоматически MRQ или отдельным шагом (stitch). Denoise — отдельная очередь. См. https://cloudcompute.ru/solutions/rendering/de-noising/

4) Очередь заданий (универсальная YAML‑спека)

job:
 name: "ue_shot010_pt"
 engine: "ue-mrq" # тип пайплайна
 mode: "interruptible" # on-demand | interruptible
 gpu_profile: "48GB-Balanced" # 24GB-Compact | 48GB-Balanced | 80GB-HQ
 chunk_seconds: 120 # целевое время одного кадра/тайла
 retries: 3
 input:
 uproject: "/p/Project/Project.uproject"
 sequence: "/Game/Sequences/Shot010"
 map: "/Game/Maps/Shot010"
 mrq_config: "/Game/MRQ/Configs/PathTracer_HQ"
 frames: [100..160] # диапазон или список
 tiles:
 grid: [2, 2] # при 4K+ кадрах
 cache:
 ddc: "/nvme/ddc"
 shader_cache: "/nvme/shadercache"
 warmup: ["textures/", "nanite/", "shaders/"]
 output:
 dir: "/out/shot010"
 format: "EXR"
 hooks:
 on_start: ["python /scripts/warmup_ddc.py"]
 on_frame_done: ["python /scripts/register_frame.py"]
 on_failure: ["python /scripts/requeue.py --backoff"]

5) Docker‑воркер MRQ + NVMe DDC (Compose)

services:
 ue-mrq-worker:
 image: registry.local/ue5-mrq:latest
 command: ["/bin/bash","-lc","/opt/scripts/run_mrq.sh"]
 deploy:
 resources:
 reservations:
 devices: [ { capabilities: ["gpu"] } ]
 environment:
 - UE_PROJECT=/p/Project/Project.uproject
 - UE_SCRIPT=/p/scripts/render_mrq.py
 - DDC_DIR=/nvme/ddc
 - SHADER_CACHE=/nvme/shadercache
 volumes:
 - /mnt/warm/projects:/p:ro
 - /mnt/cold/out:/out
 - /nvme:/nvme
``` **Наблюдаемость/метрики/алерты**

См. базу:[ https://cloudcompute.ru/solutions/monitoring-logging/](https://cloudcompute.ru/solutions/monitoring-logging/) и трассировку:[ https://cloudcompute.ru/solutions/llm-inference/observability/](https://cloudcompute.ru/solutions/llm-inference/observability/)

**Batch/MRQ:**

- render\_frame\_seconds{engine="ue-mrq"} — гистограмма времени кадра.
- gpu\_utilization, gpu\_memory\_used\_bytes, gpu\_power\_watts.
- ddc\_hit\_rate, shader\_cache\_hits\_total, io\_read\_mb\_s, io\_write\_mb\_s.
- job\_queue\_depth, frames\_inflight.

**Интерактив:**

- frame\_time\_seconds (p50/p95), fps\_actual, input\_to\_pixel\_latency\_ms.
- nvenc\_utilization, net\_rtt\_ms, frame\_drop\_total.

**Алерты:**

- p95 render\_frame\_seconds > порога N минут.
- gpu\_utilization < 60% при глубокой очереди → узкое место I/O/CPU/кэш.
- Низкий ddc\_hit\_rate → холодный кэш; добавить warm‑up.
- gpu\_memory\_used\_bytes → близко к VRAM → включить тайлинг/снизить резолюцию/перейти на больший профиль.

## **Экономика и формулы**

См.[ https://cloudcompute.ru/solutions/cost-planner/](https://cloudcompute.ru/solutions/cost-planner/) и <https://cloudcompute.ru/solutions/throughput-vs-latency/>

**Оффлайн (MRQ):**

Cost\_per\_frame = (c\_gpu \* t\_frame / 3600) / U \* r

Cost\_total = N \* Cost\_per\_frame + Overhead\_io + Cost\_denoise/transcode

**Интерактив:**

Cost\_per\_hour = c\_gpu / U\_session

**Interruptible выгоден**, если скидка по цене покрывает ретраи: Discount\_gain &gt; (r - 1) и **чанк ≤ 120 с** (разбиение по кадрам/тайлам/сегментам).

## **Практики VRAM/кэша и производительности**

- **DDC/Shader Cache на NVMe**: локальный «горячий» кэш, не чистить между заданиями; warm‑up скрипт перед стартом.
- **Path Tracer**: рост сэмплов → квадратичный рост времени; лучше параллелить кадры на разных нодах.
- **Тайлинг MRQ** для сверхвысоких разрешений; аккуратно с пост‑эффектами (одинаковые параметры для тайлов).
- **IO‑узкие места**: префетч ассетов, pin‑память, контроль io\_read\_mb\_s. См.[ https://cloudcompute.ru/solutions/performance-tuning/](https://cloudcompute.ru/solutions/performance-tuning/)
- **Один процесс = один GPU**: MRQ обычно не масштабируется на несколько GPU внутри 1 процесса — масштабируем количеством воркеров.
- **Стабильность**: фиксируйте версии UE/плагинов/проекта; smoke‑рендер эталонного кадра в CI. См. <https://cloudcompute.ru/solutions/containers-ci-cd/>

**Безопасность и политики**

См.[ https://cloudcompute.ru/solutions/security/](https://cloudcompute.ru/solutions/security/)

- **Секреты** (ключи к приватным плагинам, учётки магазинов, лицензии кодеков) — только через секрет‑хранилище; запрет логирования секретов.
- **Изоляция проектов**: отдельные сети/учётки, ограничение egress (только лицензирование/телеметрия).
- **Приватные ассеты**: временные токены, чёткий TTL, no‑list бакетов.
- **Ретеншн**: EXR/PNG/лог‑артефакты → «холодное» хранилище через N дней.

**Траблшутинг (симптом → причина → решение)**

<table><tbody><tr><td>**Симптом**

</td><td>**Возможная причина**

</td><td>**Решение**

</td></tr><tr><td>OOM по VRAM на MRQ/PT

</td><td>Слишком высокое разрешение/сцена

</td><td>Включить тайлинг 2×2/3×3; снизить резолюцию; перейти на 48–80 ГБ

</td></tr><tr><td>Низкий GPU util при длинных кадрах

</td><td>Узкое место I/O/Shader‑compile

</td><td>DDC/Shader Cache на NVMe, warm‑up; увеличить префетч

</td></tr><tr><td>Сильный рост времени первого кадра

</td><td>Холодный кэш DDC/шейдеров

</td><td>Warm‑up шаг в hooks; не чистить кэш между задачами

</td></tr><tr><td>Разные результаты между нодами

</td><td>Разные версии UE/плагинов/настроек поста

</td><td>Единый контейнер‑образ; smoke‑рендер эталона

</td></tr><tr><td>MRQ «встал», очередь есть

</td><td>Ошибка задания/плагина, нет ретраев

</td><td>Хуки on\_failure+backoff; валидация job; перезапуск воркера

</td></tr><tr><td>Интерактив: просадки FPS/лаг

</td><td>Сеть/NVENC перегружены, сцена не влезает в VRAM

</td><td>Снизить битрейт/разрешение; увеличить VRAM‑профиль; оптимизировать сцену

</td></tr><tr><td>Тайл‑артефакты (стыки)

</td><td>Пост‑эффекты/AA не согласованы

</td><td>Единые параметры поста; глобальный пост‑процесс после stitch

</td></tr><tr><td>Время кадра &gt; 120 с (Interruptible)

</td><td>Недостаточное разбиение на чанки

</td><td>Резать по кадрам/сегментам/тайлам; критичные шоты — On‑Demand

</td></tr></tbody></table>

## **Как запустить в cloudcompute.ru**

1. **Выберите шаблон**:[ https://cloudcompute.ru/solutions/templates/](https://cloudcompute.ru/solutions/templates/)
 - «UE Build &amp; Cook (CI)» — сборка/кукинг.
 - «UE MRQ Path Tracer (batch)» — оффлайн‑рендер.
 - «Remote GPU workstation» — интерактив. См. <https://cloudcompute.ru/solutions/rendering/studio-remote/>
2. **Профиль GPU**: 24/48/80 ГБ по таблице выше; Path Tracer 4K — 80 ГБ (HQ).
3. **Режим**:
 
 - Короткие кадры/сегменты — **Interruptible** (чанк ≤ 120 с).
 - Длинные/критичные — **On‑Demand**.
4. **Хранилище/кэш**: подключить «тёплое» хранилище, настроить DDC/Shader‑кэш на NVMe. См.[ https://cloudcompute.ru/solutions/storage-data/](https://cloudcompute.ru/solutions/storage-data/)
5. **Оркестрация**: описать задания YAML‑спекой; настроить ретраи/backoff.
6. **CI/CD**: зафиксировать версии UE/плагинов/драйверов; smoke‑рендер эталонного кадра. См. <https://cloudcompute.ru/solutions/containers-ci-cd/>
7. **Наблюдаемость/алерты**: дашборды по GPU/MRQ/стриму; алерты p95. См.[ https://cloudcompute.ru/solutions/monitoring-logging/](https://cloudcompute.ru/solutions/monitoring-logging/)

**Чек‑лист перед продом**

- Единый контейнер‑образ UE/плагинов; smoke‑рендер совпадает на 2+ воркерах.
- DDC/Shader‑кэш на NVMe, warm‑up включён; ddc\_hit\_rate стабильно высокий.
- Чанк‑цель ≤ 120 с; тайлинг/разбиение по кадрам/сегментам настроено.
- Метрики render\_frame\_seconds, gpu\_utilization, gpu\_memory\_used\_bytes, io\_\* и алерты заведены.
- Экономика посчитана: Cost\_per\_frame/Cost\_total (batch) или Cost\_per\_hour (интерактив).
- Политики безопасности/ретенции применены; логи без секретов.
- План деградации качества (disaster mode): запасные пресеты MRQ на случай SLA.

**Навигация**

- Хаб «Рендеринг»: <https://cloudcompute.ru/solutions/rendering/>
- Шаблоны запусков:[ https://cloudcompute.ru/solutions/templates/](https://cloudcompute.ru/solutions/templates/)
- Данные и хранение:[ https://cloudcompute.ru/solutions/storage-data/](https://cloudcompute.ru/solutions/storage-data/)
- Оптимизация производительности:[ https://cloudcompute.ru/solutions/performance-tuning/](https://cloudcompute.ru/solutions/performance-tuning/)
- Multi‑GPU (общие паттерны):[ https://cloudcompute.ru/solutions/multi-gpu/](https://cloudcompute.ru/solutions/multi-gpu/)
- Мониторинг и логи:[ https://cloudcompute.ru/solutions/monitoring-logging/](https://cloudcompute.ru/solutions/monitoring-logging/)
- Наблюдаемость сервисов:[ https://cloudcompute.ru/solutions/llm-inference/observability/](https://cloudcompute.ru/solutions/llm-inference/observability/)
- Throughput vs Latency: <https://cloudcompute.ru/solutions/throughput-vs-latency/>
- Interruptible‑паттерны: <https://cloudcompute.ru/solutions/interruptible-patterns/>
- CI/CD для GPU‑нагрузок: <https://cloudcompute.ru/solutions/containers-ci-cd/>
- Родственные страницы рендера:
 
 - Blender/Cycles: <https://cloudcompute.ru/solutions/rendering/blender/>
 - Redshift/Octane/V‑Ray: <https://cloudcompute.ru/solutions/rendering/redshift/>
 - Houdini Karma XPU: <https://cloudcompute.ru/solutions/rendering/houdini-karma/>
 - Деноайзинг: <https://cloudcompute.ru/solutions/rendering/de-noising/>
 - Транскодирование: <https://cloudcompute.ru/solutions/rendering/video-transcode/>
 - Удалённые GPU‑станции: <https://cloudcompute.ru/solutions/rendering/studio-remote/>
 - Пайплайны ассетов: <https://cloudcompute.ru/solutions/rendering/asset-pipelines/>

Готовы запустить?

Запустить GPU-сервер