news 2026/8/30 10:49:45

一个仓库,零框架依赖:train-llm-from-scratch如何让训练LLM变得简单

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一个仓库,零框架依赖:train-llm-from-scratch如何让训练LLM变得简单

一个仓库,零框架依赖:train-llm-from-scratch如何让训练LLM变得简单

【免费下载链接】train-llm-from-scratchA straightforward method for training your LLM, from downloading data to generating text.项目地址: https://gitcode.com/GitHub_Trending/tr/train-llm-from-scratch

train-llm-from-scratch 是一个用纯 PyTorch 手写的 LLM 训练项目:不依赖trlpefttransformers等任何大模型框架,从下载语料、训练基础模型,一路做到 SFT、奖励模型、PPO、DPO、GRPO 对齐与推理对话,全部算法逐行手写。哪怕你只有一张免费 Colab T4 显卡,也能用它从零训出一个 13M 参数的小语言模型,并完整走通对齐流程。

🗺️ 一个仓库覆盖完整 LLM 训练流水线

这个仓库把"训练 LLM"拆成了一条可独立运行、又可一键串联的流水线:

原始文本 → 分词 → Transformer → 基础模型 基础模型 → SFT → 奖励模型 → {PPO, DPO} → GRPO → 评估 & 聊天

每个阶段都对应 scripts/ 下一个独立脚本,配置集中在 configs/ 的 JSON 文件里(每个阶段一份,支持命令行覆盖任意字段),想快速验证还有 configs/smoke/ 下的小模型配置,几秒就能跑完一个完整阶段。

🧩 为什么"零框架依赖"是它最大的卖点

大多数 LLM 训练教程要么用现成框架"黑盒式"调用,要么只讲预训练不碰对齐。这个项目两条路都不走:

  • 核心依赖极简:模型与数据路径只需要torchnumpytiktokenh5pytqdm等少数几个包(见 pyproject.toml),trl/peft/transformers一概不用;
  • 每个算法可读可改:SFT 的 loss mask、Bradley-Terry 奖励、PPO 的 GAE 与 clip、GRPO 的组相对优势,都是几十行内的独立函数,全部位于 src/post_training/;
  • 单卡可跑:13M 模型在免费 GPU 上即可训练;显存不够时预训练脚本支持--amp --grad-checkpointing --grad-accum省显存参数。

对想真正搞懂 LLM 训练内部机制的人来说,"能读懂的每一行"比"能跑起来的黑盒"值钱得多。

🚀 三步快速上手:克隆、安装、开训

第 1 步:克隆仓库

git clone https://gitcode.com/GitHub_Trending/tr/train-llm-from-scratch cd train-llm-from-scratch

第 2 步:安装(可编辑模式,省去手动设置 PYTHONPATH)

pip install -e ".[train]" # 训练 + 数据下载;UI 用户装 .[ui]

第 3 步:先跑冒烟测试,再正式训练

python tests/test_post_training_smoke.py # CPU 上验证核心数学 python scripts/train_sft.py --config configs/smoke/sft.json # 迷你模型完整训练

确认环境无误后,用 config/config.py 里的 13M 小配置跑第一个预训练:

python scripts/train_transformer.py

完整命令清单可参考 docs/howto/commands.md。

📦 数据准备:四条流水线并行就绪

模型只认识整数,所以第一步永远是"文本 → token id → 落盘"。这个项目一次性为四个阶段准备好数据:预训练语料(The Pile)、SFT 指令数据(Alpaca/Dolly/GSM8K)、偏好对(HH-RLHF/UltraFeedback)、RL 数学题(GSM8K)。四条流水线各自独立、产物清晰:

分词采用 GPT-3 同款r50k_basetokenizer;SFT 数据会额外生成 0/1 的loss mask,只让模型学习"助手回答"部分而不复读提示词——这个细节在 src/post_training/chat_template.py 中实现。

📉 预训练:一条 loss 曲线讲完整个故事

预训练是整条流水线中最耗时的一步:随机取 token 窗口 → 预测下一个词 → 交叉熵算误差 → 反向传播更新。仓库提供两条路径:

  • 教学版scripts/train_transformer.py:单卡、最简代码,适合理解原理;
  • 实战版scripts/pretrain_base.py:DDP 多卡、bf16、梯度累积、余弦学习率调度、断点续训,一个命令从 1 卡切到 N 卡。

作者在 2×L40 上训练的 77M 模型,loss 从 11.14(接近均匀猜测的 ln(50304)≈10.83)一路降到 3.7 左右,这就是模型把语言模式"压缩"进权重的过程:

🧱 模型本体:用四个小零件拼出 Transformer

Transformer 作为一坨代码看着吓人,仓库把它拆成四块,每块都是独立的nn.Module

  1. src/models/mlp.py —— 单 token 的"思考"前馈网络;
  2. src/models/attention.py —— 单头与多头注意力(因果掩码让它成为语言模型);
  3. src/models/transformer_block.py —— 注意力 + MLP + 残差连接;
  4. src/models/transformer.py —— 嵌入、位置编码、堆叠的 Block 与 lm_head。

整个后训练体系只在这个模型上加了一个forward_hidden方法,奖励头、价值头全部"外挂"组合,一行原始模型代码都不用改——这就是作者所说的"wrap, don't rewrite"设计哲学。

🎯 后训练五连招:从续写文本到推理助手

基础模型只会"续写",对齐才让它会"答题"。五个阶段共用同一个模型骨架,只换数据和 loss:

阶段作用核心代码
SFT学会指令格式与think/answer结构src/post_training/sft.py
奖励模型学习人类偏好打分(Bradley-Terry)src/post_training/reward_model.py
DPO / ORPO / KTO免 RL 循环的偏好对齐src/post_training/dpo.py
PPO经典 RLHF 循环(GAE + clip + KL)src/post_training/ppo.py
GRPO / RLVRDeepSeek-R1 式可验证奖励推理src/post_training/grpo.py

PPO 一轮完整循环:生成 rollout → 打分(验证器或奖励模型)→ 加 KL 惩罚 → GAE 估优势 → clip 更新:

GRPO 则干脆扔掉价值网络,对同一道题采样一组答案,用组内均值标准差当基线,答对得分就强化——逻辑短到十几行:

训练完想一键串联全流程?一条命令搞定 SFT → RM → DPO → PPO → GRPO → 评估表:

bash scripts/run_posttraining.sh

📊 评估与聊天:用同一个数字贯穿所有阶段

项目用GSM8K 贪心准确率作为贯穿全阶段的唯一标尺:出题 → 生成 → 从<answer>标签提取数字 → 对答案。同一条命令跑在任意 checkpoint 上,Base、SFT、DPO、PPO、GRPO 的成绩一目了然:

想直接和模型说话?scripts/chat.py 加载任意阶段的 checkpoint,自动识别模型维度,支持温度采样或贪心解码:

python scripts/chat.py --ckpt models/sft.pt --prompt "What is 13 + 29?"

📚 配套文档与 Streamlit 控制面板

仓库内置一套 MkDocs 文档站,涵盖 Foundations(分词、注意力、目标函数、优化、生成)与每个阶段的理论 + 图解 + 源码对照,本地mkdocs serve即可浏览(源文件在 docs/):

不想敲命令?启动 Streamlit 控制面板 ui/app.py,九个页面分别对应 Data、Pretrain、SFT、Reward、DPO、PPO、GRPO、Evaluate、Chat,填表即可一键启动并实时看 loss 曲线:

pip install -e ".[ui]" streamlit run ui/app.py

🎓 它适合谁?

  • 学生:从 13M 小模型起步,每个代码块前面都有白话解释,配合 docs/foundations/ 补课正好;
  • 开发者:所有命令、文件路径、真实运行输出都写在 README.md 和 POST_TRAINING.md 里,可直接复制运行;
  • 研究者:后训练半程是重点——SFT、Bradley-Terry 奖励模型、PPO+GAE、DPO/ORPO/KTO、GRPO 全部从零实现,且训练在真实公开数据集上,指标可复现。

零框架、单 GPU、全链路可跑通——这就是 train-llm-from-scratch 把"训练 LLM 很难"变成"训练 LLM 可以读"的方式。

【免费下载链接】train-llm-from-scratchA straightforward method for training your LLM, from downloading data to generating text.项目地址: https://gitcode.com/GitHub_Trending/tr/train-llm-from-scratch

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/30 10:48:25

不确定性引导潜在扩散模型:破解超分幻觉细节难题

之前在图像超分项目里尝试用扩散模型增强细节时&#xff0c;最大的感受是&#xff1a; 纹理变丰富了&#xff0c;但结果并不可控 。模型会在原本平滑的区域脑补出不该存在的结构&#xff0c;导致人眼看似清晰&#xff0c;真实还原度却下滑。后来接触到 Uncertainty-Guided La…

作者头像 李华
网站建设 2026/8/30 10:47:42

基于MATLAB有限元法的三维光子晶体带隙计算实战

简介&#xff1a;本资源是一套面向光学仿真研究者与高年级本科生的MATLAB三维光子晶体带隙分析工具&#xff0c;聚焦于利用有限元法&#xff08;FEM&#xff09;高效求解复杂周期结构中的电磁波传播特性&#xff0c;解决传统解析方法难以处理的任意晶格、非均匀介质及三维几何建…

作者头像 李华
网站建设 2026/8/30 10:47:30

CodeGraph 文件监听器实现指南:FSEvents、inotify 与智能防抖策略

CodeGraph 文件监听器实现指南&#xff1a;FSEvents、inotify 与智能防抖策略 【免费下载链接】codegraph Pre-indexed code knowledge graph, auto syncs on code changes, for Claude Code, Codex, Gemini, Cursor, OpenCode, AntiGravity, Kiro, CoPilot, and Hermes Agent …

作者头像 李华