今天在 GitHub Trending 上看到一个有意思的项目:Soup,一个让 LLM 微调变得极其简单的 CLI 工具,核心卖点是能在 4GB 显存的笔记本 GPU 上微调 8B 模型。

一、项目概述

Soup 是一个开源的 LLM 微调和后训练工具,目标是解决 LLM 训练的"配置地狱"问题。传统微调需要处理 SSH 连接、CUDA 版本、依赖冲突等基础设施问题,而 Soup 提供了一条命令完成训练的解决方案。

核心特性:

  • 零 SSH:无需远程连接 GPU 服务器,本地即可完成训练
  • 单一配置文件:所有训练参数通过 soup.yaml 管理
  • 自动优化:自动处理批次大小、GPU 检测、量化配置
  • 层流式传输:支持在 4GB 显存上训练 8B 模型(NF4 量化 + LoRA)
  • 多任务支持:SFT、DPO、GRPO、PPO、KTO、ORPO、SimPO、IPO、BCO 等

二、技术原理

层流式传输(Layer Streaming)

这是 Soup 最核心的创新技术。传统方式需要将整个模型加载到 GPU 显存中,8B 模型即使量化后也需要约 5-6GB 显存。Soup 的做法是:

  1. 冻结基座模型驻留主机内存:将 8B 模型的权重存储在系统 RAM(约 3.6GB)
  2. 逐层送入 GPU:训练时,每次只将一个 decoder 层送入 GPU 计算梯度
  3. 只训练 LoRA 适配器:基座模型权重冻结,只有 LoRA 参数参与训练

实测数据(RTX 3050 Laptop 4GB):

模型:Llama-3.1-8B-Instruct + NF4 量化
峰值显存:3.32 GB
训练速度:119.6 tok/s

核心配置示例:

training:
  stream_layers: true      # 启用层流式传输
  quantization: 4bit       # NF4 量化,约 4 倍压缩
  batch_size: 4
  stream_source: auto      # RAM 够用则用 RAM,否则用 NVMe

正确性验证

层流式传输的数学等价性已在论文中证明:

  • 前向传播:从 0.5B 到 72B 模型验证 bit-exact
  • 反向传播:在 8B 和 14B 模型验证 bit-exact
  • 训练质量:流式训练与常驻训练的模型质量无差异

论文已发表在 Zenodo:10.5281/zenodo.21918325

多后端支持

# pyproject.toml 中的后端选项
[project.optional-dependencies]
train = [...]          # 标准 PyTorch + transformers + peft + trl
fast = ["unsloth>=2024.8"]     # Unsloth 后端,2-5x 加速
mlx = ["mlx>=0.20.0", "mlx-lm>=0.31.3"]  # Apple Silicon 支持

训练任务类型

Soup 支持丰富的训练任务:

任务说明配置示例
SFT监督微调task: sft
DPO直接偏好优化task: dpo
ORPO优化比率偏好优化task: orpo
SimPO简单偏好优化task: simpo
KTOKahneman-Tversky 优化task: kto
GRPO组相对策略优化task: grpo
PPO近端策略优化task: ppo

三、安装与快速开始

环境要求

  • Python 3.10、3.11 或 3.12(不支持 3.13+)
  • GPU:CUDA(推荐)、Apple Silicon(MPS)或 CPU(实验性,极慢)
  • 显存:8GB+ 可训练 7B 模型(QLoRA)

安装步骤

# 轻量核心:仅 CLI + 配置 + 数据工具,无 PyTorch
pip install soup-cli

# 训练完整栈(推荐)
pip install "soup-cli[train]"

# 全功能(训练 + 推理服务 + UI + 数据工具)
pip install "soup-cli[all]"

⚠️ 注意:必须使用双引号 "soup-cli[train]",单引号在某些 shell 中会失败。

最简运行示例

# 1. 创建配置文件
soup init --template chat

# 2. 准备数据(alpaca 格式)
# data/train.jsonl

# 3. 开始训练
soup train --config soup.yaml

# 4. 测试模型
soup chat --model ./output

# 5. 推送到 HuggingFace
soup push --model ./output --repo you/my-model

四、使用方法与实战

基础配置文件

一个完整的 soup.yaml:

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

data:
  train: ./data/train.jsonl
  format: alpaca      # 自动检测:alpaca, sharegpt, chatml 等
  val_split: 0.1

training:
  epochs: 3
  lr: 2e-5
  batch_size: auto    # 自动推断
  lora:
    r: 64
    alpha: 16
  quantization: 4bit  # NF4 量化
  stream_layers: true # 4GB 显存启用

output: ./output

数据格式自动检测

Soup 支持多种数据格式,无需手动指定:

  • Alpaca:instruction, input, output
  • ShareGPT:conversations 列表
  • ChatML:OpenAI 格式对话
  • Preference:DPO/ORPO 的偏好对格式
  • Vision/Audio:多模态数据
// train.jsonl (Alpaca 格式)
{"instruction": "解释量子计算", "input": "", "output": "量子计算是..."}

进阶用法:偏好优化

# DPO 训练
soup init --template dpo
soup train --config soup.yaml

# 模板选项:dpo, orpo, simpo, kto, ipo, bco, rlhf

偏好数据格式:

{"prompt": "问题", "chosen": "好的回答", "rejected": "差的回答"}

导出与部署

# 合并 LoRA 到基座模型
soup merge --adapter ./output

# 导出 GGUF(用于 Ollama / llama.cpp)
soup export --model ./output --format gguf --quant q4_k_m

# 启动 OpenAI 兼容服务
soup serve --model ./output

质量门禁(soup ship)

Soup 内置了回归检测套件,防止微调破坏基础能力:

soup ship --base ./base --adapter ./my-lora --task-eval my_task.jsonl
# exit 0 = SHIP
# exit 2 = DON'T SHIP

七个内置评估套件:

  • MCQ(多选题)
  • 算术推理
  • 工具调用
  • JSON 格式
  • 安全/拒绝检测
  • 过度拒绝检测
  • MMLU mini

五、常见问题与解决方案

Q1: 训练时报错 ImportError: DLL load failed

原因:Windows 上 PyTorch CUDA 版本不匹配。

解决方案:

# 重新安装匹配 CUDA 版本的 PyTorch
pip install torch --index-url https://download.pytorch.org/whl/cu121

Q2: 显存不足怎么办?

解决方案:

  1. 启用层流式传输:

    training:
      stream_layers: true
      quantization: 4bit
    
  2. 减小批次大小:batch_size: 1

  3. 使用梯度检查点:自动启用

Q3: 如何在 Apple Silicon 上训练?

# 安装 MLX 后端
pip install "soup-cli[train,mlx]"

# 配置
training:
  backend: mlx

Q4: 训练速度太慢?

解决方案:

  1. 使用 Unsloth 后端(2-5x 加速):

    pip install "soup-cli[fast]"
    
    backend: unsloth
    
  2. 增大批次大小(显存允许时)

  3. 使用 Flash Attention(自动检测)

Q5: 如何诊断环境问题?

soup doctor
# 检查 GPU、依赖、版本等

六、总结

Soup 是一个设计理念非常清晰的 LLM 微调工具——让微调回归训练本身。它的层流式传输技术让普通开发者也能在消费级硬件上完成 8B 模型的微调,这对于个人研究者和中小团队来说意义重大。

从技术角度看,Soup 的亮点包括:

  • 层流式传输的正确性证明和 bit-exact 验证
  • 丰富的训练任务支持(SFT + 偏好优化全家桶)
  • 内置质量门禁系统
  • 完善的数据格式自动检测

对于想要尝试 LLM 微调但受限于硬件资源的开发者,Soup 值得一试。

项目地址:https://github.com/MakazhanAlpamys/Soup

文档:https://trysoup.dev