WorldPager: Zero-Stall Tiered Memory for Long-Horizon World Models on a Single Consumer GPU
Organizations: School of Computer Science and Engineering, University of Electronic Science and Technology of China, Chengdu, China
Abstract
Interactive world models keep the KV of past chunks as retrieval memory so that revisited places stay consistent. On a single consumer machine (one RTX 4090, 32 GiB of host memory, one NVMe SSD), long sessions with such memory hit two walls. The first is capacity: the KV of Matrix-Game 2.0 exhausts host memory after 45 seconds of video in bf16 and after 2.8 minutes in int4. The second is the model's positional horizon of 4.3 minutes. We show that this memory is capacity-bound rather than bandwidth-bound and that its access set is known before compute, because the camera pose is an input. An analytical model built on these observations predicts spill points to within one chunk and classifies zero versus non-zero stalls correctly on held-out configurations. Guided by it, WorldPager stores int4 KV in a GPU/DRAM/NVMe hierarchy instead of recomputing it, prefetches each chunk's memory from the extrapolated pose, never waits on a miss, and writes back in the background; to our knowledge, it is the first to place the KV memory of an interactive world model on an NVMe tier with zero-stall prefetching. With training-free position handling, it generates 37.5 minutes of video continuously with zero stalls and constant host memory, at about 9.5 frames per second. On a sealed test set, int4 storage shows no measurable quality loss; on long-gap revisits it lowers image quality by about one MUSIQ point.
Figures & tables
| LLM decoding (selective KV) | World model with retrieval memory | |
|---|---|---|
| Compute per step | short (one token) | long ( 1.2 s per chunk) |
| Binding limit | transfer bandwidth | capacity (chunk 21 / 60 / 226) |
| Access set known | after the query is computed | before compute (pose is an input) |
| Prefetch | speculative [ 7 ] | from the control input |
| Prediction | Held-out configurations | Met |
|---|---|---|
| Spill point and first NVMe read ( 1 chunk) | int8 (emulated), MG2 64 GiB, LingBot 200 / 240 | 8 / 8 |
| Zero vs. non-zero stall | b1_ws, int8, LingBot (rate-limited) | 15 / 15 |
| Non-zero stall within 30% | same | 7 / 9 |
| All registered criteria (MG2, int8) | 22 / 24 | |
| LingBot read path | 200 / 240 chunks, 3 repetitions | 45 / 48 |
| SATA-class emulation (0.5 GB/s) | MG2, 2000 chunks, 2 repetitions | 10 / 10 |
| Component | Model term it answers |
|---|---|
| Store int4 KV, not latents ( III-A ) | per-chunk bytes ; recompute cost vs. |
| Three-tier store ( III-B ) | spill point |
| Pose-driven prefetch, stale fallback ( III-C ) | zero-stall condition |
| Background write-back ( III-D ) | write bandwidth |
| Position handling ( III-E ) | native horizon of 341 chunks |
| Design (storage) | Chunk (ms) | FPS | Stall (ms) | Exhausted |
|---|---|---|---|---|
| Sliding window (none) | 1022.9 / 1029.3 | 11.73 | 0 | – |
| WorldKV-style (GPU, bf16) | – | – | – | 21 (GPU) |
| Synchronous (DRAM, bf16) | 1259.0 / 1275.2 | 9.53 | 58.2 | 60 (host) |
| ReWorld-style (DRAM, bf16) | 1207.6 / 1223.4 | 9.94 | 0 | 60 (host) |
| Synchronous (DRAM, int4) | 1230.8 / 1253.2 | 9.75 | 15.8 | 226 (host) |
| WorldPager (tiers, int4) | 1210.5 / 1226.2 | 9.91 | 0 | not reached |
| Interval | Synchronous eviction | Background write-back |
|---|---|---|
| Chunks 3–225 (pool not full) | 0.0 ms | 0.0 ms |
| Chunks 225–240 (eviction) | +102.0 ms | +1.8 ms |
| Chunks 240–256 (revisits) | +135.8 ms | +4.9 ms |
| Runs | Gap | LPIPS | MUSIQ |
|---|---|---|---|
| All 15 (main) | short | 0.005 [ 0.015, +0.005] | 0.04 [ 0.36, +0.28] |
| mid | 0.022 [ 0.037, 0.008] | 0.67 [ 1.59, +0.17] | |
| long | 0.026 [ 0.043, 0.009] | 1.28 [ 2.25, 0.36] | |
| No drift (10) | short | 0.015 [ 0.024, 0.007] | +0.15 [ 0.41, +0.70] |
| mid | 0.036 [ 0.058, 0.015] | 0.86 [ 2.37, +0.60] | |
| long | 0.021 [ 0.035, 0.006] | 0.97 [ 1.76, 0.17] |
| Design (budget) | Chunk (ms) | Wait P50 / max (ms) | 1st write | 1st read |
|---|---|---|---|---|
| Sliding window | 2576 | – | – | – |
| On-demand swap-in (32 GiB) | 3488 | 37.7 / 375.4 | 102 | 179 |
| WorldPager (32 GiB) | 3491 | 0.017 / 0.103 | 102 | 178 |
| WorldPager (64 GiB) | 3496 | 0.017 / 0.107 | 218 | 236 |
| Work | Workload | Where KV lives | Prefetch signal | On a miss | Training-free | Beyond native pos. |
|---|---|---|---|---|---|---|
| WorldKV [ 4 ] | world model | GPU / CPU | – | – | yes | – |
| ReWorld [ 5 ] | world model | GPU + host DRAM (bank 30) | current pose | – | no | – |
| OmniMem [ 9 ] | long video | GPU + host DRAM | – (reactive) | waits | no | – |
| WorldPlay [ 3 ] | world model | frames; KV recomputed per chunk | – | – | no | yes (reframing) |
| WorldTrace [ 19 ] | world model | GPU + host DRAM (keys) | – | – | yes | yes |
| Velox [ 20 ] | world model | GPU | – | – | yes | – |
Appendix figures & tables1 asset
Supplementary material from the paper’s appendix.
Appendix
| Scene | Seed | D | LPIPS (short / mid / long) | MUSIQ (short / mid / long) | ||||
|---|---|---|---|---|---|---|---|---|
| 0000 | 5 | +0.016 | 0.116 | 0.089 | 0.54 | 2.56 | 1.73 | |
| 0000 | 6 | 0.062 | 0.021 | +0.041 | 0.77 | 3.22 | 0.99 | |
| 0000 | 7 | yes | +0.128 | +0.076 | +0.035 | 1.37 | 7.49 | +2.33 |
| 0000 | 8 | yes | +0.035 | 0.029 | +0.014 | 0.80 | +1.52 | 11.03 |
| 0000 | 9 | yes | 0.068 | 0.033 | 0.065 | +0.35 | +3.35 | +0.35 |
| 0003 | 5 | +0.080 | +0.005 | 0.027 | +2.98 | +1.74 | 1.93 | |
KV-Cache Offloading
KV-cache offloading moves language models’ attention state from GPU memory to CPU, SSD, or remote tiers to expand context and serving capacity.
See all 42 papers