Repository navigation
Conversation
…cks) Decay now ends at an optional min_factor instead of 0, arguments are validated, and a zero-length warmup or decay no longer divides by zero. Signature stays compatible with existing callers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X86xQuci4asKUkiCwqMiKF
…reset A Hydra merge onto the model's LinearLR keeps its arguments, so the launch scripts swapped WSD in from the CLI. _scheduler_reset (ported from #710) nulls model.scheduler in the defaults chain so op2's _self_ can define WSD, and every recipe built on it sets the phases the launchers computed (1k or 500 warmup, linear decay over the last 20% of max_epochs x 100 steps; overfit1 6k steps). The full* configs had no launcher and now follow the same rule. The generators emit the same blocks. The launchers' '~model.scheduler' swap still works. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X86xQuci4asKUkiCwqMiKF
Ported from #710: a config composed as experiments/<folder>/<name> gets <folder> appended to logger.wandb.tags. Skipped when Hydra is not initialized (train() called directly from tests). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X86xQuci4asKUkiCwqMiKF
…val heads Ported from #710 without its metric_sampling, named validation sets or open-loop pieces: builds the same val heads as training (train_viz, unseen_op_valid, extra_valid), runs trainer.validate on one device with no logger, and writes <run dir>/validation_metrics.json. Fixes the port's EMA gap: a checkpoint with checkpoint["ema"] is scored with the EMA weights, as training validated it, even under a config without model.ema enabled. limit_val_batches is scaled by the training world size so one rank covers the frames the metric loaders were built for, and a validate job never swaps its ckpt_path for a requeue's last.ckpt. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01X86xQuci4asKUkiCwqMiKF
This was referenced Oct 12, 2026
Contributor
Author
This was referenced Oct 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

scheduler: harden warmup_stable_decay (min_factor floor, argument checks)
Decay now ends at an optional min_factor instead of 0, arguments are
validated, and a zero-length warmup or decay no longer divides by zero.
Signature stays compatible with existing callers.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01X86xQuci4asKUkiCwqMiKF
configs: WSD recipes define their scheduler in-config via _scheduler_reset
A Hydra merge onto the model's LinearLR keeps its arguments, so the launch
scripts swapped WSD in from the CLI. _scheduler_reset (ported from #710) nulls
model.scheduler in the defaults chain so op2's self can define WSD, and every
recipe built on it sets the phases the launchers computed (1k or 500 warmup,
linear decay over the last 20% of max_epochs x 100 steps; overfit1 6k steps).
The full* configs had no launcher and now follow the same rule. The generators
emit the same blocks. The launchers' '~model.scheduler' swap still works.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01X86xQuci4asKUkiCwqMiKF
trainHydra: tag W&B runs with their hydra_configs/experiments/
Ported from #710: a config composed as experiments// gets
appended to logger.wandb.tags. Skipped when Hydra is not initialized
(train() called directly from tests).
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01X86xQuci4asKUkiCwqMiKF
trainHydra: mode=validate scores one checkpoint through the training val heads
Ported from #710 without its metric_sampling, named validation sets or
open-loop pieces: builds the same val heads as training (train_viz,
unseen_op_valid, extra_valid), runs trainer.validate on one device with no
logger, and writes /validation_metrics.json.
Fixes the port's EMA gap: a checkpoint with checkpoint["ema"] is scored with
the EMA weights, as training validated it, even under a config without
model.ema enabled. limit_val_batches is scaled by the training world size so
one rank covers the frames the metric loaders were built for, and a validate
job never swaps its ckpt_path for a requeue's last.ckpt.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01X86xQuci4asKUkiCwqMiKF
Ported from ideas in #710 (no IDs taken). Combined stack: ruff clean; 562 targeted unit tests pass on CPU; no GPU smoke run yet.
🤖 Generated with Claude Code
https://claude.ai/code/session_01X86xQuci4asKUkiCwqMiKF