Summary
Add examples/libero_isaac_fleet.py — same LIBERO task as R5 / R8 / R12, but at fleet scale on Isaac Sim via IsaacLab. Fills the missing isaac | 4096 row in the backend comparison matrix and the R4 README table.
Stage 3 of #8. Companion to R8 / #15 (single-env Isaac).
Why this exists
The original LIBERO matrix scope (R8 + R12) had Isaac at single-env-RTX and Newton at both single and fleet. That implied 4096+ parallelism was a Newton-unique capability — but Isaac Sim supports 4096+ parallel envs natively via IsaacLab on PhysX GPU; the differentiator between Isaac and Newton at fleet scale is photorealism vs. solver flexibility / differentiability, not n_envs.
R23 makes the matrix honest: both heavy backends carry single-env and fleet rows, with different cost profiles per env (Isaac pays Omniverse overhead even with RTX off; Newton runs raw OpenGL / null-render).
Discussion thread: comments on #8 — both Isaac and Newton support 4096+ envs.
Scope
Sketch (design subject to R7's IsaacLab integration)
# examples/libero_isaac_fleet.py
"""LIBERO at fleet scale on Isaac Sim via IsaacLab — 4096-env RL-style throughput.
Use this when you want fleet-scale rollouts on USD scenes with optional photoreal
observations on a subset. For pure throughput without rendering, prefer Newton
(libero_newton_fleet.py) — Isaac Sim still pays some Omniverse overhead even with
RTX off.
Requires:
pip install 'strands-robots-sim[isaac]'
pip install 'strands-robots[benchmark-libero]'
"""
import time
import strands_robots_sim # noqa: F401 — registers "isaac" backend
from strands_robots.simulation import create_simulation
from strands_robots.benchmarks.libero import load_libero_suite
sim = create_simulation(
"isaac",
num_envs=4096,
headless=True,
rtx_mode="real_time", # or "off" for max throughput
)
sim.create_world()
load_libero_suite("libero_spatial")
t0 = time.time()
result = sim.evaluate_benchmark(
benchmark_name="libero-spatial-pick_up_the_red_cube",
policy_provider="mock", n_episodes=1, seed=42, # 1 ep × 4096 envs = 4096 episodes
)
elapsed = time.time() - t0
steps_per_sec = result["total_steps"] / elapsed
print(f"success_rate={result['success_rate']:.2f} "
f"wall_time={elapsed:.1f}s "
f"throughput={steps_per_sec:,.0f} steps/sec")
sim.destroy()
Definition of Done
Dependencies
- Blocked on: R7.4 (Isaac obs/action/render) — needs IsaacLab vectorized-env support. May bump scope of R7 if IsaacLab fleet integration is heavier than originally scoped.
- Parallel with: R9 / #16 (Replicator synth-data — same Isaac scaffolding)
- Unblocks: R15 / #22 (fills the 5th row of the flagship matrix)
References
Summary
Add
examples/libero_isaac_fleet.py— same LIBERO task as R5 / R8 / R12, but at fleet scale on Isaac Sim via IsaacLab. Fills the missingisaac | 4096row in the backend comparison matrix and the R4 README table.Stage 3 of #8. Companion to R8 / #15 (single-env Isaac).
Why this exists
The original LIBERO matrix scope (R8 + R12) had Isaac at single-env-RTX and Newton at both single and fleet. That implied 4096+ parallelism was a Newton-unique capability — but Isaac Sim supports 4096+ parallel envs natively via IsaacLab on PhysX GPU; the differentiator between Isaac and Newton at fleet scale is photorealism vs. solver flexibility / differentiability, not
n_envs.R23 makes the matrix honest: both heavy backends carry single-env and fleet rows, with different cost profiles per env (Isaac pays Omniverse overhead even with RTX off; Newton runs raw OpenGL / null-render).
Discussion thread: comments on #8 — both Isaac and Newton support 4096+ envs.
Scope
examples/libero_isaac_fleet.py— ~50 LOC, runslibero-spatial-pick_up_the_red_cubeviasim.evaluate_benchmark(...)oncreate_simulation("isaac", num_envs=4096, headless=True, rtx_mode="real_time")(or RTX off entirely for max throughput)examples/README.mdand R4's README LIBERO matrix table updated with theisaac | 4096row + measured numbersSketch (design subject to R7's IsaacLab integration)
Definition of Done
examples/libero_isaac_fleet.pyruns end-to-end on an RTX GPU with[isaac]+[benchmark-libero]installedlibero_newton_fleet.py(R12) — "when to pick which fleet backend"examples/README.mdupdated:isaac | 4096row present with measured numbersisaac | 1andnewton | 1(so Isaac single + fleet sit together)Dependencies
References