Happy-LLM 教程导读:从零开始构建大模型的学习路线与实践指南
【免费下载链接】happy-llm📚 从零开始构建大模型项目地址: https://gitcode.com/GitHub_Trending/ha/happy-llm
本篇文章是 Datawhale 开源项目 Happy-LLM(仓库路径
docs/README.md对应的项目总入口文档)的技术导读。Happy-LLM 是一套系统性的 LLM 学习教程,旨在帮助读者从 NLP 基本研究方法出发,逐层剖析 LLM 的架构基础与训练过程,并结合主流代码框架亲手搭建、训练一个 LLM。读完本文,你将掌握该教程的整体章节结构、各章核心知识点与代码入口、按章节配置学习环境的方法,以及从原理到实战(预训练、SFT、高效微调、RAG、Agent)的完整学习路径。
项目定位与学习目标
Happy-LLM 是 Datawhale 推出的开源免费大模型学习教程,官方标语为"📚 从零开始构建大模型",其愿景是帮助读者"深入理解 LLM 核心原理,动手实现你的第一个大模型"。
项目在 前言 中阐明了它的缘起:很多开发者在学习过 Datawhale 的 self-llm(开源大模型食用指南)之后,希望进一步深入理解大语言模型的原理和训练过程,因此团队决定推出这一本"结合 LLM 原理及实战的教程",从 NLP 的基本研究方法出发,根据 LLM 的思路及原理逐层深入,依次剖析 LLM 的架构基础和训练过程,并结合目前 LLM 领域最主流的代码框架,演练如何亲手搭建、训练一个 LLM,"期以实现授之以鱼,更授之以渔"。
你将收获什么
根据 docs/README.md 的项目介绍,完成本项目学习后你将获得以下能力:
- 🔍深入理解Transformer 架构和注意力机制
- 📚掌握预训练语言模型的基本原理
- 🧠了解现有大模型的基本结构
- 🏗️动手实现一个完整的 LLaMA2 模型
- ⚙️掌握训练从预训练到微调的全流程
- 🚀实战应用RAG、Agent 等前沿技术
适合的读者
项目定位适合大学生、研究人员和 LLM 爱好者。在开始学习之前,建议具备一定的 Python 编程经验,并最好具备深度学习的相关知识,了解 NLP 领域的相关概念和术语,以便更轻松地学习本项目(详见 docs/README.md 的"如何学习"一节)。
章节导航与全书脉络
教程采用"基础知识 + 实战应用"的两段式结构,共七个章节。下表完整继承自 docs/README.md 的内容导航:
| 章节 | 关键内容 | 状态 |
|---|---|---|
| 学习与环境准备 | 分章依赖、硬件建议与实践入口 | ✅ |
| 前言 | 本项目的缘起、背景及读者建议 | ✅ |
| 第一章 NLP 基础概念 | 什么是 NLP、发展历程、任务分类、文本表示演进 | ✅ |
| 第二章 Transformer 架构 | 注意力机制、Encoder-Decoder、手把手搭建 Transformer | ✅ |
| 第三章 预训练语言模型 | Encoder-only、Encoder-Decoder、Decoder-Only 模型对比 | ✅ |
| 第四章 大语言模型 | LLM 定义、训练策略、涌现能力分析 | ✅ |
| 第五章 动手搭建大模型 | 实现 LLaMA2、训练 Tokenizer、预训练小型 LLM | ✅ |
| 第六章 大模型训练实践 | 预训练、有监督微调、LoRA/QLoRA 高效微调 | ✅ |
| 第七章 大模型应用 | 模型评测、RAG 检索增强、Agent 智能体 | ✅ |
提示:第六章正文已覆盖 Pretrain、SFT 与 PEFT 等核心训练流程,建议结合 第六章实践说明 与 学习与环境准备 一起阅读;偏好对齐可以继续参考 第六章补充专题。
基础知识部分(第 1~4 章)
- 第一章 NLP 基础概念:为非 NLP 领域研究者提供参考,介绍什么是 NLP、发展历程、任务分类以及文本表示的演进。
- 第二章 Transformer 架构:LLM 最重要的理论基础。从注意力机制的三个核心变量 Query(查询值)、Key(键值)和 Value(真值)讲起,推导注意力计算公式,介绍 Encoder-Decoder 结构与手把手的 Transformer 代码实现。对应可运行代码位于 docs/chapter2/code/transformer.py,依赖见 docs/chapter2/code/requirements.txt。
- 第三章 预训练语言模型:整体介绍经典的 PLM,对比 Encoder-Only(如 BERT)、Encoder-Decoder(如 T5)和 Decoder-Only(如 GPT)三种架构,并介绍当前主流 LLM 的架构和思想。
- 第四章 大语言模型:正式进入 LLM 部分,详细介绍 LLM 的定义、特点(涌现能力、上下文学习、指令遵循、逐步推理等)、能力和整体训练过程。
实战应用部分(第 5~7 章)
- 第五章 动手搭建大模型:基于 PyTorch 层亲手搭建一个完整的 LLaMA2 模型,并实现预训练、有监督微调的全流程。代码位于 docs/chapter5/code,核心文件包括
k_model.py、train_tokenizer.py、ddp_pretrain.py、ddp_sft_full.py等。 - 第六章 大模型训练流程实践:引入目前业界主流的 LLM 训练框架 Transformers,结合 DeepSpeed、PEFT 等框架,实践使用 transformers 进行模型 Pretrain、SFT 全流程。代码位于 docs/chapter6/code。
- 第七章 大模型应用:介绍基于 LLM 的各种应用,包括 LLM 的评测、检索增强生成(RAG)与智能体(Agent)的思想和简单实现。RAG 代码位于 docs/chapter7/RAG,Agent 代码位于 docs/chapter7/Agent。
你可以根据个人兴趣和需求,选择性地阅读相关章节。除此之外,仓库还提供了社区驱动的 Extra-Chapter 扩展内容目录,收录了学习笔记、实践案例与技术探索等专题(如思维预算、CDDRS 数据合成、Transformer 架构图解、VLM 拼接微调等),用于对主教程进行补充和扩展。
如何学习:推荐阅读路径
根据 docs/README.md 与 学习与环境准备 的建议,教程以"教程阅读为主、代码实践为辅",学习路径可拆分为两个阶段:
- 基础阶段(第 1~4 章):以原理学习为主,推荐先完整阅读正文,再选择性复现代码。
- 实战阶段(第 5~7 章):以实践为主,建议结合章节正文、代码目录和对应依赖一起学习。
如果你偏向理解底层实现,建议从第 5 章开始动手;如果你更关注工业界常用训练框架,建议先完成第 1 章到第 4 章的基础阅读,再进入第 6 章和第 7 章的实践部分。如果设备资源有限,优先复现第 5 章的手写实现,以及第 6 章中的数据处理与单卡调试流程。
同时,项目遵循"理论结合实际"的原则:建议多投入实战,复现本书提供的各种代码,积极参加 LLM 相关的项目与比赛。遇到问题时,可以在项目的 issue 区提问。
分章环境准备与依赖说明
本项目按章节拆分依赖,建议为不同章节创建独立的 Python 环境,以减少版本冲突。下表完整继承自 学习与环境准备:
| 章节 | 主要内容 | 依赖文件 | 硬件建议 |
|---|---|---|---|
| 第二章 Transformer 架构 | Transformer 手写实现 | docs/chapter2/code/requirements.txt | CPU 或单卡 GPU |
| 第五章 动手搭建大模型 | 手写 LLaMA2、Tokenizer、预训练与 SFT | docs/chapter5/code/requirements.txt | 单卡 GPU,部分步骤可先在 CPU 调试 |
| 第六章 大模型训练流程实践 | Transformers、DeepSpeed、PEFT 训练实践 | docs/chapter6/code/requirements.txt | 建议多卡 GPU,最小可从小样本和单卡调试开始 |
| 第七章 大模型应用 - RAG | 检索增强生成 | docs/chapter7/RAG/requirements.txt | CPU 可体验,向量检索建议预留更多内存 |
| 第七章 大模型应用 - Agent | 智能体与工具调用 | docs/chapter7/Agent/requirements.txt | CPU 可体验,联网能力按具体工具配置 |
通用准备步骤
建议使用Python 3.10 或 3.11,并为不同章节创建独立虚拟环境。以第六章为例,可以按如下方式准备:
python -m venv .venv source .venv/bin/activate pip install --upgrade pip pip install -r ./docs/chapter6/code/requirements.txt如果你需要复现其他章节,请将最后一行中的依赖文件替换为该章节对应的requirements.txt。
各章依赖速览
- 第二章:
docs/chapter2/code/requirements.txt基于transformers==4.52.4、torch==2.7.0等版本,CPU 即可运行 Transformer 手写实现。 - 第五章:
docs/chapter5/code/requirements.txt包含transformers==4.44.0、torch==2.4.0、trl==0.11.3、datasets==2.16.1等依赖,覆盖 LLaMA2 实现、Tokenizer 训练与预训练/SFT 全流程。 - 第六章:
docs/chapter6/code/requirements.txt包含transformers、datasets、torch、deepspeed、swanlab等核心依赖。 - 第七章 RAG:
docs/chapter7/RAG/requirements.txt包含openai、pypdf2、tiktoken等依赖。 - 第七章 Agent:
docs/chapter7/Agent/requirements.txt包含openai、streamlit、wikipedia等依赖,web_demo.py基于 Streamlit 提供演示界面。
第六章实践快速开始
第六章正文聚焦 Pretrain、SFT 和高效微调(PEFT)三条主线,作为从手写模型实现过渡到工业界训练框架的桥梁章节。代码目录位于 docs/chapter6/code,推荐按以下顺序实践(完整流程见 第六章实践说明):
- 先阅读 第六章实践说明,明确模型、数据和脚本入口。
- 使用
docs/chapter6/code/download_model.py下载基座模型(默认通过 HF 镜像下载Qwen/Qwen2.5-1.5B)。 - 使用
docs/chapter6/code/download_dataset.py下载或准备训练数据(预训练数据集与 SFT 数据集 BelleGroup/train_3.5M_CN)。 - 先用小样本调试
docs/chapter6/code/pretrain.py或docs/chapter6/code/finetune.py。 - 最后再结合
docs/chapter6/code/pretrain.sh与docs/chapter6/code/finetune.sh进行完整训练。
需要注意的是,脚本中的autodl-tmp路径、显卡编号和 DeepSpeed 参数都是示例配置,正式运行前请根据本地环境自行调整。
DeepSpeed 启动脚本示例
预训练启动脚本docs/chapter6/code/pretrain.sh的完整内容如下:
CUDA_VISIBLE_DEVICES=0,1 deepspeed pretrain.py \ --config_name autodl-tmp/qwen-1.5b \ --tokenizer_name autodl-tmp/qwen-1.5b \ --train_files autodl-tmp/dataset/pretrain_data/mobvoi_seq_monkey_general_open_corpus_small.jsonl \ --per_device_train_batch_size 16 \ --gradient_accumulation_steps 4 \ --do_train \ --output_dir autodl-tmp/output/pretrain \ --evaluation_strategy no \ --learning_rate 1e-4 \ --num_train_epochs 1 \ --warmup_steps 200 \ --logging_dir autodl-tmp/output/pretrain/logs \ --logging_strategy steps \ --logging_steps 5 \ --save_strategy steps \ --save_steps 100 \ --preprocessing_num_workers 10 \ --save_total_limit 1 \ --seed 12 \ --block_size 2048 \ --bf16 \ --gradient_checkpointing \ --deepspeed ./ds_config_zero2.json \ --report_to swanlab # --resume_from_checkpoint ${output_model}/checkpoint-20400 \有监督微调脚本docs/chapter6/code/finetune.sh结构与之类似,关键区别在于:
- 使用
--model_name_or_path autodl-tmp/qwen-1.5b加载预训练权重,而非从头初始化配置; - 训练数据替换为 SFT 数据
BelleGroup/train_3.5M_CN.json; - 训练轮数
--num_train_epochs 3,输出目录为autodl-tmp/output/sft。
DeepSpeed 配置文件要点
docs/chapter6/code/ds_config_zero2.json使用ZeRO Stage 2优化策略,核心配置项包括:
bf16.enabled: "auto"与fp16.enabled: "auto":混合精度开关交由训练脚本自动判定;optimizer使用 AdamW,lr、betas、eps、weight_decay均设为"auto",与训练脚本参数联动;scheduler使用 WarmupLR,warmup 相关参数同样为"auto";zero_optimization.stage: 2,并开启overlap_comm、reduce_scatter、contiguous_gradients等通信优化;gradient_accumulation_steps、gradient_clipping、train_batch_size、train_micro_batch_size_per_gpu均设为"auto"。
第六章实践建议
- 先调通路径,再扩大规模:脚本中的
autodl-tmp、显卡编号、batch size 和输出目录都属于示例配置,建议先把模型路径、数据路径和输出路径替换为本地实际路径,再使用小样本验证流程是否跑通。 - 先看懂数据,再启动训练:无论是 Pretrain 还是 SFT,数据格式都直接决定了训练效果。建议先阅读正文中的数据处理部分,并在运行前打印 1 到 2 条样本进行检查。
- 将偏好对齐作为进阶主题:第六章正文已覆盖核心训练主线。若希望进一步理解 RLHF、DPO、KTO 与奖励模型,可以在完成正文后继续阅读 第六章补充专题。
各章核心内容速览
第二章:Transformer 架构
本章从注意力机制的三个核心变量Query(查询值)、Key(键值)和Value(真值)出发,通过"字典查找"的案例逐步推导注意力计算公式:先用点积计算 Query 与各 Key 的相似度,再经 Softmax 转化为权重,最终对 Value 加权求和。同时剖析 RNN/LSTM 难以并行、难以捕捉长距离关系的缺陷,引出完全由注意力机制构成的 Transformer。配套代码 docs/chapter2/code/transformer.py 提供了手把手实现。
第三章:预训练语言模型
本章以 Encoder-Only、Encoder-Decoder、Decoder-Only 的顺序介绍 Transformer 时代的三大主流架构:
- Encoder-Only(BERT):堆叠 Transformer Encoder,采用掩码语言模型(MLM)预训练任务,通过
prediction_heads分类头适配各类 NLU 任务,是"预训练+微调"范式的集大成者; - Encoder-Decoder(T5):同时保留 Encoder 与 Decoder 的预训练 Transformer 模型;
- Decoder-Only(GPT):使用原有语言模型(LM)任务,通过不断增加模型参数和预训练语料,成为今日 LLM 的基座架构。
第四章:大语言模型
本章正式定义 LLM:相较传统语言模型参数量更多、在更大规模语料上进行预训练的语言模型,其核心区分特征是涌现能力(Emergent Abilities)。文中详细剖析了 LLM 的四大能力:
- 涌现能力:同样的模型架构与预训练任务下,某些能力在小型模型中不明显、但在大型模型中特别突出;
- 上下文学习(In-context Learning):无需额外训练或参数更新,通过自然语言指令或少量示例即可执行任务;
- 指令遵循(Instruction Following):经过指令微调后,模型能理解并遵循未见过的指令;
- 逐步推理(Step-by-Step Reasoning):通过思维链(Chain-of-Thought, CoT)推理策略解决多步骤复杂任务。
同时介绍了 LLM 的特点(多语言支持、长文本处理等)与"预训练(Pretraining)→监督微调(SFT)→强化学习与人类反馈(RLHF)"的三阶段训练过程。
第五章:动手搭建大模型
本章基于 PyTorch 手写实现完整的 LLaMA2 模型。核心内容包括:
- 定义
ModelConfig超参数类(继承transformers的PretrainedConfig),涵盖dim、n_layers、n_heads、n_kv_heads、vocab_size、max_seq_len、flash_attn等配置; - 实现RMSNorm归一化层;
- 训练 Tokenizer;
- 实现预训练与有监督微调的全流程。
对应代码位于 docs/chapter5/code,核心文件包括模型定义 k_model.py、Tokenizer 训练脚本 train_tokenizer.py、预训练脚本 ddp_pretrain.py、SFT 脚本 ddp_sft_full.py 以及数据整理脚本 deal_dataset.py 和模型导出脚本 export_model.py。
第七章:大模型应用
本章覆盖三大应用主题:
- LLM 评测:介绍 MMLU、GSM8K、MATH、ARC Challenge、HellaSwag、GPQA、InfiniteBench、MGSM 等主流评测数据集,以及 Open LLM Leaderboard、LMSYS Chatbot Arena、OpenCompass 等评测榜单,并延伸介绍金融、安全、通识、法律、医疗等垂直领域榜单;
- RAG 检索增强生成:讲解大模型"幻觉"、知识时效性、领域专业性等问题,介绍 RAG 在生成前先从外部文档库检索相关信息并融入生成过程的原理。配套代码位于 docs/chapter7/RAG,包含
Embeddings.py、VectorBase.py、LLM.py等模块; - Agent 智能体:介绍基于 LLM 的智能体与工具调用思想及简单实现。配套代码位于 docs/chapter7/Agent,核心实现见
src/core.py、src/tools.py、src/utils.py,并提供命令行 demo.py 与基于 Streamlit 的 web_demo.py。
模型权重与 PDF 资源
第五章配套模型
仓库提供了第五章训练出的 215M 参数小型模型,可直接下载体验:
| 模型名称 | 说明 |
|---|---|
| Happy-LLM-Chapter5-Base-215M | 第五章预训练基座模型 |
| Happy-LLM-Chapter5-SFT-215M | 第五章有监督微调模型 |
以上模型托管于 ModelScope,可在 ModelScope 平台搜索对应模型名下载;另有对应的创空间在线体验地址(详见 docs/README.md 的"模型下载"一节)。
PDF 版本
Happy-LLM PDF 教程完全开源免费,可在项目的 Releases 页面(tag 为PDF)或 Datawhale 学习平台获取。为防营销号加水印后贩卖,PDF 文件中预先添加了不影响阅读的 Datawhale 开源标志水印。
常见问题(FAQ)
为什么不提供统一的根目录依赖?
本项目覆盖从原理实现到训练框架、再到 RAG 与 Agent 应用的完整链路,不同章节的依赖差异较大。按章节拆分依赖,能够减少版本冲突,也更符合教程式学习场景(详见 学习与环境准备)。
没有多卡 GPU 是否还能学习第六章?
可以。建议先阅读正文理解训练流程,再使用小样本、较小 batch size 或单卡环境调试数据处理和训练脚本。即便无法完整复现多卡训练,也不影响掌握整体思路。
从哪一章开始动手最合适?
如果你偏向理解底层实现,建议从第 5 章开始;如果你更关注工业界常用训练框架,建议先完成第 1 章到第 4 章的基础阅读,再进入第 6 章和第 7 章的实践部分。
如何获取仓库?
可以通过git clone获取整个仓库(含全部章节文档与代码),然后在本地按上文"分章环境准备"一节配置虚拟环境后开始学习。
开源协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议(CC BY-NC-SA 4.0)进行许可。教程完全开源免费,欢迎任何形式的贡献——包括报告 Bug、提出功能建议、完善教程内容或提交代码优化 Pull Request(详见 docs/README.md 的"如何贡献"一节)。
【免费下载链接】happy-llm📚 从零开始构建大模型项目地址: https://gitcode.com/GitHub_Trending/ha/happy-llm
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考