Rollout Runtime v2: baseline and selected-backend evidence¶
The pre-v0.11 Hugging Face path is now frozen as the compatibility and performance baseline for Rollout Runtime v2. All 24 preregistered cells completed on one WSL2 RTX 4080 without an OOM or discarded cell.
This result measures actor rollout only. It is not a task-quality experiment, does not include teacher scoring or an optimizer update, and does not yet exercise typed grouped-sample semantics.
Frozen setup¶
| Item | Exact value |
|---|---|
| Source | 0d6e0070ae73ef35f718aec3624ee5263ac96e3a |
| Candidate wheel | 0256bd9e63ca6ed52999a5073a3577a008581a8d4418062314750d86f21cd5fe |
| Actor | Qwen/Qwen3-0.6B at c1899de289a04d12100db370d81485cdf75e47ca |
| Weight payload digest | b29cd98b83f9bddc7ec8943be5f142243e956f448f13456847849e5b8615b413 |
| Runtime | Python 3.12.13, Torch 2.13.0+cu130, Transformers 5.14.1, NF4/BF16 |
| GPU / driver | NVIDIA GeForce RTX 4080 16 GiB / 596.49 |
| Workload | 4 logical prompts; prompt 128/512; response 64/256/512; n=1/4; greedy and seeded stochastic |
Measured rollout throughput¶
Every row generated the full configured response bound. Rates use actual generated tokens and median wall time over three measured repetitions after one warmup.
| Prompt | Response | Samples/prompt | Greedy tokens/s | Seeded stochastic tokens/s | Peak reserved GiB |
|---|---|---|---|---|---|
| 128 | 64 | 1 | 95.42 | 29.93 | 1.053 |
| 128 | 64 | 4 | 97.07 | 29.95 | 1.053 |
| 128 | 256 | 1 | 95.87 | 29.95 | 1.084 |
| 128 | 256 | 4 | 92.35 | 30.07 | 1.084 |
| 128 | 512 | 1 | 93.16 | 30.23 | 1.086 |
| 128 | 512 | 4 | 92.91 | 30.30 | 1.086 |
| 512 | 64 | 1 | 92.68 | 30.28 | 1.086 |
| 512 | 64 | 4 | 83.81 | 30.21 | 1.086 |
| 512 | 256 | 1 | 80.10 | 30.31 | 1.086 |
| 512 | 256 | 4 | 77.24 | 30.06 | 1.086 |
| 512 | 512 | 1 | 66.28 | 29.92 | 1.086 |
| 512 | 512 | 4 | 66.26 | 30.31 | 1.086 |
The two sampling paths have different pre-v0.11 implementations. Greedy uses one padded batch but recomputes the full prefix at each step; seeded stochastic preserves per-request RNG by running the established sequential KV-cache path. These measurements are therefore separate baselines, not an algorithm ranking.
What remains unmeasured¶
The legacy public backend does not expose clean prefill, decode or time-to-first
token boundaries, so those fields are not_measured, not zero. Policy sync is
not_applicable for an actor already loaded in the same process. Teacher
scoring, actor update and full-cycle time are also not_measured in this
rollout-only baseline and remain required before v0.11 release.
n=4 here is four independently repeated requests per prompt. Transactional
group identity, grouped resume and reward composition do not exist in this
baseline and cannot be inferred from it.
Artifact integrity¶
| Artifact | SHA-256 |
|---|---|
| Preregistration | 8cc3ba738c69b59ed19c22c1de874fd00249404198a3e05983477dc8899bb7e5 |
| Raw measurement | 2e303eabb559b843d25377a7c72e0aeb0219eec7eb8bc109c0419839b3251170 |
| Final identity-bound result | b25daee7ee726b7a7be18d7dbe26590fb61325bf212cfd9e7110b69f5fa8889c |
| Frozen calculator benchmark | 53fc1d4d5b7adee09618d77ad62d4086ba56b78569832d6fc7c3bcd5c2695bbc |
See the method for timing and invalidation rules. The next backend must use this workload unchanged and pass the preregistered correctness, memory and 256/512-token speedup gates.
First development candidate (preserved negative result)¶
The exact 0.11.0.dev0 wheel at source 690db9b079bfecfec14dc3bedc3aa0308cbacf60
ran the same 24 cells with hf_cached and managed vLLM 0.28.0. Both runs used
wheel SHA-256 266fcd59bb3e85b02974a92b26c9a4e59c7c9b9205853d17baadcfffdb898e27
and the baseline software stack: Python 3.12.13, Torch 2.13.0+cu130,
Transformers 5.14.1, PEFT 0.20.0 and bitsandbytes 0.50.2.
| Response | Sampling | hf_cached / reference |
vLLM / hf_cached |
vLLM tokens/s |
|---|---|---|---|---|
| 64 | greedy | 0.65–0.76× | 1.73–1.80× | 112.7–114.9 |
| 64 | seeded stochastic | 1.83–1.87× | 1.94–2.06× | 109.3–114.2 |
| 256 | greedy | 0.71–0.85× | 1.71–1.77× | 111.8–117.4 |
| 256 | seeded stochastic | 0.84–1.85× | 2.04–4.55× | 113.1–114.5 |
| 512 | greedy | 0.67–1.05× | 1.65–1.87× | 114.8–117.7 |
| 512 | seeded stochastic | 1.84–1.90× | 1.90–2.05× | 108.5–114.4 |
Ranges contain both prompt lengths and both n values. One hf_cached
p512/r256/n4 stochastic cell had measured runs of 118.807, 267.930 and
162.641 seconds; the median and resulting 0.84× speedup remain in the result.
Gate outcome¶
hf_cached >= 2× hf_referenceat response 256 and 512: failed. The conservative preregistration interpretation requires every paired cell to reach the threshold.- vLLM
>= 1.2× hf_cachedat response 256 and 512: passed in every cell; the observed range was 1.65–4.55×. - Peak total GPU memory below 14.5 GiB: passed.
hf_cachedpeaked at 4,598 MiB and vLLM at 11,820 MiB. - Eight vLLM refreshes: passed. Every sync and identity was unique, with no monotonic memory growth; the localhost port closed at teardown.
- vLLM PG-k1 log-probability conformance: failed. Greedy token agreement was 32/32, while maximum absolute log-probability difference was 0.0194 against the 0.01 NF4 threshold. Direct GKD remains the supported scope.
This candidate failed the local-backend speed gate and triggered the profiling work that produced the qualified candidate below. Its bytes and failed outcome remain part of the record.
Candidate artifact integrity¶
| Artifact | SHA-256 |
|---|---|
hf_cached raw |
a9f8f0b0275d940f30497a0d88d76da0e112ffbe2bc1b37a42c6ed313b852242 |
| vLLM raw | abf14d73a7289f9619515943b4c8d7dafe7cd187fefe928655739ac7ed1ab16c |
| Aggregate result | 32be86856263ccdf787986c4ec54570d323af8c238dc1664e00a9ce41ca393c4 |
| Frozen calculator | 53fc1d4d5b7adee09618d77ad62d4086ba56b78569832d6fc7c3bcd5c2695bbc |
The aggregate JSON
contains every cell, exact raw hashes, gate calculation and backend-selection
state. scripts/publish_rollout_runtime_v2_evidence.py --check reproduces it.
Qualified v0.11 candidate¶
The exact 0.11.0.dev0 wheel at source
3cfa09b0b7aa2ee63f5702a5766b73d9a32fa8b9 reran the same 24 cells. Both
backends used wheel SHA-256
33c30834dcd01001a5c2ae619a1c982ceb2ad5fcc457998baa9f960a87267eba.
The local backend keeps the NF4 actor as the training source of truth, builds a
BF16 inference mirror, and synchronizes the exact live LoRA tensors before each
policy version. The managed vLLM backend uses CUDA Graph execution.
| Response | hf_cached / reference |
vLLM / hf_cached |
hf_cached tokens/s |
vLLM tokens/s |
|---|---|---|---|---|
| 64 | 2.39–4.30× | 2.99–5.71× | 124.2–242.5 | 626.6–806.0 |
| 256 | 2.38–4.30× | 3.19–5.97× | 125.9–240.8 | 685.6–836.4 |
| 512 | 2.54–4.23× | 3.08–5.88× | 124.3–248.7 | 693.4–821.2 |
Ranges include both prompt lengths, both n values and both sampling modes.
Each cell used one warmup and three measured repetitions. Compilation and
engine warmup happen before measured repetitions and remain visible in the raw
artifact.
Gate outcome¶
hf_cached >= 2× hf_referenceat response 256 and 512: passed in every cell, with conservative minima of 2.375× and 2.541×.- vLLM
>= 1.2× hf_cachedat response 256 and 512: passed in every cell; the full observed range was 3.076–5.966×. - Peak total GPU memory below 14.5 GiB: passed.
hf_cachedpeaked at 6,504 MiB and vLLM at 11,931 MiB. - Exact policy refresh and teardown: passed for both backends across eight unique policy identities, without monotonic memory growth.
- Local NF4/mirror conformance: passed with exact greedy tokens and maximum sampled-token log-probability difference 0.002483 against the 0.01 limit.
- vLLM PG-k1 log-probability conformance: failed closed. Greedy tokens were
exact, but the maximum difference was 0.019646. vLLM is therefore selected
for direct GKD only; PG-k1 stays on
hf_cached.
The runtime performance gate is complete. Release publication still requires the exact-wheel qualification and release workflow.
Qualified-candidate artifact integrity¶
| Artifact | SHA-256 |
|---|---|
hf_cached raw |
dd29402642ab68f7854579bd68accb4b449ca0a2ec4cb8b90d834ee2e6f03757 |
| vLLM CUDA Graph raw | 00c55a25deb9ecf7786d7f54ccba4c5c5b0bcce4bf1e46fe8ac6b48d0596194c |
| Aggregate result | 0fb2066a8b567adbb011113141b2b4e3a4fa281cf3f3d13f6eecd1d7b0499a5d |
| Frozen calculator | 53fc1d4d5b7adee09618d77ad62d4086ba56b78569832d6fc7c3bcd5c2695bbc |
The qualified aggregate JSON
binds every cell to the exact wheel, raw files and preregistration.
scripts/publish_rollout_runtime_v2_candidate.py --check reproduces it.