github MakazhanAlpamys/Soup v0.33.0
v0.33.0 — Live Wire

latest releases: v0.77.2, v0.77.1, v0.77.0...
6 months ago

What's New

v0.33.0 — Live Wire closes 17 deferred issues across the last six minor releases. Every "API + flag (v0.x.0)" / "wired live in v0.x.1" deferral is now actually live, in one consolidated release instead of six dot-zero-one tags.

  • soup can run + soup can publish — extract a .can → train via embedded config → optional deploy. soup can publish my-recipe.can --hf-hub user/repo uploads as an HF dataset (repo_type='dataset', can-format-v1 tag). Manifest schema bumped to v2 with optional deploy_targets (ollama / gguf / vllm). v1 cans still load.
  • Multi-GPU one command — soup train --gpus 2 now auto-reexecs under accelerate launch (was advisory-only in v0.27.0). --no-reexec opt-out preserved. Critical flags forwarded.
  • Live eval-gate scoring — soup eval gate and soup eval quant-check no longer return score=1.0 stubs for judge / benchmark task types. Backend failures surface as score=None, error=str(exc) so a broken eval never silently passes the gate.
  • Structured output + auto-quant live on soup serve — --structured-output json --json-schema s.json builds a real LogitsProcessor (via outlines or lm-format-enforcer). --auto-quant runs a tiny eval over candidate quantisations and picks the best by (score, -latency).
  • DeepSpeed-MII live serve — soup serve --backend mii now starts a real OpenAI-compatible HTTP server (was stub + exit-1 in v0.27.0).
  • Multi-trainer v0.28.0 features — use_cut_ce, quantization_aware=\"fp8\", kernel_auto_compose, activation_offloading now wired for SFT / DPO / Pretrain.
  • Live --find-lr — replaces the v0.32.0 synthetic stub curve with a real in-process LR-sweep training loop. Falls back to synthetic when prereqs are missing so CI without GPUs still produces a parseable report.
  • Spike recovery + grad-accum advisory — loss_spike_recovery: true writes spike_recovery.json with the decayed LR for re-launch. grad_accum_auto_tune: true prints recommended (batch, accum) pair on VRAM pressure.
  • Auto mixed-precision push — auto_mixed_precision: true calls pick_mixed_precision(base, cc) and wires the result into bf16= / fp16= TrainingArguments kwargs.
  • soup eval custom --attach-to-registry <id> + soup export --registry-id <id> — auto-attach eval results / exported artifacts to a Local Model Registry entry. New eval_results and tensorrt artifact kinds.
  • RLVR sandbox + checkpoint prune hardening — code_exec_reward adds OS-level isolation (Linux `unshare(CLONE_NEWUSER|CLONE_NEWNET|CLONE_NEWPID)`, macOS sandbox-exec profile with narrow mach-lookup allowlist). `prune_checkpoints` switched to TOCTOU-safe `os.lstat` + `S_ISLNK` + `onerror`-abort `rmtree`.

Install / Upgrade

```bash
pip install --upgrade soup-cli
```

Security

34 review-wave findings fixed across 5 review agents (1 CRITICAL, 18 HIGH, 12 MEDIUM, 3 LOW). Highlights:

  • CRITICAL: GGUF rglob result in `soup can run` is now realpath+commonpath checked against `extract_dir` to prevent symlink escape.
  • macOS sandbox `(allow mach-lookup)` narrowed to a 3-name allowlist (SecurityServer / notification_center / opendirectoryd.libinfo). Prevents DNS / NSURLSession bypass of `(deny network*)`.
  • `_write_spike_recovery_hint` enforces `is_under_cwd` on `args.output_dir` (defence-in-depth).
  • `CrossDocCollator` no longer mutates input feature dicts (HF Dataset rows are cached and reused).
  • `auto_quant.Candidate` rejects `bool` in score / latency_ms (was sneaking past `int` isinstance check).
  • `os.execvp` reexec uses list args; critical flags forwarded as separate argv elements.
  • `soup can run` raises `ValueError` (not `PermissionError`) for the consent gate so callers cannot silently swallow via `except OSError`.
  • `DeployTarget.path` validator normalises mixed separators before splitting (`foo/..\bar` no longer bypasses on Windows).
  • `lookup_entry_by_output_dir` emits `ResourceWarning` when 1000-row scan limit is hit.

Full per-fix list in `SECURITY.md` (search "v0.33.0").

Known Limitations

Deferred to a future release — blocked on infra budget or upstream maturity:

  • #23 MLX e2e on Apple Silicon — paid macos-14 ARM runner.
  • #39 / #40 live pipeline-parallel + multi-node accelerate — torch.distributed.pipelining stabilisation + 2-machine validation hardware.
  • #41 multi-GPU recipe smoke-train CI — 4×A100 runner budget.
  • #45 kernel auto-compose benchmark loop inside trainer — CUDA-equipped CI runner with stable VRAM.
  • #57 spike recovery is a JSON hint, not in-process optimizer rewind — HF Trainer has no safe public API for mid-loop optimizer-state mutation.
  • #59 Phase 2 (live DataLoader rebuild on grad-accum advisory) — needs small TRL upstream PR.
  • #43 follow-up: GRPO/KTO/ORPO/SimPO/IPO/PPO/RewardModel/Embedding still reject v0.28.0 flags — multi-trainer expansion to remaining 7 trainers tracked separately.
  • #54 follow-up: live model re-load at picked auto-quant — picker logs the choice, the already-loaded model is served.
  • License migration MIT → Apache-2.0 (advisory): downstream redistributors must retain `NOTICE` per §4(d).

Closed Issues

#21, #22, #32, #34, #35, #37, #38, #43, #44, #47, #49, #53, #54, #56, #57, #58, #59

Don't miss a new Soup release

NewReleases is sending notifications on new releases.