TrainingLoop
Drive a training run against a :class:Backend.
Construction is intentionally explicit - no global state, no env-var knobs, no auto-resume. Algorithms compose the loop with their own StepBuilder + Backend + optional Evaluators.
Attributes
attributebackend= backendattributestep_builder= step_builderattributelog_store= log_storeattributeoutput_dir= Path(output_dir)attributeadam_params= adam_paramsattributesave_every= save_everyattributeevaluatorslist[Evaluator]= list(evaluators or [])attributecallbackslist[Callback]= list(callbacks or [])attributelog_context= log_contextattributelog_prefix= log_prefixattributecheckpoint_mgr= CheckpointManager(log_path=(self.output_dir), save_every=save_every)Functions
func__init__(self, *, backend, step_builder, log_store, output_dir, adam_params, save_every, evaluators=None, callbacks=None, log_context=None, log_prefix='', metric_keys=None) -> NoneparamselfparambackendBackendparamstep_builderStepBuilderparamlog_storeAnyparamoutput_dirstr | Pathparamadam_paramstinker.AdamParamsparamsave_everyintparamevaluatorslist[Evaluator] | None= Noneparamcallbackslist[Callback] | None= Noneparamlog_contextAny= Noneparamlog_prefixstr= ''parammetric_keys_LoopMetricKeys | None= NoneReturns
Nonefuncrun(self, *, num_steps, start_step=0) -> LoopArtifactsparamselfparamnum_stepsintparamstart_stepint= 0Returns
evsys_sdk.training.loop.LoopArtifactsfunc_run_one_step(self, step, num_steps, state=None) -> Noneparamselfparamstepintparamnum_stepsintparamstateLoopState | None= NoneReturns
Nonefunc_save_checkpoint(self, name, *, batch, state=None) -> NoneSnapshot both training state (for resume) and sampler weights (for eval), then record one manifest row.
paramselfparamnamestrparambatchintparamstateLoopState | None= NoneReturns
Nonefunc_is_due(self, ev, step) -> boolPer-evaluator cadence check. run_every \<= 0 → disabled;
positive → fire when (step + 1) % run_every == 0.
paramselfparamevEvaluatorparamstepintReturns
boolfunc_run_eval(self, step, due, state=None) -> NoneTake ONE sampler snapshot for the step, run each due evaluator,
log results under val/\<eval_name>/\<metric>.
paramselfparamstepintparamduelist[Evaluator]paramstateLoopState | None= NoneReturns
Nonefunc_dispatch(self, hook, *args) -> NoneCall hook on every callback (error-isolated). Thin wrapper over
the shared :func:~evsys_sdk.training.callbacks.dispatch so the loop
and the Experiment fan out identically.
paramselfparamhookstrparamargsAny= ()Returns
None