Some initial results from the ablation experiments...
# proj-codescout
r
Some initial results from the ablation experiments: Based on Aditya’s latest PR and a highly reproducible baseline (using GSPO) and the upgraded SkyRL-train package, I tested several algorithm variants: 1. vanilla GRPO 2. SAPO 3. Some Dr.GRPO-style length normalization methods So far, none of them outperform our current baseline on the validation set (I used a subset of SWE-bench Lite for a quick pass). Interestingly, vanilla GRPO achieves higher training rewards but does not translate to better val performance. W&B: https://wandb.ai/leon_at_work/soni_ablation_4b/workspace But one strategy that does seem promising is prefiltering a subset before training — it leads to a noticeably steeper learning curve. The experiment is still running, and I’ll share updates once we have more conclusive results.
👍 1
b
I think this is very good analysis that we should include this work in the paper. It would be great if you could push all the final ckpts to HF - I will eval them on Verified/Pro and add a table. Also it would be great if you could give concrete experimental details for each ckpt somewhere - in a google doc or directly edit the overleaf if you like.
r
Sure, I’ll prepare a PR with the configs and scripts, and also a comparison table for explanation next week. As for the ckpts, the problem is that I have quite a few checkpoints 😅 Here's a short eval summary :
Mind taking a look and suggesting which ones are worth pushing to HF?
a
Is the PR you're referring to the codebase cleanup one? I might try to cherry pick it and see if it works for me too
r
@acceptable-holiday-21046 You mean the one I used for baseline running? It's the latest version of
soni/main
by @busy-branch-28834 https://github.com/OpenHands/codescout/pull/73
nod 1
a
You mentioned an upgraded skyrl-train package. Is that Aditya's fork that's pinned in
soni/main
or did you use a different version?
r
Oh I see. It's the latest skyrl-train with a few convenient patches used in my experiments. But basically using the official version won't change the results of our experiments.
The one used in Aditya's dependency doesn't contain the implementation of SAPO
a
So v0.4.0?
r
Not very sure... I made a fork here: https://github.com/yucc-leon/SkyRL/tree/merge-sapo-support But I guess using the latest official version for dependency would be ok.
🙏 1
b
@rich-byte-67407 - basically all I need is the final ckpt for each of the different algorithmic variants you tried before. It would be better if they were trained for the same number of steps (I think all algos were tried for alteast 200 steps which is fine) -- and if all algos are avbl for 200 steps, just push that ckpt for each training run which is just 4-6 ckpts I guess? I can make that table. We want arxiv early next week so I am pushing a bit
in case some algo was trained for very few steps (<100), we can just discard it. Basically what I am planning to show is as follows: given similar training compute, how do different algorithmic variants vary. Since this is not the main result, nobody is going to raise concerns about the experimental setup being super robust.
and it is also ok if you push the PR to the codebase later. Nobody is going to immediately try reproducing analysis sections.
😏 1
r
I see. I'll try to upload all the step200 ckpts soon.
🙏 1
b
Thank you for all your hard work 🙏
r
Thanks! Couldn’t have done it without your cleanup and fixes 🥹
b
Also since you are trying to see best data subsets for RL, this may help (reference from one tool is enough - reponavigator paper)
🙏 1
r
The standard SAPO config is still running. I'll upload its ckpt@step200 within about 10 hours. ------- Done
b
Ok thanks! We also need to mention the training hyper-params somewhere in the paper.
r
Sure. Please let me know if there’s anything I should prepare.
b
I am revising the draft if you want to have a look there. sections 3, 4 are done. 5 and 6 will be done by tonight.
[no pressure though]
r
Nice, I’ll take a look later today
🙏 1
b
@rich-byte-67407 sorry if this is already present elsewhere, but could you simply write the detailed experimental configs somewhere describing the low-level details of all these variants?
I have added a placeholder section 6.3 where you could add or simply write in a google doc if you want.
r
The README here contains the configs and descriptions for each experiment: https://huggingface.co/Leon-Leee/codescout-alg-variants Could you check if that’s what you had in mind?
b
@rich-byte-67407 -- I have added a section in appendix with all your models evaluated on SWE-Bench Pro. (check table 9 and appendix G). I am not sure I am fully understanding all the above configs correctly. Could you please refine this section? I have written something meaningful based on what I understood, but it would be great if you could review this to verify the correctness of details and add more if desired. This is in part also because I may not be fully aware about what these training hyper-parameters are actually doing
r
Thanks a lot for putting this together — really appreciate it! I’ll go through those parts. Might add a bit more detail if needed. Will get back to you so
🙌 1
I've revised Appendix G and Table 9. Ended up trimming it quite a bit: • Kept all 4 recipes in the top group (GSPO / SAPO / Dr.GRPO / GRPO) • For single-factor ablations, only the two that are clean single-axis changes from GSPO: loss reduction (A8) and advantage normalization (A10). The others (A4/A5/A6/A9) changed multiple factors at once, which may increase confusion • Removed the CodeScout-4B row since it was trained with different turns/reward config and wasn't directly comparable The net result is a smaller but cleaner table. The story is basically "algorithm choice doesn't matter much for this task, GSPO is a reasonable default." Let me know if you have any concerns about the cuts!
b
Thanks! You used 4 steps right in the multi-turn reward setting? I see that you mentioned 10 in the writeup? BTW the writeup is very nice, thanks for improving it!
r
Oh yes! Thanks for pointing that out. I’ll check the wording to make sure it’s not confusing. The max interaction turns during training is 10, but the multi-turn reward is given when the model finishes the task in exactly 4 turns. (If I remember correctly, that’s the same setup used for the 14B model in the paper.)
b
the prompt mentions 4 right?
like the system prompt. If yes, then we should just write it as 4.
r
Got it 🫡
🙌 1