Redshift/Octane/V‑Ray на GPU: производительность и лицензии

Задача страницы. Дать практический рецепт запуска Redshift/Octane/V‑Ray в облаке: как собирать headless‑ферму, где упирается throughput, как учитывать лицензии (сервер/онлайн/офлайн), как строить очереди и считать стоимость кадра с учётом GPU и лицензий.

TL;DR

  • Оффлайн‑рендер (batch): делим по кадрам/тайлам, работаем в Interruptible (чанк ≤ 120 с, ретраи, локальный NVMe‑кэш), итог — stitch+denoise.
  • Интерактив (artist/preview): On‑Demand, приоритет — p95 input→pixel и стабильный FPS; рабочие станции/Pixel Streaming. См. https://cloudcompute.ru/solutions/rendering/studio-remote/
  • Throughput: один жирный процесс на все GPU ≠ всегда выгодно. Часто быстрее запускать по 1 процессу на 1 GPU, особенно на 24–48 ГБ.
  • VRAM‑профили: 24 ГБ (Compact) — предпревью/средние сцены; 48 ГБ (Balanced) — основной «рабочий» профиль; 80 ГБ (HQ) — 4K/8K, волюметрика, сложные шейдеры.
  • Лицензии: центр. сервер или аккаунт‑аутентикация. В облаке — хранить ключи/токены в секрете, ограничить egress, учитывать seat‑конкуренцию в планировщике. См. https://cloudcompute.ru/solutions/security/
  • Хранилище: ассеты в «тёплом», локальный NVMe — «горячий» кэш шейдеров/текстур; префетч перед стартом. См. https://cloudcompute.ru/solutions/storage-data/
  • Наблюдаемость: render_frame_seconds, tile_render_seconds, gpu_utilization, gpu_memory_used_bytes, + license_seats_in_use. См. https://cloudcompute.ru/solutions/monitoring-logging/
  • Экономика: Cost_per_frame = ((c_gpu + c_license) * t_frame / 3600) / U * r; для интерактива — Cost_per_hour = (c_gpu + c_license) / U. См. https://cloudcompute.ru/solutions/cost-planner/

Сценарии использования

Оффлайн‑ферма (batch)

  • Финальные кадры реклам/анимации, массовые последовательности.
  • Экспорт сцен в промежуточные контейнеры: .vrscene / .orbx / .rs‑архивы; headless‑рендер без GUI.
  • Параллелизм по кадрам и/или по тайлам (region render) для укладывания в чанк ≤ 120 с.

Интерактив/превью

  • Быстрые итерации материалов/света, «look‑dev», короткие сессии художников.
  • Переключение сцен/версий в пару кликов, стриминг экрана/кадра, On‑Demand.
  • Цель — p95 frame‑time и стабильный FPS; результат — предпросмотр или контрольные кадры.

Гибрид

Архитектуры/пайплайны A. Экспорт → Headless‑рендер → Stitch/Denoise

[DCC (Maya/C4D/3dsMax/Blender)] 
 | Export (.vrscene/.orbx/.rs)
 v
[Warm Storage /assets + /exports] -> [Prefetch -> NVMe "hot" cache] -> [Job Queue]
 |
 +-------------+-------------+
 | |
 [GPU Worker #1] [GPU Worker #N]
 (1 proc / 1 GPU, tile/frame) (1 proc / 1 GPU)
 | |
 [Tiles/Frames OUT] [Tiles/Frames OUT]
 /
 +--------> [Stitch/Denoise/QA] -> [Cold Archive]

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

B. Лицензионная топология

[License Server/Cloud Account]
 ^
 | TLS-only, allowlist
+----------+----------+
| |
[Worker Pool A] [Worker Pool B]
(seat borrow N) (seat borrow M)
  • Планировщик учитывает свободные seat‑ы; держите запас 5–15% для пиков.
  • При прерывании/ошибке — быстрая «де‑регистрация» и возврат seat.

C. Много GPU в узле (single vs multi‑proc)

[Worker Node: GPU0, GPU1, GPU2, GPU3]
 Mode 1: один процесс -> использует все GPU (монолитные сцены)
 Mode 2: по 1 процессу на GPU -> независимые кадры/тайлы (часто быстрее)

Для 80 ГБ: допускается шардинг с MIG под мелкие задачи. См. https://cloudcompute.ru/solutions/mig/

Профили GPU и ориентиры throughput

**Профиль** **VRAM** **Типовые сцены** **Режим** **Отн. throughput (≈)** **Замечания**
**24 ГБ (Compact)** 24 ГБ предпревью, 1080p, средние шейдеры Interruptible / On‑Demand 1.0 Тайлинг 256–512 px при риске OOM
**48 ГБ (Balanced)** 48 ГБ 1080p/1440p, более тяжёлые материалы Interruptible / On‑Demand 1.5–1.8 «Рабочая лошадь» фермы
**80 ГБ (HQ)** 80 ГБ 4K/8K, волюметрика, сложные ноды On‑Demand / Interruptible 2.2–2.6 Поддержка MIG и крупных сцен

Индексы относительные; фактическая скорость зависит от движка/сцены/настроек.

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

1) Унифицированная YAML‑спека задания (для очереди)

job:
 name: "shot_020_rs_tiles"
 engine: "redshift" # redshift | octane | vray
 mode: "interruptible" # on-demand | interruptible
 gpu_profile: "48GB-Balanced" # 24GB-Compact | 48GB-Balanced | 80GB-HQ
 chunk_seconds: 120
 retries: 3
 input:
 archive: "/exports/shot_020.rs" # .rs | .orbx | .vrscene
 frames: [200, 201, 202, 203]
 tiles:
 grid: [2, 2] # 2x2 регионы
 cache:
 nvme_size_gb: 200
 warmup: ["textures/", "shaders/"]
 output:
 dir: "/out/shot_020"
 format: "EXR"
 license:
 server_url: "tls://licenses.internal:5053" # пример
 seat_policy: "borrow" # borrow | online | node-locked
 hooks:
 on_start: ["python /scripts/warm_cache.py"]
 on_tile_done: ["python /scripts/register_tile.py"]
 on_frame_done: ["python /scripts/stitch_denoise.py"]
 on_failure: ["python /scripts/requeue.py --backoff"]

2) Пусковой скрипт под разные движки (обобщённо)

#!/usr/bin/env bash
set -euo pipefail
ENGINE="${ENGINE:-redshift}" # redshift|octane|vray
ARCHIVE="${ARCHIVE:?path to .rs/.orbx/.vrscene}"
FRAME="${FRAME:?frame number}"
OUT="${OUT_DIR:-/out}"
TILE="${TILE_REGION:-}" # "xmin,ymin,xmax,ymax" (0..1), опционально
export LICENSE_SERVER="${LICENSE_SERVER:-tls://licenses.internal:5053}"
export RENDER_TMP="/nvme/tmp"
mkdir -p "$OUT"
case "$ENGINE" in
 redshift)
 # Псевдо-вызов CLI рендера из архива .rs
 renderer="redshift-cli"
 ;;
 octane)
 # Псевдо-вызов CLI рендера из .orbx
 renderer="octane-cli"
 ;;
 vray)
 # Псевдо-вызов CLI рендера из .vrscene
 renderer="vray-standalone"
 ;;
 *)
 echo "Unknown ENGINE=$ENGINE"; exit 2 ;;
esac
ARGS=("--input" "$ARCHIVE" "--frame" "$FRAME" "--out" "$OUT/frame_${FRAME}.exr" "--tmp" "$RENDER_TMP")
if [[ -n "$TILE" ]]; then
 IFS=',' read -r XMIN YMIN XMAX YMAX <<< "$TILE"
 ARGS+=("--region" "$XMIN" "$YMIN" "$XMAX" "$YMAX")
fi
exec "$renderer" "${ARGS[@]}"

Имена бинарников условные — в реальной интеграции подставьте конкретный CLI соответствующего движка или headless‑запуск DCC с нужным плагином. Цель — показать шаблон.

3) Docker Compose: воркер + лицензии (пример топологии)

services:
 license-proxy:
 image: registry.local/license-proxy:latest
 environment:
 - ALLOWLIST_CIDRS=10.0.0.0/16
 networks: [render-net]
 deploy:
 resources:
 reservations:
 cpus: '0.2'
 memory: 128M
 render-worker:
 image: registry.local/gpu-renderer:latest
 command: ["bash","-lc","/opt/run-job.sh"]
 environment:
 - ENGINE=redshift
 - ARCHIVE=/exports/shot_020.rs
 - FRAME=200
 - LICENSE_SERVER=tls://license-proxy:5053
 volumes:
 - /mnt/warm/assets:/assets:ro
 - /mnt/warm/exports:/exports:ro
 - /mnt/cold/out:/out
 - /nvme:/nvme
 deploy:
 resources:
 reservations:
 devices:
 - capabilities: ["gpu"]
 networks: [render-net]
networks:
 render-net: {}

4) Экспорт сцен/пакетов (псевдо‑скрипт для DCC)

# exporter.py — идея: экспорт на кадры и/или пакеты по шотам
# Адаптируйте под ваш DCC API и нужный плагин.
import os
SCENE = "/projects/shot_020.scene"
OUT = "/exports"
ENGINE = "vray" # vray|octane|redshift
frames = range(200, 204)
os.makedirs(OUT, exist_ok=True)
def export_frame(engine, frame, out_dir):
 # Здесь вызываются API плагина: set_frame(frame), bake/textures, export_archive(...)
 # Результат: /exports/shot_020_f0200.vrscene (или .orbx/.rs)
 pass
for f in frames:
 export_frame(ENGINE, f, OUT)
``` **Наблюдаемость, метрики, алерты**

Опорные страницы:[ 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/)

**Метрики рендера:**

- render\_frame\_seconds{engine=...} — гистограмма длительности кадра.
- tile\_render\_seconds{engine=...,grid="2x2"} — длительность тайла.
- gpu\_utilization, gpu\_memory\_used\_bytes, gpu\_power\_watts.
- io\_read\_mb\_s, io\_write\_mb\_s, shader\_cache\_hits\_total.

**Лицензии:**

- license\_seats\_total, license\_seats\_in\_use, license\_checkout\_failures\_total.
- seat\_hold\_seconds — держим под контролем время удержания, чтобы не было «утечек».

**Алерты:**

- p95 render\_frame\_seconds растёт &gt; X% к базовому за 10–15 мин.
- gpu\_utilization &lt; 60% при высокой очереди → I/O/лицензии/версии.
- license\_checkout\_failures\_total &gt; 0 за 5 мин → проверьте сервер и квоты.
- gpu\_memory\_used\_bytes → лимит VRAM → включить тайлинг/снизить разрешение/перейти на больший профиль.

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

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

**Кадр (учёт лицензий):**

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

где c\_gpu — цена/час GPU, c\_license — часовая доля лицензии на воркер (seat/час, или лицензия/узел),
 t\_frame — сек/кадр, U — целевая загрузка GPU, r — retry‑factor (interruptible).

**Пакет N кадров:**

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

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

Cost\_per\_hour = (c\_gpu + c\_license) / U\_session

**Seat‑лимиты:**

- Если seats &lt; workers, планировщик запускает min(seats, workers) одновременных задач.
- Рекомендация: seats ≈ ceil(workers \* 0.9) + буфер 5–15% на пики.

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

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

- **Ключи/токены/сервер лицензий** — через секрет‑хранилище; не печатаем в логи.
- **Ограничение egress** — разрешаем только домены/порты лицензирования и телеметрию.
- **Приватные ассеты** — временные токены доступа; ретеншн EXR/логов по политике.
- **Изоляция проектов** — сети/неймспейсы; разные сервис‑аккаунты.
- **Аудит** — логируем checkout/check‑in лицензий и соответствие задач.

**Траблшутинг**

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

</td><td>**Причина**

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

</td></tr><tr><td>Рендер не стартует, ошибка лицензии

</td><td>Нет seat‑ов или недоступен сервер

</td><td>Проверить license\_seats\_in\_use; увеличить квоту/буфер; проверить egress/сервер

</td></tr><tr><td>Seat «залип» после прерывания

</td><td>Не отработал хук возврата

</td><td>Добавить on\_preempt/on\_failure с принудительным release; уменьшить TTL холда

</td></tr><tr><td>OOM по VRAM

</td><td>Слишком крупный кадр/текстуры

</td><td>Тайлинг 2x2, 3x3; снизить разрешение; перейти на 48–80 ГБ

</td></tr><tr><td>GPU util 30–40%

</td><td>Узкое место I/O/компиляция шейдеров

</td><td>NVMe‑кэш, warmup, увеличить префетч; вынести denoise в отдельный батч

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

</td><td>Версии плагинов/движков расходятся

</td><td>Единый контейнер‑образ; smoke‑тест кадра перед массовым запуском

</td></tr><tr><td>Просадки FPS в интерактиве

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

</td><td>Снизить битрейт/разрешение, уменьшить текстуры/геометрию, выбрать 48–80 ГБ

</td></tr><tr><td>Долгий «первый кадр»

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

</td><td>Прогрев кэша при старте, не чистить NVMe между задачами

</td></tr><tr><td>Очередь стоит при свободных GPU

</td><td>Лицензии исчерпаны

</td><td>Включить лицензионные метрики в планировщик; расшить seats/расписание

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

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

1. **Шаблон**: выбрать на[ https://cloudcompute.ru/solutions/templates/](https://cloudcompute.ru/solutions/templates/)
 - «GPU Render (headless) — RS/ORBX/VRSCENE» для batch.
 - «Remote GPU workstation» для интерактива (см. <https://cloudcompute.ru/solutions/rendering/studio-remote/>).
2. **Профиль GPU**: 24/48/80 ГБ по таблице sizing; для тяжёлых сцен — 80 ГБ (HQ).
3. **Режим**:
 
 - Оффлайн — **Interruptible** (чанк ≤ 120 с, ретраи).
 - Критичные/длинные кадры — **On‑Demand**.
4. **Лицензии**: подключить сервер/аккаунт; задать переменные окружения в темплейте; включить метрики seats.
5. **Хранилище**: «тёплое» для ассетов/экспортов, локальный NVMe как «горячий» кэш. См.[ https://cloudcompute.ru/solutions/storage-data/](https://cloudcompute.ru/solutions/storage-data/)
6. **CI/CD контейнеров**: зафиксировать версии плагинов/движков; smoke‑рендер. См. <https://cloudcompute.ru/solutions/containers-ci-cd/>
7. **Наблюдаемость**: включить дашборды GPU/рендера/лицензий. См.[ https://cloudcompute.ru/solutions/monitoring-logging/](https://cloudcompute.ru/solutions/monitoring-logging/)

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

- Единый контейнер с фиксированными версиями Redshift/Octane/V‑Ray и зависимостей.
- Настроен лиценз. сервер/аккаунт, проверены метрики seats и возврат при прерывании.
- Экспорт сцен в .vrscene/.orbx/.rs протестирован; smoke‑рендер на нескольких воркерах.
- NVMe‑кэш прогревается, ассеты префетчатся, IO не бутылочное горлышко.
- План тайлинга/чанков: ≤ 120 с на тайл; ретраи включены.
- p50/p95 render\_frame\_seconds и целевые FPS/латентность (для интерактива) задокументированы.
- Экономика посчитана: Cost\_per\_frame/Cost\_total с учётом c\_license.
- Политики безопасности и ретенции применены; логи без секретов.

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

- Хаб «Рендеринг»: <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/MIG:[ https://cloudcompute.ru/solutions/multi-gpu/](https://cloudcompute.ru/solutions/multi-gpu/) • <https://cloudcompute.ru/solutions/mig/>
- Мониторинг/логи:[ https://cloudcompute.ru/solutions/monitoring-logging/](https://cloudcompute.ru/solutions/monitoring-logging/)
- Throughput vs Latency: <https://cloudcompute.ru/solutions/throughput-vs-latency/>
- Interruptible‑паттерны: <https://cloudcompute.ru/solutions/interruptible-patterns/>
- Деноайзинг: <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-сервер