FareedKhan-dev/train-llm-from-scratch
A straightforward method for training your LLM, from downloading data to generating text.
解决的问题
该项目提供了一个使用 PyTorch 从零开始构建的大型语言模型(LLM)的完整端到端实现。它不依赖于 transformers、trl 或 peft 等高级库,使用户能够理解并实现从原始文本处理到对齐的推理型模型的整个流程。
工作原理
该项目遵循一个顺序流程,将原始文本转换为功能型助手:
- 数据准备:使用 OpenAI 的
tiktoken对原始文本进行分词,并存储在 HDF5 文件中。这包括预训练数据、SFT 用的指令数据、用于奖励建模的偏好对,以及 RL 提示。 - 模型架构:使用基本的 PyTorch 模块构建 Transformer 模型,包括多层感知机(MLP)、带因果掩码的单头注意力、多头注意力,以及带有预归一化残差连接的 Transformer 块。
- 预训练:使用 The Pile 等数据集,基于下一个词预测损失对基础模型进行训练。
- 后训练:通过多个阶段将基础模型转换为助手:
- SFT(监督微调):使用损失掩码,仅聚焦于助手响应,对指令数据进行训练。
- 奖励建模:在偏好对上训练 Bradley-Terry 奖励模型。
- 对齐:应用 PPO(近端策略优化)、DPO(直接偏好优化)、ORPO、KTO 和 GRPO(组相对策略优化)等技术,使模型与人类偏好和推理能力对齐。
适用人群
- 学生:希望获得每段代码的逐步说明和预期输出的清晰指南。
- 开发者:希望获得可运行脚本和清晰文件路径以实现自己 LLM 的人。
- 研究人员:对在小型 Transformer 上从零实现 PPO、DPO 和 GRPO 等后训练算法感兴趣的人。
亮点
- 零依赖核心:完全使用纯 PyTorch 实现,不依赖
transformers或peft库。 - 完整流程:涵盖从原始文本 → 令牌 → 基础模型 → SFT → 奖励模型 → RLHF/对齐 → 评估的完整旅程。
- 可扩展性:根据可用 GPU 内存,支持训练从 1300 万到数十亿参数的模型。
- 集成工具:包含用于管理的 Streamlit 控制面板和提供理论与图示的专用文档网站。
相关
- 项目
- 项目
- Dispatch
- 项目
- 项目