MakazhanAlpamys /Soup
Fine-tune LLMs from one YAML. Layer streaming trains an 8B model on a 4 GB laptop GPU.
★ 10,083⑂ 1,665👁 59▤ 183
10,083
stars
+0+71+1,895
1,665
forks
59
watchers
–
prs
–
issues
183
releases
–
discussions
README
🌍 English | Türkçe | العربية | 日本語 | 中文
Soup
一条命令完成 LLM 微调与后训练。无需 SSH,告别配置灾难。
官网 ·
快速开始 ·
Web UI ·
配置 ·
文档 ·
命令 ·
模型 ·
Discord ·
Telegram ·
Product Hunt
---
Soup 把 LLM 微调的痛点变成一条简单的工作流。一份配置、一条命令,搞定。
bash
pip install "soup-cli[train]" 加 [train] 才能微调;裸 soup-cli 是轻量 CLI
soup init --template chat
soup train
在 4 GB 笔记本 GPU 上微调 8B 模型。 Layer streaming 让冻结的基座模型不占
显存,按解码层逐层送入 GPU。在 RTX 3050 Laptop 4 GB 上实测:Llama-3.1-8B-Instruct +
NF4 达到 952 MHz 下 119.6 tok/s,峰值 3.32 GB(修复前)——与常规常驻显存的运行逐位一致,并在 H100 上
以同样的 3.32 GB 独立复现出 113.00 tok/s。(两个数字都测于 v0.72.2,早于 v0.73.0 那次
在 32B 上付出 −4.8% 代价的正确性修复。修复后的复测在另一台 RTX 3050 Laptop 4 GB
上完成(@umran666,1103),结果是 1935–1957 MHz 下 208.6 tok/s,峰值 2.40 GB。这相当于
同场 GEMM 上限的 59%,而修复前是 68%:按单位时钟频率折算大约慢 14%,所以表面上 1.74x 的提升来自
时钟频率,而不是加速。large-layer streaming 也改变了两组数据之间的内存占用方式,因此连这个比例也不是
同口径的对比——完整记录。)需显式开启
(stream_layers: true),仍是 BETA——
工作原理 ·
全部实测数据 · 论文 ·
在免费 Colab T4 上亲自验证(把进程限制在 4 GB,
然后断言流式模型与常驻模型逐位一致)
Llama-3.1-8B-Instruct + NF4、LoRA、batch 1、seq 512,RTX 3050 Laptop 4 GB——峰值 3.32 GB,119.6 tok/s,952 MHz(修复前,v0.72.2;331 修复后:1935 MHz 下 208.6 tok/s,2.40 GB,不可直接比较,@umran666,1103)。完整视频(90 秒)
为什么选择 Soup
训练 LLM 至今仍然令人痛苦。即使是有经验的团队,也有 30-50% 的时间耗在和基础设施搏斗上,
而不是改进模型。Soup 解决的就是这件事。
- 零 SSH: 再也不用 SSH 进一台坏掉的 GPU 机器。
- 一份配置: 一个简单的 YAML 文件就是全部所需。
- 全部自动: batch size、GPU 检测、量化,都替你处理。
- 本地可跑: 用自己的 GPU 跑 QLoRA,不需要云。
最新动态
v0.77.2——基于 v0.77.1 之后 main 的一次发布:159 个拉取请求,其中 153 个来自维护者之外的 30 位
贡献者。 大部分是修复。它也新增了功能,以及两条可能拒绝 v0.77.1 所接受内容的规则,因此在升级服务器或
task: sft 配置之前,请先阅读 v0.77.2 发布说明。从 0.76.x 升级时,请先运行
soup doctor --config soup.yaml,并阅读 v0.77.0 发布说明。
- soup profile --model 无需 soup.yaml 即可回答“放得下吗?”。 它根据模型的 config.json
估算该次运行,由 --seq、--batch、--method、--lora-r、--optimizer 和
--gradient-checkpointing 决定形状;在 Apple Silicon 上,它与 Metal 的工作集大小比较。
soup plan 和 soup apply 现在接受 --minillm-on-policy。
- Apple Silicon 上支持更多训练。 带有 preference_loss: dpo、orpo 或 simpo 的
task: preference 运行原生 MLX 训练器,MLX GRPO 可在 4 位 mlx-community 基座上训练,
MLX Adafactor 会遵循配置的学习率和调度。
- 两个新的 DPO 配方: qwen3.5-0.8b-dpo 和 qwen3.5-27b-dpo。
- 更接近实际的 VRAM 估算。 优化器步骤被视为独立阶段,PRM 步骤只计一个位置的 logits,
分片的 FSDP 或 ZeRO 运行按每张卡估算,stream_loss_chunk 步骤计入最后一层的重计算,
Unsloth 的 LoRA 目标按其加载器的选择估算。
- 更少的静默覆盖和空结果。 更多命令会拒绝指向某个输入的 --output(soup data ingest、
persona-mix、generate 等);soup ship --adapter 会拒绝不改变任何东西的适配器;
soup distill-prompt、soup data evolve、gen-magpie 和 filter --perplexity 会报错,
而不是写出空文件或未过滤的文件。
- 偏好与强化学习修复。 data.max_length 对 SimPO 和 KTO 重新生效,PPO 在要求时会对策略启用
gradient checkpointing(在 4 位和 8 位下也不再崩溃),soup merge 会加载适配器训练时所用的基座提交。
- 文本按输入原样显示。 数十个命令在显示路径、名称和消息时保留方括号和 :name: 文本,
并移除终端控制字符。
需要了解的行为变化。 soup serve --tool-auth-token 必须是由 A-Z、a-z、0-9、_ 和 -
组成的 16 到 128 个字符(否则退出码为 2)。task: sft 会在从未应用这些设置的视觉、音频、MLX、
Unsloth、RAFT 和预分词路径上拒绝 reasoning_effort、train_on_eot、use_flash_attn 和
use_liger。soup completions 生成的脚本需要重新