DrumsBench

Research notes / 2026-10-25

The RL rollout loop and why cost per valid verified rollout is the metric

Policy, environment, observation, action, verifier, trainer. Valid, failed-but-valid and invalid rollouts. The branch-from-a-prepared-state experiment, with the prior art named.

Training a computer-use agent by reinforcement learning is a loop. A model looks at a screen, chooses an action, the computer changes, and at the end something checks whether the task got done. The check becomes a reward and the reward updates the model. Infrastructure sits in the middle of every turn of that loop, so infrastructure mistakes become training signal. This note explains the loop and the one number we think matters.

policy (agent)environmentverifiertraineraction: click, type, keyobservation + generationfinal statereward 1 / 0, or noneupdatewhat one trajectory can bevalidverified, uncontaminated, task done. reward 1failed but validverifier ran, task not done. reward 0, still a signalinvalidenv failure, contamination, verifier unavailable.no reward (never scored 0); its own line in the reportdenominator = valid + failed-but-valid; invalid attempts are out of every rate(success, rollouts per host-hour, cost) and get their own line in the report.
One turn of the loop. The policy produces an action from an observation; the environment applies it and returns a new observation; at the end the verifier reads the final state and returns a reward; the trainer updates the policy. Infrastructure owns the environment, the reset and the verifier call.

The parts

Three outcomes, not two

Published systems often score a rollout that crashed as reward zero (ComputerRL states this explicitly). That is the pattern a valid-rollout metric exists to replace. We count three outcomes:

OutcomeWhat happenedRewardCounts in valid rolloutsCounts in attempts
valid, task succeededreset verified, all actions applied under the right generation, verifier ran and said done1.0yesyes
valid, task failedsame, but the verifier said not done0.0yesyes
invalid (environment failure)dirty reset, stale generation applied, timeout, black screenshot, verifier unreachable, a contamination eventnonenoyes

A failed task is still real training experience: the agent tried something and the world said no. An invalid rollout is noise with a reward label attached, and it must be removed from training and from the denominator. The definition is in what Drums is.

From attempt to training example. Each gate can drop an attempt: pre-check, generation check, timeout, verifier availability, isolation. Only attempts that pass all of them are valid; only valid attempts carry a reward into the trainer.

Why cost per valid verified rollout

Throughput numbers in the literature divide by different things: configured replicas, logical capsules, trajectories in a burst, steps per second. None of them is the quantity a training run pays for. A training run pays for valid rollouts with a trustworthy reward, and everything else (failed resets, retries, idle reserve, verifier calls, inference) is cost that must be attributed to those rollouts.

usd_per_valid_rollout = host_usd_per_hour / valid_rollouts_per_host_hour

That is the whole formula in experiment 1 (host cost only; inference is excluded and stated as excluded). The fuller definition from the 2026-10-15 baseline: cost per 1,000 verified rollout attempts equals 1,000 times total attributable cost divided by attempts with a trustworthy final evaluator result, where total attributable cost includes host CPU and RAM hours, GPU and inference, storage and network, provisioning and reset, idle reserve, verifier calls, and amortised integration and operations.

attempts in one host-hourall attemptsinvalidremovedenv failurecontaminationverifier unavailablevalid= success + failed-but-validvalid_rollouts_per_host_hourmeasured: valid rollouts / hours ofrollout phase, confirmed windows at N_maxprice inputsowned host:amortized + powercloud, on demand(24 h minimum)second cloud(EUR, rate of the day)host_usd_per_hourusd_per_valid_rollout= host_usd_per_hour / valid_rollouts_per_host_hour/
What goes into the numerator and what goes into the denominator. Failed and invalid attempts stay in the cost; only valid rollouts go in the denominator. The design value for a window is 15 minutes per N and a 60-minute soak; bursts are reported as bursts.

Three facts about this metric from the prior-art read:

The differentiating experiment: branch from a prepared state

The one experiment we think separates a shared runtime from a tuned VM pool is this. An agent opens LibreOffice, loads a document, and reaches an intermediate state after k steps. From that exact state, create many independent continuations and evaluate each. Compare how efficiently each runtime creates those continuations, how faithful they are to the prepared state, and what each valid continuation costs.

What the experiment needs before it can be run, in order: a restore that is faithful (locks included), a reset that is correct, isolation with a positive control that fired, then throughput at a confirmed N, then cost, and only then an RL run where nothing changes but the environment. The order is the gate order on methodology.