What Tinker supports
Tinker 0.23 intentionally exposes two checkpoint-loading APIs:
Weights-only loading is needed for warm starts and stage transitions where parameters should transfer but stale Adam momentum and scheduler state should not.
What SkyRL is missing
SkyRL currently loses this distinction:
LoadWeightsRequest does not expose the optimizer flag.
- The
load_weights endpoint creates LoadWeightsInput without it.
SkyRLTrainBackend.load_checkpoint hardcodes load_optimizer_states=True and load_lr_scheduler_states=True.
As a result, load_state() and load_state_with_optimizer() both restore optimizer and scheduler state on the SkyRL backend.
Feature Request
- Add the
load_optimizer boolean to SkyRL load-weight request/input types.
- Thread it through the API and engine to
load_checkpoint.
- Restore optimizer and scheduler state only when
load_optimizer=True.
- Add a regression test that first creates nonzero Adam moments, then verifies:
load_state() resets exp_avg, exp_avg_sq, and scheduler state.
load_state_with_optimizer() preserves them.
What Tinker supports
Tinker 0.23 intentionally exposes two checkpoint-loading APIs:
TrainingClient.load_state(...)sendsoptimizer=False: restore model weights and reset optimizer state.TrainingClient.load_state_with_optimizer(...)sendsoptimizer=True: restore model weights and optimizer state.Weights-only loading is needed for warm starts and stage transitions where parameters should transfer but stale Adam momentum and scheduler state should not.
What SkyRL is missing
SkyRL currently loses this distinction:
LoadWeightsRequestdoes not expose theoptimizerflag.load_weightsendpoint createsLoadWeightsInputwithout it.SkyRLTrainBackend.load_checkpointhardcodesload_optimizer_states=Trueandload_lr_scheduler_states=True.As a result,
load_state()andload_state_with_optimizer()both restore optimizer and scheduler state on the SkyRL backend.Feature Request
load_optimizerboolean to SkyRL load-weight request/input types.load_checkpoint.load_optimizer=True.load_state()resetsexp_avg,exp_avg_sq, and scheduler state.load_state_with_optimizer()preserves them.