FareedKhan-dev发布从零训练LLM项目
原标题:FareedKhan-dev/train-llm-from-scratch
Jupyter Notebook★ 2,038 stars+316 今日
速览
该项目通过 Jupyter Notebook 形式,详细演示了从数据下载、预处理到模型训练及文本生成的全流程。适合希望深入理解 LLM 训练原理并动手实践的开发者与研究人员。
AI 深度解读
这是什么
train-llm-from-scratch 是一个基于 PyTorch 的开源项目,由开发者 FareedKhan-dev 维护。该项目严格遵循《Attention Is All You Need》论文,从零开始实现了一个完整的 Transformer 架构语言模型。
不同于调用 Hugging Face 等现成库,该项目提供了完整的底层代码实现,包括注意力机制、多层感知机(MLP)、Transformer Block 以及训练循环。其核心卖点在于极简的资源需求:用户可以使用单张消费级 GPU(如 Colab 或 Kaggle 提供的 T4),在一天左右的时间训练出一个拥有 1300 万参数的小型语言模型(Small LLM)。
解决的问题
- LLM 训练的黑盒化与资源门槛:大多数 LLM 教程依赖庞大的集群或复杂的分布式训练框架,普通开发者难以在本地复现。该项目将训练复杂度降至最低,解决了“想理解 LLM 底层原理但缺乏算力”的痛点。
- 从“无意义输出”到“基础语法”的跨越:作者指出,以往基于 Tiny Shakespeare 等小数据集训练的几百万参数模型往往产生乱码。该项目通过引入大规模多样化数据集(The Pile),证明了即使参数量极小(13M+),只要数据质量足够高,模型也能生成具备基本语法和标点符号的有意义文本。
- 垂直领域微调的可行性验证:项目旨在验证“小模型+特定数据”的路径。通过预训练一个基础模型,用户可以使用极少量的数据对其进行微调,从而构建出参数量在 5 亿至 10 亿以下、适合私有数据部署且成本极低的专用模型。
核心功能
- 从零实现的 Transformer 架构:
- 代码结构清晰,位于
src/models/目录下,包含attention.py(单头/多头注意力)、mlp.py(多层感知机)、transformer_block.py和transformer.py。 - 完全基于 PyTorch 原生实现,无第三方高级抽象库依赖,便于深入理解反向传播和矩阵运算细节。
- 代码结构清晰,位于
- 数据处理流水线:
- 集成 The Pile 数据集下载脚本(
data_download.py),支持断点续传和文件数量限制。 - 提供数据预处理脚本(
data_preprocess.py),将原始 JSON 数据转换为高效的 HDF5 格式,并支持使用r50k_base等 Tokenizer 进行分词。
- 集成 The Pile 数据集下载脚本(
- 灵活的训练配置:
- 通过
config/config.py集中管理超参数,如词汇表大小(VOCAB_SIZE)、上下文长度(CONTEXT_LENGTH)、嵌入维度(N_EMBED)、注意力头数(N_HEAD)和层数(N_BLOCKS)。 - 支持从小规模数据(~1GB)到大规模数据(~10GB)的不同训练场景。
- 通过
- 文本生成与评估:
- 提供
generate_text.py脚本,支持加载训练好的.pth模型,通过输入 Prompt 生成后续文本,并可自定义最大生成 Token 数。
- 提供
亮点 / 与同类相比
- 极致的轻量化与可复现性:
- 相比大多数要求 A100/H100 集群的教程,本项目明确标注可在单张 T4 GPU 上运行 13M 参数模型的训练。
- 代码量精简,去除了工业级框架中复杂的分布式通信、混合精度训练等冗余逻辑,专注于核心算法逻辑,非常适合教学和研究。
- 数据驱动的效果验证:
- 与传统小模型教程使用单一领域数据不同,本项目使用 The Pile(825GB 多源混合数据),证明了数据多样性对基础语法能力的关键作用。
- 作者通过对比实验(2.3M 参数 vs 13M 参数)直观展示了参数规模与数据质量对输出可读性的影响。
- 面向微调的预训练基座:
- 项目不仅仅是一个玩具,其设计初衷是提供一个“基础底座”。用户训练好 13M 模型后,可在此基础上进行指令微调(SFT),快速构建针对特定任务(如法律、医疗文档摘要)的轻量级模型,避免从头训练的巨大成本。
适合谁用 / 上手
适合人群:
- 深度学习初学者:希望深入理解 Transformer 内部机制(如 Self-Attention、Positional Encoding)而非仅调用 API 的研究者。
- 资源受限的开发者:拥有单张消费级 GPU,希望尝试训练 LLM 但受限于算力预算的个人开发者。
- 垂直领域应用开发者:计划构建私有化部署的小参数模型(<1B),希望先通过预训练获取基础语言能力,再进行领域微调的工程师。
上手指南:
- 环境准备:
- 确保熟悉 Python 面向对象编程(OOP)、神经网络基础及 PyTorch 框架。
- 准备至少 16GB+ 显存的 GPU(T4 即可满足 13M 模型训练)。
- 安装依赖:
git clone https://github.com/FareedKhan-dev/train-llm-from-scratch.git cd train-llm-from-scratch export PYTHONPATH="${PYTHONPATH}:." pip install -r requirements.txt - 数据准备:
- 运行
python scripts/data_download.py下载 The Pile 子集。 - 运行
python scripts/data_preprocess.py将数据转换为 HDF5 格式并分词。
- 运行
- 模型训练:
- 修改
config/config.py中的参数(如N_EMBED=128,N_HEAD=8等以适配 13M 模型)。 - 运行
python scripts/train_transformer.py开始训练。
- 修改
- 推理测试:
- 训练完成后,运行
python scripts/generate_text.py --model_path models/your_model.pth --input_text hi查看生成效果。
- 训练完成后,运行
注意事项:
- 若需训练更大规模模型(如 2B 参数),需要显著增加显存和训练时间,T4 GPU 可能无法胜任,需考虑 A100 或集群环境。
- 13M 模型仅具备基础语法能力,生成内容在逻辑和事实准确性上仍有局限,主要价值在于展示“从0到1”的训练流程和微调潜力。
查看原文 →github.com
