Решения
NVIDIA Isaac Sim на GPU: физика и сенсоры
Задача страницы. Инженерный гид по запуску и эксплуатации симуляций на базе Isaac Sim: физика (rigid/constraints), сенсоры (RGB/Depth/LiDAR/IMU/Radar), генерация синтетических датасетов и петли RL/контроля. Разберём пайплайны real‑time и батчи, таблицу sizing по профилям 24/48/80 ГБ, конфиги (Docker/K8s/YAML), метрики (сим‑FPS/physics‑dt/сенсорный трейс), экономику и траблшутинг. Паттерны: локальный NVMe‑кэш ассетов/датасетов, отдельные пулы On‑Demand (интерактив/стриминг) и Interruptible (оффлайн‑рендер/датасеты), контейнеризация и наблюдаемость.
TL;DR
- Три ключевых сценария:
- Синтетические датасеты (батч): параметризация сцен → доменная рандомизация → рендер/аннотации → выгрузка на NVMe/объектное хранилище.
- Реал‑тайм/контроль: headless рендер с низкой латентностью, стрим RGB/Depth/LiDAR/IMU, ROS2‑бридж, замкнутая петля контроллеров.
- RL/планирование: параллельные envs, ускоренная физика (substeps), офлайн/онлайн оценка.
- Синтетические датасеты (батч): параметризация сцен → доменная рандомизация → рендер/аннотации → выгрузка на NVMe/объектное хранилище.
- Физика/сенсоры: детерминируемые шаги physics_dt/substeps, согласование временных штампов с сенсорами (rate‑control), правдоподобный шум/DR.
- Тюнинг GPU: FP16 для пост‑процесса, RTX‑вкл для LiDAR/камер, ограничение ray depth/spp, NVMe‑кэш текстур и USD‑ассетов. См. https://cloudcompute.ru/solutions/performance-tuning/ и https://cloudcompute.ru/solutions/throughput-vs-latency/
- Наблюдаемость: sim_fps p50/p95, physics_dt, sensor_pub_lag_ms, gpu_util/HBM, frame_drop_rate, dataset_fps. Дашборды — см. https://cloudcompute.ru/solutions/monitoring-logging/ и https://cloudcompute.ru/solutions/llm-inference/observability/
- Экономика: Cost_per_sim_hour ≈ c_gpu / U, Frames_per_$ ≈ FPS × 3600 / (c_gpu × U), для батча: T_batch ≈ Frames / (FPS × N_gpu × U). Планирование — https://cloudcompute.ru/solutions/cost-planner/
Сценарии (когда это нужно)
- CV/роботика: генерация датасетов (детекция/сегментация/кейпоинты), сим‑сенсоры с аннотациями, доменная рандомизация (материалы, свет, позы, шум).
- Навигация/манипуляции: RL/IL/планирование траекторий, оценка контроллеров, HIL/SIL.
- Цифровые двойники: стенды для регресс‑тестов, стресс‑тесты и проверки безопасных режимов.
- ROS2/контроль в петле: сенсорный стрим → контроллер → командные топики/экшены → сим‑актуаторы.
- Сим‑рендеринг/визуализация: интерактивные обзоры сцены, удалённые рабочие станции, предпросмотр батч‑джобов.
Архитектуры/пайплайны

1) Синтетические датасеты (батч‑рендер)
Assets (USD/материалы/HD)
└─> Param/Randomization (сцены, позы, свет, шум)
└─> Physics tick (dt, substeps)
└─> Sensors (RGB/Depth/LiDAR/Segm/Flow)
└─> Annotations (bbox/mask/keypoints/poses)
└─> Writer (NVMe: COCO/Parquet + media)
└─> Catalog/Manifest → Training
Особенности: headless, контроль spp/rayDepth, батчи по сценам/ракурсам, параллельные воркеры.
2) Реал‑тайм петля (ROS2/стриминг)
Controller/Planner
↑ cmd/trajectory
Isaac Sim (headless)
├─ Physics (fixed dt, substeps)
├─ Sensors (RGB/Depth/LiDAR/IMU)
├─ ROS2 Bridge (pub/sub) or WS/SSE
└─ Telemetry (metrics/logs)
↓ topics/images/pointcloud/odom
Особенности: rate‑limit сенсоров (Hz), синхронизация timestamp, QoS и backpressure.
3) RL/мульти‑env
Env Manager ─> N parallel envs ─> Step/Reset
├─ Physics step (vectorized)
├─ Sensors (minimal set)
└─ Reward/Done
Policy (GPU) <─ rollout buffers ─> Optimizer
Особенности: минимizировать I/O, хранить state в GPU, фиксированная генерация «сидов».
Профили GPU и ориентиры (инженерные диапазоны)
При U≈0.7, headless рендер, RTX‑сенсоры, physics dt=1/60, substeps=2. Значения зависят от ассетов, освещения, разрешений и числа сенсоров.
Профиль GPU | Память | Типичные стеки | Real‑time сцены* | Батч‑рендер FPS** | Комментарии |
24 ГБ (Compact) | 24 ГБ | 1–2 RGB 1280×720 + LiDAR(64 лучей), базовая сцена | 1 | 50–120 | Интерактив/отладка, малые сцены. |
48 ГБ (Balanced) | 48 ГБ | 2–4 RGB 1920×1080 + LiDAR(128) + Depth, средняя сцена | 1–2 | 120–250 | Баланс HQ/скорости, устойчивый p95. |
80 ГБ (HQ) | 80 ГБ | 4–6 RGB 2K + LiDAR(128–256) + Radar/IMU, сложная сцена | 2–4 | 250–500+ | Крупные ассеты/DR/мульти‑env. |
* Одновременные real‑time сессии на 1 GPU.
** Батч‑кадры/сек для конвейера рендера/аннотаций.
Тюнинг и распараллеливание: https://cloudcompute.ru/solutions/multi-gpu/, https://cloudcompute.ru/solutions/performance-tuning/
Конфиги и скелеты кода
Docker Compose (headless симуляция + датасеты + ROS2‑бридж)
version: "3.9"
x-env: &env
OMNI_HEADLESS: "1"
RENDER_RES: "1920x1080"
PHYSICS_DT: "0.0166667" # 60 Гц
PHYSICS_SUBSTEPS: "2"
RTX_LIDAR: "1"
RTX_DENOISER: "1"
SPP: "2" # samples per pixel
RAY_DEPTH: "3"
ASSETS_DIR: "/assets"
OUTPUT_DIR: "/datasets"
ROS2_BRIDGE: "enabled" # enabled|disabled
services:
isaac-batch:
image: cloudcompute/isaac-sim:latest
environment:
<<: *env
MODE: "batch"
deploy:
resources:
reservations:
devices: [{ capabilities: ["gpu"] }]
volumes:
- /nvme/assets:/assets
- /nvme/datasets:/datasets
- /nvme/cache:/var/cache/isaac
command: ["python","apps/batch_dataset.py","--scenes","/assets/scenes/"]
isaac-rt:
image: cloudcompute/isaac-sim:latest
environment:
<<: *env
MODE: "realtime"
deploy:
resources:
reservations:
devices: [{ capabilities: ["gpu"] }]
ports: ["8100:8100"] # http/ws для стриминга
volumes:
- /nvme/assets:/assets
- /nvme/cache:/var/cache/isaac
command: ["python","apps/rt_server.py","--host","0.0.0.0","--port","8100"]
K8s (1 GPU/под, headless)
apiVersion: apps/v1
kind: Deployment
metadata: { name: isaac-rt }
spec:
replicas: 2
selector: { matchLabels: { app: isaac-rt } }
template:
metadata: { labels: { app: isaac-rt } }
spec:
containers:
- name: sim
image: cloudcompute/isaac-sim:latest
ports: [{ containerPort: 8100 }]
env:
- { name: OMNI_HEADLESS, value: "1" }
- { name: RENDER_RES, value: "1920x1080" }
- { name: PHYSICS_DT, value: "0.0166667" }
- { name: PHYSICS_SUBSTEPS, value: "2" }
- { name: RTX_LIDAR, value: "1" }
volumeMounts:
- { name: assets, mountPath: /assets }
- { name: cache, mountPath: /var/cache/isaac }
resources:
limits: { nvidia.com/gpu: 1, cpu: "4", memory: "24Gi" }
volumes:
- name: assets ; hostPath: { path: /nvme/assets }
- name: cache ; hostPath: { path: /nvme/cache }
Конфиг сцены (YAML): физика, камеры, лидар, датасет‑пайплайн
scene:
usd: "/assets/scenes/warehouse.usd"
physics:
dt: 0.0166667
substeps: 2
gravity: [0, 0, -9.81]
solver_iterations: 8
robots:
- usd: "/assets/robots/mobile.usd"
spawn_pose: [0, 0, 0]
controllers: ["diff_drive"]
sensors:
cameras:
- name: "front_rgb"
res: [1920, 1080]
fov_deg: 90
rate_hz: 30
outputs: ["rgb","depth","segm"]
- name: "rear_rgb"
res: [1280, 720]
fov_deg: 100
rate_hz: 30
outputs: ["rgb"]
lidars:
- name: "roof_lidar"
rings: 64
points_per_ring: 1024
rate_hz: 10
max_range_m: 120
ray_depth: 3
noise_std: 0.02
imu:
- name: "imu_1"
rate_hz: 200
randomization:
seeds: 42
materials: { albedo_jitter: 0.05, roughness_jitter: 0.1 }
lights: { intensity: [300, 2000], hue_jitter: 0.02 }
poses: { robot_xy_sigma: 0.3, yaw_sigma_deg: 5.0 }
dataset:
format: "coco"
out_dir: "/datasets/run_2025_08_29/"
shards: 64
compression: "zstd"
annotations: ["bbox","mask","depth","pose"]
Python (скелет): загрузка сцены, сенсоры, доменная рандомизация, запись датасета
from omni.isaac.core import SimulationApp
from omni.isaac.core.utils.stage import open_stage, add_reference_to_stage
from omni.isaac.sensor import Camera, LidarRtx
from utils.rand import apply_randomization
from utils.writer import DatasetWriter
cfg = load_yaml("config.yaml")
simulation_app = SimulationApp({"headless": True, "width": cfg["scene"]["sensors"]["cameras"][0]["res"][0],
"height": cfg["scene"]["sensors"]["cameras"][0]["res"][1]})
open_stage(cfg["scene"]["usd"])
for r in cfg["scene"]["robots"]:
add_reference_to_stage(r["usd"], "/World/Robot")
cam = Camera("/World/Robot/CameraFront", resolution=tuple(cfg["scene"]["sensors"]["cameras"][0]["res"]), freq=30)
lid = LidarRtx("/World/Robot/Lidar", horizontal_fov_deg=360, vertical_beams=64, rotation_rate=10)
writer = DatasetWriter(cfg["dataset"])
sim_dt = cfg["scene"]["physics"]["dt"]
for frame in range(0, 10000):
if frame % 30 == 0:
apply_randomization(cfg["randomization"])
simulation_app.update() # physics+render tick
rgb = cam.get_rgba()
depth = cam.get_depth()
segm = cam.get_semantic_segmentation()
cloud = lid.get_point_cloud()
writer.write(frame_idx=frame, rgb=rgb, depth=depth, segm=segm, point_cloud=cloud)
simulation_app.close()
Python (скелет): ROS2‑бридж (паблиш RGB/Depth/LiDAR, подписка на cmd)
import rclpy
from rclpy.node import Node
from sensor_msgs.msg import Image, PointCloud2
from geometry_msgs.msg import Twist
class Bridge(Node):
def __init__(self, sim):
super().__init__("isaac_bridge")
self.pub_img = self.create_publisher(Image, "/sim/front_rgb", 10)
self.pub_cloud = self.create_publisher(PointCloud2, "/sim/roof_lidar", 10)
self.create_subscription(Twist, "/cmd_vel", self.on_cmd, 10)
self.sim = sim
def tick(self):
self.sim.step()
img = to_ros_image(self.sim.cam_rgba())
cloud = to_ros_cloud(self.sim.lidar_cloud())
self.pub_img.publish(img)
self.pub_cloud.publish(cloud)
def on_cmd(self, msg: Twist):
self.sim.set_cmd(msg.linear.x, msg.angular.z)
def main():
sim = create_sim_from_yaml("config.yaml")
rclpy.init()
br = Bridge(sim)
rate = br.create_rate(30)
while rclpy.ok():
br.tick(); rclpy.spin_once(br, timeout_sec=0.0); rate.sleep()
Python (скелет): RL‑окружение (векторизованное)
class IsaacEnvVec:
def __init__(self, n_envs=64, dt=1/60):
self.sim = make_vectorized_sim(n_envs, dt)
def reset(self):
states = self.sim.reset_all()
return obs_from(states)
def step(self, actions):
self.sim.apply_actions(actions)
self.sim.step()
obs = obs_from(self.sim.state())
rew, done = compute_reward_done(obs)
return obs, rew, done, {}
# Обучение: policy.forward(obs) -> actions -> env.step -> rollout buffer -> optimize


Наблюдаемость/метрики/алерты
Latency/Perf:
- sim_fps — кадры симуляции в секунду (цель p95 указать в SLA: напр., ≥ 30 FPS интерактив/≥ 200 FPS батч).
- physics_dt, physics_substeps, physics_step_ms — стабильность шага.
- render_ms{pass=rtx|post} — длительность рендер‑пасс.
- sensor_pub_lag_ms{rgb|depth|lidar} — лаг публикации (ROS/WS).
- frame_drop_rate — доля потерянных кадров/пакетов.
GPU/IO:
- gpu_utilization, gpu_mem_peak_bytes, rtx_ray_count, nvme_{read,write}_mb_s, asset_cache_hit_rate.
Datasets:
- dataset_fps, annotation_time_ms, shard_size_mb, shard_count.
Алерты:
- sim_fps_p95 < target — уменьшить spp/rayDepth, разрешение, включить денойзер, снизить число сенсоров, добавить GPU.
- sensor_pub_lag_ms_p95 > SLA — уменьшить частоту/размер кадров, включить backpressure, отделить поток ROS/WS на другой под.
- gpu_mem_peak/HBM > 0.9 — упростить сцену/текстуры, уменьшить одновременно активные сенсоры, увеличить профиль HBM.
- frame_drop_rate > 0.01 — повысить буферы, QoS, снизить FPS/битрейт.
Детали по наблюдаемости и логированию:
https://cloudcompute.ru/solutions/monitoring-logging/ • https://cloudcompute.ru/solutions/llm-inference/observability/
Экономика и формулы
Обозначения: c_gpu — цена/час, U — целевая загрузка, FPS — кадры/сек, N_gpu — число GPU.
- Стоимость часа симуляции:
Cost_per_sim_hour ≈ c_gpu / U. - Батч‑рендер (время партии):
T_batch ≈ Frames / (FPS × N_gpu × U). - Кадров на 1 $ (оценка):
Frames_per_$ ≈ FPS × 3600 / (c_gpu × U). - Параллельные envs (RL):
Env_per_GPU ≈ floor( HBM / (state_mem + sensor_mem × N_sensors) ).
Оптимизация бюджета: снижайте разрешение/частоту/spp, используйте профили 24/48/80 ГБ по сложности сцены и числу сенсоров. См. https://cloudcompute.ru/solutions/cost-planner/ и https://cloudcompute.ru/solutions/throughput-vs-latency/
Безопасность и политики
- Ассеты/лицензии: храните права на модели/текстуры/сцены; отделяйте частные ассеты по бакетам/ролям.
- Экспорт/PII: синтетика без PII; при записи телеметрии — маскирование идентификаторов/координат по политике.
- Ретеншн: TTL для временных шардов/логов/кадров; контроль доступа к датасетам.
- Изоляция: раздельные пулы GPU для интерактива (On‑Demand) и тяжёлых батчей (Interruptible).
- Секреты: только Secret‑хранилища и переменные окружения; ротация ключей.
Подробнее: https://cloudcompute.ru/solutions/security/ • https://cloudcompute.ru/solutions/storage-data/
Траблшутинг
Симптом | Возможная причина | Решение |
Просадки FPS/«рывки» | Слишком высокий spp/rayDepth/разрешение | Снизить spp/rayDepth, уменьшить разрешение, включить денойзер/temporal AA |
«Взрыв» физики/разлёт объектов | Низкие solver_iterations/«тонкие» коллайдеры | Увеличить итерации/толщину коллайдеров, уменьшить dt/добавить substeps |
Разнобой тайм‑штампов сенсоров | Нет общего physics_dt/rate‑limit | Синхронизировать частоты, фиксировать dt, буферизовать публикацию |
«Полосы»/дыры в LiDAR | Нулевой или чрезмерный rayDepth/noise | Настроить rayDepth/шум, проверить нормали/материалы |
OOM VRAM | Крупные текстуры/много сенсоров | Сжать текстуры, отключить неиспользуемые пассы, увеличить HBM‑профиль |
Потери кадров в ROS/WS | QoS/буферов не хватает | Увеличить очереди, понизить частоту публикации, отделить стрим‑под |
Непредсказуемая физика при DR | Слишком агрессивная рандомизация | Ограничить диапазоны DR, фиксировать seed, поэтапно включать шумы |
Время сборки датасета «скачет» | Узкое NVMe/мелкие шард‑файлы | Увеличить shards и целевой размер файла, оптимизировать компрессию |
См. также: https://cloudcompute.ru/solutions/interruptible-patterns/ • https://cloudcompute.ru/solutions/performance-tuning/
Как запустить в cloudcompute.ru
- Откройте Шаблоны запусков: https://cloudcompute.ru/solutions/templates/ — выберите Isaac Sim (Realtime) и/или Isaac Sim (Batch Dataset).
- Выберите профиль GPU: 24/48/80 ГБ — по сложности сцены/сенсоров и SLA.
- Смонтируйте диски: /nvme/assets, /nvme/datasets, /nvme/cache.
- Установите переменные окружения по docker-compose.yml (физика, рендер, сенсоры, ROS2‑бридж).
- Продакшн: раздельные пулы On‑Demand/Interruptible, автоскейл по U/FPS/queue, дашборды и алерты, канареечные изменения сцен/скриптов.
Дополнительно по стеку:
https://cloudcompute.ru/solutions/containers-ci-cd/ — сборка и выкладка образов.
https://cloudcompute.ru/solutions/multi-gpu/ — распараллеливание и кластеры.
https://cloudcompute.ru/solutions/gradio-fastapi/ — быстрые UI/панели управления.
https://cloudcompute.ru/solutions/monitoring-logging/ — метрики и логи.
https://cloudcompute.ru/solutions/storage-data/ — хранение ассетов/датасетов.
Чек‑лист перед продом
- Целевые sim_fps p50/p95, sensor_pub_lag_ms, стабильный physics_dt/substeps.
- Калиброваны spp/rayDepth/resolution под SLA и бюджет.
- DR/шумы валидированы, сиды зафиксированы; регресс‑набор сцен пройден.
- NVMe‑кэш ассетов/датасетов подключён; шардирование/компрессия настроены.
- Алерты по FPS/lag/HBM/IO/frames_drop; дашборды собраны.
- Политики прав/PII/ретеншна/экспорта внедрены.
- Разделены пулы On‑Demand/Interruptible; канареечные релизы сцен/скриптов и план отката готовы.
- Нагрузочный прогон ≥ 30 мин на целевой сцене/профиле GPU.
Навигация
- Хаб «Решения»: https://cloudcompute.ru/solutions/
- Производительность и тюнинг: https://cloudcompute.ru/solutions/performance-tuning/
- Throughput vs Latency: https://cloudcompute.ru/solutions/throughput-vs-latency/
- Multi‑GPU: https://cloudcompute.ru/solutions/multi-gpu/
- Хранилища и данные: https://cloudcompute.ru/solutions/storage-data/
- Мониторинг и логи: https://cloudcompute.ru/solutions/monitoring-logging/
- Наблюдаемость пайплайнов: https://cloudcompute.ru/solutions/llm-inference/observability/
- Рекомендательные системы и аналитика (смежные ETL/ML):
https://cloudcompute.ru/solutions/rapids/ • https://cloudcompute.ru/solutions/spark-rapids/ - CI/CD контейнеров: https://cloudcompute.ru/solutions/containers-ci-cd/