Weekly update · week of 2026-07-20 · self-contained for other teams · base Qwen2.5-Math-1.5B on MATH · reinforcement learning from verifiable rewards with GRPO · follows the earlier two-circuit readouts.
learns to full strength matches uncompressed in and out of domain one open problem: a train and inference mismatch
Validated by Shamane
The communication-efficient method learns the task to full strength, both in domain and out of domain, and matches an uncompressed run at the point where the base model saturates. Phase one also identified the one open problem: a train and inference mismatch that compression makes far larger than normal, and that shows up cleanly as a rising KL between the trained policy and the base policy. In the RLVR setting, on the datasets used here, we can manage the collapse this mismatch can cause. We have since conducted further analysis of this mismatch to guide future work, especially for realistic asynchronous RL settings.
To measure and understand every part of the system, our experimental setup is a plain verl GRPO run on math problems whose answers can be checked automatically, where the compression is applied only to the trainer while the vLLM inference engine stays normal. The goal was to train a stable two-circuit setup with otherwise standard settings.
The base model is Qwen2.5-Math-1.5B and the dataset is MATH, chosen so our numbers line up with the existing efficient-RLVR literature. Training uses about 7500 problems in batches of 512 prompts, and the runs in the results section go to 100 optimizer steps, which is just under seven passes over the training set and the point where the dense baseline saturates. We validate on MATH500, a held-out set of 500 problems, and we report per-benchmark accuracy across a wider suite at the end. Each prompt draws a group of 8 samples, with a prompt and response budget of 1024 and 3072 tokens.
The tuning knobs the two circuits carry were all settled in earlier weeks and are held fixed here. The activation compression rank is 77 and the anchor fires every 20 optimizer ticks with a matching freshness delay. This phase asked a simpler pair of questions. Does the whole system actually learn, and where are its limits?
The whole method reduces to three small update rules. First, the fast circuit compresses each layer's activation matrix A through a shared low-rank basis Q. The anchor owns this basis, and over the run, on each anchor fire, Q is refreshed by one power-iteration step built from the activations the dense anchor replay just saw:
Second, every time the anchor fires, its raw dense gradient refreshes a running memory M of what the uncompressed gradient looks like:
Third, between anchor fires, every compressed gradient G is corrected by re-signing most of its magnitude with the signs stored in M:
The anchor snapshots are stale by the anchor delay, so the update extrapolates linearly from the last snapshot to approximate the current fast-circuit weight, a two-checkpoint secant:
We tested other fits, a four-checkpoint fit and a progressive schedule, and this linear secant was best, since compression adds a little randomness the higher-order fit chases and the linear one resists.
Every curve in this section is cut at 100 optimizer steps, the point where the dense baseline saturates, so the conditions are directly comparable and no late-run behavior is mixed in. The headline comparison is normal dense training with no compression against the full compressed system with the anchor and the weight projection. Previous no-projection ablations showed that the projection primarily improves stability, so the figures below focus on the projection-based system.
The cleanest view of the training signal is the per-step group score, the mean checked accuracy of the answers the sampler generates for each training batch. This is the critic score channel in the training logs, and every logged step is drawn below with no smoothing. Both learning conditions climb together from about 0.35 at step 1 to about 0.71 at step 100, and their curves are indistinguishable within batch noise. A third curve settles the anchor question. With the anchor circuit turned off, the same compressed trainer never learns and its score stays near 0.34 for the whole run. That point was settled in earlier weeks, so it appears here only as the reference line that shows the anchor is what makes compressed learning possible.
Validation tells the same story. The figure below is the matched pair of runs, dense with no compression and the anchor with the weight projection, both validated every 25 steps from the same base checkpoint near 0.45. The two curves track each other the whole way. At step 25 they sit at 0.637 and 0.609, they meet near 0.65 by step 50, and by step 100 the anchor with projection reaches 0.679 against dense at 0.674, a hair above it. Both land more than twenty points above the base model, and the gap between them at any single point is within the sampling noise of a 500-problem measurement. This is the sense in which the projection variant is the stronger one to carry forward, even though the accuracy difference is small.
Everything above is one model on one dataset, Qwen2.5-Math-1.5B on MATH. To check the result is not specific to that pair, we ran the identical compressed setup on a second model and a second dataset: DeepSeek-R1-Distill-Qwen-1.5B on DeepScaleR. The method is unchanged, PowerSGD rank-77 activation compression with the rank-1 RELEX weight projection and the paired dense anchor, and it is compared against a dense control that differs only in having compression turned off. Both use the same GRPO recipe, a 512-prompt batch, eight rollouts per prompt, and a 4096-token response budget. We read the comparison at step 50, which is 25,600 training prompts, or 204,800 sampled rollouts at eight per prompt.
This is the phase-one result reproduced on a different base model and a different training set: at a matched compute point the compressed trainer learns as well as dense training, in and out of domain, on both pairs we have tried.
This system creates an obvious train and inference mismatch, the kind of gap the RL community works to reduce. It arises because the two sides of the loop run different computations. The sampler generates every answer with the true, uncompressed weights inside vLLM. The trainer then scores those same tokens through its compressed forward pass. The two sides therefore assign different probabilities to the same tokens from the first step onward, before any drift has had time to accumulate. Ordinary RLVR carries a small version of this gap, because the inference engine and the trainer kernels are never numerically identical. Compression multiplies it. The probability gap on sampled tokens is more than 300 times what a normal run shows, and the correlation between the sampler and the trainer log probabilities, near perfect in a dense run, sits at only about 0.15 under compression and falls toward zero at collapse. The full standalone analysis of this mismatch, including how it is measured, is in the earlier train and inference mismatch report.
The danger is that this can fail silently. At the point where the base model has already saturated the task, everything looks healthy, so nothing in the accuracy or the reward warns you that a problem is building. Here is why it can still break later. The low-rank compression applies a biased, coherent distortion, which nudges every update slightly in the same direction. The wedge between the trainer and the sampler accumulates step after step, and the effective policy drifts away from the base policy. To probe this we deliberately trained a few models for longer than the task needs. Some of them do collapse, but only well after the saturation point. In one longer run validation held at 0.671 at step 125 and then fell to 0.046 at step 150, and the training reward measured on the true-weight sampler dropped from about 0.68 to 0.17, so the policy really broke rather than only its compressed view. For the RLVR runs in this report, on these datasets, that risk is manageable, since the collapse sits well past the point where training is already done.
The cleanest running readout of the mismatch is the KL between the trained policy and the base policy, logged at every step. In ideal RLVR this should stay almost flat, because solving a task like this does not require moving the weights much, and normal GRPO training behaves exactly that way. The dense run's KL is 0.004 nats at step 50 and still only 0.009 at step 150. Our compressed system is a different picture. Its KL passes one nat around step 50, reaches about 6 nats by step 100 and keeps climbing. It is important to see that the size of this rise is also dataset and model dependent. On a second model family and dataset, the same climbing KL sits noticeably lower than it does here, but the point still holds, since it is far above the almost flat dense baseline. Both curves below are drawn from every logged step, the same points the training dashboard shows.
Two control runs sharpen the diagnosis. Normal RL does not apply dropout in the trainer, for exactly this mismatch reason, so we checked how the KL behaves when we train with attention dropout anyway. It stayed very low, near 0.11 nats and flat for the whole run. Dropout is zero-mean noise that is redrawn on every step, so it never builds a consistent wedge between the trainer and the sampler, and the perturbation averages out across the run. That observation motivated trying a PRF mask, a stochastic random-mask compression codec that is roughly similar to dropout in spirit though not exact, since it is a real compression method applied to the same tensors as the low-rank scheme. Its KL was also good, staying low and rising only slowly, and its end-task results held up well against the PowerSGD compression. The pair of controls points at one conclusion. Unbiased randomness that is redrawn each step is benign. A coherent low-rank bias that removes the same subspace on every step is what makes the KL run away.
Modern large-scale RL is moving toward asynchronous designs. The recent GLM-5 report and related work run generation and training on separate hardware, and the trainer consumes rollouts produced by a policy from a few updates back. This matters most in agentic RL, where a single rollout can be a long multi-turn interaction and the trainer cannot hold everything in lockstep, so it trains on whatever finished rollouts are available. In these systems the old log probabilities are usually not recomputed. The rollout engine, SGLang in GLM-5 and vLLM in our stack, records the token probabilities at generation time and the trainer reuses them directly as the behavior policy. Every update then passes through the standard clipped objective:
With the rollout engine providing the probabilities, any disagreement between the inference computation and the trainer computation lands directly in the ratio r. Our compression alone pushes r far from 1 on most tokens, before any staleness is even added. In the mismatch analysis, even a loose clip that lets the ratio drift by a factor of five already drops about 61 percent of the tokens. A standard clip is far tighter and would remove more than 65 percent, against well under one percent for a dense run. Losing most of the tokens starves every update. This is why the mismatch has to be answered before this technique meets a realistic asynchronous RL system.
The same clip from Section 4.3 explains both why the compressed system learns and where it eventually fails. GRPO maximizes a clipped surrogate with a small reference-KL penalty:
In these runs the ratio r is taken between two trainer forward passes that share the same codec, so the large codec distortion is common-mode and cancels, r stays near one, and the clip almost never fires. The advantage  still comes from the true-weight vLLM rollouts, so a real learning signal survives, and the ratio-one dense anchor supplies the direction it needs (Section 5). The failure comes later and from the same clip. The compression bias is coherent, so it accumulates instead of averaging out, the trainer policy drifts off the behavior policy, r is pulled away from one, and the clip fires on more and more tokens until the update starves. The two panels below track exactly this, near zero while the model learns and accelerating at the end, which is the early edge of the collapse in 4.1.
To take this technique beyond the setting shown here, and above all into asynchronous RL, we should treat the train and inference mismatch as the problem to solve head on rather than work around. The most immediate option is to apply the same compression inside vLLM, so the sampler and the trainer see the same computation and the gap closes by construction. The cost is that compressing the sampler could distort the sampling itself, and how much that matters is unknown. One further thought is that with an SSN model this would not be a problem at all, since the compressed computation would be the model itself on both sides of the loop. We leave that one open for discussion.