finds.dev← search

// the find

MakazhanAlpamys/Soup

★ 7,482 · Python · Apache-2.0 · updated Sep 2026

Fine-tune LLMs from one YAML. Layer streaming trains an 8B model on a 4 GB laptop GPU.

A CLI that wraps HF transformers/PEFT/TRL behind one YAML config, covering SFT plus most preference-tuning variants (DPO/GRPO/PPO/KTO/ORPO/SimPO/...). The headline feature is 'layer streaming' — keeping the frozen base model in host RAM and feeding it to the GPU one decoder layer at a time so an 8B model trains on a 4GB laptop GPU. Aimed at people without server GPUs who want QLoRA fine-tuning without writing a training script by hand.

Layer streaming has an actual correctness protocol behind it, not just a speed claim — a bit-exact check against a normal resident run (forward and backward verified separately), plus a public Colab notebook that caps the process at 4GB and re-runs the assertion yourself. As of v0.75 an unknown config key now fails the load (exit 1 / ValueError) instead of being silently dropped, which is a real fix given the project's own history of options that validated but did nothing. Data handling auto-detects format (Alpaca, ShareGPT, ChatML, preference pairs, vision, audio) from the file itself, so switching training methods mostly doesn't touch the data pipeline.

The v0.75 changelog admits the same soup.yaml trained a different recipe on MLX than on transformers for six config options — silently, for however many releases that was live. That's the exact failure class a fine-tuning tool exists to prevent, and it was caught by users, not tests. The 4GB/119.6 tok/s headline numbers predate the v0.73.0 correctness repair and haven't been re-measured on that hardware since (tracked in an open issue), so the number on the README isn't current. The feature surface is enormous — pretraining, a dozen RLHF variants, vision/audio/TTS, compliance templates, supply-chain signing/attestation, knowledge editing — for a project that describes itself as built on one 4GB laptop; that breadth makes it hard to trust depth anywhere outside the layer-streaming path they've actually verified. Python 3.13 is unsupported because the PyTorch stack hasn't been validated there, so it's a step behind on newest environments.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →