Weekly archive · Qwen Math on MATH

Weekly research report

Two-circuit pipeline-parallel RL at longer horizons

This week I pushed the two-circuit method into much longer runs, the kind measured in hours rather than minutes, and the question stopped being whether it trains at all. It trains. The question became why it survives that long, and where the remaining headroom is. The long run held its full horizon while still learning, and at the end it lands on par with ordinary uncompressed RL, slightly ahead on several benchmarks.

The one knob I changed

This week every knob stayed exactly where it was. The only thing I changed was the compression method on the fast circuit: the learned PowerSGD subspace, or a random PRF mask. Both throw away about the same amount of information.

  • Fast circuit, every step. Throws away about 95 percent of every boundary tensor before sending it. This is where the compression sits.
  • Anchor circuit, every 20 optimizer ticks. One dense uncompressed pass. It sends back a 1 bit per parameter sign correction, and it re-estimates the subspace the fast circuit compresses into.

What decides a long run is whether they throw away the same thing twice.

lost the run at ~160

PowerSGD Q, anchor every 20

Twenty steps on one subspace. The same remainder gets discarded every time, so the error stops being noise and becomes a direction the trainer can follow.

reuse the same Q→ same part discarded each step→ errors add up in one direction→ score turns over
diagnostic probe

PowerSGD Q, anchor every 10

Same setup, anchor firing twice as often, run purely to test the story. If reuse is the problem, halving each piece of Q should buy time. It did, which is the cleanest confirmation we have.

reuse Q for half as long→ direction is broken sooner→ errors partly reset→ run finishes 200 steps
held the long horizon

Exact-k PRF, fresh mask each step

Bigger error on any single step, but it points somewhere new each time. Random directions with a preserved average cancel rather than pile up, so the error stays noise and never competes with the reward.

redraw the mask→ different part discarded each step→ errors cancel instead of adding→ learning continues
The short answer. Random compression survives long runs because it is forgetful. A learned subspace is better per step and worse per hour, because being consistently wrong in the same way is exactly what a gradient method is built to pick up and follow.

Why the failure can look sudden

If the drift builds gradually, why does the score fall off a cliff instead of sagging? Because GRPO is a loop, and the loop feeds the damage back into itself.

dense sampler→ answers and rewards→ relative advantages→ clipped policy update→ new sampler weights↺

Compression sits inside the trainer's view of that loop, at the fourth box. Here is what a slowly growing bias there does to the rest of the circle:

  • More token ratios drift past the clip bound. Once |rt − 1| leaves the trust region, that token's surrogate is flat and it stops contributing gradient at all.
  • With less of the batch contributing, the useful update signal shrinks and the compressed actor concentrates hard.
  • A concentrated actor produces narrower answers on the next turn of the loop.
  • Narrow answers destroy the within-group reward spread that GRPO needs in order to rank anything, and the score goes over a cliff.

Which is the real limitation of clipping. It is a guardrail on one step, not a controller across many. It bounds how far a single update can move and says nothing about where three hundred of them end up. That is the gap a compression bias walks straight through.

Only the combined standard clip fraction was logged in these runs. The loss also contains a separate dual-clip guard for extreme negative-advantage cases, but there is no W&B series for that branch here.

How the metrics expose the transition

Five series, and it is worth being exact about what each one measures, because two of them are read through the codec rather than through the model. That distinction turns out to matter more than anything else in this report.

  • critic/score/mean: mean verifiable reward of sampled answers, not a learned critic value.
  • actor/entropy: sharpness of the compressed trainer view, so not the entropy of the policy that actually samples. PRF and Q are not directly comparable here.
  • actor/kl_loss: movement from the reference policy, also measured inside the trainer view. Dense RL raises this too, and it is the most misread number in the set.
  • rollout_corr/kl: the train-inference gap, meaning the per-token disagreement in nats between the dense sampler and the compressed trainer. Trend matters more than level.
  • actor/pg_clipfrac: share of tokens whose PPO surrogate is clipped. The run logger combines the ordinary upper and lower branches.
  • Coupled reading: the collapse is the joint turn in score, entropy, mismatch, and clipping, not one magic value.

The same three runs, with every logged point

The shaded region marks the failed Q run from the first clear score cliff through the entropy trough. Curves are reconstructed from W&B without smoothing.

PowerSGD Q, anchor every 20 PowerSGD Q, anchor every 10 Exact-k PRF, fresh mask dense, KL inset only

Mean verifiable score

The slower Q run learns first, then loses answer quality abruptly. The faster refresh and PRF runs hold.

Actor entropy

The failed Q trainer view becomes extremely sharp. PRF stays diffuse because its mask changes the view.

Actor KL loss

Dense KL also rises. The failed Q run matters because its rise couples to the other failure signals.

Sampler-to-trainer gap

PRF starts with a large but stationary wedge. The failed Q wedge accelerates with the score cliff.

PPO clipped-token fraction

Clipping pressure rises before the failed Q score cliff. The logger combines upper and lower clipping.

Read the clip plot with the RL loop

coherent Q drift→ more ratios clipped→ less useful gradient→ narrower samples

A spike is not enough by itself. The faster Q run also sees clipping pressure, but refresh breaks the persistent direction and the score survives.

Large mismatch alone does not cause collapse. PRF carries a large gap from the beginning but keeps it nearly stationary. The slower-refresh Q run turns a smaller initial gap into a coherent, time-correlated drift. The faster-refresh Q run takes a rough path and recovers. Open the real W&B runs for Q at cadence 20, Q at cadence 10, PRF, and dense.

Why Q has a direction and PRF does not

All of that came from a bias with a direction. Here is where the direction comes from, and this is the place to say properly what the two compressors are.

  • PowerSGD Q. Project each boundary tensor onto a small subspace before sending it, à= AQQT. The columns of Q are the directions the activations actually used most. The anchor works them out by watching the activations during its dense pass and taking an orthonormal basis of what it saw. This is good compression, because it keeps the directions that carry the signal. The catch is that the fast circuit cannot recompute it, so Q does not change at all between anchor fires.
  • Exact-k PRF. Keep a random 77 of the 1536 channels, send only those, and scale them up by 1536/77 so the average survives, (1536/77) · 1S ⊙ h, giving E[h̃] = h. Exact-k means that count never varies, which keeps the wire budget identical on every step. PRF means the subset comes from a keyed pseudo-random function of (seed, layer, step, sample, position, channel), so both ends generate the same mask and the mask never goes on the wire. Worse compression per step, and no memory at all.

Now the mechanism. The backward pass returns through the same projector the forward pass went through, ∂L/∂A = (∂L/∂Ã) PQ with PQ = QQT. So the part that gets discarded is A(I − PQ), and while the anchor holds Q fixed that is the same subspace on every step of the interval. PRF drops a different random subset each step and preserves the mean, so there is no fixed direction to find.

Treat each step's codec error as a vector and add them up. The difference is a growth rate:

Put a number on it. If the error holds one direction for L steps and then jumps, the accumulated drift over T steps grows like √(L·T). Fully held Q is the L = T corner and gives T. PRF is the L = 1 corner and gives √T. Everything the anchor cadence can do lives between those two.

Bias times coherence, not magnitude. PRF injects the larger per-step error of the two and still wins. What breaks a long run is not how big the error is, it is how long it keeps pointing the same way.

Refreshing Q faster helps, and cannot be the fix

That formula also says exactly what faster refresh buys, and it is less than it looks. Halving L divides the drift by √2, roughly 1.4x. It does not change the shape of the curve, it slides you a little way along it. The only cadence that reaches PRF's regime is L = 1, a dense pass on every single step, which is the one thing this whole method exists to avoid.

The runs agree:

at step 200reference KLtrain-inference gapcodec-view entropyclipped tokens
Q, anchor every 20 9.8 30.9, accelerating 0.03 13%, peak 17%
Q, anchor every 10 7.3 16.2, still climbing 0.24 6%, peak 11%
Exact-k PRF 0.7 14.6, flat 7.84 1.6%, falling

Halving the cadence cut the gap by about 1.9x, against the 1.4x the scaling alone predicts, so refresh is doing a little more than bookkeeping. It still lands in the same regime. The gap is climbing when the run ends, at 5.9 → 16.2 with no sign of settling. Entropy has still fallen from 5.5 to 0.24. Reference KL has still reached 7.3. And the improvement is paid for in anchor bandwidth, the one resource this deployment cannot spend freely.

PRF is not on that curve at all. Its gap starts high, 13.8 nats on step 1 before any training has happened, and then moves +0.8 across the whole 200 steps. The level is large and the slope is nearly zero, and the slope is the part that matters. Its clipped-token fraction actually falls, 2.5% down to 1.6%, which is the most useful line in the table. PRF is not spending its trust region fighting its own codec, so nearly all of it stays available for learning. That is the window the long run went on to use.

A high KL is not the weights moving

This is the correction I most want to land. Reference KL and the train-inference mismatch are different quantities, they do not move together, and neither one is a straight readout of how far the weights actually went.

Look at the table again. PRF ends at KL 0.7 with a 14.6 nat gap. Q at cadence 10 ends at KL 7.3 with a 16.2 nat gap. Ten times the KL for a comparable gap. The long-horizon runs sharpen it further. Over 600 steps the compressed run's reference KL rose from 0 to 0.899 while its gap moved only 13.88 to 14.66, and 87 percent of even that came from the sampler sharpening rather than the training view drifting.

The reason is that actor/kl_loss is measured through the codec. It is a reading taken with an instrument that is itself part of the system being measured. Refresh Q or redraw a mask and the number moves while the weights sit still. And the weights really are sitting still. In every regime here, cosine similarity to the base model stays near 1.0 and relative parameter change is 0.03 to 0.13 percent, which is under the 0.195 percent floor at which a bf16 weight can even record a change. Divide the codec-view KL by a codec-off measurement of the same quantity and the ratio grows from 17 to 54 over the run, so it is not a fixed scale factor either. Part of that number is the policy. Part of it is the lens.

The compressed view is a different plane, and a high-entropy one

The entropy column is the same fact from the other side. 7.84 next to dense RL's 0.11 looks alarming and is not, because it is the entropy of the codec view, not of the policy that writes the answers. Sampling stays dense, with full weights. What we have is a sharp sampler being trained through a deliberately blurred lens.

So the compressed trainer is not a slightly degraded copy of the dense one. It works on its own plane, where KL and entropy both read high by construction, and it stays there rather than drifting off it. PRF's entropy moves 7.80 to 7.84 across 200 steps, which is flat. The question worth asking is therefore not how to drag those numbers down to dense values. It is whether the policy learns on that plane.

It does. Training reward goes 0.34 to 0.75 and MATH validation 0.451 to 0.661, with the trainer view diffuse the entire time. Staying diffuse is not a cost we are tolerating either. It is the earlier property seen from the other side, because a view that never commits hard to one direction is a view whose errors never turn into an objective.

The number that actually matters is the train-inference mismatch. Not KL, which the codec inflates. Not entropy, which the codec inflates. Not weight movement, which stays under the bf16 floor in every regime we have run. The gap between the sampler and the trainer is the one quantity whose behaviour separated every healthy run from every unhealthy one this week, and it is what the controller should be built around.

With one refinement, which is the most useful thing the week produced. The mismatch does not have to be small. Run 90 held roughly 14 nats of it for 13 hours and learned the whole way. It has to be stationary. A large settled gap is a working regime. A small growing one is a countdown. That moves the target from minimizing mismatch, which the compression ratio will never allow, to regulating its slope, which now looks reachable.

What the weight-space evidence adds

Weight movement is small in both Q runs, so magnitude does not separate them. What separates them is location: the failing run shifts its movement toward earlier blocks, the surviving run stays more centered, and PRF stays later-heavy. The difference is spatial direction, which is the same story the arrows tell, measured in a different place.

The long run itself

Everything so far was diagnosed on 200-step runs. The real question was whether the explanation holds at the horizon we actually care about, so the exact-k PRF run was taken to 600 steps, 12 hours 52 minutes on a single H200, against a protocol-identical dense control on the same hardware.

It completed the full horizon with no reward or entropy cliff, held its fixed wire budget on every step, and its gap stayed stationary throughout, exactly as the stationarity argument predicts. Validation improved early and stayed there.

MATH validation through the long run

Both runs. Final points read from the training logs.

Both runs improve and hold. Dense and PRF-compressed stay within ~0.015 of each other the whole way, and the late movement is single-sample validation noise.

Training reward, dense vs compressed

Both runs. critic/score/mean per step, raw (no smoothing).

0.0 0.2 0.4 0.6 0.8 0 100 200 300 400 500 600 Dense (uncompressed) PRF-compressed (95%) training step
Reward rises together. Dense leads for the first ~80 steps, then PRF-compressed closes the gap by step 100 and the two track inside noise thereafter (both ~0.35 → ~0.75).

Capability at step 600, dense vs PRF-compressed (in-domain + out-of-domain)

Both step-600 checkpoints on the same benchmark harness (greedy mean@1 for the large sets, avg@8 for the competition sets).

Dense vs PRF-compressed accuracy per benchmark, in-domain and out-of-domain, step 600
Parity, in-domain and out-of-domain. Every gap is within ±0.04 (mean |Δ| = 0.015). Compressed is higher on 6 of 9 benchmarks, dense on 3, which is run-to-run noise rather than a compression penalty.

What we are about to do

The week leaves us with a target that is stated the right way round. We are not trying to make the mismatch small, because at 95 percent compression it will not be small. We are trying to keep it stationary, and to be able to measure it honestly while a codec is in the way.

That is the program now open as issue #93. In short: a periodic codec-off measurement so we can read real drift rather than the lens, a controller that acts on that clean signal instead of on a fixed threshold, and a few codec variants that keep the no-persistent-direction property while carrying less per-step noise than a random mask does. Exact-k PRF stays the baseline everything has to beat. Cross-seed replication of this week's result is still outstanding.

Where this leaves the method. Randomness is what stops a compression view from quietly becoming a second objective, and that is now supported by a full-horizon run that matches uncompressed RL at the end of it. The next question is not whether it survives, but how cheaply we can keep it that way.

Communication-efficient RLVR weekly report · real W&B trajectories · no smoothing
Verified by Shamane