RoboScope Kit: Unified Interfaces for Fast and Scalable Embodied-AI Evaluation
Organizations: School of AI, Shanghai Jiao Tong University · Central South University · Tongji University · ShanghaiTech University ·
Abstract
Simulation benchmarks are the standard way to compare robot policies, but each benchmark brings its own evaluator, observation layout, and action convention, and evaluation is slow: 500 RoboTwin Easy episodes with one simulator and one model on one GPU take 359.7 minutes. Profiling the official StarVLA evaluator shows that simulation occupies CPU cores while the GPU averages 14.3% utilization. RoboScope Kit wraps each model once in a Python class called a Policy, and each benchmark once in an adapter around the benchmark's own evaluator, so the benchmark's rules and scoring stay unchanged. Scheduling runs simulator workers and Policy replicas as separate pools, sizes both from measured probes, and shards work deterministically across GPU instances; runtime optimization renders only the observations an action-chunk Policy reads. Adapters cover six benchmark families. On LIBERO-Long with a StarVLA checkpoint on one 48 GiB RTX 4090, the concurrency search selects twelve simulator workers sharing three Policy replicas, which evaluate 500 episodes 4.45 faster than the official StarVLA evaluation with equivalent success rates, 2.78 faster than RLinf, and 1.52 faster than vla-eval at its tuned configuration. With CUDA MPS, which lets the replicas run their kernels concurrently, the search selects sixteen workers sharing four replicas, 6.16 faster than StarVLA, 3.85 faster than RLinf, and 2.10 faster than vla-eval. On RoboTwin Easy, four GPUs with chunk-boundary observation complete the 500 episodes in 14.4 minutes, 25.04 faster than the single-GPU baseline, with identical success outcomes and terminal steps.
Figures & tables
| Name | Definition | Setting |
|---|---|---|
| fails | A worker is missing or fails, an out-of-memory error occurs, episodes do not finish within , or success on the episodes shared with the first probe falls below times the first probe’s | min, min, |
| , where is the CPU cost per worker fitted from the probes with the fewest and most workers at ; before two such probes, ; at most 64 | – | |
| ReplicaCap | , with measured by the first probe | GiB reserved per GPU |
| The busiest GPU’s peak memory, extrapolated from the incumbent with the replica footprint and the fitted memory per worker, stays below | – | |
| , , and when is measured | , | |
Appendix figures & tables20 assets
Supplementary material from the paper’s appendix.
Appendix
| Method | Lifecycle transition | Policy behavior |
|---|---|---|
| load(context) | Created Loaded | Load one checkpoint replica and declare capabilities |
| reset(context) | Loaded Episode active | Allocate state keyed by episode_id |
| act(observation) | Episode active Episode active | Produce one action or action chunk from canonical features |
| act_batch | Episode active Episode active | Serve an observation batch with native batching when available |
| end_episode(id) | Episode active Loaded | Release state for one episode |
| unload() | Loaded Released | Release model and process-wide resources |
| Benchmark | Protocol | Required canonical features | Action contract |
|---|---|---|---|
| LIBERO | libero-v1 | images.primary uint8; images.wrist ; 16-D float32 proprioception; instruction | 7-D float32 end-effector delta plus gripper |
| LIBERO-Plus | libero-plus-v1 | Same named contract as LIBERO | 7-D float32 end-effector delta plus gripper |
| RoboTwin | robotwin2-v1 | Head, left-wrist, and right-wrist RGB; dual-arm joint state; instruction | 14-D float32 absolute dual-arm joint and gripper target |
| RoboCasa | robocasa-v1 | Primary RGB; optional wrist RGB; GR-1 state; instruction | 29-D float32 arms, hands, and waist target |
| CALVIN | calvin-v1 | Static RGB; gripper RGB; proprioception; instruction | 7-D float32 relative end-effector and gripper action |
| MetaWorld | metaworld-v1 | images.primary ; 4-D end-effector position and gripper aperture; instruction | 4-D float32 end-effector delta and gripper command |
| System | Search space | Selected | Runs |
|---|---|---|---|
| vla-eval | Shards , servers , maximum batch , wait ms; 100-episode probes, then 500-episode runs (Table 5 ) | 24 shards, 1 server, batch 24, wait 5 ms | 23 |
| RLinf | Start: 10 environments, 1 pipeline stage; environments ; then 2 and 4 pipeline stages at 20 environments; 30-episode probes | 20 environments, 1 pipeline stage, 1 rollout worker (30/30) | 8 |
| Stage | Shards | Servers | Batch | Wait (ms) | Episodes | Successes | Evaluation (s) | Steady steps/s | Busy cores |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 10 | 2 | 10 | 5 | 500 | 451 | 1,215.9 | – | – |
| 1 | 10 | 1 | 10 | 5 | 100 | 90 | 317.1 | 107.9 | 9.4 |
| 1 | 10 | 2 | 5 | 5 | 100 | 91 | 278.5 | 110.4 | 9.8 |
| 1 | 8 | 1 | 8 | 5 | 100 | 88 | 355.2 | 86.0 | 7.7 |
| 1 | 8 | 2 | 4 | 5 | 100 | 87 | 356.6 | 88.2 | 8.0 |
| 1 | 12 | 1 | 12 | 5 | 100 | 88 | 318.9 | 123.6 | 10.7 |
| Evaluation time (s) | 374.1 | 130.2 | 82.7 |
| Robot control and forward kinematics | 37.1 | 28.6 | 16.0 |
| Physics integration | 10.4 | 7.9 | 4.4 |
| Observable updates and step bookkeeping | 2.9 | 2.3 | 1.3 |
| Rendering | 2.9 | 3.1 | 3.3 |
| Episode reset | 11.9 | 9.7 | 5.7 |
| Stage | Wall (ms) | Kernel time (ms) | GPU busy (%) | Kernels |
|---|---|---|---|---|
| Image processing and tokenization | 4.7 | 0.0 | 0 | 0 |
| Vision encoder | 23.9 | 9.7 | 41 | 1,486 |
| Language model | 24.6 | 14.7 | 60 | 1,641 |
| Action head | 0.6 | 0.4 | – | 30 |
| Whole inference | 57.7 | 26.1 | 45 | 3,220 |
| System | Success (%) | success vs. StarVLA, pp [95% CI] | Agreement with StarVLA (%) | Evaluation time (s) | Throughput (steps/s) | Speedup vs. StarVLA |
|---|---|---|---|---|---|---|
| StarVLA | 90.2 | reference | 2,990 | 45.8 | 1.00 | |
| vla-eval | 89.8 | 91.7 | 1,016 | 133.5 | 2.93 | |
| RLinf | 90.3 | 88.1 | 1,882 | 74.2 | 1.60 | |
| RoboScope Kit (Search) | 89.9 | 97.9 | 671 | 204.6 | 4.45 | |
| RoboScope Kit (Search+MPS) | 89.9 | 96.5 | 485 | 282.5 | 6.16 | |
| Launch | MPS | Successes | Search (s) | Eval. (s) | E2e (s) | Steps/s | CPU cores | GPU util. mean (%) | Peak GPU mem. (GiB) |
|---|---|---|---|---|---|---|---|---|---|
| Search 1, second host | Off | 448 | 506.0 | 679.0 | 1,192.6 | 202.5 | 7.8 | 97.0 | 33.6 |
| Search 2, second host | Off | 447 | 504.1 | 675.2 | 1,187.0 | 204.6 | 7.8 | 97.2 | 33.6 |
| Search 3, second host | Off | 448 | 506.9 | 679.7 | 1,193.9 | 202.5 | 7.8 | 96.8 | 33.5 |
| Fixed 1, first host | Off | 449 | – | 671.2 | 737.6 | 204.9 | 7.7 | 96.8 | 33.8 |
| Fixed 2, first host | Off | 448 | – | 673.5 | 739.1 | 204.6 | 7.8 | 96.6 | 33.7 |
| Fixed 3, first host | Off | 451 | – | 669.3 | 731.0 | 204.6 | 7.8 | 96.6 | 33.7 |
| Order | System | Launch | Successes | Evaluation (s) | End-to-end (s) | Steps/s |
|---|---|---|---|---|---|---|
| 1 | StarVLA | 1 | 451 | 2,989.9 | 3,116.5 | 45.8 |
| 2 | RLinf | 1 | 453 | 1,881.7 | 1,934.8 | 74.2 |
| 3 | RLinf | 2 | 452 | 1,907.5 | 1,955.3 | 72.0 |
| 4 | StarVLA | 2 | 451 | 2,968.0 | 2,983.5 | 46.1 |
| 5 | RLinf | 3 | 450 | 1,806.7 | 1,857.8 | 77.3 |
| 6 | StarVLA | 3 | 451 | 2,997.9 | 3,012.5 | 45.6 |
| Order | System | Successes | Evaluation (s) | End-to-end (s) | Steps/s |
|---|---|---|---|---|---|
| 1 | RoboScope Kit | 450 | 762.2 | 805.5 | 179.1 |
| 2 | RoboScope Kit | 451 | 744.4 | 785.5 | 183.4 |
| 3 | RoboScope Kit | 445 | 756.4 | 804.4 | 181.3 |
| 4 | RoboScope Kit | 448 | 754.6 | 841.5 | 181.8 |
| 5 | RoboScope Kit | 449 | 745.8 | 789.2 | 183.2 |
| 6 | vla-eval | 446 | 1,007.0 | 1,023.6 | 135.1 |
| Workload | Success/run | Eval. time (s) | Steps/s | ||
|---|---|---|---|---|---|
| LIBERO-Long | 1/1 | 2 | 439/500 | ||
| RoboTwin Easy | 1/1 | 3 | 231/500 | ||
| RoboTwin Easy | 4/4 | 2 | 235/500 |
| Workload | Search (s) | Eval. (s) | E2e (s) | Successes | Peak GPU mem. (GiB) | |
|---|---|---|---|---|---|---|
| LIBERO-Long | 12/3 | 506 | 679 | 1,193 | 448/500 | 33.6 |
| 12/3 | 504 | 675 | 1,187 | 447/500 | 33.6 | |
| 12/3 | 507 | 680 | 1,194 | 448/500 | 33.5 | |
| LIBERO-Long, | 16/4 | 504 | 485 | 997 | 452/500 | 44.7 |
| CUDA MPS, | 16/4 | 505 | 487 | 1,000 | 447/500 | 44.5 |
| 12 pinned cores | 16/4 | 502 | 483 | 994 | 449/500 | 44.4 |
| Successes | Eval. (s) | E2e (s) | Steps/s | CPU cores | GPU util. mean (%) | Peak GPU mem. (GiB) | |
|---|---|---|---|---|---|---|---|
| 1/1 | 451 | 3,655.4 | 3,676.2 | 37.4 | 1.2 | 15.0 | 9.6 |
| 2/1 | 453 | 1,908.3 | 1,932.5 | 71.6 | 2.2 | 29.5 | 10.5 |
| 4/1 | 450 | 1,177.9 | 1,204.5 | 115.9 | 3.4 | 48.5 | 11.5 |
| 8/1 | 451 | 1,166.5 | 1,190.5 | 117.2 | 3.5 | 49.5 | 13.5 |
| 12/1 | 448 | 1,171.4 | 1,192.2 | 117.6 | 3.6 | 49.8 | 16.1 |
| 16/1 | 451 | 1,186.3 | 1,208.9 | 115.5 | 3.5 | 49.0 | 18.0 |
| Variant | Added Simulation Runtime behavior | Observations | Setup (s) | Wall (s) | Steps/s |
|---|---|---|---|---|---|
| 00 official-like | Official-like path | 2,100 | 46.9 | 237 | 8.88 |
| 01 shared context | Reuse Engine and Renderer | 2,100 | 45.2 | 226 | 9.31 |
| 02 planner warmup | Skip cuRobo initialization | 2,100 | 1.4 | 180 | 11.63 |
| 03 chunk boundary | Observe at 16-step chunk boundaries | 132 | 1.4 | 71.9 | 29.23 |
| 04 passive force | Hoist duplicate passive force | 132 | 1.7 | 64.8 | 32.38 |
| Change | Configuration | Runs | Eval. time (s) | Factor |
|---|---|---|---|---|
| Baseline | , one GPU, stride 1 | 3 | 21,582 | – |
| Four GPUs | , four GPUs, 80 cores | 3 | 5,934 | 3.64 |
| Workers | , same hardware | 1 | 3,951 | 1.50 |
| Stride and run setup | , stride 16 | 1 | 862 | 4.58 |
| Total | 25.04 |
| Measurement | Value |
|---|---|
| Evaluation time | 862 s |
| Evaluation phase (metrics recorder) | 855 s |
| Policy loading | 65.8 s |
| Runtime preparation | 0.2 s |
| End-to-end time | 928 s |
| Successes/episodes | 231/500 |
| Configuration | Successes | Evaluation time (s) | Steps/s | GPU util. (%) | Speedup vs. | Efficiency per worker | Success agreement (%) | Terminal agreement (%) |
|---|---|---|---|---|---|---|---|---|
| Search | 447.7 | 679.0 | 202.5 | 97.0 | 5.25 | 0.44 | 97.1 | 78.5 |
| 451 | 3,559.6 | 38.4 | 15.4 | 1.00 | 1.00 | 100.0 | 100.0 | |
| 452 | 1,883.8 | 72.5 | 29.4 | 1.89 | 0.94 | 99.8 | 98.4 | |
| 451 | 1,213.6 | 112.5 | 45.7 | 2.93 | 0.73 | 98.4 | 87.0 | |
| 446 | 1,220.5 | 112.4 | 45.8 | 2.92 | 0.36 | 97.0 | 85.2 | |
| 446 | 1,216.1 | 113.7 | 46.3 | 2.93 | 0.24 | 97.8 | 78.6 |
| Benchmark | Suites | Default work item | External benchmark assets |
|---|---|---|---|
| LIBERO | libero_spatial , libero_object , libero_goal , libero_10 , libero_90 | Episodes of one task | Pinned Python environment, simulator, dataset, initial states |
| LIBERO-Plus | libero_spatial (2,402 tasks), libero_object (2,518), libero_goal (2,591), libero_10 (2,519) | Episodes of one variant | Pinned LIBERO-Plus environment, simulator archive, dataset, initial states |
| RoboTwin | demo_clean , demo_randomized ; 50 tasks | One task episode window | RoboTwin source and environment, checkpoint, validated seed cache |
| RoboCasa | tabletop ; 24 GR-1 tasks | One task with multiple episodes | GR-1 simulator and task source, dataset, EGL environment |
| CALVIN | task_D_D , task_ABC_D , task_ABCD_D | Consecutive sequences | CALVIN source, dataset, config, official 1,000-sequence manifest |
| MetaWorld | mt50 ; 50 tasks | One task with all its episodes | Pinned MT50 environment and protocol artifact |
Robotic Policy Evaluation
Robotic policy evaluation measures whether learned controllers succeed reliably, generalize across conditions, recover from failures, and behave safely.
See all 139 papers