Цифровые двойники на GPU: визуализация и аналитика
Задача страницы. Спроектировать и запустить цифровые двойники (Digital Twins) на GPU в https://cloudcompute.ru: визуализация 3D‑сцен в реальном времени, потоковая телеметрия, аналитика событий/временных рядов, двунаправленный обмен данными с физическими объектами и симами, детерминированные реплеи.
TL;DR
- GPU — для визуализации и инференса, CPU — для I/O, ETL и бизнес‑логики; балансируйте CPU↔GPU по p95‑латентности.
- Два режима: On‑Demand (дашборды, HMI, HIL/операторские станции) и Interruptible (бекфиллы, офлайн‑аналитика, массовые реплеи чанками ≤ 120 сек). См. паттерны на https://cloudcompute.ru/solutions/interruptible-patterns/.
- Стриминг в UI и внешние системы — SSE/WebSocket (пример ниже), события — дельты, снапшоты по запросу. Подробности по стримингу UI: https://cloudcompute.ru/solutions/gradio-fastapi/.
- Хранилища: горячие состояния/кэши — NVMe; исторические ряды и бэги — «тёплое/холодное». См. https://cloudcompute.ru/solutions/storage-data/.
- Наблюдаемость: p50/p95 twin_update_latency_ms, staleness_ms, GPU util/HBM, drop rate, TPS событий, backlog. См. https://cloudcompute.ru/solutions/monitoring-logging/.
- Экономика: считайте Cost_per_asset_hour, Cost_per_1M_events, Cost_per_camera через c_gpu, целевую загрузку U, частоты обновлений. Планируйте на https://cloudcompute.ru/solutions/cost-planner/.
- Масштабирование: много сцен на одной GPU, шардирование по активам/локациям, мульти‑нод/мульти‑GPU. См. https://cloudcompute.ru/solutions/multi-gpu/.
- Безопасность: секреты/ключи, приватные карты/модели, PII‑маскирование, ретеншн, аудит. См. https://cloudcompute.ru/solutions/security/.
Сценарии
- Операционный дашборд: 3D‑карта объекта (цех/склад/город), поток сенсоров, состояния устройств, тревоги, команды управления.
- Аналитика и прогнозирование: онлайн‑агрегации + офлайн‑MLE/инференс (анонмалии, ETA, потребление), «what‑if» сценарии на симуляциях.
- Сверка со «снимаемым» миром: сравнение телеметрии объекта с эталонной траекторией или сим‑эталоном.
- Реплеи инцидентов: детерминированный воспроизведение бэгов/событий по временнóй шкале для RCA.
- HIL/SIL‑контуры: подключение контроллеров к цифровому двойнику и/или к симу (см. https://cloudcompute.ru/solutions/ros2-sim/).
- Планирование/оптимизация: расчёт расписаний, логистики, маршрутов с визуальной верификацией в 3D.
Архитектуры и пайплайны A) Онлайн‑двойник (On‑Demand)
Полевые устройства/шлюзы ──> Ингест (gRPC/HTTP/MQTT/ROS2)
│
├─ Stream Processor (агрегации, фильтры, правила)
│ │
│ ├─ Online Features ──> Инференс (GPU) ──> Метки/скоринг
│ │ (см. /solutions/triton-inference-server/)
│ └─ State Store (горячее, NVMe)
│
└─ Event Log (тёплое/холодное)
│
UI (Web/RViz) ⇄ FastAPI SSE/WebSocket ⇄ View Model ⇄ 3D Renderer (GPU)
B) Офлайн‑аналитика и реплеи (Interruptible, чанки ≤ 120 сек)
Event Log/rosbag2 ──> Batch Executor (Docker, n шардов)
├─ ETL (схемы, нормализация, фичи)
├─ «What-if» Сим (headless, GPU)
├─ Инференс/обогащение (GPU)
└─ Экспорт отчётов/витрин
↑ Ретраи/резюме, локальный NVMe-кэш, идемпотентность
C) Мульти‑сцены/мульти‑GPU
Координатор ──> Node1: GPU0 [Scene×K] GPU1 [Scene×K]
──> Node2: GPU0 [Scene×K] GPU1 [Scene×K]
Мониторинг: p50/p95 обновлений, staleness, GPU util/HBM, I/O backlog
См. также: https://cloudcompute.ru/solutions/performance-tuning/, https://cloudcompute.ru/solutions/throughput-vs-latency/, https://cloudcompute.ru/solutions/multi-gpu/.
Профили GPU / VRAM / производительность
| **Профиль** | **Видеопамять** | **Типовая сцена** | **Визуализация** | **Инференс (пример)** | **Параллельные сцены/GPU** | **Режим** |
| **24 ГБ (Compact)** | 24 ГБ | склад/цех, ≤ 50k примитивов, 1–2 камеры 1080p | 60 FPS UI или 1×стрим NVENC | 1–2 модели (детекция/анонмалии) в реальном времени | 1–2 | On‑Demand/Interruptible |
| **48 ГБ (Balanced)** | 48 ГБ | кампус/квартал, ≤ 200k примитивов, 3–4 камеры | 60 FPS + 2×NVENC | 2–4 модели (детекция+треккинг+OCR) | 2–3 | On‑Demand/Interruptible |
| **80 ГБ (HQ)** | 80 ГБ | городской участок, PBR‑материалы, 4K панели | 30–45 FPS 4K + 3–4×NVENC | 4–6 моделей + эмбеддинги/вектора | 3–4 | On‑Demand/Interruptible |
Примечания: держите запас VRAM ≥ 20%; шардируйте модели/сцены между процессами; NVENC‑сессии распределяйте по процессам.
Конфиги и скелеты
1) Манифест цифрового двойника (YAML)
twin:
id: "plant-42"
version: "2025-08-01"
topology:
nodes:
- id: "line_A"
type: "assembly_line"
components:
- id: "robot_arm_1"
type: "actuator"
geometry: "models/arm.glb"
telemetry:
- topic: "robot_arm_1/joint_states"
- topic: "robot_arm_1/temp_c"
- id: "camera_1"
type: "sensor_camera"
telemetry:
- topic: "camera_1/image_raw"
coords:
frame: "world"
origin: [44.0, 12.0, 0.0]
rules:
- name: "overheat"
if: "robot_arm_1.temp_c > 75"
then: ["alarm:HIGH", "rate-limit:camera_1=30fps"]
ui:
panels:
- id: "overview"
layers: ["geometry", "paths", "alerts"]
- id: "quality"
layers: ["camera_1", "detections"]
2) Docker Compose: визуализация + инференс + стриминг
version: "3.9"
services:
renderer:
image: ghcr.io/your-org/twin-renderer:cuda12
runtime: nvidia
gpus: all
environment:
- TWIN_CONFIG=/cfg/twin.yaml
- RENDER_RES=1920x1080
- RENDER_FPS=60
volumes:
- ./cfg:/cfg:ro
- /data/nvme/cache:/cache
command: >
bash -lc "python -m renderer.main --config $TWIN_CONFIG --headless=false"
ports: ["8080:8080"] # web viewer
networks: [twinnet]
inference:
image: ghcr.io/your-org/triton:23.10
runtime: nvidia
gpus: all
volumes:
- /models:/models:ro
command: tritonserver --model-repository=/models
networks: [twinnet]
bridge:
image: ghcr.io/your-org/fastapi-sse:py310
environment:
- TWIN_CONFIG=/cfg/twin.yaml
volumes:
- ./cfg:/cfg:ro
command: uvicorn app.main:app --host 0.0.0.0 --port 8000
ports: ["8000:8000"]
networks: [twinnet]
networks:
twinnet: {}
3) FastAPI SSE: события двойника (дельты)
# app/main.py
import time, json, asyncio
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
app = FastAPI()
# Пример источника событий (подменить на ваш bus/ingest)
async def event_source():
while True:
# delta: изменившиеся атрибуты
evt = {
"t": int(time.time()*1000),
"asset": "robot_arm_1",
"delta": {"temp_c": 72.3, "joint_2": 0.41},
"seq": int(time.time())
}
yield f"data: {json.dumps(evt)}nn"
await asyncio.sleep(0.5)
@app.get("/events")
async def events():
return StreamingResponse(event_source(), media_type="text/event-stream")
4) Схема ETL событий (YAML)
etl:
schema:
robot_arm_1.temp_c: {type: "float", unit: "C"}
robot_arm_1.joint_states: {type: "array<float>", len: 6}
transforms:
- name: "clip_temp"
expr: "min(max(robot_arm_1.temp_c, -40), 120)"
- name: "moving_avg_temp"
window: "30s"
agg: "mean"
outputs:
- sink: "hot_state"
ttl: "24h"
- sink: "event_log"
partition_by: ["asset", "date"]
``` ## **Наблюдаемость, метрики, алерты**
См. <https://cloudcompute.ru/solutions/monitoring-logging/> и <https://cloudcompute.ru/solutions/llm-inference/observability/>.
**Ключевые метрики**
- **Поток/данные:** ingest\_tps, event\_backlog, deserialize\_ms (p95), schema\_errors\_pct.
- **Состояния:** twin\_update\_latency\_ms (p50/p95), staleness\_ms, conflict\_resolutions\_tpm.
- **Визуализация:** render\_fps (p50/p95), frame\_drop\_pct, nvenc\_latency\_ms (p95).
- **Инференс:** infer\_tps, infer\_latency\_ms (p50/p95), queue\_wait\_ms.
- **GPU:** gpu\_util\_pct, gpu\_mem\_used\_gb, pcie\_tx\_mb\_s, enc\_sessions.
- **Хранилища:** hot\_state\_hit\_ratio, i/o\_backlog\_sec, nvme\_write\_mb\_s.
**Алерты (примеры)**
- staleness\_ms > 2000 в течение 3 мин → деградация реального времени.
- gpu\_mem\_used\_gb / vram > 0.9 → снизить качество/разрешение; выгрузить модели.
- event\_backlog > 10\_000 и ingest\_tps растёт → масштабировать ETL/парсеры.
- infer\_latency\_ms(p95) > SLO → тюнинг батчинга/FP16/INT8, см. <https://cloudcompute.ru/solutions/fp8-bf16/> и <https://cloudcompute.ru/solutions/performance-tuning/>.
## **Экономика и формулы**
Обозначения: c\_gpu — цена GPU/час; U — целевая загрузка GPU; t\_h — часы работы; E\_tps — событий/сек; N\_cam — камер; F\_cam — FPS/камера; N\_scene — параллельных сцен.
**Стоимость визуализации на панель:**
Effective\_GPU\_cost = c\_gpu \* t\_h / U
Cost\_per\_camera\_hour ≈ (Effective\_GPU\_cost \* α\_render) / N\_cam
**Событийный поток:**
Events\_total = E\_tps \* 3600 \* t\_h \* N\_scene
Cost\_per\_1M\_events = Effective\_GPU\_cost / (Events\_total / 1\_000\_000)
**Инференс:**
Infer\_total = infer\_tps \* 3600 \* t\_h
Cost\_per\_infer = Effective\_GPU\_cost / Infer\_total
**Суммарная стоимость актива в онлайне:**
Cost\_per\_asset\_hour ≈ (Effective\_GPU\_cost \* (α\_render + α\_infer + α\_encode)) / N\_assets\_active
Где α\_\* — доля GPU на рендер/инференс/кодирование в текущем профиле. Для планирования используйте <https://cloudcompute.ru/solutions/cost-planner/>. Также ориентируйтесь на компромиссы из <https://cloudcompute.ru/solutions/throughput-vs-latency/>.
**Безопасность и политики**
- **Секреты/ключи** — только в секрет‑хранилищах/переменных окружения контейнеров; запрет логирования секретов. См. <https://cloudcompute.ru/solutions/security/>.
- **PII/коммерческая тайна** — маскирование на ингесте; разделение доменов данных (производственные vs тестовые).
- **Ретеншн**: горячие состояния ≤ 24–72 ч; сырые логи/бэги — перекладка в «холодное» через политики; контроль стоимости хранения. См. <https://cloudcompute.ru/solutions/storage-data/>.
- **Аудит**: все действия оператора/сервиса журналируются (кто/что/когда); защита от разрушительных команд с подтверждениями.
- **Сетевые периметры**: сегментация по проектам/командам; минимальные роли; правила исходящих подключений.
- **Прерываемость**: задачи офлайн‑аналитики идемпотентны, чекпоинты ≤ 120 сек. См. <https://cloudcompute.ru/solutions/interruptible-patterns/>.
**Траблшутинг**
<table><tbody><tr><td>**Симптом**
</td><td>**Причина**
</td><td>**Решение**
</td></tr><tr><td>Дашборд «стареет» (staleness растёт)
</td><td>Узкое место на ingest/ETL
</td><td>Масштабируйте парсеры; включите backpressure; проверьте event\_backlog.
</td></tr><tr><td>Пропуски кадров в UI
</td><td>NVENC/рендер перегружен
</td><td>Снизьте FPS/битрейт; распределите сессии; добавьте GPU или разделите процессы.
</td></tr><tr><td>Высокий p95 инференса
</td><td>Плохой батчинг/прецизионность
</td><td>Включите FP16/INT8, autotune, уменьшите последовательность; см. /solutions/fp8-bf16/.
</td></tr><tr><td>VRAM пики → OOM
</td><td>Слишком тяжёлая сцена/модель
</td><td>Уменьшите LOD/текстуры; выгрузите неиспользуемые модели; держите запас ≥ 20%.
</td></tr><tr><td>Конфликты состояния
</td><td>Несогласованность дельт
</td><td>Перейдите на CRDT/версионирование; вводите idempotency‑ключи и seq.
</td></tr><tr><td>Непредсказуемые задержки
</td><td>GC/компрессия/I/O
</td><td>Растяните ротацию логов; настроьте NVMe; выделите процессы под I/O.
</td></tr><tr><td>«Плавающий» FPS
</td><td>CPU‑bottleneck
</td><td>Увеличьте vCPU; вынесите ETL на отдельные сервисы; тюньте физику в симе.
</td></tr><tr><td>Бэги «съедают» диск
</td><td>Нет ротации/архивации
</td><td>max-bag-size/time-based ротация; выгрузка в «холодное» с манифестами.
</td></tr><tr><td>Перегрузка WebSocket/SSE
</td><td>Много клиентов/тем
</td><td>Топики «горячие» — через fan‑out кэши; лимит обновлений; heartbeats.
</td></tr></tbody></table>
**Как запустить в cloudcompute.ru**
1. **Шаблон**: выберите Docker/SSH/Jupyter из <https://cloudcompute.ru/solutions/templates/>.
2. **Профиль GPU**:
- 24 ГБ — компактные сцены, 1–2 камеры, базовый инференс;
- 48 ГБ — кампус/квартал, 3–4 камеры, несколько моделей;
- 80 ГБ — 4K панели, насыщенная геометрия, мультимодельный инференс.
3. **Режим**: On‑Demand для дашбордов/операторских; Interruptible для офлайн‑аналитики/реплеев (чанки ≤ 120 сек).
4. **Сторадж**: примонтируйте NVMe‑том /data/nvme под кэши/состояния; настройте выгрузку в «тёплое/холодное» (см. <https://cloudcompute.ru/solutions/storage-data/>).
5. **Наблюдаемость**: подключите метрики/логи по гайду <https://cloudcompute.ru/solutions/monitoring-logging/> (p50/p95, staleness, GPU util).
6. **Инференс**: разверните сервер моделей по <https://cloudcompute.ru/solutions/triton-inference-server/>.
7. **CI/CD**: сборка/промо контейнеров — <https://cloudcompute.ru/solutions/containers-ci-cd/>.
8. **Тюнинг**: баланс throughput↔latency — <https://cloudcompute.ru/solutions/throughput-vs-latency/> и <https://cloudcompute.ru/solutions/performance-tuning/>.
9. **Секьюрити**: секреты/ретеншн/RBAC — <https://cloudcompute.ru/solutions/security/>.
**Чек‑лист перед продом**
- Целевая **U** (GPU util) 60–85%, запас VRAM ≥ 20%.
- p95 twin\_update\_latency\_ms и staleness\_ms в SLO; drop кадра ≤ 1%.
- Ротация логов/бэгов настроена; NVMe не переполняется.
- Политики ретеншна/PII применены; аудит включён.
- Реплеи детерминированы (фиксированные seed/версии моделей/геометрий).
- Инференс стабилен по p95; включён FP16/INT8 там, где можно.
- SSE/WebSocket с heartbeat и ограничением частоты обновлений.
- Идемпотентность событий; версии/seq; конфликт‑резолверы.
- Энд‑ту‑энд мониторинг: ingest→ETL→state→UI/инференс.
- Экономика подтверждена через <https://cloudcompute.ru/solutions/cost-planner/>.
**Навигация**
- Хаб «Решения»: <https://cloudcompute.ru/solutions/>
- Шаблоны запусков: <https://cloudcompute.ru/solutions/templates/>
- Планирование стоимости: <https://cloudcompute.ru/solutions/cost-planner/>
- Тюнинг производительности: <https://cloudcompute.ru/solutions/performance-tuning/>
- Throughput vs Latency: <https://cloudcompute.ru/solutions/throughput-vs-latency/>
- Multi‑GPU/Multi‑node: <https://cloudcompute.ru/solutions/multi-gpu/>
- Хранилища и данные: <https://cloudcompute.ru/solutions/storage-data/>
- Наблюдаемость и логи: <https://cloudcompute.ru/solutions/monitoring-logging/>
- Observability для сервисов: <https://cloudcompute.ru/solutions/llm-inference/observability/>
- FP8/BF16 (mixed precision): <https://cloudcompute.ru/solutions/fp8-bf16/>
- Interruptible‑паттерны: <https://cloudcompute.ru/solutions/interruptible-patterns/>
- Triton Inference Server: <https://cloudcompute.ru/solutions/triton-inference-server/>
- Gradio/FastAPI (стриминг UI): <https://cloudcompute.ru/solutions/gradio-fastapi/>
- Контейнеры и CI/CD: <https://cloudcompute.ru/solutions/containers-ci-cd/>
- ROS2/Gazebo (симуляции и реплеи): <https://cloudcompute.ru/solutions/ros2-sim/>
Готовы запустить?
Запустить GPU-сервер