Skip to content

[T1] SnapFlow distill has no epoch loop → silent under-training #284

Description

@DsThakurRawat

Labels: bug, distill, priority:high
File: src/tether/finetune/backends/snapflow_backend.py:292 (single-pass loop), :390, :414

Description. The loop is for step, batch in enumerate(loader, 1): ... if step >= cfg.num_steps: break with no outer epoch/cycle wrapper and drop_last=True. If the dataloader yields fewer than num_steps batches, training ends when the dataset is exhausted, then still saves a checkpoint and reports status="ok".

Why it matters. tether distill --steps 10000 on a 600-batch dataset trains 600 steps, writes a checkpoint, and returns status="ok", training_steps_completed=600 — the user believes they got 10k with no warning. Silent quality loss on the paid continuous-learning product.

Tasks.

  • Wrap the loop in an epoch loop / itertools.cycle(loader); break only on step >= num_steps.
  • Warn/fail when training_steps_completed < num_steps.

Dedup. PR #247 seeds randomness; #16 fixes gradient checkpointing; #19 multi-GPU DDP. None address the missing epoch loop. Distinct.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions