[Question] Multiple critic updates per actor update (SAO-style faster value update)?
Maintainers usually reply within 1 day
Nobody has claimed this yet.
Assessment
- Difficulty
- 5/5
- Estimated time
- Over a week
- Newbie friendliness
- 35/100
- Issue type
- Feature
- Clarity
- Mostly clear
- Activity status
- Active
- Tech stack
- python
- Domain
- machine-learning
Research direction
Start in slime/backends/megatron_utils/actor.py, comparing train_critic and train_actor and tracing the shared build_dp_schedule result. Read the handling of --num-critic-only-steps and the PPO path described in the issue. Done would require a maintainer decision on whether the 1:1 ratio is intentional or a scoped design for independent critic updates.
Written by the indexing model from the issue text.
Description
Your Question
I'm trying to understand how the critic is trained relative to the actor in the PPO path, and I'm confused about why there doesn't seem to be a way to update the critic more times than the actor within one rollout. From what I can tell, train_critic and train_actor both call the same train(...) with the same num_microbatches / global_batch_sizes, so they run 1:1, and the only critic-related knob is --num-critic-only-steps, which is just a cross-rollout warmup.
I was reading the SAO paper (Single-Rollout Asynchronous Optimization, https://arxiv.org/abs/2607.07508, the method behind GLM-5.2's agentic RL) and noticed it uses a "faster value update" where the value network is updated K times per policy update (K > 1, paper uses K = 2) to reduce advantage-estimation variance when the critic lags behind the policy, with an ablation showing it helps. Since slime is the framework behind those runs, I was a bit surprised this isn't exposed in the open-source code.
So I'm wondering: is the current 1:1 behavior intentional, or would it make sense to add a config (something like --critic-update-steps / a critic-side K) to allow multiple critic updates per actor update? Raising this as a question first per CONTRIBUTING.md — thanks!
slime commit: 5b449de, PPO path (advantage_estimator=ppo, use_critic=True)
What I've Tried
I searched the codebase for any critic-specific update-count config (things like critic_iters, critic_epoch, critic_update, num_critic_steps) and couldn't find one — the only critic-related argument I found is --num-critic-only-steps, which only controls a cross-rollout warmup, not a per-rollout critic:actor update ratio.
I also traced the training path: both train_critic and train_actor in slime/backends/megatron_utils/actor.py call the same module-level train(...), and the schedule (num_microbatches / global_batch_sizes) comes from a single build_dp_schedule result shared by both, so as far as I can tell the critic and actor are structurally locked to the same number of updates per rollout.
Finally I read the SAO paper (arXiv:2607.07508) to confirm the "faster value update" (K=2) is an actual part of the recipe rather than a generic PPO trick, which is what prompted this question.
Environment (if relevant)
- slime version:
- Python version:
- PyTorch version:
- CUDA/ROCm version:
- GPU type and count:
- OS:
Additional Context
No response
Pre-submission Checklist
- I have read the CONTRIBUTING.md and understand the collaboration scope.
- I have read the documentation and FAQ and my question is not answered there.
- I have searched for existing issues and my question has not been asked before.
- Dominant language
- Python
- Stars
- 8.8k
- Forks
- 1.3k
- Avg merge
- 19h
- Merged PRs (30d)
- 26
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from THUDM/slime
-
[Bug] Math reward accepts distinct large integers after float normalizationPossibly taken @lll-hhh claimed this 2 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
gpqa: when no option letter can be extracted, a single-letter gold label is substring-matched against the whole reply, so a reply that never answers can score 1.0Possibly taken @shaurya416 claimed this 38 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
Maintainers usually reply within 1 day
-
[Bug] shipped dynamic-sampling filters crash on fan-out groups (list[list[Sample]]) from multi-turn agent rolloutsPossibly taken @QIU-Guanzong claimed this 50 days ago. Open
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
Maintainers usually reply within 1 day
-
[Bug] W&B initialization fails with wandb 0.28.2 because wandb.util.generate_id was removedPossibly taken @cyyecao-lappland claimed this 68 days ago. Openbug
Difficulty 1/5 1-3 hours Newbie friendliness 90/100
THUDM/slime#2332 · 1 comment ·
Maintainers usually reply within 1 day
-
[Bug] solution_str = sample.prompt + sample.responsePossibly taken @mvanhorn claimed this 132 days ago. Openbug
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
THUDM/slime#1829 · 1 comment ·
Maintainers usually reply within 1 day
Similar issues
-
URLValidator ignores an explicit empty scheme allowlistPossibly taken @IlyaKhalafi claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
tortoise/tortoise-orm#2393 ·
Maintainers usually reply within 2 days
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
frappe/frappe_docker#2046 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
-
complete_box_iou_loss / complete_box_iou: NaN gradients for zero-height boxes, NaN for point boxesOpen
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
Maintainers usually reply within 1 day
-
AXI SMU SPEC
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
tenstorrent/tt-oca-harness#3556 ·
Maintainers usually reply within 1 day