Деноайзинг на GPU: OptiX и ускорение рендера
Задача страницы. Показать, как строить пайплайны денойза на облачных GPU: где выигрывает OptiX, как организовать оффлайн‑очереди (кадры/тайлы), как обеспечить стабильность в видео (temporal), какие метрики мониторить и как посчитать экономику «меньше сэмплов + денойз» против «голого рендера».
TL;DR
- Оффлайн: рендерим low‑samples, сохраняем beauty + albedo + normal, денойзим после stitch (кадр/тайлы), пакуем в EXR/PNG. Interruptible выгоден при чанке ≤ 120 с и ретраях. См. https://cloudcompute.ru/solutions/interruptible-patterns/
- Интерактив: включаем денойз‑превью для look‑dev; On‑Demand, цель — p95 input→pixel и стабильный FPS. См. https://cloudcompute.ru/solutions/rendering/
- Temporal: для роликов — денойз «с памятью» между кадрами (оптический поток/аккумуляция), иначе — мерцание.
- Профили GPU: 24 ГБ (Compact) — предпросмотры/кадры 1080p; 48 ГБ (Balanced) — основной рабочий профиль; 80 ГБ (HQ) — 4K/8K/много AOV и крупные батчи.
- Кэш/диск: ассеты/EXR на «тёплом», «горячее» — NVMe (шейдеры, тайлы, временные). См. https://cloudcompute.ru/solutions/storage-data/
- Наблюдаемость: denoise_seconds, denoise_psnr/ssim, temporal_stability, gpu_utilization, gpu_memory_used_bytes. См. https://cloudcompute.ru/solutions/monitoring-logging/
- Экономика: Speedup = t_render_full / (t_render_low + t_denoise); Cost_per_frame = (c_gpu * (t_render_low + t_denoise) / 3600) / U * r. См. https://cloudcompute.ru/solutions/cost-planner/
- Практики: фиксируем сиды, глобальный денойз после stitch, аккуратные AOV, zero‑copy и pinned memory. См. https://cloudcompute.ru/solutions/performance-tuning/
Сценарии
1) Оффлайн‑рендер кадров и шотов
- Рендер в low‑samples (низкий шумовой порог), экспорт beauty/albedo/normal.
- Дальше — денойз на GPU, затем опционально транскод. См. https://cloudcompute.ru/solutions/rendering/video-transcode/
- Разбиение на тайлы (2×2/3×3) для тяжёлых сцен; денойз после stitch, чтобы убрать швы.
2) Интерактивный look‑dev
- Включаем пред‑денойз (инстанс/сессия) на удалённой GPU‑станции. См. https://cloudcompute.ru/solutions/rendering/studio-remote/
- Жёсткий SLA по input→pixel и FPS; при провалах — снижение разрешения/сэмплов.
3) Temporal‑денойзинг видео
- Для последовательностей кадров — используем временную информацию (flow/кадровый буфер), иначе риск мерцания.
- После денойза — упаковка в H.264/HEVC/AV1 (NVENC). См. https://cloudcompute.ru/solutions/rendering/video-transcode/
4) Интеграции с рендерами
- Blender/Cycles: денойз экстernal‑шагом. См. https://cloudcompute.ru/solutions/rendering/blender/
- Redshift/Octane/V‑Ray: headless‑денойз в отдельной очереди. См. https://cloudcompute.ru/solutions/rendering/redshift/
- Houdini Karma XPU: денойз над EXR после husk. См. https://cloudcompute.ru/solutions/rendering/houdini-karma/
Архитектуры/пайплайны A. Оффлайн: рендер → stitch → денойз → транскод
[Render Frames/Tiles (beauty, albedo, normal)] -> [Stitch] -> [GPU Denoise] -> [QA/Transcode] -> [Cold Storage]
| |
NVMe "hot" cache NVMe "hot" cache
- Рендер и stitch — порционно (чанк ≤ 120 с для Interruptible), денойз — кадрами или батчами.
- Дальше видео‑пайплайн (HLS/DASH) при необходимости.
B. Temporal‑денойз для роликов
[Frames t-1, t, t+1] --(optical flow / history)--> [Temporal Denoise] -> [Stabilize QA] -> [Encode]
- Держим фиксацию exposure/поста, чтобы модель не «плавила» границы.
C. Интерактивная сессия
[Artist Input] -> [Remote GPU App + Denoise Preview] -> [NVENC Stream] -> [Viewer]
метрики: input->pixel p95, fps_actual, nvenc_utilization, gpu_utilization
Профили GPU/VRAM/скорости (ориентиры)
| **Профиль** | **VRAM** | **Типовые задачи денойза** | **Режим** | **Отн. throughput (≈)** | **Примечания** |
| **24 ГБ (Compact)** | 24 ГБ | Кадры 1080p, короткие шоты, предпросмотры | Interruptible / On‑Demand | 1.0 | Следить за VRAM при множестве AOV |
| **48 ГБ (Balanced)** | 48 ГБ | 1080p/1440p, батчи, moderate temporal | Interruptible / On‑Demand | 1.5–1.8 | Базовый профиль очереди денойза |
| **80 ГБ (HQ)** | 80 ГБ | 4K/8K, длинные шоты, много AOV/flow | On‑Demand / Interruptible | 2.2–2.6 | Возможен шардинг MIG под пачки |
Индексы относительны; итог зависит от модели денойза, разрешения и числа каналов.
Конфиги и скелеты
1) Универсальная YAML‑спека задания денойза
job:
name: "shot010_denoise"
mode: "interruptible" # on-demand | interruptible
gpu_profile: "48GB-Balanced" # 24GB-Compact | 48GB-Balanced | 80GB-HQ
chunk_seconds: 120
retries: 3
input:
frames_glob: "/out/shot010/stitch/shot010_*.exr" # beauty
albedo_glob: "/out/shot010/aov/albedo_*.exr"
normal_glob: "/out/shot010/aov/normal_*.exr"
denoise:
engine: "optix" # optix | (другие по нужде)
blend: 0.05 # доля исходника в смешивании
hdr: true
temporal: false # true для последовательностей
output:
dir: "/out/shot010/denoise/"
format: "EXR"
hooks:
on_start: ["python /scripts/warm_cache.py"]
on_frame_done: ["python /scripts/register_frame.py"]
on_failure: ["python /scripts/requeue.py --backoff"]
2) Пакетная обработка кадров (Python‑скелет; оболочка над CLI денойзера)
import glob, os, subprocess, pathlib
BEAUTY = sorted(glob.glob("/out/shot010/stitch/shot010_*.exr"))
ALBEDO = sorted(glob.glob("/out/shot010/aov/albedo_*.exr"))
NORMAL = sorted(glob.glob("/out/shot010/aov/normal_*.exr"))
OUTDIR = pathlib.Path("/out/shot010/denoise"); OUTDIR.mkdir(parents=True, exist_ok=True)
for b, a, n in zip(BEAUTY, ALBEDO, NORMAL):
frame_id = pathlib.Path(b).stem.split("_")[-1]
out = OUTDIR / f"shot010_{frame_id}.exr"
# Замените 'optix-denoise' на ваш установленный CLI-денойзер и актуальные флаги
cmd = [
"optix-denoise", "--hdr",
"--albedo", a, "--normal", n,
"--blend", "0.05", b, "-o", str(out)
]
subprocess.run(cmd, check=True)
Если нужен temporal, подавайте на вход соседние кадры/оптический поток и включайте соответствующий режим вашего движка.
3) Compose‑воркер денойза
services:
denoise-worker:
image: registry.local/optix-denoise:latest
command: ["bash","-lc","python3 /opt/run_denoise.py"]
deploy:
resources:
reservations:
devices: [ { capabilities: ["gpu"] } ]
volumes:
- /mnt/warm/project_out:/out
- /nvme:/nvme
environment:
- TMPDIR=/nvme/tmp
4) Финальная упаковка в видео (NVENC) после денойза
# EXR -> ProRes mezzanine (через 16-bit pipe) или сразу NVENC
ffmpeg -y -framerate 24 -pattern_type glob -i "/out/shot010/denoise/shot010_*.exr"
-c:v h264_nvenc -preset p5 -tune hq -pix_fmt yuv420p -rc vbr -b:v 30M -maxrate 40M -bufsize 60M
-g 48 -bf 3 -rc-lookahead 32 /out/shot010/final_h264.mp4
``` **Наблюдаемость/метрики/алерты**
База:[ https://cloudcompute.ru/solutions/monitoring-logging/](https://cloudcompute.ru/solutions/monitoring-logging/?utm_source=chatgpt.com) и трассировка:[ https://cloudcompute.ru/solutions/llm-inference/observability/](https://cloudcompute.ru/solutions/llm-inference/observability/?utm_source=chatgpt.com)
**Метрики:**
- denoise\_seconds{resolution=...,aov=3} — длительность обработки кадра.
- denoise\_psnr, denoise\_ssim — при наличии эталона/суперсета; либо прокси‑оценки.
- temporal\_stability — дисперсия разностей между кадрами после денойза.
- gpu\_utilization, gpu\_memory\_used\_bytes, io\_read\_mb\_s, io\_write\_mb\_s.
- Для интерактива: frame\_time\_seconds (p50/p95), fps\_actual, input\_to\_pixel\_latency\_ms.
**Алерты:**
- p95 denoise\_seconds растёт > X% к базе N минут.
- Падение denoise\_psnr/ssim относительно контрольного порога → деградация качества.
- gpu\_utilization < 60% при глубокой очереди → I/O/CPU узкое место.
- gpu\_memory\_used\_bytes близко к VRAM → уменьшить параллелизм/размеры батчей; перейти на больший профиль.
## **Экономика и формулы**
См.[ https://cloudcompute.ru/solutions/cost-planner/](https://cloudcompute.ru/solutions/cost-planner/?utm_source=chatgpt.com) и <https://cloudcompute.ru/solutions/throughput-vs-latency/>
**Сравнение двух стратегий на кадр:**
1. **Полный рендер без денойза
Cost\_full = (c\_gpu \* t\_render\_full / 3600) / U
2. **Low‑samples + денойз
Cost\_low\_dz = (c\_gpu \* (t\_render\_low + t\_denoise) / 3600) / U \* r
**Выигрыш по времени:
Speedup = t\_render\_full / (t\_render\_low + t\_denoise)
**Когда выгодно:** если Cost\_low\_dz < Cost\_full при приемлемом качестве (PSNR/SSIM/визуальный QA) и r (ретраи) укладывается в скидку **Interruptible**.
## **Практики качества и скорости**
- **Глобальный денойз после stitch**: так убираются швы между тайлами.
- **AOV‑дисциплина**: корректные **albedo/normal** из рендера, согласованные цвет‑пространства.
- **Фиксированные сиды**: стабильный шум на последовательности; меньше flicker.
- **Temporal**: используйте историю/flow; избегайте динамики post‑эффектов, которые ломают стабильность.
- **Память/I‑O**: держите временные на NVMe; zero‑copy, pinned memory; не чистите «горячий» кэш между заданиями.
- **Параллелизм**: «1 процесс = 1 GPU» часто эффективнее; масштабируем количеством воркеров.
- **Верификация**: заведите «золотой кадр» и автоматический визуальный дифф/метрики на выборке.
**Безопасность и политики**
См.[ https://cloudcompute.ru/solutions/security/](https://cloudcompute.ru/solutions/security/?utm_source=chatgpt.com)
- **Приватные ассеты/кадры** — доступ по временным токенам; запрет листинга бакетов.
- **Секреты** — ключи хранилищ, сервис‑аккаунты, лицензии — только через секрет‑хранилище; не логировать.
- **Изоляция** — отдельные сети/учётки под проекты; ограниченный egress.
- **Ретеншн** — сырые/денойз‑кадры и логи → в «холодное» по политике.
**Траблшутинг (симптом → причина → решение)**
<table><tbody><tr><td>**Симптом**
</td><td>**Причина**
</td><td>**Решение**
</td></tr><tr><td>«Пластик», потеря мелких деталей
</td><td>Слишком агрессивный денойз/большой blend
</td><td>Уменьшить интенсивность, добавить долю исходника, проверить AOV
</td></tr><tr><td>Мерцание на ролике
</td><td>Нет temporal/нестабильные сиды
</td><td>Включить temporal, фиксировать сиды, выровнять пост‑эффекты
</td></tr><tr><td>Швы после stitch
</td><td>Деноайзили тайлы по отдельности
</td><td>Делаем stitch → глобальный денойз, единые параметры
</td></tr><tr><td>Перешарп/ореолы
</td><td>Перекос параметров/пост‑шарп
</td><td>Снизить шарп/тени, откатить усиление контраста
</td></tr><tr><td>Низкий GPU util
</td><td>I/O узкое место или один процесс нагружает CPU
</td><td>Префетч/кэш на NVMe; увеличить воркеры; «1 процесс = 1 GPU»
</td></tr><tr><td>OOM VRAM
</td><td>Слишком много AOV/высокое разрешение
</td><td>Снизить параллелизм/каналы, перейти на 48–80 ГБ
</td></tr><tr><td>p95 denoise\_seconds растёт
</td><td>Холодный кэш/конкуренция диска
</td><td>Warm‑up; разнести запись; лимитировать конкуренцию
</td></tr></tbody></table>
## **Как запустить в cloudcompute.ru**
1. **Шаблон**:[ https://cloudcompute.ru/solutions/templates/](https://cloudcompute.ru/solutions/templates/?utm_source=chatgpt.com)
- «GPU Denoise (OptiX) — Batch» для оффлайна.
- «Remote GPU workstation» — интерактивный look‑dev.
2. **Профиль GPU**: 24/48/80 ГБ по таблице выше.
3. **Режим**: оффлайн — **Interruptible** (чанк ≤ 120 с, ретраи); критичные шоты — **On‑Demand**.
4. **Хранилище/кэш**: ассеты и EXR — «тёплое»; временные/тайлы — NVMe. См.[ https://cloudcompute.ru/solutions/storage-data/](https://cloudcompute.ru/solutions/storage-data/?utm_source=chatgpt.com)
5. **Оркестрация**: YAML‑спека job, хуки warm‑up/ретраи/backoff, stitch → денойз → QA.
6. **CI/CD**: фиксируйте версии движков/плагинов/библиотек; smoke‑образцы и визуальный дифф. См. <https://cloudcompute.ru/solutions/containers-ci-cd/>
7. **Наблюдаемость/алерты**: дашборды denoise\_seconds, качество (PSNR/SSIM), GPU/I‑O. См.[ https://cloudcompute.ru/solutions/monitoring-logging/](https://cloudcompute.ru/solutions/monitoring-logging/?utm_source=chatgpt.com)
**Чек‑лист перед продом**
- Рендер сохраняет **beauty/albedo/normal**; цвет‑пространство согласовано.
- Stitch → **глобальный денойз** протестированы, швов нет.
- Порог качества (PSNR/SSIM/визуальная выборка) принят командой.
- Чанк‑цель ≤ 120 с; ретраи включены; очереди масштабируются.
- NVMe‑кэш/профили I‑O настроены, метрики GPU/I‑O на дашбордах.
- Экономика: Speedup и Cost\_per\_frame бенчмаркнуты по профилям 24/48/80 ГБ.
- Политики безопасности и ретенции применены; логи без секретов.
**Навигация**
- Хаб «Рендеринг»: <https://cloudcompute.ru/solutions/rendering/>
- 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/>
- Unreal Engine: <https://cloudcompute.ru/solutions/rendering/unreal/>
- Omniverse/Isaac: <https://cloudcompute.ru/solutions/rendering/omniverse/>
- Транскодирование: <https://cloudcompute.ru/solutions/rendering/video-transcode/>
- Шаблоны запусков:[ https://cloudcompute.ru/solutions/templates/](https://cloudcompute.ru/solutions/templates/?utm_source=chatgpt.com)
- Хранилище и кэш:[ https://cloudcompute.ru/solutions/storage-data/](https://cloudcompute.ru/solutions/storage-data/?utm_source=chatgpt.com)
- Оптимизация:[ https://cloudcompute.ru/solutions/performance-tuning/](https://cloudcompute.ru/solutions/performance-tuning/?utm_source=chatgpt.com)
- Мониторинг/логи:[ https://cloudcompute.ru/solutions/monitoring-logging/](https://cloudcompute.ru/solutions/monitoring-logging/?utm_source=chatgpt.com)
- Наблюдаемость:[ https://cloudcompute.ru/solutions/llm-inference/observability/](https://cloudcompute.ru/solutions/llm-inference/observability/?utm_source=chatgpt.com)
- Throughput vs Latency: <https://cloudcompute.ru/solutions/throughput-vs-latency/>
- Interruptible‑паттерны: <https://cloudcompute.ru/solutions/interruptible-patterns/>
- CI/CD: <https://cloudcompute.ru/solutions/containers-ci-cd/>
Готовы запустить?
Запустить GPU-сервер