Skip to content

xianfeng92/finetune-lab

Repository files navigation

finetune-lab

微调第一次看懂:不要只盯 loss 曲线,要看模型行为有没有真的改变。 SFT 数据 → LoRA 微调 → held-out probe → case diff → Web 实验课。

Deploy web to GitHub Pages Live demo Apple Silicon Agent friendly License: MIT

🌐 在线 demo: https://xianfeng92.github.io/finetune-lab/

finetune-lab Overview

训练 loss 降了,不代表模型学会;一个 runtime 通过,也不代表部署 runtime 等价。 finetune-lab 会把训练结果放回 held-out probe 和 case-level diff 里看:模型到底有没有选对工具、填对参数、输出合法 JSON、做出正确行为;涉及端侧部署时,还要复测同一 LoRA 在目标 runtime 上是否保留安全 contract。


这个仓库解决什么

模型微调的入门资料常常分成两类:要么只讲概念("什么是 LoRA / SFT"),要么只贴脚本("跑这条命令")。真正让新手卡住的是中间这步:

我把训练跑完了,loss 也降了,模型到底学到了什么?

finetune-lab 把这个问题做成一条可跑、可看、可解释的学习链路:

  1. 生成 SFT 数据 —— 单工具 / 多工具 / curriculum / preference pairs 都现成
  2. 本地真实微调 —— Apple Silicon 上的 mlx-lm.lora,几十到几百 step 的真小规模 run
  3. held-out probe —— 拿没参与训练的样本去测,看模型有没有真的泛化
  4. case diff 可视化 —— 同屏看 input / expected / actual,定位模型到底哪里保留了行为、哪里出现退化

整条链路的入口是 makeai-onboarding 探仓库、ai-setup 装依赖、ai-lab 把最小教学闭环跑一遍。你也可以先看 在线 demo,不用安装任何依赖。


Highlights

  • 🎓 微调第一次看懂 — 从一条 SFT 样本开始,看到 LoRA 训练、held-out probe、失败 case diff
  • 🧪 loss trap 教学 — 明确展示 loss 下降 != 学会了,把训练曲线和行为评测分开看
  • 🧯 runtime reality check — 同一 LoRA 在 MLX adapter 和 GGUF fused runtime 上分别复测,避免把训练侧结果误写成部署侧结论
  • 📊 Web 实验课 — Beginner Guide / Data Pipeline / Training Runs / Probe Compare 等 view 全部从真实 artifacts 生成
  • 🧭 4 条学习路径loss-is-lyingfirst-loratool-callingcurriculum-vs-direct
  • 🍎 Apple Silicon 友好 — 默认真实路径走 mlx-lm.lora,不需要 CUDA / 不需要云
  • 🎛️ 教学占位 + 真训练双轨SIM 用来快速理解流程,REAL 才代表真实 LoRA 更新
  • 🤖 AI-native — 仓库自带 AGENTS.md + make ai-onboarding,可以交给 Codex / Claude 接手
  • 📚 数据集治理和严肃 benchmark — dataset cards、redaction reports、template-level held-out split 都有留档

Quick start — 60 秒上手

先看 demo,再本地跑。第一次不需要下载大模型,make ai-lab 会走最小教学闭环。

git clone https://github.com/xianfeng92/finetune-lab.git
cd finetune-lab

make ai-onboarding   # 探仓库:检查 Python venv / 数据 / 产物准备情况
make ai-setup        # 缺啥补啥:建 venv、装 jsonschema/pytest、npm deps
make ai-lab          # 跑最小教学闭环(data → simulated train → probe → web build)

不想本地跑? 直接看在线 demo:xianfeng92.github.io/finetune-lab


反馈与贡献

如果这个项目帮你把微调看清楚了,欢迎 star;如果哪里仍然像黑盒,也欢迎直接提 issue。

  • 学习卡点:用 Learning question 模板告诉我哪一步还没讲透
  • 新 recipe:用 Recipe request 模板提一个你想复现的微调问题
  • 工程改进:先看 CONTRIBUTING.md,尽量附上命令和 artifact 路径

4 条首发学习路径

学习路径 你会看懂什么 当前入口
loss-is-lying 为什么 loss 降了,模型仍然可能没学会 Training Runs + Probe Compare
first-lora 第一次 LoRA 微调会产出哪些 adapter、manifest、metrics make ai-lab,然后看 Training Runs
tool-calling SFT 样本如何教模型选择工具、填参数、输出 JSON Data Pipeline + Probe Compare
curriculum-vs-direct 课程式训练和 direct mixed 训练在 probe 上有什么差异 Probe Compare + real fine-tune guide

完整 recipe 索引见 docs/recipes。每条 recipe 都给出标准命令、artifact 路径、Web 查看位置和防误读边界。


数据 → 训练 → Probe → 可视化

       ┌────────────────┐    ┌────────────────┐    ┌────────────────┐
data → │ data_pipeline  │ →  │ mlx-lm.lora    │ →  │ probe (held-   │
       │ samples.jsonl  │    │ adapter (.safe │    │ out.jsonl)     │
       │ train / held-  │    │ tensors)       │    │ probe-results  │
       │ out split      │    │ train-metrics  │    │ .jsonl         │
       └────────────────┘    └────────────────┘    └────────────────┘
                                                            │
                                                            ▼
                                                   ┌────────────────┐
                                                   │ Web 实验台      │
                                                   │ run/curve/case │
                                                   │ diff visualize │
                                                   └────────────────┘

每一步都有 make 入口、固定产物路径、对应的解释文档。

阶段 标准命令 关键产物 文档
数据生成 make data-demo / make data-benchmark data/sft/v1-seed-anchor-demo/{samples,train,held-out}.jsonl training/data_pipeline/README.md
真实微调 make real-stage-curriculum outputs/gemma4-e2b-real-mlx-lora-*/adapter/ docs/ai/gemma4-real-finetune-guide.md
held-out probe make real-probe-mac outputs/.../probe-results.jsonl training/finetune/README.md
端侧对照 edge-bench/bench/probe_llama_cpp.py outputs/edge-bench/baselines/*/inference-probe-report.md edge-bench/README.md
半实时观测 make real-train-mac(自动写 live status) outputs/.../run-live-status.json
web/public/run-live/index.json
docs/changes/2026-04-26-training-observatory-live-status-impl-notes.md
可视化 make web-build web/dist/ (静态 HTML) web/README.md

真训练 vs 教学占位

仓库里所有 run 都打了 SIM / REAL 标签:

  • SIMsimulated 路径,写假 loss / 假 adapter,不真的更新模型。给"想看流程,但不想下 26B checkpoint"的人。
  • REAL — 真的调 mlx-lm.lora 跑,会写出真 LoRA adapter(几 MB 到几十 MB 的 .safetensors)。
# 教学占位
make smoke-train-mac       # 20 step simulated
make probe-mac

# 真小规模 LoRA(默认 Gemma 4 E2B-it 4-bit)
make bootstrap-real-finetune
make real-finetune-data
make real-stage-curriculum
make real-probe-mac

Web 实验台会同屏列出 SIM 和 REAL run,并默认在 Probe Compare 折叠 SIM 占位,避免误读。


Edge Inference Bench

edge-bench/ 把 finetune-lab 的车机 tool-calling LoRA 推到端侧推理对照:MLX 作为训练侧 ground truth,llama.cpp 跑 fused GGUF fp16 / Q4_K_M,LiteRT-LM 当前作为官方 base-only fallback。

当前 W5/W6 证据很明确,但结论要写窄:MLX adapter 路径在 144 条 strict benchmark 上保留了 4 维 PolicyGateway 语义;同一 LoRA fuse 到 llama.cpp GGUF 后,behavior_accuracy 约 60%,unsafe_direct_call_rate 变成 24/144,confirmation_contract_hitrefusal_contract_hit 都掉到 0/12。fp16 与 Q4_K_M 几乎一致,说明主因不是量化,而是 Gemma 4 num_kv_shared_layers 在训练侧 compat shim 与 llama.cpp 推理侧之间的架构假设不一致。

这不是“三引擎 parity 排行榜”。LiteRT-LM 当前只跑通官方 base-only .litertlm,可用于说明无 tools 注入时的被动安全,但不能用于声称同一 LoRA 已在 LiteRT-LM 上保留 PolicyGateway 语义。

入口:


Web 实验台

在线 demo → 不用 clone 就能看完整效果。

Tab 干什么
Beginner Guide 系统讲清楚 SFT / LoRA / probe / 为什么 loss ≠ "学到了",自带右侧 TOC
Overview Manifesto 速读 + Roadmap + 各 Level 教学包(默认折叠,按需展开)
Agent Handoff sense → prepare → teach → compare 的标准交接 timeline
Data Pipeline 数据集类目分布、train/held-out split、单条样本解剖、23+ 个 dataset cards
Observatory 半实时训练看板:status 灯(running 脉冲)+ train/val loss + throughput + peak memory + behavior KPI 都在一页。HTTP 预览下每 2 秒轮询 run-live-status.json,能看着训练实时往前走
Training Runs 所有 run 的 loss 曲线(带共享 y 轴 toggle)、metric、artifact
Probe Compare 多 run 横向对比,★ best exact 高亮,case 级集合 diff(match / extra / missing)
Training Observatory
Observatory:状态灯 + cross-run KPI + 选中 run 实时面板
Probe Compare
Probe Compare:4 维排序 + best 标记
Training Runs
Training Runs:run registry + loss 曲线
 

本地启动方式:

cd web && npm install && npm run dev   # http://localhost:4173
# 或者
make web-install && make web-build     # 产 web/dist/ 静态 HTML

AI-native:交给 Codex / Claude 接手

这是这个仓库和"普通 finetune cookbook"最大的差别。

仓库根目录的 AGENTS.md + project-context.json 把"该怎么读、该怎么跑"写成了 agent 协议。一句话就能让 agent 接手:

阅读 AGENTS.md、project-context.json、docs/ai/setup.md、docs/ai/workflows.md。
先运行 make ai-onboarding 判断当前状态;如果依赖未准备好先执行 make ai-setup;
然后继续运行 make ai-lab,并在每一步告诉我当前产物、为什么要做这一步、下一步是什么。

agent 会在终端里自己讲解链路,不用你查 README 翻命令。


项目结构

finetune-lab/
├── data/                              # SFT 数据集(含 dataset cards / redaction reports)
│   ├── sft/                              # 主数据集 (small/medium/large)
│   ├── real-finetune/                    # mlx-lm.lora 直接喂的数据
│   ├── public-source/ public-normalized/ # 引用 / 改造过的公开数据集
│   └── preferences/                      # preference pairs
├── training/
│   ├── data_pipeline/                    # 数据生成 + 校验 + governance
│   └── finetune/                         # mlx-lm.lora wrapper / probe runner
├── docs/
│   ├── ai/                               # agent 接手要读的:setup/workflows/beginner-guide
│   ├── specs/ changes/ reviews/          # 设计 / 实现 / review 留档
│   └── assets/                           # README 用的图
├── outputs/                           # 训练产物(gitignore,由 make 生成)
├── web/                               # React + Vite 实验台
└── Makefile                           # 标准入口(make help)

文档地图

按"想做什么"找:


Roadmap

最近完成(2026-04):

  • Training Observatory:半实时训练看板,2s 轮询 live status + CPU/RSS 采样
  • Strict benchmark split:模板级 group split,杜绝 prompt 模板复用
  • Public-augmented compare:CAR-Bench / ClarifyVC 公开样本并入 medium 训练做同口径对比

后续方向:

  • Level 2-4 的训练策略实验包(regularization、scaling laws、curriculum 对照)
  • preference tuning(DPO)真训练通路 —— 当前 Level 6 还是 rubric/dataset 阶段
  • Gemma 4 E4B / 31B 的多 GPU 触发条件 rubric
  • Probe Compare 的多模型并排(不限于同 base)
  • Same-LoRA LiteRT-LM 路径验证后,再写 LiteRT runtime parity 结论

Contributing

欢迎 PR / issue。建议路线:

  1. 先读 AGENTS.md 了解仓库协议
  2. 设计变更(新 dataset / 新训练策略 / 新 probe 维度)写 spec 到 docs/specs/<date>-<topic>-spec.md
  3. 实现完成后写 impl 笔记到 docs/changes/
  4. review 写到 docs/reviews/

License

MIT © 2026 xianfeng92。 随便用、随便改、随便发,但请保留原 copyright 声明。

About

AI-native fine-tuning lab:把数据生成 → LoRA 微调 → held-out probe → 可视化对比这条链路收成一个仓库 + 一个交互站点。Apple Silicon (MLX) 友好,agent 友好。

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors