MakazhanAlpamys/Soup

▲ 119 stars today★ 6,657⑂ 1,045

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

About MakazhanAlpamys/Soup

MakazhanAlpamys/Soup is an open-source project on GitHub, mainly written in Python. Fine-tune LLMs from one YAML. Layer streaming trains an 8B model on a 4 GB laptop GPU. It currently holds 6,657 stars and 1,045 forks with 137 open issues, and was last pushed on 2026-09-16 (repository created 2026-02-20).

Project Overview

AI Homed tracks it on the Today's Trending board, currently at rank #29 with 119 new stars today.

GitHub Repository Details

Repository MakazhanAlpamys/Soup · default branch main · size 15794 KB · watchers 48 · source: GitHub REST API and repository README

README

🌍 English | Türkçe

https://github.com/MakazhanAlpamys/Soup/blob/HEAD/Soup

Soup

Fine-tune and post-train LLMs in one command. No SSH, no config hell.

Website · Quick Start · Web UI · Config · Docs · Commands · Models · Discord · Telegram · Product Hunt

https://github.com/MakazhanAlpamys/Soup/blob/HEAD/PyPI https://github.com/MakazhanAlpamys/Soup/blob/HEAD/Downloads https://github.com/MakazhanAlpamys/Soup/blob/HEAD/Python 3.10-3.12 https://github.com/MakazhanAlpamys/Soup/blob/HEAD/Apache-2.0 License https://github.com/MakazhanAlpamys/Soup/blob/HEAD/Tests https://github.com/MakazhanAlpamys/Soup/blob/HEAD/CI https://github.com/MakazhanAlpamys/Soup/blob/HEAD/Website https://github.com/MakazhanAlpamys/Soup/blob/HEAD/Discord https://github.com/MakazhanAlpamys/Soup/blob/HEAD/Telegram https://github.com/MakazhanAlpamys/Soup/blob/HEAD/DOI: 10.5281/zenodo.21771064

https://github.com/MakazhanAlpamys/Soup/blob/HEAD/Soup CLI - Fine-tune an 8B LLM on a 4 GB laptop GPU | Product Hunt https://github.com/MakazhanAlpamys/Soup/blob/HEAD/MakazhanAlpamys/Soup | Trendshift

---

Soup turns the pain of LLM fine-tuning into a simple workflow. One config, one command, done.

pip install "soup-cli[train]"   # add [train] to fine-tune; bare soup-cli is the light CLI
soup init --template chat
soup train

Fine-tune an 8B model on a 4 GB laptop GPU. Layer streaming keeps the frozen base out of VRAM and feeds it to the GPU one decoder layer at a time. Measured on an RTX 3050 Laptop 4 GB: Llama-3.1-8B-Instruct + NF4 at 119.6 tok/s, 3.32 GB peak — bit-exact against a normal resident run, and reproduced independently on an H100 at 113.00 tok/s in the same 3.32 GB. (The tok/s figure was measured on v0.72.2, before the v0.73.0 correctness repair that cost −4.8% at 32B; it has not been re-run on a 4 GB card since.) Opt-in (stream_layers: true) and still BETA — how it works · all measurements · paper · check it yourself on a free Colab T4 (caps the process to 4 GB, then asserts a streamed model is bit-identical to a normal one)

https://github.com/MakazhanAlpamys/Soup/blob/HEAD/soup train pre-flight for Llama-3.1-8B on a 4 GB card: a 3.60 GB base store pinned in RAM across 32 layers and two 113 MB VRAM buffers, then a measured peak of 3.32 GB at 119.6 tok/s, stopping short of the 4 GB line
Llama-3.1-8B-Instruct + NF4, LoRA, batch 1, seq 512 on an RTX 3050 Laptop 4 GB — 3.32 GB peak, 119.6 tok/s. Full video (90s)

Why Soup?

Training LLMs is still painful. Even experienced teams spend 30-50% of their time fighting infrastructure instead of improving models. Soup fixes that.

What's New

v0.75.0 — the same soup.yaml trained a different recipe on MLX than on transformers, silently. Six training options were validated, documented, accepted — and read by nothing on that backend. All 60 pull requests in this release came from outside the maintainer, by 22 people.

release as the deadline. A typo like quantizaton, or a key that only exists on a newer Soup, used to be dropped while the run proceeded with the setting not applied; it now fails on the CLI (exit 1) and in the API (ValueError), naming the field you probably meant. The detector applies the root-level lora: remap the schema has honoured since v0.40.1, so that spelling is accepted, not refused; the two soup fetch examples files using it moved to the canonical training.lora. Every recipe and template loads clean, key names are escaped before they reach the terminal, and the scan is bounded. scheduler / weight_decay / optimizer, max_grad_norm, gradient_accumulation_steps and gradient_checkpointing were each validated and then dropped on backend: mlx. Only 8 of the 32 optimizer names have an MLX equivalent; the other 24 are refused by name instead of silently becoming AdamW. MLX also drives the live dashboard, the tracker and soup ui, and soup doctor --config lists the settings a backend does not read. no metrics column, no event field, nothing on the panel. It is now recorded, streamed and displayed. (arXiv:2507.18071), replacing a column-centering heuristic in which a padding token also shifted the gradient of every row sharing its column. Existing gspo configs will not reproduce prior runs. instead of a token in a query string; --public no longer serves /docs and /openapi.json to the LAN; and a training subprocess no longer hangs when nothing reads its output. import and every preference trainer was dead. Also fixed: training.loraplus_lr_ratio crashed every run that set it, and packing: true raised on TRL 0.29.

Python 3.10–3.12 only. On 3.13+, pip used to resolve untested PyTorch wheels that
crash in the native extension before Soup runs at all.

Older highlights live on the GitHub Releases page.

Quick Start

1. Install

Soup is a command-line application, so the cleanest install gives it its own environment and puts soup on your PATH:

# Light core: CLI + config + data tools, no PyTorch
pipx install soup-cli
uv tool install soup-cli          # same idea, if you already use uv

Add the training stack (torch, transformers, peft, trl, datasets, …)

pipx install "soup-cli[train]"

Everything (train + serve + ui + data) in one shot

pipx install "soup-cli[all]"

Or from GitHub (latest dev)

pipx install "git+https://github.com/MakazhanAlpamys/Soup.git"

Already inside a virtualenv, a Colab notebook, or a Docker image? Use pip directly, with the same names and extras:

pip install soup-cli
pip install "soup-cli[train]"
pip install "soup-cli[all]"
pip install git+https://github.com/MakazhanAlpamys/Soup.git

Use pip rather than pipx if you also want to import soup_cli from your own code, since pipx deliberately isolates the application from everything else.

The full extras table (fast, mlx, serve, eval, ui, vision, audio, …) lives in docs/models.md.

error: externally-managed-environment? That is
PEP 668, not a Soup problem. Debian 12,
Ubuntu 23.04 and later stop pip from writing into the system Python, because
apt manages those files too. pipx and uv tool sidestep it by giving Soup
its own environment, which is why they are listed first above. `python3 -m venv
.venv && source .venv/bin/activate then plain pip` works just as well.
Double quotes, not single. "soup-cli[train]" is the only spelling that works in every
shell — cmd.exe, PowerShell, bash and zsh. If you copied 'soup-cli[train]' from an older
tutorial and pip rejected it, that is the reason:
why, and the exact error.

soup init, soup data …, and the other data/inspection commands work on the light install. Fine-tuning (soup train) needs the [train] extra.

2. Create a config

soup init                       # interactive wizard
soup init --template chat       # or start from a template

Templates: chat, code, tool-calling, medical, reasoning, vision, kto, orpo, simpo, ipo, bco, rlhf, pretrain, moe, longcontext, embedding, audio.

3. Train, test, ship

soup train --config soup.yaml                 # LoRA, quantization, batching — all handled
soup chat  --model ./output                    # talk to your model
soup push  --model ./output --repo you/my-model

soup merge --adapter ./output # merge LoRA into the base soup export --model ./output --format gguf --quant q4_k_m # GGUF for Ollama / llama.cpp

More export targets (ONNX, TensorRT, AWQ, GPTQ, BitNet) and deployment options live in docs/serving-and-export.md.

Web UI

Prefer a browser? soup ui serves a local dashboard for experiments, training setup, live metrics, dataset exploration and model chat.

pip install "soup-cli[ui]"
soup ui

Opens http://127.0.0.1:7860

Soup Web UI — New Training

Web UI documentation

Configuration

A complete soup.yaml:

base: meta-llama/Llama-3.1-8B-Instruct
task: sft

backend: unsloth # 2-5x faster, pip install "soup-cli[fast]"

data: train: ./data/train.jsonl format: alpaca val_split: 0.1

training: epochs: 3 lr: 2e-5 batch_size: auto lora: r: 64 alpha: 16 quantization: 4bit

output: ./output

config/schema.py is the single source of truth for every field. Advanced data, training, and PEFT options are documented under Documentation.

Unknown config keys are rejected since v0.75. A key no model declares — a typo
like quantizaton, or a field that only exists on a newer Soup — used to validate
clean and be discarded, so the run proceeded with the setting simply not applied.
v0.74 reported it at load with the field you probably meant; from v0.75 the same
config fails to load, so fix or remove the key rather than relying on it being
ignored. See Unknown config keys.

Documentation

The full feature reference lives in docs/. Start here:

| Guide | Covers | |---|---| | Training tasks & methods | SFT, DPO/GRPO/PPO/KTO/ORPO/SimPO/IPO/BCO, tool-calling, PRM, pre-training, distillation, classification, vision/audio/TTS, unlearning, RAFT/RA-DIT, loop-hardening detectors | | PEFT, long context & efficiency | DoRA, LoRA+, rsLoRA, VeRA, OLoRA, NEFTune, PiSSA, ReLoRA, optimizer & PEFT zoo, LLaMA Pro, GaLore, YaRN/LongLoRA, packing, curriculum, auto-tuning | | Performance & quantization | QAT, FP8, Quant Menu (I + II), KV-cache, NVFP4, save formats, Cut Cross-Entropy, gradient checkpointing, kernels, activation offloading, layer streaming, multi-GPU / DeepSpeed / FSDP | | Data engineering | Formats, the Axolotl/LF-parity pipeline, data tools, synthetic generation & forge, quality scorecards, trace tooling, remote datasets, mixing, recipe DAGs | | Evaluation & probes | Eval design/gate, eval-gated training, benchmarks, NLG metrics, calibration, Elo arena, diagnose, post-train X-ray probes, A/B, drift, tunability, soup advise | | Serving & export | OpenAI-compatible server, batch inference, benchmarking, merge/export, Anthropic Messages endpoint, speculative decoding (train + measure your own draft), deploy autopilot, Web UI, Agent Forge | | Adapters, registry & governance | Adapter lifecycle/management, model registry, Soup Cans, the data flywheel (soup loop), knowledge editing, steering, supply-chain controls (scan/sign/BOM/attest/audit/airgap) | | Compliance & governance quickstart | HIPAA/SOC2/EU-AI-Act/SR-11-7 init templates, provenance (BOM/attest/repro-receipt), audit log, air-gap, model-card autogen (soup card), CI gate (soup ci init) | | Backends, platform & ops | MLX/Unsloth backends, alternative hubs, HF Hub integration, autopilot, experiment tracking, plan/apply, env lockfiles, hardware-fit, completions, plugins, utility commands | | Command reference | The full soup command list | | Supported models & extras | Recommended model families, the VRAM size guide, the pip extras matrix |

Data Formats

Alpaca, ShareGPT, ChatML, preference pairs (DPO / ORPO / SimPO / IPO / KTO), vision, audio, ASR, plaintext, embedding, RAFT and more — all auto-detected from JSONL, JSON, CSV, Parquet or TXT, so in most cases you point data.train at a file and nothing else changes. Schemas with a worked example per format, plus the data pipeline (remote URIs, streaming, sharding, interleaving, vocab expansion, document ingestion), are in docs/data.md.

Common Commands

soup train  --config soup.yaml        # train (SFT/DPO/GRPO/PPO/KTO/ORPO/SimPO/IPO/...)
soup infer  --model ./output --input prompts.jsonl   # batch inference
soup chat   --model ./output          # interactive chat
soup serve  --model ./output          # OpenAI-compatible API server
soup ui                               # local browser dashboard
soup merge  --adapter ./output        # merge LoRA into the base model
soup export --model ./output --format gguf           # export for deployment
soup eval   benchmark --model ./output               # evaluate
soup data   inspect ./data/train.jsonl               # dataset stats
soup recipes list                     # 100+ ready-made model recipes
soup autopilot --model  --data d.jsonl --goal chat  # zero-config
soup doctor                           # check GPU / deps / environment

The complete command list is in docs/commands.md.

Supported Models

Soup works with any text-generation model on the HuggingFace Hub — if it loads with AutoModelForCausalLM, it works, zero config changes. Llama 3.x/4, Qwen 2.5/3, Gemma 3, Mistral, Mixtral, DeepSeek R1/V3, Phi-4, and 100+ others ship as ready-made recipes (soup recipes list).

| VRAM | Max model (QLoRA 4-bit) | Example | |---|---|---| | 8 GB | ~7B | Llama-3.1-8B, Mistral-7B | | 16 GB | ~14B | Phi-4-14B, Qwen2.5-14B | | 24 GB | ~34B | CodeLlama-34B, Yi-1.5-34B | | 48 GB | ~70B | Llama-3.3-70B | | 80 GB+ | 70B+ (full) or MoE | Mixtral-8x22B, DeepSeek-V3 |

Full model + vision tables and the optional-extras matrix are in docs/models.md.

Docker

Run Soup without installing CUDA or PyTorch locally (image published to GHCR on every release):

docker pull ghcr.io/makazhanalpamys/soup:latest
docker run --gpus all -v $(pwd):/workspace ghcr.io/makazhanalpamys/soup train --config soup.yaml
docker compose up   # or build locally

Requirements

because the PyTorch stack has not been validated there) All training tasks run on CPU for testing (quantization auto-disabled). Optional extras (train, all, fast, vision, qat, serve, serve-fast, ui, eval, deepspeed, liger, mlx, onnx, tensorrt, …) are listed in docs/models.md.

Troubleshooting

soup doctor    # GPU, system resources, dependencies, and version in one place

CUDA wheels, version mismatches: docs/backends-and-ops.md.

Development

git clone https://github.com/MakazhanAlpamys/Soup.git
cd Soup
pip install -e ".[dev]"

ruff check src/soup_cli/ tests/ # lint pytest tests/ -v # unit tests (fast, no GPU) pytest tests/ -m smoke -v # smoke tests (downloads a tiny model, trains)

pre-commit install # optional: ruff lint+format on commit

See CONTRIBUTING.md for the full workflow and SECURITY.md to report a vulnerability. Telemetry is strictly opt-in (SOUP_TELEMETRY=1, default off; see Privacy Policy).

Support Soup

Soup is Apache-2.0 and free — and stays that way. It is built and maintained in the open on a single 4 GB laptop, which is why every performance number in these docs is measured rather than claimed.

If Soup saved you a training run, starring the repo helps most, and it costs nothing. If you would like to fund the work directly:

❤️ Donate — one-off, any amount (use Change amount on the checkout page). Payments are processed by Stripe under the maintainer's registered business, MePlay, Inc. — that name, not "Soup", is what appears on the checkout page and on your card statement.

Donations buy GPU time for the hardware-gated work — multi-GPU, 8B+ validation, Apple Silicon — that a single 4 GB laptop cannot reach.

The other way to move exactly those items is hardware itself. They ship behind honest "requires \" gates rather than unverified claims, so if you have access to a bigger box — or GPU credits going unused — running one of the help wanted issues and posting the numbers helps as much as funding the GPU time would. Those issues say exactly what is blocked on hardware today.

Contributors

Built by the community ❤️ — thank you to everyone who has contributed. See CONTRIBUTORS.md.

Contributors

Contact

Bugs and feature requests belong in the issue tracker, questions in Discussions — both get answered faster and help the next person with the same problem.

For live chat, setup help, and everything that reads better as a conversation, join the Discord or the Telegram community. Anything that should still be findable in six months belongs in Issues or Discussions — a Discord answer helps one person, an issue helps everyone who hits the same thing. The Code of Conduct applies there too.

For anything that does not fit in public — security reports (see SECURITY.md), Code of Conduct matters, or press — email team@trysoup.dev. That is the project address and the right one for anything Soup-related. makazanalpamys@gmail.com is the maintainer's personal address; it reaches the same person and is a fine fallback.

Citing Soup

Layer streaming — training an 8B model on a 4 GB laptop GPU by streaming the frozen base from host RAM one decoder layer at a time — is described in a preprint, together with the correctness protocol that verifies a streamed run against a resident one (forward and backward stated separately, because they are two claims and not one).

Makazhan, A. (2026). *Exact Layer Streaming: LoRA Fine-Tuning of an 8B Model on a 4 GB Laptop
GPU* (v3). Zenodo. https://doi.org/10.5281/zenodo.21918325

Version 3 (13 August 2026) is current. The title and the claim are unchanged — 8B on 4 GB — and no measured number has changed since v1. What v3 does is withdraw an explanation we had published, which is also the shortest way to describe what the paper is for:

That was an inference from the H100 replication below, and it had never been measured. We measured it on 11 August and it is false at the published configuration: deleting every host-to-device byte buys 1.4%, the compute stream waits on a copy for 0.20% of the step, and the step runs at 71.3% of that card's same-session GEMM ceiling. The largest streaming-specific cost is the per-layer NF4 dequantisation, at 9.8% (the record). Every measurement stands; the replication survives in a weaker form — the constraint is common to both machines and is not the GPU's compute. 3050 against a median 113.00 on an H100, at the same 3.32 GB peak. forward stayed bit-exact and the loss curve looked healthy while the gradients were wrong. The cause is named in the upstream library and reported there; the repair is gated against controls on real 32B and 72B. backward at 8B and 14B. of ZeRO-3 are slower than one card training resident. and seven new ones added.

Cite the version you used. 10.5281/zenodo.21771064 is the conc

GitHub Stars & Activity

6,657Stars
1,045Forks
137Open issues
PythonLanguage

GitHub Popularity

GitHub stars6,657
Forks1,045
Open issues137
Primary languagePython
LicenseApache-2.0
Stars gained today119
Created2026-02-20
Last pushed2026-09-16

Trending History

Daily boardrank #29 · ▲ 119 stars

Related AI Projects

1

NousResearch / hermes-agent

Python★ 245,944⑂ 0
2

Significant-Gravitas / AutoGPT

Python★ 187,373⑂ 0
3

anthropics / skills

Python★ 176,568⑂ 0
4

huggingface / transformers

Python★ 166,221⑂ 0
5

Panniantong / Agent-Reach

Python★ 82,303⑂ 7,173▲ 960 stars
6

roboflow / supervision

Python★ 50,425⑂ 4,804▲ 217 stars
7

wshobson / agents

Python★ 39,712⑂ 4,228▲ 39 stars
8

volcengine / OpenViking

Python★ 37,686⑂ 2,910▲ 286 stars

More AI Rankings