Views
No views yet

G = 8 responses per prompt, score each twice, and normalize the two scores over
different populations:A_out = (r_out - mu) / sigma over all G responses
A_proc = (r_proc - mu_C) / sigma_C over constraint-satisfying responses only
A = A_out + A_proc| Checkpoint | IFEval | IFBench | MulDimIF | MATH-500 | GPQA |
|---|---|---|---|---|---|
| base | 82.99 | 30.95 | 57.17 | 87.60 | 55.05 |
step-000100 | 85.21 | 34.35 | 68.92 | 88.40 | 59.09 |
step-000200 | 87.06 | 35.71 | 72.58 | 88.80 | 58.08 |
step-000300 | 86.69 | 34.69 | 73.25 | 89.60 | 57.58 |
step-000400 | 86.69 | 35.37 | 74.08 | 86.40 | 58.59 |
step-000420 | 86.88 | 33.67 | 74.67 | 87.20 | 55.56 |
1from transformers import AutoModelForCausalLM, AutoTokenizer
2
3repo = "beingamanforever/Qwen3-4B-RDAN-GRPO"
4model = AutoModelForCausalLM.from_pretrained(repo, subfolder="step-000200", dtype="bfloat16")
5tokenizer = AutoTokenizer.from_pretrained(repo, subfolder="step-000200")
6
7messages = [{"role": "user", "content": "Write exactly two friendly sentences about rain."}]
8text = tokenizer.apply_chat_template(
9 messages, tokenize=False, add_generation_prompt=True, enable_thinking=False
10)
11inputs = tokenizer(text, return_tensors="pt").to(model.device)
12print(tokenizer.decode(model.generate(**inputs, max_new_tokens=512)[0], skip_special_tokens=True))| Hardware | 2x A100-80GB |
| Framework | ROLL, FSDP2 actor with vLLM rollout |
| Throughput | 6.1 min/step |
| Wall clock | ~41 h to step 400 |
| Prompts | 18,096 |
| Rubrics | 125,278 (77,615 deterministic, 47,663 judged) |
| Judge | qwen/qwen3.7-flash, three-point scale |
| Prompts per step | 64 |
| Samples per prompt (G) | 8 |
| Global batch | 256 |
| Prompt / response length | 1,280 / 2,048 tokens |
| Learning rate | 1e-6 |
| PPO clip (low / high) | 0.2 / 0.27 |
| KL penalty | none |