Data Mixing Optimizer & Dynamic Curriculum (v0.48.0 — BETA)
soup data mix --optimize
Bayesian search over per-dataset mixture weights against a held-out objective.
soup data mix --optimize \
--datasets sft.jsonl,preference.jsonl,instruct.jsonl \
--output mix.yaml
soup data mix --apply mix.yaml --output ./mixed.jsonlBudgetTracker caps wall-clock and token budget per search.
Since v0.73.3 the emitted recipe loads. It names the single highest-weighted dataset in data.train and keeps the full ranked breakdown as a comment, because the field is typed as one string and the mixture is not yet consumed by training.
Dynamic curriculum learning
training:
curriculum: true
curriculum_dynamic: true
curriculum_buckets: 5
curriculum_metric: loss # length | perplexity | lossDynamicCurriculumPolicy re-weights buckets every N steps based on history.jsonl. compute_bucket_weights clamps to a stable simplex.
soup runs curriculum-curve --history ./runs/$LAST/history.jsonlRenders the per-bucket weight curve over training.
Both features are BETA in v0.48.0. Symlink containment hardening lands across all file paths.
Soup is free and Apache-2.0. If it saved you a training run, starring the repo costs nothing and helps most. You can also fund the GPU time behind the work a 4 GB laptop cannot reach.