Downloads · 30 days
0
ziansu/r2egym-rad-negative-warmup
r2egym-rad-negative-warmup is a text generation model from ziansu. Use it when you need the model to write or continue text. It is set up for transformers. The card lists the license as apache-2.0.
One RAD negative-warmup run (nwb0921a) on the R2E-Gym subset, starting from Qwen/Qwen3.5-4B, published every five updates so the run can be studied as a trajectory rather than an endpoint, plus step50, the run's best…
Downloads · 30 days
0
Access
Public
Updated Sep 26, 2026
Repo size
121 GB
Likes
0
Public
Click a slice to open those files.
.safetensors83.9 GB · 100%
From the Hugging Face model README
One RAD negative-warmup run (nwb0921a) on the R2E-Gym subset, starting from
Qwen/Qwen3.5-4B, published every five updates so the run can
be studied as a trajectory rather than an endpoint, plus step50, the run's best checkpoint:
| subfolder | step5 | step10 | step15 | step20 | step25 | step30 | step35 | step40 | step50 |
|---|---|---|---|---|---|---|---|---|---|
| committed updates | 5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 50 |
Use step50 unless you want a point on the trajectory: it scores highest of every checkpoint measured
on SWE-bench Verified (see below). The run continued to update 60 and those checkpoints are deliberately
not published, because the policy degrades badly past update 50.
stepN holds the policy after N committed updates, converted from Megatron dist-checkpoint
iter_{N-1:07d}. The run saved a checkpoint at every update; the intermediate ones are retained on the
training host and can be published on request. step20 is where the negative warmup reaches its full
bound and step40 is the run's final policy.
Pass the subfolder explicitly — the repo root holds no weights:
from transformers import AutoModelForCausalLM, AutoTokenizer
repo = "ziansu/r2egym-rad-negative-warmup"
model = AutoModelForCausalLM.from_pretrained(repo, subfolder="step50", dtype="bfloat16")
tokenizer = AutoTokenizer.from_pretrained(repo, subfolder="step50")
AutoModelForCausalLM yields Qwen3_5ForCausalLM (4.21 B parameters, the language model). The checkpoints
also carry the base model's vision tower, so AutoModelForImageTextToText yields the full
Qwen3_5ForConditionalGeneration (4.54 B). Agent evaluation in this project used the language model only.
| Base model | Qwen/Qwen3.5-4B |
| Method | RAD, lookahead-projected-ascent-signed-zero-negative-warmup preset, against a frozen Qwen3.6-27B teacher |
| Negative warmup | cosine schedule, --lookahead-negative-warmup-end-step 20: the lower bound of the token-weight box reaches its full negative value at update 20 |
| Other RAD settings | TIS cap 2, inverse-mean length scaling, 2 JVP microbatches per pass |
| Corpus | R2E-Gym subset |
| Rollout context | 65,536 tokens |
| Learning rate | 1e-6 |
| Global batch | 256 |
| Rollout batch | 32 task groups x 8 samples per update |
| Updates | 60 committed; step50 is update 50 |
| Wall clock | 49.8 h for updates 1-40 on one learner, then updates 41-60 on a second after a host failure |
| Corpus note | updates 1-40 drew from the 2,528-task pool (1,911 distinct tasks seen); each update draws 64 tasks from two samplers, so updates 41-60 were given corpus tasks that pool had not reached |
Two held-out measurements exist, at different resolutions. The 71-task R2E holdout is the one to read: 213 episodes per point (71 tasks x seeds 42/43/44), the same frozen manifest and protocol used for the other runs in this project.
| after update | base | 10 | 20 | 30 | 40 |
|---|---|---|---|---|---|
| pass@1 | 45.07 % | 52.58 % | 54.93 % | 52.58 % | 56.34 % |
| solved attempts | 96/213 | 112/213 | 117/213 | 112/213 | 120/213 |
Every trained checkpoint is 7-11 points above the base model. Across the trained points the trajectory is flat: the binomial standard error at 213 episodes is about 3.4 points, and the four values span 3.8 points, so they are mutually within roughly one standard error. Update 40 is the highest of them, and its per-seed values are unusually spread (57.7 / 47.9 / 63.4) compared with about 3 points of spread elsewhere.
The run also logged a smaller 32-task evaluation during training, every ten updates: 0.531, 0.594, 0.594, 0.469 at updates 10/20/30/40. That last value looks like a collapse and is not one - one task is 3.1 points there and the standard error is about 8.8 points. The 213-episode holdout above, measured on the same checkpoints, puts update 40 at the top. Prefer the 71-task numbers.
At update 40 the mean token weight is negative (-0.0284) with 16.1 % of tokens pinned at the lower bound and 13.8 % at the upper. That is the negative-warmup schedule reaching its configured bound; on the evidence above it did not cost held-out performance by update 40.
Per-update training reward carries no trend information at all: each update scores 32 fresh task groups, whose binomial standard error (about 0.088) accounts for essentially all of the observed update-to-update spread (sd 0.087).
All 500 tasks, three grouped rollouts per task at seed 42 (1,500 attempts), 65,536-token context, 75 tool turns, temperature 1.0 - the same scaffold and sampling settings used in training.
| checkpoint | pass@1 | pass@3 | truncated episodes |
|---|---|---|---|
step40 | 48.67 % | 62.80 % | 47.1 % |
step50 | 50.53 % | 63.60 % | 23.6 % |
| update 60 (not published) | 34.33 % | 47.80 % | 2.1 % |
| untrained Qwen3.5-4B, for reference | 39.07 % | 54.40 % | 85.3 % |
step50 is the best policy this run produced. The update-60 row is included as a warning rather than a
download: ten further updates took the policy below the model it started from. The cause is visible in
the episode statistics - by update 60 the agent terminated voluntarily in 98 % of episodes after 18 tool
calls, against 51 at update 50, so truncation fell to 2 % because episodes stopped early, not because the
policy had become efficient. Training reward over those updates fell from about 0.55 to 0.35 and the
in-training held-out evaluation from 46.9 % to 33.6 %, consistent with the benchmark.
An earlier negative-warmup run (nwf0917a, 40 updates) scored 47.80 % pass@1 at 98,304 context / 100 turns,
the lowest of the six policies in that sweep; it is a different run and is published separately.
Exported with slime's tools/convert_torch_dist_to_hf.py (--vocab-size 248320 -a), pointing at each
iter_* directory directly, so the marker file is never consulted and a base-weight fallback cannot occur.
Every export was checked before upload: the full 738-tensor key set of the base model, matching shapes, and
at least one sampled weight matrix differing from the base model.
Qwen/Qwen3.5-4B; training updated the language model only.linear_attn.A_log and
linear_attn.norm.weight on each of the 24 layers. Training held every parameter in bfloat16, and that
is the precision the inference server served during training and evaluation.