Деноайзинг на 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) Интеграции с рендерами

Архитектуры/пайплайны 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 &lt; 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-сервер