📌 项目地址:MakazhanAlpamys/Soup | ⭐ 1,551 颗星 | 🔧 Python | 📜 未标注
先说这个项目解决什么问题
训练LLM的流程长期以来是这样的:SSH到一台GPU机器,装环境,改配置,跑崩,再SSH进去看日志。Soup的定位很直接:一个YAML文件,一条命令,batch size、GPU检测、量化都自动处理,本地就能跑QLoRA,不碰云。
仓库:MakazhanAlpamys/Soup,Python,1551 stars。
安装有个细节必须说清:
pip install "soup-cli[train]" # 加 [train] 用于微调;裸 soup-cli 是轻量 CLI
soup init --template chat
soup train
不带 [train] 装的是轻量CLI,不能训练。第一次用容易装错。
4GB显存跑8B模型,靠逐层流式
Soup的核心技术点叫layer streaming:冻结的基座模型不整体驻留显存,而是一个decoder层一个decoder层喂给GPU。默认关闭,配置里写 stream_layers: true 才启用,官方标注BETA。
官方数据,RTX 3050 Laptop 4GB,Llama-3.1-8B-Instruct + NF4,LoRA,batch 1,seq 512:
- 峰值显存 3.32 GB
- 119.6 tok/s
- H100独立复现:113.00 tok/s,同样3.32 GB
- 流式训练与正常驻留训练逐bit一致
这几条里最有分量的是最后一条的验证方式。仓库里有免费Colab T4笔记本(notebooks/proof-4gb.ipynb),把进程显存限制在4GB,然后断言流式模型和正常模型bit级相同。还有带DOI的论文(10.5281/zenodo.21771064)和 benchmarks/ 目录的完整测量。你不用信README,自己跑。
但要打折:119.6 tok/s是v0.72.2测的。v0.73.0修了一个正确性问题,32B模型上代价是慢4.8%,之后没在4GB卡上重新测过。现在装最新版,跑出的速度大概率对不上README的数字。README自己承认了这一点——这本身是个信号。
我更想讲的部分:v0.73.3的发布说明
性能数字到处都有,这个项目打动我的是它披露错误的方式。
v0.73.3的说明开头写着:本版本24个PR全部来自维护者之外的八个人,五人首次参与。他们发现的东西比人数有意思,四个独立的参数,被验证过、写进了文档,但没有任何代码读取它们。
两个例子。
Assistant-only masking在零个token上训练,loss曲线看起来完全正常。 tokenizer返回的 BatchEncoding 不是 dict,绕过了类型守卫,label mask是用映射的键字符串拼出来的。没有异常,没有警告,曲线长得像在训练。发现方式是读类型定义,不是跑崩。
Apple Silicon上 quantization: 4bit 被静默改写成 none。 detect_device() 不认识MLX,每次运行报告”CPU (no GPU detected)”然后悄悄降级。修复后量化决策变成显式的、可测试的。
两个bug的共同点是静默失败:系统照常跑,输出照常出,只是结果不对。这类问题比崩溃难抓一个量级。Soup把发现过程和根因写进了发布说明,没有藏着。
我的判断
愿意公开写“我们有参数从来没生效过”的项目,它的基准数字可信度会高不少。反过来,只贴性能峰值的README,你没法知道数字背后有多少开关根本没接上。
谁该试,怎么试
适合:手里只有4-8GB显卡、想在本地跑QLoRA验证想法的人。不用云,不用SSH。
不适合:要训70B级模型、追求极限吞吐或多机并行的团队,Soup没做这个方向。
建议路径:先跑那个Colab笔记本,零硬件投入。正式用之前确认版本——这个项目的性能数据跟版本绑定,v0.72.2和v0.73.x的数字没有可比性。