alphaFeedback

WorksComputer Science

RoboScope Kit: Unified Interfaces for Fast and Scalable Embodied-AI Evaluation

AI contributions
Not recorded for this paper
View details
Ancillary data
1 code link
View

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×\times faster than the official StarVLA evaluation with equivalent success rates, 2.78×\times faster than RLinf, and 1.52×\times 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×\times faster than StarVLA, 3.85×\times faster than RLinf, and 2.10×\times faster than vla-eval. On RoboTwin Easy, four GPUs with chunk-boundary observation complete the 500 episodes in 14.4 minutes, 25.04×\times faster than the single-GPU baseline, with identical success outcomes and terminal steps.

Introduction

Simulation benchmarks evaluate complementary aspects of robot behavior: knowledge transfer in LIBERO [16], bimanual manipulation in RoboTwin [5], language-conditioned task sequences in CALVIN [19], and household manipulation in RoboCasa [21]. Each benchmark brings its own evaluator, observation layout, action convention, and episode bookkeeping, and each policy family brings its own preprocessing and inference loop. Connecting several policies to several benchmarks repeats this integration for every pair. Execution cost compounds the problem: with a StarVLA checkpoint, the official evaluation of 500 LIBERO-Long episodes takes about 50 minutes on one GPU, and running 500 RoboTwin Easy episodes with one simulator and one model on one GPU takes 359.7 minutes. Comparing checkpoints, seeds, or training stages multiplies these costs, and a shared evaluation layer can remove much of this repeated work.

Profiling the official evaluators shows where this time goes (Section 2.2). Simulation occupies CPU cores while one loaded model leaves the GPU mostly idle, so simulators and models are best scaled separately. On RoboTwin, an action-chunk Policy reads one of every 16 rendered observations, so the others need not be rendered. RoboScope Kit addresses the repeated integration with one interface and the execution cost with two acceleration mechanisms, scheduling and runtime optimization.

RoboScope Kit wraps each model once as a Policy, a class that loads the checkpoint and keeps the model’s own preprocessing, and each benchmark once as an adapter around the benchmark’s own evaluator. The Policy also declares what RoboScope Kit may rely on: the observations it reads, the chunk length it returns, and how often it needs a new observation. It keeps each episode’s state separate, so one loaded model can serve many simulators at once. Simulator workers, Policy replicas, scheduling, and result collection run as separate components, so the number of simulators KK and the number of loaded models gg vary independently. The concurrency search chooses KK and gg for each workload and host from short probes. Runtime optimization in the Simulation Runtime removes simulation work that the Policy never consumes, such as rendering observations between action-chunk boundaries. Beyond one host, RoboScope Kit partitions the work items deterministically across independent GPU instances, each running its own workers and replicas, and merges their results.

This report makes three contributions:

  1. A measurement of where evaluation time goes. On one RTX 4090, the official StarVLA LIBERO-Long evaluator spends 55% of its time on simulation and per-step handling on CPU cores while the GPU averages 14.3% utilization. Adding simulators to one model saturates it at 45.7% utilization, and a second Policy replica raises utilization to 87.7%. On RoboTwin, the official evaluator renders three cameras at every control step, yet the StarVLA Policy reads one observation every 16 steps.

  1. A shared evaluation interface. A model is wrapped once as a Policy class and then runs on any benchmark that provides the inputs it needs, without changes to RoboScope Kit. Adapters cover six benchmark families. With a StarVLA checkpoint, a fixed RoboScope Kit configuration reproduces all 500 LIBERO-Long success outcomes of the official StarVLA evaluation.

  1. Fast evaluation through scheduling and runtime optimization. Scheduling runs simulator workers and Policy replicas as separate pools, so simulators and loaded models scale independently and several simulators share each model; a time-bounded concurrency search sizes both pools for each workload and host, and deterministic sharding extends an evaluation across GPU instances. For runtime optimization, a Policy can declare that it needs a new observation only once per action chunk; RoboScope Kit then renders once per chunk, and each worker reuses one SAPIEN engine and renderer

across its episodes. On one RTX 4090, the configuration chosen by the concurrency search evaluates 500 LIBERO-Long episodes in 485 s, against 2,990 s for the official StarVLA evaluation (6.16×), with equivalent outcomes, and is 3.85× faster than RLinf and 2.10× faster than vla-eval. On RoboTwin Easy, scheduling and runtime optimization together cut the time for 500 episodes from 359.7 minutes, with one simulator and one model on one GPU, to 14.4 minutes on four GPUs (25.04×).

Background and Motivation

Simulation-Based Policy Evaluation

Simulation benchmarks let researchers compare robot policies on fixed task distributions at a cost and scale that physical trials cannot reach. An evaluation runs a fixed set of episodes. Each episode starts from a benchmark-defined task and initial state, alternates between rendering an observation, querying the policy, and stepping the simulator with the returned action, and ends when the task succeeds or a step limit is reached. The benchmark then scores the episode records, usually as the fraction of successful episodes.

Benchmarks differ at every stage of this path. LIBERO supplies two 256×256 cameras, 16-D proprioception, and a language instruction, and expects a 7-D end-effector delta with a gripper command; RoboTwin supplies three cameras and dual-arm joint state and expects a 14-D absolute joint and gripper target; CALVIN and RoboCasa use further layouts (Appendix § 9). Termination rules, step limits, and scoring differ as well. Two policies, or two evaluation systems, are comparable when they run the same episodes under the same rules, so for every run in this report we record the episode list, checkpoint, software versions, and hardware.

Where Evaluation Time Goes

Simulation, rendering, and inference costs. An episode’s wall time divides among simulator initialization and reset, physics stepping, rendering, observation transfer, Policy inference, and cleanup. These stages use different resources: physics, robot control, and environment logic use CPU cores, rendering uses the GPU’s graphics pipeline, and inference uses GPU compute and memory. Figure 2 traces the official StarVLA evaluator and its policy server on 50 LIBERO-Long episodes on one RTX 4090.

Execution timeline and whole-run wall-time shares for the official StarVLA LIBERO evaluator and policy server

Figure 2. The official StarVLA LIBERO evaluator and its policy server on 50 LIBERO-Long episodes (five per task) on one RTX 4090. (a) Execution timeline over a 2-s window. The simulator runs in the evaluator process: physics and control on CPU cores, camera rendering on the GPU (each tick is one render of about 0.4 ms); the policy server runs on the GPU. (b) Over the whole run: evaluator time, the share of time the policy server is handling a request, and mean GPU utilization (the share of time a GPU kernel is executing).

The evaluator runs one simulator and queries the server once per action chunk, so simulation and inference take turns. On CPU cores, simulation steps and the per-step handling of observations and actions take 55% of the evaluator’s time. Most of it is robot control and MuJoCo forward kinematics, computed at each of the 25 physics substeps per control step; physics integration takes 11%. Rendering the two cameras on the GPU takes 3%. Episode setup, reset, and settling take 16%, and waiting for actions 26%. An inference takes 55 ms, of which the GPU executes kernels for 26 ms: the model issues about 3,100 kernel launches per inference, and the GPU waits between them. The server is busy 25% of the time, and the GPU averages 14.3% utilization (Appendix § 11). Neither the CPU cores nor the GPU is kept busy. Since simulators consume CPU cores and Policy replicas consume GPU memory and compute, the two can be scaled separately.

Unconsumed observations in action-chunk policies. Many current policies predict action chunks: one inference returns HH actions, which the evaluator executes over the next HH control steps before querying the Policy again. The StarVLA RoboTwin checkpoint has H=16H = 16. The official RoboTwin evaluator still renders all three cameras at every control step, so 15 of every 16 rendered observations are never read. Rendering only at chunk boundaries keeps physics stepping, action execution, and success checks at the native control frequency, and the Policy receives exactly the observations it reads.

Design Goals

These observations lead to five design goals. (G1) Unified. Integrate each model and each benchmark once, and reuse it with every counterpart. (G2) Faithful. Reproduce the outcomes of each benchmark’s official evaluation, under its own tasks, initial states, termination, and scoring. (G3) Efficient. Keep both CPU cores and GPUs busy, and skip simulation work that changes neither the Policy’s inputs nor the score. (G4) Automatic. Configure each evaluation for its workload and host without manual tuning, and report what this costs. (G5) Scalable. Extend one evaluation from one GPU to several GPUs and instances.

Design

Overview

RoboScope Kit has four parts (Figure 1). A Policy is a class, installed in its model’s own environment, that loads a checkpoint and keeps the model’s preprocessing. A benchmark adapter wraps the benchmark’s native evaluator, which keeps task definitions, initial states, termination, and scoring (G2, faithful). Two runtimes connect the two. The Control Runtime schedules the evaluation. It expands a benchmark suite into a manifest, the ordered list of episode keys (task, episode, seed), and groups the keys into work items. It starts KK simulator workers, processes that each own one simulator, and gg Policy replicas, processes that each hold one loaded Policy, and collects one episode record per episode key. The Simulation Runtime runs inside each simulator worker: the native evaluator, instrumented by the adapter, steps the simulator, renders observations, and sends them to a Policy replica. Acceleration has two parts. Runtime optimization in the Simulation Runtime removes simulation work the Policy never consumes (§ 3.6). Scheduling in the Control Runtime separates simulation from inference, chooses KK and gg, and shards work across instances (§ 3.3, § 3.4, § 3.5).

RoboScope Kit connects policies and benchmark adapters

Figure 1. RoboScope Kit connects Policies and benchmark adapters. After interface validation, acceleration has two parts: runtime optimization removes unconsumed simulation work inside each worker, and scheduling coordinates KK simulator workers that exchange observations and actions with gg Policy replicas. Each episode yields one episode record. The Policy class holds the model-side processing.

An evaluation proceeds in four stages. The Control Runtime first validates that the Policy’s declared capabilities match the benchmark’s contract. It then runs the concurrency search, short probes that choose KK and gg, unless they are fixed. Next it runs the manifest as work items across KK workers that send observations to gg replicas. Finally it aggregates completed items into benchmark scores and execution metrics.

Evaluation Interface

Observation and action contracts. A model is integrated once as a Policy and a benchmark once as an adapter, and each is reused with every counterpart (G1, unified). Each benchmark specification names its observation features and its action. A feature has a canonical name such as images.head, state.joints, or language.instruction, a kind, a dtype, and an optional shape; the action has a name, a dimension, and a dtype. A Policy declares the features it requires, the suites it supports, the chunk lengths it returns, its action representation, and an observation stride per benchmark. Checkpoint-specific work, including image resizing and cropping, normalization, tokenization, and the transform from model outputs to benchmark actions, stays inside the Policy. Adapters apply returned actions in the benchmark’s native convention and execute action chunks one step at a time at the native control frequency.

Policy lifecycle and episode state. A Policy replica moves through five operations (Table 2). load reads one checkpoint and returns the Policy’s capabilities; reset allocates state for one episode; act maps an observation to an action or action chunk, and its batched form act_batch, which defaults to calling act per observation, serves several at once; end_episode releases that episode’s state; and unload releases the model. Several simulator workers share a replica, so requests from different episodes interleave. Every request carries an episode identifier, and stateful Policies key their histories, caches, and action queues by it. Model weights and other replica-scope resources live from load to unload; episode-scope state lives from reset to end of episode (Figure 8).

MethodLifecycle transitionPolicy behavior
load(context)Created → LoadedLoad one checkpoint replica and declare capabilities
reset(context)Loaded → Episode activeAllocate state keyed by episode_id
act(observation)Episode active → Episode activeProduce one action or action chunk from canonical features
act_batchEpisode active → Episode activeServe an observation batch with native batching when available
end_episode(id)Episode active → LoadedRelease state for one episode
unload()Loaded → ReleasedRelease model and process-wide resources

Table 2. Policy lifecycle methods and ownership.

Policy lifecycle within one replica

Figure 8. Policy lifecycle within one replica. The checkpoint is loaded once; each episode adds and later removes its own state, and several episodes may be active at a time.

Interface validation. Before any rollout, the Control Runtime checks that the requested benchmark and suite are among the Policy’s declared capabilities, that every required feature is provided, and that the chunk length and action representation resolve to one contract across all replicas. During rollouts it checks each observation’s fields, dtypes, and fixed dimensions, and each returned action’s numeric type, shape, and dimension.

Separating Simulation and Inference

Each simulator worker is a process that owns one simulator instance and the benchmark’s dependencies. Each Policy replica is a process that loads one model on an assigned GPU in the model’s own environment, so the replicas of one instance can spread over all of its GPUs (G5, scalable). Workers and replicas never share an interpreter, so benchmark and model environments can pin conflicting libraries. The two form independent pools of sizes KK and gg, which can be sized to keep both CPU cores and GPUs busy (G3, efficient); K8/g2K8/g2 denotes eight workers sharing two replicas. Workers send observations to replicas over local request–response connections and receive action chunks, and every message carries the episode identifier. Because workers share replicas, GPU memory holds gg copies of the model however many simulators run. All processes of an evaluation belong to one process group, which the Control Runtime stops as a unit at shutdown or on failure.

Concurrency Search

Probe workloads and resource constraints. The concurrency search chooses KK and gg automatically within a time budget (G4, automatic), and § 5.4 reports its cost next to evaluation time. Concurrency is chosen by running the actual workload. A probe starts KK workers and gg replicas with the real Policy, runs a short episode set, and measures throughput qq in control steps per second, consumed CPU cores cc, GPU utilization uu, CPU throttling tt, and per-replica GPU memory vv. Throughput is measured in steady state: each worker receives three work items, and the estimate drops each worker’s first item, which includes environment creation and Policy warmup, and the items that finish after the first worker runs out of work. A probe fails when a worker is missing or fails, an out-of-memory error occurs, its episodes do not finish within the time limit, or its success rate falls below 85% of the first probe’s on the episodes both probes ran. Resources bound the candidates: CPU cores bound the worker count, and the GPU memory left after loading replicas bounds the replica count.

Selection rules and search budgets. Algorithm 1, the diagonal search, first adds simulator workers alone and then adds workers and replicas together, a diagonal in the (K,g)(K,g) plane; Table 1 defines its predicates. The worker phase keeps one replica per GPU and doubles KK while a doubling raises throughput by at least 25%, a quarter of linear scaling. The first doubling that gains less marks the knee of the throughput curve, beyond which more workers add little. Workers come first because they cost CPU cores, not GPU memory; past the knee, the replicas limit throughput. The accepted KK per replica, rr, is the number of workers one replica keeps busy. The replica phase then adds one replica per GPU at a time and scales the workers with it, K=rgK = rg, keeping a step while it raises throughput by at least ε\varepsilon. Both phases stop before CPU, GPU, or

NameDefinitionSetting
Probe⁡(K,g)\operatorname{Probe}(K,g) failsA worker is missing or fails, an out-of-memory error occurs, episodes do not finish within min⁡(τc, remaining τ)\min(\tau_c,\text{ remaining }\tau), or success on the episodes shared with the first probe falls below (1−δ)(1-\delta) times the first probe’sτc=15 min\tau_c = 15\,\mathrm{min}, τ=30 min\tau= 30\,\mathrm{min}, δ=0.15\delta= 0.15
WorkerCap⁡(m∗)\operatorname{WorkerCap}(m^*)K∗+⌊(C−1−c(m∗))/c^⌋K^*+\left\lfloor(C-1-c(m^*))/\hat{c}\right\rfloor, where c^\hat{c} is the CPU cost per worker fitted from the probes with the fewest and most workers at g=Gg=G; before two such probes, max⁡(G,⌊(C−1)/2⌋)\max(G,\lfloor(C-1)/2\rfloor); at most 64—
ReplicaCap⁡\operatorname{ReplicaCap}min⁡(16,C,G⌊(V−rv)/v⌋)\min(16,C,G\lfloor(V-r_v)/v\rfloor), with vv measured by the first proberv=2 GiBr_v=2\,\mathrm{GiB} reserved per GPU
FitsMemory⁡(K,g)\operatorname{FitsMemory}(K,g)The busiest GPU’s peak memory, extrapolated from the incumbent with the replica footprint and the fitted memory per worker, stays below V−rvV-r_v—
WithinLimits⁡(m)\operatorname{WithinLimits}(m)c(m)≤C−1c(m)\le C-1, u(m)≤umax⁡u(m)\le u_{\max}, and t(m)≤tmax⁡t(m)\le t_{\max} when tt is measuredumax⁡=0.95u_{\max}=0.95, tmax⁡=0.40t_{\max}=0.40
Knee⁡(m,m∗)\operatorname{Knee}(m,m^*)q(m)≥(1+κ(K(m)/K∗−1))q(m∗)q(m)\ge\left(1+\kappa\left(K(m)/K^*-1\right)\right)q(m^*)κ=0.25\kappa=0.25
Gains⁡(m,m∗)\operatorname{Gains}(m,m^*)q(m)≥(1+ε)q(m∗)q(m)\ge(1+\varepsilon)q(m^*)ε=0.03\varepsilon=0.03

Table 1. Predicates and parameters of Algorithm 1. CC is the CPU quota in cores and VV the memory per GPU; q(m)q(m), c(m)c(m), u(m)u(m), t(m)t(m), and v(m)v(m) are the measurements of probe mm, and K(m)K(m) its worker count.

Algorithm 1 Diagonal concurrency search.

Input: Workload WW, Policy PP, host with GG GPUs Output: Configuration (K∗,g∗)(K^*, g^*), or ⊥\bot if the first probe fails

  1. (K∗,g∗,m∗)←(G,G,Probe⁡(G,G))(K^*,g^*,m^*) \leftarrow(G,G,\operatorname{Probe}(G,G))

  2. if m∗m^* fails then return ⊥\bot

  3. while K∗<WorkerCap⁡(m∗)K^* < \operatorname{WorkerCap}(m^*) do ▷ worker phase

  4. K←min⁡(2K∗,WorkerCap⁡(m∗))K \leftarrow\min(2K^*,\operatorname{WorkerCap}(m^*)); m←Probe⁡(K,G)m \leftarrow\operatorname{Probe}(K,G)

  5. if mm fails or not WithinLimits⁡(m)∧Knee⁡(m,m∗)\operatorname{WithinLimits}(m) \land\operatorname{Knee}(m,m^*) then break

  6. (K∗,m∗)←(K,m)(K^*,m^*) \leftarrow(K,m)

  7. r←K∗/Gr \leftarrow K^*/G

  8. while g∗+G≤ReplicaCap⁡g^* + G \le\operatorname{ReplicaCap} do ▷ replica phase

  9. g←g∗+Gg \leftarrow g^*+G; K←max⁡(K∗,min⁡(round⁡(rg),WorkerCap⁡(m∗)))K \leftarrow\max(K^*,\min(\operatorname{round}(rg),\operatorname{WorkerCap}(m^*)))

  10. if not FitsMemory⁡(K,g)\operatorname{FitsMemory}(K,g) then break

  11. m←Probe⁡(K,g)m \leftarrow\operatorname{Probe}(K,g)

  12. if mm fails or not WithinLimits⁡(m)∧Gains⁡(m,m∗)\operatorname{WithinLimits}(m) \land\operatorname{Gains}(m,m^*) then break

  13. (K∗,g∗,m∗)←(K,g,m)(K^*,g^*,m^*) \leftarrow(K,g,m)

  14. return (K∗,g∗)(K^*,g^*)

throttling limits are exceeded, and the replica phase skips a step whose predicted GPU memory does not fit. Each probe is limited to τc\tau_c and the whole search to τ\tau; when a probe fails or the budget runs out, the last accepted configuration stands. Probes that the search measures but does not keep are recorded as rejected with their reason.

Sharding Across Instances

One host bounds the workers and replicas an evaluation can use. RoboScope Kit adds a second scheduling level above each instance’s local K/gK/g Control Runtime, so that one evaluation can span several instances (G5, scalable; Figure 9). Given the ordered work items W=(w0,…,wM−1)W=(w_0,\ldots,w_{M-1}), shard ii of NN runs

Two levels of parallel evaluation

Figure 9. Two levels of parallel evaluation. Each instance runs a fixed subset of work items with its own queue, simulator workers, and Policy replicas; the shard results are validated and merged into one benchmark result.

Wi={wj∈W:j mod N=i},0≤i<N.\mathcal{W}_i=\{w_j\in\mathcal{W}:j\bmod N=i\},\qquad0\le i<N.

The shards are disjoint and together form the requested workload, and each work item keeps its canonical episode indices and initial states or goals. Each instance runs its own queue, simulator workers, and Policy replicas and, when enabled, its own concurrency search.

Each shard writes its own result, progress counter, and build identity, and two merge paths combine them. Record-tree merging checks that the episode records cover every work item exactly once and then applies the benchmark’s aggregation to the combined records. Result-only reduction checks that all shards share the benchmark protocol and build identity and then combines per-shard counts and partial aggregates; official metrics that are not additive are recomputed from these counts.

Runtime Optimization

Simulation Runtime reuse and redundant work removal. Runtime optimization removes only work that neither feeds the Policy nor affects the score (G3, efficient), and chunk-boundary observation applies only at the stride the Policy declares. Within a rollout, the RoboTwin Simulation Runtime removes work that repeats across episodes or only validates seeds. It reuses one SAPIEN Engine and Renderer for all episodes a worker runs instead of rebuilding them per episode. It hoists a passive-force computation that the official control loop performs twice per step. The official evaluator validates seeds with an expert rollout. Given a verified seed cache, the runtime skips this check and, for joint-position actions, cuRobo initialization. End-effector actions retain one cuRobo planner per worker. Engine reuse and the control-loop change were enabled in all RoboTwin runs reported here, including the single-GPU baseline; chunk-boundary observation follows the Policy’s declared stride.

Work-item size and setup caching. A RoboTwin work item holds one task’s ten episodes by default. Two-episode items let idle workers take over the remaining episodes of slow tasks, so fewer workers sit idle at the end of a run. RoboTwin also rebuilds a static table of clutter-object metadata whenever an evaluator process starts. The Simulation Runtime can build it once, store it with hashes of the generating source and the table, and load it in later processes; the scene contents and physics are unchanged.

Chunk-boundary observation. A Policy declares an observation stride ss for a benchmark. At control step tt, the evaluator renders a new observation if the Policy runs inference at tt, which happens every HH steps for chunk length HH, or if tt is a multiple of ss; otherwise it passes the previous observation. With s=Hs=H, rendering happens once per chunk and every inference receives the observation of its own step. The default stride is 1, which reproduces the official cadence of one render per step. Randomized lighting, the interactive viewer, video logging, and point-cloud observations keep one render per step for any ss. The StarVLA RoboTwin Policy declares s=H=16s=H=16. The four-GPU stride-16 run matches the single-GPU stride-1 runs on every success outcome and terminal step of the 500 RoboTwin Easy episodes (§ 5.2).

Work Distribution and Failure Handling

Work items and result integrity. The Control Runtime converts the ordered manifest into work items: one task’s episodes for LIBERO, and consecutive per-task episode windows for RoboTwin, interleaved across tasks so that long rollouts spread over workers. Each item keeps the canonical episode indices and the seeds or initial states of its episodes. A worker claims an item atomically, moving it from pending to running, appends terminal records to the item’s partial state as episodes finish, and publishes a completed result when the item ends. Publication is idempotent: an identical repeated result is accepted, and a conflicting result for the same item is an integrity error. Aggregation reads completed items. Before scoring, the Control Runtime checks coverage, exactly one record per requested episode key with no duplicates or unexpected keys, and that each record’s seed matches the manifest. Figure 3 shows the item states and the recovery path.

Work distribution and worker recovery

Figure 3. Work distribution and worker recovery. Workers atomically claim queued items and publish partial progress or completed results. After a worker exit or allocator out-of-memory error, the Control Runtime requeues unfinished work, discards its partial records, and starts a replacement worker, which replays the item from its first episode. Only completed items enter aggregation. Policy-replica exit has a different failure boundary: it aborts the evaluation (§ 3.7).

Failure handling. Worker failures are recovered at work-item granularity (Figure 3). When a simulator worker exits or raises an allocator out-of-memory error, the Control Runtime returns its claimed item to pending, discards the item’s partial records, and starts a replacement worker, which replays the item from its first episode. After an out-of-memory error it also lowers worker concurrency on the affected GPU while the other GPUs continue. Aggregation reads completed items, so a replayed episode contributes one record. A

Policy replica that exits aborts the evaluation; the Control Runtime then stops every process of the evaluation and checks that none remains.

Implementation

Packaging and process layout. RoboScope Kit is distributed as a Python package that defines the Policy API and contains the Control Runtime, the Simulation Runtime, and the benchmark adapters. A Policy is installed in its model’s environment, and a configuration file names the command that starts its replica process. The Control Runtime is installed at a pinned version next to the Policy, with a checksummed benchmark configuration. Benchmark simulators, datasets, and native evaluators come from shared storage when an evaluation starts. The command-line entry point takes a benchmark, suite, checkpoint, and output directory; it runs the concurrency search and the formal evaluation and writes the manifest, probe history, episode records, metrics, and resource samples to the output directory. The Control Runtime, simulator workers, and Policy replicas run as separate processes on one host and communicate over local Unix-domain sockets. For a sharded evaluation, the entry point also takes a shard index and shard count. Our evaluation platform, a cluster service outside RoboScope Kit, runs each evaluation on up to four instances: it launches and polls the instances, collects the shard reports, and publishes the score once every shard has completed. If a shard fails, the evaluation fails and all of its instances are released. Cross-instance sharding comes with a merge tool that checks that the shards are disjoint and cover the workload and then recomputes the official result.

Benchmark adapters. An adapter implements what differs between benchmarks: building work items from the suite’s tasks and episodes, starting a native rollout process for an item, translating the benchmark’s observations into named features and the Policy’s actions into the benchmark’s convention, and parsing native results into episode records. Task initialization, reset, action application, termination, and scoring run in the benchmark’s own evaluator, which the adapter instruments to route inference to a Policy replica and to emit episode records. The catalog covers LIBERO (five suites), LIBERO-Plus, RoboTwin 2.0 (Easy and Hard), CALVIN, RoboCasa GR-1 Tabletop, and Meta-World MT50 [33] (Appendix § 13). The measurements in this report use LIBERO-Long and RoboTwin Easy, and the cross-instance run uses MetaWorld MT50.

Listing 1: The stateless StarVLA Policy, RoboTwin path (condensed).

from roboscope_kit import (ActionChunk, Observation, Policy,
                           PolicyCapabilities, SessionContext, run)

CAMERAS = ("images.head", "images.left_wrist", "images.right_wrist")

class StarVLARoboTwinPolicy(Policy):
    def load(self, context: SessionContext) -> PolicyCapabilities:
        self.model = load_checkpoint(context.checkpoint_path).to("cuda").eval()
        horizon = self.model.action_horizon          # 16 for this checkpoint
        return PolicyCapabilities(
            supported_benchmarks=("robotwin",),
            required_features=CAMERAS + ("language.instruction",),
            supported_action_chunk_sizes=(horizon,),
            observation_strides={"robotwin": horizon})  # render once per chunk

    def act(self, observation: Observation) -> ActionChunk:
        f = observation.features                      # canonical feature names
        example = preprocess([f[c] for c in CAMERAS], f["language.instruction"])
        normalized = self.model.predict_action(example)  # (16, 14), in [-1, 1]
        return ActionChunk(unnormalize(normalized).astype("float32"))

    def unload(self) -> None:
        self.model = None

if __name__ == "__main__":
    run(StarVLARoboTwinPolicy())

Adding a Policy. A new Policy is one class. The class subclasses Policy and implements load and act; reset, end_episode, and unload default to no-ops. load returns the Policy’s capabilities, including required features, chunk lengths, action representation, and observation strides. The class’s script ends with run(policy), which serves it on the socket the Control Runtime provides. The shared Control Runtime and every benchmark adapter are reused unchanged, and the same class serves every benchmark whose features it declares.

What a Policy must add beyond load and act depends on whether it keeps state between inference calls. Listing 1 shows a stateless Policy, condensed from the StarVLA RoboTwin integration: each action chunk depends only on the current observation, so the class keeps only replica-scope state, the model, and declares an observation stride equal to its chunk length, which enables chunk-boundary observation (§ 3.6).

A stateful Policy carries information from one call to the next. The X-VLA Policy [35] is the stateful Policy integrated with RoboScope Kit: the model takes as proprioceptive input the end-effector pose of its own previous action chunk, so each episode carries a pose that every act reads and updates. Listing 2 shows its LIBERO path. One replica serves several simulator workers, and a replica handles one call at a time, so calls from different episodes interleave on the same object. Per-episode state therefore cannot live in instance attributes; the Policy keys it by episode_id, discards stale state in reset, initializes it from the observed state on the episode’s first act, because reset carries no observation, and releases it in end_episode. Because the replica serializes calls, the Policy needs no locking. The X-VLA Policy declares a stride of 1 on every benchmark.

Evaluation

Our evaluation answers the following questions:

  • Does RoboScope Kit preserve benchmark outcomes (§ 5.2)?

  • How does its evaluation time compare with existing systems (§ 5.3)?

  • How much does each design component contribute (§ 5.4)?

  • How does it scale with GPUs, workers, and Policy replicas (§ 5.5)?

Listing 2: The stateful X-VLA Policy, LIBERO path (condensed).

import numpy as np
from roboscope_kit import (ActionChunk, EpisodeContext, Observation,
                           Policy, PolicyCapabilities, SessionContext)

class XVLAPolicy(Policy):
    def __init__(self) -> None:
        self.proprio: dict[str, np.ndarray] = {}        # episode_id -> state

    def load(self, context: SessionContext) -> PolicyCapabilities:
        self.model = load_xvla(context.checkpoint_path).to("cuda").eval()
        return PolicyCapabilities(
            supported_benchmarks=("libero",),           # other benchmarks omitted
            required_features=("images.primary", "images.wrist",
                               "state.proprioception", "language.instruction"),
            supported_action_chunk_sizes=(self.model.num_actions,))

    def reset(self, context: EpisodeContext) -> None:
        self.proprio.pop(context.episode_id, None)      # no stale state

    def act(self, observation: Observation) -> ActionChunk:
        f, ep = observation.features, observation.episode_id
        if ep not in self.proprio:                      # first call of episode
            self.proprio[ep] = proprio_from_state(f["state.proprioception"])
        raw = self.model.generate(f["images.primary"], f["images.wrist"],
                                  f["language.instruction"], self.proprio[ep])
        self.proprio[ep][:9] = raw[-1, :9]               # feed back last pose
        return ActionChunk(to_libero_actions(raw))       # (30, 7) float32

    def end_episode(self, episode_id: str) -> None:
        self.proprio.pop(episode_id, None)              # release episode state

Experimental Setup

Workloads and checkpoints. The cross-system comparison uses LIBERO-Long (suite libero_10), 10 tasks with 50 initial states each and seed 7, evaluated with the public StarVLA checkpoint StarVLA/Qwen2.5-VL-OFT-LIBERO-4in1 [3, 25]. The ablation study also uses RoboTwin Easy (suite demo_clean), 50 tasks with 10 episodes each, evaluated with StarVLA/Qwen3-VL-OFT-Robotwin2 [2], whose chunk length is 16. Each workload has a frozen ordered manifest of 500 episode keys, and every run of that workload receives the same keys (Appendix § 10).

Baselines. On LIBERO-Long, we compare RoboScope Kit with three evaluation systems that run the same checkpoint and manifest: the official StarVLA evaluation (its policy server and LIBERO evaluator), vla-eval [8], and RLinf [32]. RLinf was tuned once offline for the host, which took 1,704 s. vla-eval runs the fastest configuration of a 9,780 s search over its shard count, model-server replicas, maximum batch size, and batch wait (Table 4): 24 shards share one server that batches up to 24 observations with a 5 ms wait. RoboScope Kit (Search) runs RoboScope Kit with its diagonal concurrency search (§ 3.4) and a StarVLA Policy that uses the same camera-image preprocessing and gripper processing as the StarVLA client; the search selects K12/g3K12/g3 in all three of its launches after a median 506 s, and the cross-system comparison evaluates this configuration with CUDA MPS off, the default. RoboScope Kit (Search+MPS) runs the same search and evaluation with NVIDIA CUDA MPS on (--cuda-mps), which lets the replicas run their kernels concurrently on the GPU instead of in time slices; the search then selects K16/g4K16/g4 in all three launches after a median 504 s (§ 5.4). The ablation study compares the configurations chosen by the search with fixed configurations.

SystemSearch spaceSelectedRuns
vla-evalShards {8,…,24}\{8,\ldots,24\}, servers {1,2,3}\{1,2,3\}, maximum batch {4,…,24}\{4,\ldots,24\}, wait {0,5,20}\{0,5,20\} ms; 100-episode probes, then 500-episode runs (Table 5)24 shards, 1 server, batch 24, wait 5 ms23
RLinfStart: 10 environments, 1 pipeline stage; environments {4,8,12,16,20}\{4, 8, 12, 16, 20\}; then 2 and 4 pipeline stages at 20 environments; 30-episode probes20 environments, 1 pipeline stage, 1 rollout worker (30/30)8

Table 4. Offline tuning of the LIBERO-Long baselines.

Hardware and software. All GPUs are 48 GiB RTX 4090s. Every cross-system launch runs on one GPU with 12 CPU cores, and every system runs three launches. The worker and replica sweep and the three diagonal searches run on one RTX 4090 with a 20-core quota. RoboTwin experiments run on one RTX 4090 for the single-GPU baseline and on four RTX 4090s with an 80-core quota. Appendix § 12.§ 2 gives the host of every launch.

Metrics. Success rate is the fraction of successful episodes. Outcome agreement between two runs is the fraction of episode keys with the same success outcome; terminal-step agreement also requires the same terminal step. Evaluation time covers the formal evaluation and excludes process initialization, concurrency search or offline tuning, and cleanup; end-to-end time is the wall time of the whole process. Throughput is policy-controlled environment steps per second of evaluation time, and speedup is the ratio of reference to candidate evaluation time over three launches each, with a 95% tt interval (Appendix § 12.§ 2). On LIBERO-Long, Δ\Delta success carries a 95% paired task-cluster bootstrap interval (10 tasks, 20,000 draws). Outcomes are equivalent when the Δ\Delta interval lies within ±2\pm2 percentage points.

Outcome Agreement

Agreement with the official evaluation. A fixed K1/g1K1/g1 RoboScope Kit run from the worker and replica sweep matches each of the three official launches on all 500 LIBERO-Long success outcomes (Appendix § 12.§ 1). In the cross-system comparison, the official evaluation scores 90.2% and RoboScope Kit (Search) 89.9%, −0.3 percentage points (95% interval −0.8 to 0.0), with 97.9% of episodes having the official outcome; RoboScope Kit (Search+MPS) also scores 89.9%, −0.3 points (−1.3 to +0.8), with 96.5% agreement (Figure 4). Under the ±2\pm2-point margin, both are equivalent to the official evaluation. On RoboTwin Easy, the four-GPU stride-16 run matches each of the three single-GPU K1/g1K1/g1 runs on every success outcome and terminal step, and the four-GPU stride-1 runs at K4/g4K4/g4, K16/g4K16/g4, and K32/g4K32/g4 agree with one another. The four-GPU stride-1 runs score 235/500 against 231/500 for the single-GPU runs, a difference of +0.8 percentage points (95% interval −2.0 to +3.8), with 89.2% of episodes having the same outcome.

Evaluation time and speedup over StarVLA; outcome difference, ±2-pp margin shaded

Figure 4. LIBERO-Long on one RTX 4090 with RoboScope Kit (Search), which selects K12/g3K12/g3, and RoboScope Kit (Search+MPS), which selects K16/g4K16/g4 under CUDA MPS. (a) Evaluation time of each system: bars are medians and circles the launches; labels give the speedup over the official StarVLA evaluation. (b) Success rate minus that of the official StarVLA evaluation, with a 95% paired task-cluster bootstrap interval; the shaded band is the ±2-point equivalence margin. Table 8 lists the values.

Agreement with other evaluation systems. RLinf scores 90.3%, +0.1 percentage points relative to the official evaluation [95% interval −2.6 to +3.3], and shares the official outcome on 88.1% of episodes. vla-eval scores 89.8%, 0.4 points below the official evaluation [95% interval −1.6 to +0.7], with 91.7% agreement. For comparison, repeated launches of the same system agree on 86.2–88.4% of episodes for RLinf, 93.6–95.0% for vla-eval, 97.8–99.0% for RoboScope Kit (Search), 97.4–98.4% for RoboScope Kit (Search+MPS), and 100% for the official evaluation, so RLinf differs from the official evaluation about as much as from its own repeated launches. RLinf samples its actions during evaluation (Appendix § 10.§ 3).

Sources of outcome differences. Within RoboScope Kit, LIBERO-Long runs with 2 to 20 simulator workers differ from a one-worker run on 1 to 28 of 500 success outcomes, while the success count moves by at most ten (Table 18). The differences follow task assignment: they fall in tasks split across workers. Appendix § 12.§ 1 breaks them down by episode and condition.

ConfigurationSuccessesEvaluation time (s)Steps/sGPU util. (%)Speedup vs. K1/g1K1/g1Efficiency per workerSuccess agreement (%)Terminal agreement (%)
Search → K12/g3K12/g3447.7679.0202.597.05.250.4497.178.5
K1/g1K1/g14513,559.638.415.41.001.00100.0100.0
K2/g1K2/g14521,883.872.529.41.890.9499.898.4
K4/g1K4/g14511,213.6112.545.72.930.7398.487.0
K8/g1K8/g14461,220.5112.445.82.920.3697.085.2
K12/g1K12/g14461,216.1113.746.32.930.2497.878.6
K16/g1K16/g14481,205.0114.046.82.950.1896.649.8
K20/g1K20/g14471,221.3112.045.62.910.1596.042.4
K4/g2K4/g24531,001.8136.159.73.550.8998.888.0
K8/g2K8/g2445749.4183.686.74.750.5997.286.0
K12/g2K12/g2449748.0183.387.74.760.4097.277.4
K16/g2K16/g2452759.8180.085.84.680.2996.649.4
K8/g3K8/g3451713.7191.2–4.990.6298.886.8
K12/g3K12/g3451691.3198.5–5.150.4397.678.4
K16/g3K16/g3450694.9196.9–5.120.3295.848.6
K20/g3K20/g3441693.7197.7–5.130.2694.441.8
K12/g4K12/g4448676.9203.8–5.260.4497.078.0
K16/g4K16/g4452670.9203.8–5.310.3396.648.6
K20/g4K20/g4443674.7203.4–5.280.2695.241.8

Table 18. LIBERO-Long single-GPU worker and Policy-replica scaling (one launch per configuration).

Performance

Evaluation-time comparison. Appendix § 12.§ 2 lists every launch with its initialization, search, and tuning time.

Results. RoboScope Kit (Search) completes LIBERO-Long in a median 671 s of evaluation time, against 2,990 s for the official StarVLA evaluation, 1,882 s for RLinf, and 1,016 s for vla-eval: 4.45× (95% CI [4.40, 4.50]) faster than StarVLA, 2.78× ([2.59, 2.98]) faster than RLinf, and 1.52× ([1.46, 1.58]) faster than vla-eval at its tuned configuration. Its throughput, 204.6 steps/s, exceeds vla-eval’s 133.5, RLinf’s 74.2, and StarVLA’s 45.8. Its launches take a median 738 s end to end; adding the median 506 s of the diagonal search gives 1,244 s, against 3,013 s for StarVLA, 3,639 s for RLinf, and 10,822 s for vla-eval including their offline tuning. Against the official evaluation, RoboScope Kit (Search) is faster with equivalent outcomes, 2.42× end to end. RoboScope Kit (Search+MPS) completes LIBERO-Long in a median 485 s at 282.5 steps/s: 6.16× ([6.08, 6.23]) faster than StarVLA, 3.85× ([3.58, 4.13]) faster than RLinf, 2.10× ([2.03, 2.18]) faster than vla-eval, and 1.38× ([1.37, 1.40]) faster than RoboScope Kit (Search) on the same host and cores. Including its search, a launch takes a median 997 s, 3.02× faster than StarVLA end to end.

Ablation Study

Separating simulation and inference. Separation lets the Control Runtime add a Policy replica without adding simulators. On one RTX 4090 with twelve workers, a second replica shortens LIBERO-Long evaluation from 1,216 s to 748 s (1.63×) and raises mean GPU utilization from 46.3% to 87.7% (Table 18). The twelve workers share two model copies, and peak GPU memory is 25.0 GiB.

Concurrency search and its cost. On one RTX 4090 with a 20-core quota, the host of the worker and replica sweep, the diagonal search selects K12/g3K12/g3 in all three launches after a median 506 s of search (Table 18 and Table 13). The worker phase reaches the knee at K4/g1K4/g1: doubling to K8/g1K8/g1 gains less than 25%. The replica phase then keeps K8/g2K8/g2 and K12/g3K12/g3 and rejects K16/g4K16/g4, which gains only 2.1–2.4%, under the 3% threshold. The selected configuration evaluates LIBERO-Long in a median 679 s, 1.10× faster than K12/g2K12/g2, the fastest fixed configuration with at most two replicas, and 5.25× faster than fixed K1/g1K1/g1, or 3.01× including the search. Its steady-state probes of K12/g3K12/g3 measure within 1.2% of the formal throughput of the same launch. Figure 7a places the search path on the grid search: the grid evaluates eighteen configurations in 5.4 h, while the search probes seven in 8.4 min. Its choice evaluates within 1.2% of the fastest grid configuration, K16/g4K16/g4 (670.9 s), inside the 3% gain below which the search stops adding replicas.

Grid search and diagonal concurrency search on LIBERO-Long

Figure 7. Grid search and diagonal concurrency search on LIBERO-Long, one RTX 4090. Grid lines are full evaluations at fixed K/gK/g, one launch per configuration, one line per replica count gg, labelled at its end; the search path joins the steady-state probes in the order the search ran them, mean of three launches, with gg marked where no grid line has that replica count; filled triangles are probes the search kept and hollow triangles probes it rejected; the star is the formal run at the selected configuration (median of three). (a) CUDA MPS off, on the sweep host with a 20-core quota: the grid takes eighteen launches and 5.4 h of evaluation, the search seven probes and 8.4 min (median) and selects K12/g3K12/g3, within 1.2% of the fastest grid configuration, K16/g4K16/g4. (b) CUDA MPS on, on the cross-system host with 12 pinned cores: the grid takes eighteen launches and 5.0 h of evaluation, the search seven probes and 8.4 min (median) and selects K16/g4K16/g4, the fastest grid configuration; K20/g5K20/g5 is skipped because its predicted memory exceeds the GPU. GPU utilization of the grid configurations is in Table 18 and Table 14.

WorkloadK/gK/gSearch (s)Eval. (s)E2e (s)SuccessesPeak GPU mem. (GiB)
LIBERO-Long12/35066791,193448/50033.6
12/35046751,187447/50033.6
12/35076801,194448/50033.5
LIBERO-Long, CUDA MPS, 12 pinned cores16/4504485997452/50044.7
16/45054871,000447/50044.5
16/4502483994449/50044.4
RoboTwin Easy (100 episodes)8/153834388452/10041.0
8/156135191552/10040.7
8/161635198652/10041.5

Table 13. Concurrency search launches on one RTX 4090, with a 20-core quota or, with CUDA MPS, 12 pinned cores on the cross-system host. Evaluation time excludes the search; end-to-end time is the wall time of the launch.

Concurrency search under CUDA MPS. With CUDA MPS on, on the cross-system host with 12 pinned cores, a further replica keeps paying off (Figure 7b): the search keeps K16/g4K16/g4, which adds 8–9% over K12/g3K12/g3, and stops because K20/g5K20/g5 is predicted to exceed GPU memory. It selects K16/g4K16/g4 in all three launches after a median 504 s; this is the RoboScope Kit (Search+MPS) row of § 5.3, 1.38× faster in evaluation than K12/g3K12/g3 with MPS on the same host and cores. A grid of eighteen fixed configurations under MPS, gg from 1 to 4 (5.0 h of evaluation, Table 14), confirms the choice: K16/g4K16/g4 is its fastest configuration at 482.5 s, ahead of K20/g4K20/g4 (483.2 s) and K12/g4K12/g4 (489.2 s), and every configuration with fewer replicas is at least 5.9% slower.

K/gK/gSuccessesEval. (s)E2e (s)Steps/sCPU coresGPU util. mean (%)Peak GPU mem. (GiB)
1/14513,655.43,676.237.41.215.09.6
2/14531,908.31,932.571.62.229.510.5
4/14501,177.91,204.5115.93.448.511.5
8/14511,166.51,190.5117.23.549.513.5
12/14481,171.41,192.2117.63.649.816.1
16/14511,186.31,208.9115.53.549.018.0
20/14441,170.31,193.6117.23.649.619.6
4/2451992.01,033.2138.24.153.820.4
8/2450637.3693.1214.26.679.322.3
12/2449623.4672.1220.56.981.325.2
16/2451621.2666.5219.86.981.227.0
8/3449581.2638.8234.87.584.631.1
12/3448518.9588.2265.69.192.733.6
16/3447513.7582.7266.79.192.935.1
20/3450511.2575.7266.89.192.837.4
12/4446489.2574.4281.910.295.442.8
16/4450482.5573.7284.310.696.044.4
20/4442483.2575.1284.910.595.746.3

Table 14. LIBERO-Long at fixed K/gK/g under CUDA MPS with 12 pinned cores, one launch per configuration (the grid of Figure 7b).

Runtime optimization. A controlled ladder on one RTX 4090 adds the RoboTwin Simulation Runtime changes one at a time, with a Policy that holds the current state (Figure 5a). Engine and Renderer reuse raises throughput from 8.88 to 9.31 steps/s. For the joint-position Policy, skipping cuRobo initialization reduced total setup time for three episodes from 45.2 s to 1.4 s and raised throughput from 9.31 to 11.63 steps/s. Observing at 16-step chunk boundaries reduces rendered observations from 2,100 to 132 and raises throughput 2.51×, to 29.23 steps/s, and hoisting the duplicate passive force reaches 32.38 steps/s, 3.65× the official-like path. With the real StarVLA Policy at K16/g4K16/g4 on four GPUs, stride 16 together with two-episode work items and the clutter-metadata cache (§ 3.6) is 4.58× faster than stride 1 (Table 16).

RoboTwin Easy ablations

Figure 5. RoboTwin Easy ablations. (a) Throughput of the Simulation Runtime ladder on one RTX 4090; each row adds one change to the row above. (b) Evaluation time of the 500 episodes along the measured configurations. Labels give each value and, in parentheses, the cumulative speedup over the first row. Table 15 and Table 16 list the values.

VariantAdded Simulation Runtime behaviorObservationsSetup (s)Wall (s)Steps/s
00 official-likeOfficial-like path2,10046.92378.88
01 shared contextReuse Engine and Renderer2,10045.22269.31
02 planner warmupSkip cuRobo initialization2,1001.418011.63
03 chunk boundaryObserve at 16-step chunk boundaries1321.471.929.23
04 passive forceHoist duplicate passive force1321.764.832.38

Table 15. Cumulative Simulation Runtime ladder on one RTX 4090.

ChangeConfigurationRunsEval. time (s)Factor
BaselineK1/g1K1/g1, one GPU, stride 1321,582–
Four GPUsK4/g4K4/g4, four GPUs, 80 cores35,9343.64×
WorkersK16/g4K16/g4, same hardware13,9511.50×
Stride and run setupK16/g4K16/g4, stride 1618624.58×
Total25.04×

Table 16. Evaluation time for the 500-episode RoboTwin Easy manifest along the measured configurations. Each factor divides the previous row’s time by the current row’s.

Optimized four-GPU RoboTwin run. The fastest RoboTwin Easy configuration combines four RTX 4090 GPUs and an 80-core quota, K16/g4K16/g4, stride 16, two-episode work items, and the clutter-metadata cache. It evaluates the 500 episodes in 862 s, against 21,582 s for the single-GPU K1/g1K1/g1 baseline: 25.04× faster, and 6.26× fewer GPU-hours. All 500 success outcomes and terminal steps match each of the three baseline runs. Figure 5b follows the measured configurations from the baseline to this run. Four GPUs with one worker and one replica each give 3.64×; sixteen workers on the same four GPUs give a further 1.50×; stride 16 with the run setup above gives 4.58×.

Scalability

Worker and Policy-replica scaling. Figure 7a and Table 18 sweep KK and gg on one RTX 4090 with a 20-core quota. With one replica, throughput rises from 38.4 steps/s at K1K1 to 112.5 at K4K4 and stays at 112–114 up to K20K20, while GPU utilization stays between 45.6% and 46.8%: the replica is the bottleneck. A second replica moves saturation to K8K8, raises throughput to 183.6 steps/s and utilization to 86.7%, and reaches 4.76× over K1/g1K1/g1 at K12/g2K12/g2; a third and a fourth replica add 8% and a further 3%, to 5.31× at K16/g4K16/g4. Per-worker efficiency falls from 0.94 at K2K2 to 0.15 at K20K20 with one replica. Success-outcome agreement with K1/g1K1/g1 is 99.8% at K2K2 and 94.4–98.8% at larger KK, and terminal-step agreement falls from 98.4% to 41.8% as more workers share each task’s episodes.

Where the bottleneck moves. A stage-timed profile of 50 LIBERO-Long episodes shows why (Figure 6, Table 6). Four workers saturate one replica: it is busy 85% of the time, requests wait 48 ms for it, and workers spend 42% of their time waiting for actions. A second replica on the same GPU overlaps these launch-bound inferences and roughly doubles GPU utilization. With twelve workers sharing two replicas, inference again sets the pace: requests wait 221 ms, and each inference stretches to 84 ms under contention. Adding simulators moves the bottleneck to inference, and adding replicas moves it to the GPU, so the right numbers of workers and replicas depend on each other and on the workload and host.

Execution timeline of RoboScope Kit simulator workers and Policy replicas

Figure 6. Execution timeline of RoboScope Kit simulator workers (W) and Policy replicas on the 50 LIBERO-Long episodes of Figure 2, one RTX 4090, with the categories of that figure. (a)–(c) A 2-s window of one run per configuration; rendering ticks mark the end of each simulation step. (d) Worker time, replica busy time, and GPU utilization over the whole run, mean of three runs.

K1/g1K1/g1K4/g1K4/g1K12/g2K12/g2
Evaluation time (s)374.1130.282.7
Robot control and forward kinematics37.128.616.0
Physics integration10.47.94.4
Observable updates and step bookkeeping2.92.31.3
Rendering2.93.13.3
Episode reset11.99.75.7
Task environment creation3.24.16.0
Settling steps1.81.40.9
Waiting for actions29.441.760.0
Episode RPCs and idle0.51.32.4
Mean GPU utilization (%)15.442.380.3
Replica busy time (% per replica)268585
Request wait for a replica (ms)048221
Inference time (ms)55.663.584.3

Table 6. Simulator-worker time by stage (% of worker wall time) and Policy-replica measurements, mean of three runs.

GPU scaling. With one simulator worker and one Policy replica per GPU, four RTX 4090s evaluate the 500 RoboTwin Easy episodes in 5,934 s against 21,582 s on one GPU: 3.64× faster, a parallel efficiency of 0.91 (three runs each; Table 16).

Cross-instance execution. On our evaluation platform, four concurrent instances complete the full MetaWorld MT50 protocol, 2,500 episodes, and the platform merges their shared reports into one result.

Related Work

Benchmarks and evaluation scope. Manipulation benchmarks differ in what a successful episode establishes. LIBERO organizes tasks to study knowledge transfer [16], and LIBERO-Plus tests robustness under systematic perturbations [11]. CALVIN evaluates sequences of language-conditioned tasks [19]; RoboTwin emphasizes bimanual manipulation and scalable task generation [5, 20]; and RoboCasa provides diverse household scenes and tasks [21], including the GR-1 Tabletop collection released with GR00T N1 [22].

Evaluation pipelines and reproducibility. Native evaluators couple task selection and reset with model inference, rollout termination, and score aggregation. OpenVLA supplies benchmark evaluation scripts, and StarVLA unifies evaluation interfaces within its model-development codebase [13, 25]. vla-eval evaluates vision-language-action models across benchmarks with batch-parallel evaluation [8], and RLinf, an infrastructure for reinforcement learning of embodied models, runs parallel environment evaluation [32]. XPolicyLab specifies common observation, action, and trajectory schemas with a minimal policy adapter and separates policy inference from environment execution in a client/server architecture, so that NN policies and MM environments need O(N+M)O(N + M) integrations [31]; RoboDojo evaluates such policies with heterogeneous parallel simulation in Isaac Sim [6]. RoboScope Kit shares the integrate-once goal and adds what evaluation speed needs: separately sized pools of simulator workers and Policy replicas, a measured concurrency search, and runtime optimization declared through the Policy’s observation stride. SimplerEnv relates simulated to real-robot performance [15]. Gymnasium standardizes the environment boundary [28]; RoboScope Kit standardizes the complementary model boundary and keeps benchmark-specific rollout logic in adapters. Findings on the sensitivity of robot imitation learning [18] and the uncertainty of few-run reinforcement-learning evaluation [1, 12] motivate RoboScope Kit’s frozen manifests, archived configurations, paired episode records, and separate reporting of evaluation and search costs.

Simulation and execution efficiency. MuJoCo, robosuite, and SAPIEN supply physics and task infrastructure for manipulation [27, 30, 36]. Isaac Gym parallelizes simulation on the GPU, and ManiSkill3 parallelizes both simulation and rendering on the GPU [17, 26]; EnvPool accelerates supported environments with a parallel execution engine [29]. RoboScope Kit coordinates separate simulator workers and Policy replicas around existing benchmark runtimes, which complements these engines. Distributed reinforcement-learning systems separate environment stepping from learning [9], and SEED RL and Sample Factory move inference into batched accelerator workers [10, 24]. RoboScope Kit applies this separation to evaluation, where the checkpoint is fixed and the objective is complete, reproducible episode records rather than sample throughput for learning. Its chunk-boundary observation removes rendering that an action-chunk Policy never reads.

Policies and the model–benchmark contract. Generalist and vision-language-action policies vary in sensory inputs, action representations, and inference procedures [4, 13, 23]. Diffusion Policy and ACT predict action sequences executed with receding-horizon or chunked control [7, 34], and OpenVLA-OFT studies speed and success under changes to action decoding and adaptation [14]. These choices determine when a policy needs observations, what state it keeps across steps, and how its outputs must be interpreted. RoboScope Kit’s Policy boundary therefore keeps checkpoint-specific processing with the model, declares chunk lengths and observation strides, and keys state by episode.

Discussion

Reporting search and tuning time beside evaluation time shows when automation pays off: RoboScope Kit’s 506-second search adds 75% to its LIBERO-Long evaluation time and leaves it 2.42× faster than the official evaluation end to end. On short workloads the search weighs more: on a 100-episode RoboTwin Easy subset it takes about 60% of each launch (Table 13).

Conclusion

Profiling the official evaluators shows that simulation occupies CPU cores while one loaded model leaves the GPU mostly idle, and that an action-chunk Policy reads only one of every 16 RoboTwin renders. RoboScope Kit integrates each model once as a Policy and each benchmark once as an adapter around its own evaluator; a fixed configuration matches all 500 official LIBERO-Long outcomes. Scheduling separates simulators from Policy replicas and sizes both by measurement: on one GPU, a second replica lets twelve workers reach 4.76× the throughput of one worker and one replica, and with the twelve workers and three replicas selected by the concurrency search, LIBERO-Long evaluation runs 4.45× faster than the official evaluation with equivalent outcomes, or 6.16× with CUDA MPS, where the search selects sixteen workers and four replicas. Four GPUs scale RoboTwin Easy at a parallel efficiency of 0.91, and together with runtime optimization, which renders only the observations a chunked Policy reads, bring 500 episodes from 359.7 to 14.4 minutes, matching the single-GPU baseline on every success outcome and terminal step. Deterministic sharding extends an evaluation across GPU instances.

Policy and Benchmark Contracts

Public Policy Lifecycle

Figure 8 shows the lifecycle of one replica, and Table 2 lists the lifecycle methods. The Control Runtime invokes load once per replica process. Several simulator workers interleave episodes through one replica, so stateful Policies use the episode identifier as their state key.

Evaluation Data Types

FeatureSpec canonical name, image/state/language kind, required flag, description, dtype, and optional shape.

ActionSpec canonical action name, description, optional dimension, and dtype.

BenchmarkSpec benchmark, suite, protocol version, ordered features, and action spec.

SessionContext session identifier, checkpoint path, benchmark spec, and metadata.

EpisodeContext episode identifier, task identifier, and benchmark metadata.

Observation episode identifier, step index, named features, and optional timestamp.

ActionChunk one action vector or a two-dimensional action sequence.

PolicyCapabilities supported benchmarks and suites, required features, maximum batch, supported chunk lengths, action representations, and observation strides.

The Control Runtime validates that declared action representations and strides refer to supported benchmarks and resolves one execution contract per benchmark, which it records with the run.

Benchmark Contracts

Table 3 summarizes the observation and action contracts.

BenchmarkProtocolRequired canonical featuresAction contract
LIBEROlibero-v1images.primary 256 × 256 × 3 uint8; images.wrist; 16-D float32 proprioception; instruction7-D float32 end-effector delta plus gripper
LIBERO-Pluslibero-plus-v1Same named contract as LIBERO7-D float32 end-effector delta plus gripper
RoboTwinrobotwin2-v1Head, left-wrist, and right-wrist RGB; dual-arm joint state; instruction14-D float32 absolute dual-arm joint and gripper target
RoboCasarobocasa-v1Primary RGB; optional wrist RGB; GR-1 state; instruction29-D float32 arms, hands, and waist target
CALVINcalvin-v1Static RGB; gripper RGB; proprioception; instruction7-D float32 relative end-effector and gripper action
MetaWorldmetaworld-v1images.primary 480 × 480 × 3; 4-D end-effector position and gripper aperture; instruction4-D float32 end-effector delta and gripper command

Table 3. Canonical features and actions.

Work Queue State Machine

A work item carries a unique ordinal and identifier, a grouping hint, a benchmark payload, and the expected episode-record count. After completing an item, a worker first claims a pending item with the same grouping hint. LIBERO groups items by task, so a worker keeps its task environment instead of rebuilding it; each RoboTwin item has its own group, so an idle worker takes the next window of any task. Queue directories encode state: pending holds available items written by the Control Runtime; running holds atomically claimed items named with worker ownership; partial holds append-only records for a running multi-episode item; and completed holds idempotent item results used by aggregation. Completion validates the item and group identifiers and the expected record count. A repeated completion with identical content is accepted; differing content raises an integrity error. Worker recovery moves each unfinished claim back to pending and clears its partial state.

Recorded Evaluation Artifacts

Episode records contain the episode key, success, steps, elapsed time, and benchmark metadata. Metrics record inference batches, queue wait, prediction time, transport time, errors, and per-replica summaries. GPU samples give utilization and memory per device; CPU samples give consumed cores and cgroup throttling ratios. Run-level artifacts preserve software revisions, checkpoint and manifest hashes, the selected K/gK/g, the probe history, queue state, results, and analysis outputs.

Experimental Details

Workloads and Checkpoints

LIBERO-Long uses task IDs 0–9, initial states 0–49, seed 7, ten settling steps, and EGL rendering, with the published 30K-step checkpoint StarVLA/Qwen2.5-VL-OFT-LIBERO-4in1. RoboTwin Easy uses RoboTwin 2.0 demo_clean with 50 tasks and episodes 0–9 per task, a validated seed cache, and StarVLA/Qwen3-VL-OFT-Robotwin2. The RoboTwin checkpoint carries future_action_window_size=15, which StarVLA schema 0.21 maps to action_horizon=16.

StarVLA Revisions

LIBERO-Long runs follow one of two StarVLA revisions with the same checkpoint and manifest. The September 2026 runs follow 7e4a473 (30 June 2026), the upstream head at the time: the official reference run and the fixed runs of Table 12. The October 2026 runs follow eaa51c4 (24 February 2026), the revision vla-eval v0.7.0 pins: the cross-system comparison, the worker and replica sweep of Table 18, and the profiles of § 2.2. The official evaluation and vla-eval run the code of the batch’s revision. RoboScope Kit builds the model from StarVLA 7e4a473 in both batches, and its Policy applies the LIBERO client steps of the batch’s revision. The two LIBERO clients differ in three steps: image resizing (PIL bilinear versus OpenCV area interpolation), action unnormalization (the server’s training pipeline versus min/max in the client), and the point at which the gripper command is binarized (after versus before unnormalization). A fixed K1/g1K1/g1 RoboScope Kit run matches the batch’s official evaluation on all 500 success outcomes: 439/500 under 7e4a473 and 451/500 under eaa51c4.

WorkloadK/gK/gnnSuccess/runEval. time (s)Steps/s
LIBERO-Long1/12439/5003,069 ± 5445.49 ± 0.81
RoboTwin Easy1/13231/50021,582 ± 3899.79 ± 0.17
RoboTwin Easy4/42235/5005,646 ± 19336.86 ± 1.26

Table 12. Initial fixed-configuration runs. Each run has 500 episodes. Timing and throughput are means ± sample standard deviations; nn counts runs.

Baseline Configurations and Tuning

The official StarVLA evaluation runs its policy server and LIBERO evaluator from StarVLA commit eaa51c4, with one environment and one model. vla-eval runs release v0.7.0, which pins the same commit behind its model server, and RLinf runs its main branch of 22 October 2026 with two local changes that align its action unnormalization and gripper convention with the StarVLA checkpoint. All systems share the LIBERO-Long manifest, the checkpoint file, a chunk length of 8, and the timing boundary of § 5.1.

RLinf was tuned once offline (Table 4). Each probe evaluates 30 episodes, initial states 0–2 of every task, within a 30-minute search budget. A probe is eligible if it covers all 30 episodes and has at least as many successes as the starting configuration; RLinf keeps the eligible probe with the shortest 500-episode time projected from its probe epochs. The starting configuration and the 20-environment configuration both scored 30, and the latter was selected. Tuning took 1,704.3 s.

Sampled actions in RLinf’s StarVLA evaluation. RLinf’s evaluation rollout samples StarVLA’s actions instead of taking their mean. Its rollout worker forwards the evaluation mode only to an allow-list of model types that excludes StarVLA, so the StarVLA policy runs in its default training mode, which always enables sampling regardless of temperature_eval. The OFT action head then draws each normalized action from a Gaussian around the predicted mean with standard deviation exp⁡(−2.5)≈0.082\exp(-2.5) \approx0.082, on actions normalized to [−1, 1]. The LIBERO-Long RLinf launches in this report sample in this way and were not rerun. Their sampled actions are consistent with the lower agreement between repeated RLinf launches (86.2–88.4%) than between repeated launches of RoboScope Kit (Search) (97.8–99.0%). No configuration value disables the sampling, and the evaluation mode reaches every other model type in the allow-list, so this is likely a bug in RLinf’s StarVLA integration; it is present in RLinf’s main branch as of 30 October 2026. Deterministic evaluation needs RLinf to forward the evaluation mode to the StarVLA policy, a one-line change to the rollout worker. We leave the LIBERO-Long launches as run, and the RoboTwin comparison applies this change so that RLinf evaluates the mean action, as the other systems do.

vla-eval was tuned over its shard count, the number of model servers on the GPU, each server’s maximum batch size, and its batch wait (Table 5). With qq servers, shard ss connects to server s mod qs \bmod q. Probes evaluate 100 episodes, initial states 0–9 of every task, and are ranked by steady-state throughput: policy steps per second from 30 s after the shards start until the first shard finishes. The first stage crosses 8 to 20 shards with one and two servers, each batching up to the number of shards it serves with a 5 ms wait. Throughput All runs use the LIBERO-Long checkpoint, a chunk length of 8, and 12 pinned cores. Steady steps/s and busy cores are averages from 30 s after the shards start until the first shard finishes. Batch is each server’s maximum batch size.

StageShardsServersBatchWait (ms)EpisodesSuccessesEvaluation (s)Steady steps/sBusy cores
01021055004511,215.9––
110110510090317.1107.99.4
11025510091278.5110.49.8
1818510088355.286.07.7
1824510087356.688.28.0
112112510088318.9123.610.7
11226510088295.5126.711.2
116116510090235.6133.611.3
11628510089255.2133.011.7
120120510089233.7135.811.5
120210510092226.4133.411.8
224124510089245.8136.811.6
224212510085259.5133.911.9
214114510090266.7131.711.1
216116010089259.6133.811.3
2161162010089250.8133.611.3
220120010090229.9135.811.5
2201202010092226.6134.411.5
22018510092227.3134.111.5
22037510090227.4132.511.9
32012055004451,026.7142.511.5
32412455004501,017.7141.811.6
32021055004441,038.9141.611.8

Table 5. vla-eval tuning runs on LIBERO-Long, in execution order. Stage 0 is the earlier 500-episode run.

rises from 86.0 steps/s at 8 shards to 133.0–135.8 steps/s at 16 and 20, where 11.3 to 11.8 of the 12 cores are busy; a second server changes throughput by at most 2.6%. The second stage varies the shard count, wait, maximum batch, and server count around that point, and every probe falls within 131.7–136.8 steps/s. The third stage runs all 500 episodes at three configurations of that range and keeps the shortest evaluation time: 24 shards on one server, with batches of up to 24 and a 5 ms wait, at 1,017.7 s. Together with one earlier 500-episode run at 10 shards and two servers, the 23 tuning runs took 9,780.1 s.

Evaluation-Time Profile

StarVLA evaluator. Figure 2 profiles the StarVLA policy server and LIBERO evaluator (revision eaa51c4, bf16) with the settings of the official LIBERO-Long evaluation (no video logging, one BLAS thread) on LIBERO-Long, the first five initial states of each task (50 episodes), seed 7, on one RTX 4090 with a 20-core quota; shares are means of three timed runs. A profiling wrapper instruments the evaluator’s environment creation, reset, initial-state loading, step, and close, the client’s action request, and the server’s request handling, recording monotonic start and end times; each step also accumulates MuJoCo physics time and records each rendering call. nvidia-smi samples GPU utilization at 1 Hz, and kernel time and launches per inference come from an Nsight Systems trace of the server over ten episodes.

RoboScope Kit configurations. Table 6 gives the stage-timed RoboScope Kit runs behind § 5.5. The workload is the same 50 episodes on the same host, using the checkpoint and Policy of the cross-system comparison. Each configuration runs three times. Stage timing records monotonic start and end times in every process and marks the same ranges with NVTX; per control step it accumulates MuJoCo physics, robot control and forward kinematics, observable updates, and rendering. Nsight Systems traces CUDA kernels, NVTX ranges, and OS calls; py-spy samples Python stacks in every process; PyTorch Profiler counts operators and kernel launches per inference; NVML sampling gives GPU utilization.

Table 7 splits one inference at K1/g1K1/g1. Wall times come from a run that synchronizes the GPU at each stage boundary; kernel time is the union of CUDA kernel intervals inside each stage, measured under Nsight Systems. The model runs one forward pass of Qwen2.5-VL-3B and an MLP action head, with no autoregressive decoding.

StageWall (ms)Kernel time (ms)GPU busy (%)Kernels
Image processing and tokenization4.70.000
Vision encoder23.99.7411,486
Language model24.614.7601,641
Action head0.60.4–30
Whole inference57.726.1453,220

Table 7. One StarVLA LIBERO inference by model stage at K1/g1K1/g1 (medians over 273 inferences after 20 warmup inferences).

Each request from a worker to a replica carries about 525 KB; the worker encodes it in 2.6–2.7 ms and the replica decodes it in 2.1–2.4 ms. py-spy places the simulation hot spots in MuJoCo forward kinematics, the physics step, the operational-space controller, and model compilation from XML at episode reset.

Extended Results

Outcome Agreement

Extends § 5.2.

Official reference evaluations. The three official LIBERO-Long launches each score 451/500 (90.2%) with identical success outcomes; per-task success counts are 48, 50, 46, 46, 49, 41, 42, 30, and 49. The fixed K1/g1K1/g1 RoboScope Kit run of the worker and replica sweep matches all 500 success outcomes of each launch, and its terminal steps match on 500, 499, and 499 episodes. In the September batch (Appendix § 10.§ 2), the official evaluation scores 439/500 (87.8%) and a fixed K1/g1K1/g1 RoboScope Kit run matches all 500 success outcomes; per-task success counts are 50, 49, 50, 48, 42, 50, 37, 36, 30, and 47.

Per-episode outcome differences. On RoboTwin Easy, the four-GPU stride-16 run matches each of the three single-GPU K1/g1K1/g1 runs on every success outcome and terminal step, and the four-GPU stride-1 runs agree with one another across K4 to K32 and 48 and 80 cores. On LIBERO-Long, Table 18 gives the success-outcome and terminal-step agreement of every worker and replica configuration with K1/g1K1/g1.

Performance

Extends § 5.3.

Per-run timings and repeats. StarVLA and RLinf ran on the first host with a 12-core CPU quota, launched in interleaved order on the same GPU (Table 10); the speedup of RLinf over StarVLA is the geometric mean of the three paired ratios, with a 95% tt interval over the log ratios. RoboScope Kit (Search) ran on another RTX 4090 of the first host, and vla-eval on the second host, both with all processes pinned to 12 cores; their speedups are ratios of geometric-mean evaluation times with a 95% Welch tt interval on the log times. The worker and replica sweep and the concurrency searches ran on the second host with a 20-core quota. Success is the mean over launches; time and throughput are medians.

OrderSystemLaunchSuccessesEvaluation (s)End-to-end (s)Steps/s
1StarVLA14512,989.93,116.545.8
2RLinf14531,881.71,934.874.2
3RLinf24521,907.51,955.372.0
4StarVLA24512,968.02,983.546.1
5RLinf34501,806.71,857.877.3
6StarVLA34512,997.93,012.545.6

Table 10. StarVLA and RLinf launches in execution order (same host and GPU).

Table 8 lists the values behind Figure 4, Table 9 the RoboScope Kit launches at K12/g3K12/g3 with their CPU and GPU use, Table 10 the StarVLA and RLinf launches, and Table 11 the vla-eval launches and RoboScope Kit at a fixed K8/g2K8/g2.

LaunchMPSSuccessesSearch (s)Eval. (s)E2e (s)Steps/sCPU coresGPU util. mean (%)Peak GPU mem. (GiB)
Search 1, second hostOff448506.0679.01,192.6202.57.897.033.6
Search 2, second hostOff447504.1675.21,187.0204.67.897.233.6
Search 3, second hostOff448506.9679.71,193.9202.57.896.833.5
Fixed 1, first hostOff449–671.2737.6204.97.796.833.8
Fixed 2, first hostOff448–673.5739.1204.67.896.633.7
Fixed 3, first hostOff451–669.3731.0204.67.896.633.7
Search+MPS 1, first hostOn452503.9484.6997.1281.810.695.044.7
Search+MPS 2, first hostOn447504.8486.91,000.5282.510.695.644.5
Search+MPS 3, first hostOn449502.2483.4994.2283.310.595.844.4

Table 9. RoboScope Kit (Search) and (Search+MPS) launches, with CPU and GPU use during the formal evaluation.

OrderSystemSuccessesEvaluation (s)End-to-end (s)Steps/s
1RoboScope Kit K8/g2K8/g2450762.2805.5179.1
2RoboScope Kit K8/g2K8/g2451744.4785.5183.4
3RoboScope Kit K8/g2K8/g2445756.4804.4181.3
4RoboScope Kit K8/g2K8/g2448754.6841.5181.8
5RoboScope Kit K8/g2K8/g2449745.8789.2183.2
6vla-eval4461,007.01,023.6135.1
7vla-eval4511,016.21,041.8133.5
8vla-eval4501,036.01,055.1132.8

Table 11. Launches of RoboScope Kit at a fixed K8/g2K8/g2, the fastest configuration of the sweep with two replicas, and of vla-eval at its tuned configuration, in execution order.

Ablation Study

Extends § 5.4.

The three searches are the LIBERO-Long launches of Table 13: one RTX 4090, a 20-core quota, RoboScope Kit at commit 12f7927; each searches and then evaluates the selected K12/g3K12/g3. The fixed launches evaluate K12/g3K12/g3 without search on the cross-system host with all processes pinned to 12 cores, using the fixed-configuration runner of an earlier RoboScope Kit build; they are the RoboScope Kit (Search) row of Table 8. The Search+MPS launches run the diagonal search with CUDA MPS on the cross-system host with 12 pinned cores, select K16/g4K16/g4, and are the RoboScope Kit (Search+MPS) row. CPU cores are the mean cores the container consumed during the formal evaluation, from cgroup CPU time; CPU throttling stays below 0.7% of the quota. GPU utilization is the mean of 1 Hz NVIDIA samples during the formal evaluation, and peaks at 100% in every launch. Every launch passes the LIBERO-Long audit; the MPS launches observe four MPS clients. The StarVLA, RLinf, and vla-eval launches did not record CPU or GPU use; Appendix C profiles the StarVLA evaluator separately.

SystemSuccess (%)Δ\Delta success vs. StarVLA, pp [95% CI]Agreement with StarVLA (%)Evaluation time (s)Throughput (steps/s)Speedup vs. StarVLA
StarVLA90.2reference2,99045.81.00
vla-eval89.8−0.4-0.4 [−1.6-1.6, +0.7+0.7]91.71,016133.52.93
RLinf90.3+0.1+0.1 [−2.6-2.6, +3.3+3.3]88.11,88274.21.60
RoboScope Kit (Search)89.9−0.3-0.3 [−0.8-0.8, 0.00.0]97.9671204.64.45
RoboScope Kit (Search+MPS)89.9−0.3-0.3 [−1.3-1.3, +0.8+0.8]96.5485282.56.16

Table 8. Speed and outcome agreement in the cross-system comparison. StarVLA on LIBERO-Long, 500 episodes (10 tasks ×\times 50, seed 7), one RTX 4090; StarVLA and RLinf each ran three launches in interleaved order on the same GPU with a 12-core CPU quota, vla-eval ran three launches at its tuned configuration on a second host with 12 pinned cores, and RoboScope Kit (Search) ran three launches on another GPU of the first host with 12 pinned cores, using the fixed-configuration runner of an earlier RoboScope Kit build with the same Policy computation and checkpoint. The StarVLA baseline uses its policy server and evaluator. RoboScope Kit (Search) evaluates K12/g3, the configuration that the diagonal concurrency search of RoboScope Kit at commit 12f7927 selected in all three of its launches on the second host (median search 506 s, Table 9). RoboScope Kit (Search+MPS) ran three launches of that search with CUDA MPS on another GPU of the first host with 12 pinned cores; each searched (median 504 s) and evaluated the selected K16/g4. Success is the mean over launches; time and throughput are medians. Δ\Delta success is the row's success rate minus the official StarVLA evaluation's, with a 95% paired task-cluster bootstrap interval (10 tasks, 20,000 draws); agreement is the share of the 500 episodes with the same success outcome as the official evaluation, launch ii paired with official launch ii. Speedup is StarVLA evaluation time / row evaluation time: for RLinf the geometric mean over the three launches, launch ii paired with StarVLA launch ii; for vla-eval and both RoboScope Kit rows the ratio of geometric-mean evaluation times. Throughput is policy-controlled environment steps divided by evaluation time, excluding settling.

End-to-end is the monotonic wall time of the whole process. RLinf was tuned once offline (1,704.3 s); including that tuning, its median end-to-end time is 3,639 s.

vla-eval runs the configuration selected in Table 5; its search took 9,780.1 s, and including it, median end-to-end time is 10,822 s. Every launch passes the LIBERO-Long audit: 500 unique episodes with the frozen initial states, seed 7, and native outcomes equal to the observer’s.

Fixed-configuration runs. Seven initial runs use fixed configurations: two LIBERO-Long K1/g1K1/g1 runs on a 12-core host, three RoboTwin Easy K1/g1K1/g1 runs on one GPU, and two RoboTwin Easy K4/g4K4/g4 runs on four GPUs with a 48-core quota. Both LIBERO-Long runs score 87.8% with identical success outcomes. RoboTwin Easy scores 46.2% in all three single-GPU runs and 47.0% in both four-GPU runs, with success outcomes and terminal steps identical within each configuration (Table 12).

Concurrency search launches. The concurrency search runs on one RTX 4090 with a 20-core quota, without CPU pinning or CUDA MPS, three times per workload. Each launch is one process that searches and then evaluates at the selected K/gK/g. LIBERO-Long uses the frozen 500-episode manifest; the RoboTwin Easy subset takes the first two episodes of each of the 50 tasks, with observation stride 16 and a 60-minute search budget. An audit checks that the formal K/gK/g equals the selection, that no worker fails or runs out of memory, and that the episode records cover exactly the manifest; on LIBERO-Long, an observer additionally records every formal episode and checks its initial state, outcome, and step count against the manifest and the native records. All six launches pass. In every LIBERO-Long search without MPS, the worker phase reaches the knee at K4/g1K4/g1: doubling to K8/g1K8/g1 gains only 0.4–9.6%, under 25%. The replica phase then stops at K12/g3K12/g3: K16/g4K16/g4 gains only 2.1–2.4%, under 3%. Three further LIBERO-Long launches run the search with CUDA MPS on the cross-system host, with all processes pinned to 12 cores; all pass the same audit. Their worker phase also reaches the knee at K4/g1K4/g1 (K8/g1K8/g1 gains 7.6–8.6%), their replica phase keeps K16/g4K16/g4 (8.2–9.4% over K12/g3K12/g3), and K20/g5K20/g5 is skipped because its predicted memory, 54.7–55.2 GiB, exceeds the 46 GiB usable on the GPU. Table 14 lists the fixed-configuration grid under MPS; its K16/g4K16/g4 launch evaluates in 482.5 s with 450 successes, within 0.5% of the searched launches. In every RoboTwin search, the K16/g1K16/g1 probe runs out of GPU memory, so the search keeps K8/g1K8/g1; the three RoboTwin launches match on every success outcome and terminal step.

Controlled Simulation Runtime ablations. The ladder runs one RoboTwin task with three seeds on one RTX 4090; each variant adds one Simulation Runtime change to the previous one and runs once, with a Policy that holds the current joint state in place of a model.

Optimized RoboTwin configurations. The run uses K16/g4K16/g4, two-episode work items, observation stride 16, and the clutter-metadata cache. Against each of the three single-GPU K1/g1K1/g1 runs, all 500 episode keys, success outcomes, and terminal steps match. Its evaluation time is 6.88× lower than the fixed K4/g4K4/g4 mean.

Each launch evaluates the 500 frozen episodes with the fixed-configuration runner of the earlier RoboScope Kit build used for the RoboScope Kit (Search) row, and passes the LIBERO-Long audit. The g=1g = 1 and K4/g2K4/g2 launches ran later on a second instance of the same configuration, with the same runner and pinning. The diagonal search under MPS selects K16/g4K16/g4 (Table 13). CPU cores and GPU utilization are means during the formal evaluation.

Scalability

Extends § 5.5.

Scaling measurements. Each configuration in Table 18 evaluates the full LIBERO-Long manifest once on the 20-core host, with the same checkpoint and Policy as the cross-system comparison. Table 18 varies simulator workers KK and Policy replicas gg on one GPU.

MeasurementValue
Evaluation time862 s
Evaluation phase (metrics recorder)855 s
Policy loading65.8 s
Runtime preparation0.2 s
End-to-end time928 s
Successes/episodes231/500
Total action steps211,220
Out-of-memory events/worker failures0/0

Table 17. Timing and outcome of the RoboTwin Easy stride-16 run (K16/g4K16/g4, four RTX 4090, 80 cores).

One RTX 4090 and a 20-core CPU quota on a second host. Same checkpoint, 500 episodes, and Policy as Table 8. The first row is the diagonal concurrency search, three launches with RoboScope Kit at commit 12f7927 (median search 506 s, excluded from evaluation time): successes are the mean, time, throughput and GPU utilization the median, speedup the geometric mean of the per-launch ratios, and agreement the mean over launches. GPU utilization is the mean sampled utilization over the run. The g=3g = 3 and g=4g = 4 launches ran later on a second instance of the same configuration, with the same runner and environment; their GPU utilization was not sampled, and their speedup and agreement are against the same K1/g1K1/g1 launch. Efficiency is speedup divided by KK. Agreement pairs each run with K1/g1K1/g1 on identical episodes: success outcome only, or success outcome and terminal step.

Benchmark Compatibility

Supported Benchmark Configurations

The PyPI package supplies the Policy API, the Control Runtime, the Simulation Runtime, and the adapters; each benchmark supplies simulator packages, datasets, manifests, render dependencies, and shared-storage assets.

Failure Classification

Run records distinguish contract mismatches, Policy failures, Simulation Runtime failures, resource limits, record-integrity failures, and infrastructure errors, each tied to the stage that raised it. Worker exits and allocator out-of-memory errors map to requeue and replay; Policy-replica exits and integrity errors abort the evaluation.

BenchmarkSuitesDefault work itemExternal benchmark assets
LIBEROlibero_spatial, libero_object, libero_goal, libero_10, libero_90Episodes of one taskPinned Python environment, simulator, dataset, initial states
LIBERO-Pluslibero_spatial (2,402 tasks), libero_object (2,518), libero_goal (2,591), libero_10 (2,519)Episodes of one variantPinned LIBERO-Plus environment, simulator archive, dataset, initial states
RoboTwindemo_clean, demo_randomized; 50 tasksOne task episode windowRoboTwin source and environment, checkpoint, validated seed cache
RoboCasatabletop; 24 GR-1 tasksOne task with multiple episodesGR-1 simulator and task source, dataset, EGL environment
CALVINtask_D_D, task_ABC_D, task_ABCD_DConsecutive sequencesCALVIN source, dataset, config, official 1,000-sequence manifest
MetaWorldmt50; 50 tasksOne task with all its episodesPinned MT50 environment and protocol artifact

Table 19. Adapter catalog.

References

  1. [1]Rishabh Agarwal, Max Schwarzer, Pablo Samuel Castro, Aaron Courville, and Marc G. Bellemare. Deep Reinforcement Learning at the Edge of the Statistical Precipice. In Advances in Neural Information Processing Systems, 2021. URL https://arxiv.org/abs/2108.13264.
  2. [2]Shuai Bai, Yuyuan Cai, Ruizhe Chen, et al. Qwen3-VL Technical Report, 2025. URL https://arxiv.org/abs/2511.21631.
  3. [3]Shuai Bai, Keqin Chen, Xuejing Liu, et al. Qwen2.5-VL Technical Report, 2025. URL https://arxiv.org/abs/2502.13923.
  4. [4]Kevin Black, Noah Brown, Danny Driess, et al. π0: A Vision-Language-Action Flow Model for General Robot Control. In Robotics: Science and Systems (RSS), 2025. doi: 10.15607/RSS.2025.XXI.010. URL https://www.roboticsproceedings.org/rss21/p010.html.DOI
  5. [5]Tianxing Chen, Zanxin Chen, Baijun Chen, et al. RoboTwin 2.0: A Scalable Data Generator and Benchmark with Strong Domain Randomization for Robust Bimanual Robotic Manipulation, 2025. URL https://arxiv.org/abs/2506.18088.
  6. [6]Tianxing Chen, Yue Chen, Zixuan Li, et al. RoboDojo: A unified sim-and-real benchmark for comprehensive evaluation of generalist robot manipulation policies. arXiv preprint arXiv:2607.04434, 2026.arxiv.org/abs/2607.04434
  7. [7]Cheng Chi, Zhenjia Xu, Siyuan Feng, et al. Diffusion Policy: Visuomotor Policy Learning via Action Diffusion. The International Journal of Robotics Research, 44(10–11):1684–1704, 2025. doi: 10.1177/02783649241273668. URL https://journals.sagepub.com/doi/10.1177/02783649241273668.DOI
  8. [8]Suhwan Choi, Yunsung Lee, Yubeen Park, et al. vla-eval: A unified evaluation harness for vision-language-action models. arXiv preprint arXiv:2603.13966, 2026. URL https://github.com/allenai/vla-evaluation-harness.arxiv.org/abs/2603.13966
  9. [9]Lasse Espeholt, Hubert Soyer, Remi Munos, et al. IMPALA: Scalable Distributed Deep-RL with Importance Weighted Actor-Learner Architectures. In International Conference on Machine Learning, 2018. URL https://arxiv.org/abs/1802.01561.
  10. [10]Lasse Espeholt, Raphaël Marinier, Piotr Stanczyk, Ke Wang, and Marcin Michalski. SEED RL: Scalable and Efficient Deep-RL with Accelerated Central Inference. In International Conference on Learning Representations, 2020. URL https://arxiv.org/abs/1910.06591.
  11. [11]Senyu Fei, Siyin Wang, Junhao Shi, et al. LIBERO-Plus: In-depth robustness analysis of vision-language-action models. arXiv preprint arXiv:2510.13626, 2025. URL https://arxiv.org/abs/2510.13626.
  12. [12]Peter Henderson, Riashat Islam, Philip Bachman, Joelle Pineau, Doina Precup, and David Meger. Deep reinforcement learning that matters. In Proceedings of the AAAI Conference on Artificial Intelligence, volume 32, 2018. doi: 10.1609/aaai.v32i1.11694.DOI
  13. [13]Moo Jin Kim, Karl Pertsch, Siddharth Karamcheti, et al. OpenVLA: An Open-Source Vision-Language-Action Model. In Proceedings of the 8th Conference on Robot Learning (CoRL), 2024. URL https://arxiv.org/abs/2406.09246.
  14. [14]Moo Jin Kim, Chelsea Finn, and Percy Liang. Fine-Tuning Vision-Language-Action Models: Optimizing Speed and Success. In Robotics: Science and Systems (RSS), 2025. URL https://arxiv.org/abs/2502.19645.
  15. [15]Xuanlin Li, Kyle Hsu, Jiayuan Gu, et al. Evaluating Real-World Robot Manipulation Policies in Simulation. In Proceedings of The 8th Conference on Robot Learning, volume 270 of Proceedings of Machine Learning Research, pages 3705–3728. PMLR, 2025. URL https://proceedings.mlr.press/v270/1i25c.html.arxiv.org/abs/2405.05941
  16. [16]Bo Liu, Yifeng Zhu, Chongkai Gao, et al. LIBERO: Benchmarking knowledge transfer for lifelong robot learning. In Advances in Neural Information Processing Systems, volume 36, pages 44776–44791, 2023. doi: 10.52202/075280-1939.DOI
  17. [17]Viktor Makoviychuk, Lukasz Wawrzyniak, Yunrong Guo, et al. Isaac Gym: High Performance GPU-Based Physics Simulation For Robot Learning, 2021. URL https://arxiv.org/abs/2108.10470.
  18. [18]Ajay Mandlekar, Danfei Xu, Josiah Wong, et al. What Matters in Learning from Offline Human Demonstrations for Robot Manipulation. In Proceedings of the 5th Conference on Robot Learning (CoRL), 2021. URL https://arxiv.org/abs/2108.03298.
  19. [19]Oier Mees, Lukas Hermann, Erick Rosete-Beas, and Wolfram Burgard. CALVIN: A benchmark for language-conditioned policy learning for long-horizon robot manipulation tasks. IEEE Robotics and Automation Letters, 7(3):3727–3734, 2022. URL https://arxiv.org/abs/2112.03227.
  20. [20]Yao Mu, Tianxing Chen, Zanxin Chen, et al. RoboTwin: Dual-arm robot benchmark with generative digital twins. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), pages 27649–27660, 2025. doi: 10.1109/CVPR52734.2025.02575. URL https://openaccess.thecvf.com/content/CVPR2025/html/Mu_RoboTwin_Dual-Arm_Robot_Benchmark_with_Generative_Digital_Twins_CVPR_2025_paper.html.DOI
  21. [21]Soroush Nasiriany, Abhiram Maddukuri, Lance Zhang, et al. RoboCasa: Large-scale simulation of household tasks for generalist robots. In Robotics: Science and Systems XX, 2024. doi: 10.15607/RSS.2024.XX.050.DOI
  22. [22]NVIDIA, Johan Bjorck, Fernando Castañeda, et al. GR00T N1: An open foundation model for generalist humanoid robots, 2025. URL https://arxiv.org/abs/2503.14734.
  23. [23]Octo Model Team, Dibya Ghosh, Homer Walke, et al. Octo: An Open-Source Generalist Robot Policy. In Robotics: Science and Systems (RSS), 2024. URL https://arxiv.org/abs/2405.12213.
  24. [24]Aleksei Petrenko, Zhehui Huang, Tushar Kumar, Gaurav Sukhatme, and Vladlen Koltun. Sample Factory: Egocentric 3D Control from Pixels at 100000 FPS with Asynchronous Reinforcement Learning. In International Conference on Machine Learning, 2020. URL https://arxiv.org/abs/2006.11751.
  25. [25]StarVLA Community. StarVLA: A lego-like codebase for vision-language-action model developing, 2026. URL https://arxiv.org/abs/2604.05014.
  26. [26]Stone Tao, Fanbo Xiang, Arth Shukla, et al. ManiSkill3: GPU Parallelized Robotics Simulation and Rendering for Generalizable Embodied AI, 2024. URL https://arxiv.org/abs/2410.00425.
  27. [27]Emanuel Todorov, Tom Erez, and Yuval Tassa. MuJoCo: A physics engine for model-based control. In 2012 IEEE/RSJ International Conference on Intelligent Robots and Systems, pages 5026–5033, 2012. doi: 10.1109/IROS.2012.6386109. URL https://doi.org/10.1109/IROS.2012.6386109.
  28. [28]Mark Towers, Ariel Kwiatkowski, Jordan Terry, et al. Gymnasium: A Standard Interface for Reinforcement Learning Environments. In Advances in Neural Information Processing Systems, volume 38, 2025. doi: 10.52202/085713-4916. URL https://proceedings.neurips.cc/paper_files/paper/2025/hash/d7ff1795e8527f6443371c3933bdb52b-Abstract-Datasets_and_Benchmarks_Track.html.
  29. [29]Jiayi Weng, Min Lin, Shengyi Huang, et al. EnvPool: A Highly Parallel Reinforcement Learning Environment Execution Engine. In Advances in Neural Information Processing Systems, 2022. URL https://arxiv.org/abs/2206.10558.
  30. [30]Fanbo Xiang, Yuzhe Qin, Kaichun Mo, et al. SAPIEN: A SimulAted Part-based Interactive Environment. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), 2020. URL https://arxiv.org/abs/2003.08515.
  31. [31]XPolicyLab Community, Tianxing Chen, Yue Chen, Tian Nian, et al. XPolicyLab: A unified standard and open ecosystem for robot policy evaluation and deployment. arXiv preprint arXiv:2608.09892, 2026.arxiv.org/abs/2608.09892
  32. [32]Chao Yu, Yuanqing Wang, Zhen Guo, et al. RLinf: Flexible and efficient Large-Scale reinforcement learning via Macro-to-Micro flow transformation. In 30th USENIX Symposium on Operating Systems Design and Implementation (OSDI 26), pages 829–846, Seattle, WA, July 2026. USENIX Association. URL https://www.usenix.org/conference/osdi26/presentation/yu-chao.arxiv.org/abs/2509.15965
  33. [33]Tianhe Yu, Deirdre Quillen, Zhanpeng He, et al. Meta-world: A benchmark and evaluation for multi-task and meta reinforcement learning. In Conference on Robot Learning (CoRL), 2019.arxiv.org/abs/1910.10897
  34. [34]Tony Z. Zhao, Vikash Kumar, Sergey Levine, and Chelsea Finn. Learning Fine-Grained Bimanual Manipulation with Low-Cost Hardware. In Robotics: Science and Systems (RSS), 2023. URL https://arxiv.org/abs/2304.13705.
  35. [35]Jinliang Zheng, Jianxiong Li, et al. X-VLA: Soft-prompted transformer as scalable cross-embodiment vision-language-action model. In International Conference on Learning Representations (ICLR), 2026. arXiv:2510.10274.arxiv.org/abs/2510.10274
  36. [36]Yuke Zhu, Josiah Wong, Ajay Mandlekar, et al. robosuite: A Modular Simulation Framework and Benchmark for Robot Learning, 2020. URL https://arxiv.org/abs/2009.12293. Revised 2025-01-18.

Paper details

vlnc:W_8zfexcy4
v1 · latestHistory (1)

published · Fresh — added to the Hub within the last 30 days

added ·

Usage

views · 8

downloads · 0

A view counts once per browser per day, a download each time the PDF is requested.

CC BY 4.0

Original source

  • Computer Science

Not recorded for this paper · View statement →

Looking for related papers…
Contents