Skip to content

rl-offpolicy-correction-passthrough: neutral correction group, Miles/verl mapping, hashed (L6b) - #263

Draft
michaellchung wants to merge 13 commits into
s24-pr1-cold-startfrom
s24-pr2-offpolicy
Draft

michaellchung wants to merge 13 commits into
s24-pr1-cold-startfrom
s24-pr2-offpolicy

Conversation

@michaellchung

Copy link
Copy Markdown
Contributor

Stacked on PR-1. Implements openspec change rl-offpolicy-correction-passthrough (spec as the last commit).

  • Neutral off-policy correction fields (level, lower, upper, veto, batch_normalize, ratio_mask) in AlgorithmSpec; Miles and verl adapters map them, refuse decoupled-PPO breakers, and record/compare them per island.
  • offpolicy_gate built in the driver; max_policy_age (cap 4); monitoring.
  • L6b: the correction group is hashed again, and settings a backend cannot map are refused.
  • One extra commit regenerates grpo_tis.json for the L6b hash. On the integration branch this regeneration happened later, together with island contract v3; hash-migration.md records it under the phase 2 boundary entry that PR-4 adds.

GPU evidence: L6.11 (verl single island) and L6.10.

🤖 Generated with Claude Code

chowhsu and others added 13 commits October 15, 2026 15:30
…f the phase-1 hash

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit b8eb808)
…rd and compare per island

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 25d07c1)
…tion tests

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 5976f1b)
… in the driver

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 3ffea04)
…(D8)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 69a2722)
- Add yeto/rl/adapters/verl/offpolicy_correction.py (role offpolicy_correction):
  design D3 rows as algorithm.rollout_correction overrides, prox_anchor
  first_local_step, bypass_mode=True refused, warnings for unmappable fields
  and for the MIS-mask denominator.
- fully_async_plan replaces the rollout_correction overrides with the
  mapping (decoupled PPO: bypass_mode=False, rollout_is=token, threshold=C).
- RoundCollector fills the offpolicy_gate carry-over keys (trajectory
  granularity, whole-group drop over A_hard); the driver builds the event.
- CPU parity tests load the verl fork and Miles correction functions from
  source: TIS (lower 0) and IcePop weights match; verl rejection sampling
  shrinks the loss mask; actor.use_rollout_log_probs has no reader.
- Example specs decoupled-ppo-c2 (A_hard 2) and -agentic (A_hard 4).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit da796bb)
RolloutBatchHandle gains a backend field; the Miles and verl adapters fill
it, and the driver labels offpolicy_gate with it ('unknown' when unset)
instead of assuming 'miles'.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 8e5884a)
The fully_async verl island now appends correction_record (group, verl values,
prox_anchor) and its correction_config_warning events to the island tape, as
the Miles island entry does (D8). Default specs leave the tape unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit d3a423a)
_carry_over_fields whitelisted the carry-over keys but not the gate
inputs (dropped lengths, granularity, truncation by turn), so a real
Miles island never taped offpolicy_gate (found on GPU, L6.10).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 8dec16e)
Under --fully-async Miles drops stale groups inside its own buffer; yeto
saw them only as stale_dropped_groups in the carry-over. Report them in
offpolicy_gate under a separate reason, backend_stale_dropped, so they
stay apart from the yeto gate drops (absent when Miles gives no count).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 439705e)
rl-offpolicy-correction-passthrough phase 2. AlgorithmSpec.sha256() now
hashes the correction group as written; a default group keeps the pre-D1
form, so default specs keep their hash. A correction_config_warning
(unmappable field, backend without a mapping, island difference) now
refuses the launch, and each island refuses the fields its backend cannot
map after the record is on the tape. Golden files are regenerated with the
version-boundary commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 6d3e72f9bb014c22b0cf39d7362db4a3d2a16eba)
6d3e72f9 puts the off-policy correction group back into AlgorithmSpec.sha256(). On the integration branch the golden samples were regenerated later, together with island contract v3 (rl-identity-tiering, 4702dfbe), and hash-migration.md records both under the phase 2 version boundary entry. This stacked PR lands L6b before that, so regenerate grpo_tis.json here (algorithm hash and execution-profile contract hash only) with python tests/decoupling_golden.py --write. The other 7 samples are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Spec for openspec change rl-offpolicy-correction-passthrough, taken from s24-sampler-spec 7bd416e2 (PR #258).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants