# llm-leaning-notes **Repository Path**: myparadises/llm-leaning-notes ## Basic Information - **Project Name**: llm-leaning-notes - **Description**: 本仓库是一个面向大语言模型(LLM)学习与实践的综合性示例项目。 Transformer 架构解析与分词器原理 全参数微调(SFT)、高效微调方法(LoRA、QLoRA) 基于 Unsloth 的训练加速技巧 使用 Hugging Face Accelerate 集成 DeepSpeed ZeRO 实现分布式训练 基于 vLLM 部署高性能推理服务 利用 EvalScope 进行自动化模型能力评测 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-07 - **Last Updated**: 2026-04-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LLM 大模型学习仓库 - 🧠 **模型基础**:Transformer 架构解析、Tokenizer 工作原理 - 🛠️ **高效微调**:SFT、LoRA、QLoRA,并集成 [Unsloth](https://github.com/unslothai/unsloth) 加速训练 - ⚡ **分布式训练**:通过 Hugging Face `Accelerate` + DeepSpeed ZeRO 实现多卡加速 - 🚀 **推理部署**:使用 [vLLM](https://github.com/vllm-project/vllm) 提供高吞吐、低延迟服务 - 📊 **模型评测**:基于 [EvalScope](https://github.com/modelscope/evalscope) 自动化评估模型性能 ## 📝 许可证 ### 🛡️ 开源许可 本项目仅供个人学习与研究使用,采用 **MIT License** 协议。 > **💡 说明**:你可以自由地使用、修改本项目的代码进行学习。如果觉得好用,欢迎 Star 支持! ## ✨ 项目简介 `llm_detail` 是一个偏教学型、实验型的 LLM 学习项目,主要围绕 `GPT-2` 和 `Qwen3-0.6B` 展开,适合用来做以下几件事: - 🔍 从源码层面理解 Transformer / GPT / Qwen 的核心结构 - 🧩 理解 tokenizer、chat template、loss mask 的工作方式 - 🛠️ 复现 SFT、LoRA、QLoRA 等常见微调流程 - 📓 把“原理学习”和“训练实践”放在同一个仓库中串起来 这个仓库的重点不是封装成完整产品,而是把 LLM 的关键环节拆开、写清楚、跑起来。 ## 🚀 你能学到什么 - 🧠 手写并讲解 GPT-2 核心结构,包括多头注意力、LayerNorm、FeedForward、KV Cache 与生成流程 - 🧭 结合 Qwen3 分析 GQA、RoPE、RMSNorm、Tokenizer 等关键细节 - 💬 演示 tokenizer 的基本使用和 chat template 处理方式 - 🎯 提供从零理解 SFT `answer_mask` 与 loss 计算的训练脚本 - 🔧 基于 TRL / PEFT 演示 SFT、LoRA、QLoRA 微调与推理 ## 🗂️ 目录结构 ```text llm_detail/ ├─ day01/ │ ├─ gpt2_model_structure.py # 手写 GPT-2 结构与 KV Cache 生成示例 │ └─ qwen3_model_structure.py # Qwen3 关键结构实现与 tokenizer 示例 ├─ day02/ │ ├─ 02_sft_train_teach.py # 手写 SFT 训练脚本,重点讲 answer mask / loss 计算 │ └─ tokenizer_demo.ipynb # tokenizer 与 chat template 实验 ├─ fune/ │ ├─ 01_sft_train.ipynb # SFT 微调实践 │ ├─ 02_LoRA_train.ipynb # LoRA 微调实践 │ ├─ 03_QLoRA_train.ipynb # QLoRA 微调实践 │ ├─ basic_config.py # 数据集、模型、训练参数配置 │ ├─ inference.ipynb # 微调后推理示例 │ └─ finetuned/ # 训练输出与日志 ├─ 分词器.ipynb # 分词器入门实验 └─ test.py # 独立测试脚本 ``` ## 📘 核心内容 ### 1. 🏗️ 模型结构理解 `day01/gpt2_model_structure.py` 通过 PyTorch 手写了一个简化版 GPT-2,覆盖: - Token Embedding 与 Position Embedding - Multi-Head Attention - Transformer Block - LayerNorm / GELU / FeedForward - 自回归文本生成 - KV Cache 的 `prefill / decode` 流程 `day01/qwen3_model_structure.py` 展示了现代模型中的关键设计: - GQA(Grouped Query Attention) - RoPE 旋转位置编码 - RMSNorm - Qwen3 tokenizer 的简化封装 - 基于 Qwen3 配置的前向推理示例 ### 2. 🔤 分词器与对话模板 相关实验内容主要在: - `分词器.ipynb` - `day02/tokenizer_demo.ipynb` 这一部分重点帮助理解: - token 化结果是如何生成的 - 特殊 token 在对话中的作用 - chat template 如何把多轮消息拼成模型输入 ### 3. 🎯 SFT 训练机制拆解 `day02/02_sft_train_teach.py` 是这个仓库里很有价值的教学脚本。它没有完全依赖 Trainer 黑盒,而是显式实现了: - 对话数据的 chat template 处理 - `assistant` 回复区间的 `answer_mask` 构造 - 只对回答部分计算 loss - padding mask 与 answer mask 的组合 - warmup + cosine decay 学习率调度 如果你想真正理解“监督微调到底在训练哪些 token”,建议优先阅读这一部分。 ### 4. ⚗️ 微调实践 `fune/` 目录提供了更偏工程实践的内容: - `01_sft_train.ipynb`:标准 SFT - `02_LoRA_train.ipynb`:LoRA 微调 - `03_QLoRA_train.ipynb`:QLoRA 微调 - `inference.ipynb`:微调模型推理 - `basic_config.py`:数据集、模型、量化配置和训练参数封装 其中 `basic_config.py` 展示了这些常见实践: - 使用 `datasets` 加载本地 `jsonl` 数据 - 将自定义对话格式转换成 `messages` - 使用 `transformers` 加载因果语言模型 - 使用 `BitsAndBytesConfig` 支持量化训练 - 使用 `trl.SFTConfig` 管理训练参数 ## 👥 适合谁 这个项目比较适合以下读者: - 👨‍💻 想从源码层面理解 Transformer / GPT / Qwen 结构的人 - 🧪 想弄清楚 tokenizer、chat template、loss mask 工作机制的人 - 🚀 想快速上手 SFT / LoRA / QLoRA 微调实验的人 - 📚 想把学习笔记和实验代码放在同一仓库维护的人 ## 🧰 环境依赖 项目使用 Python `3.12.12`,核心依赖定义在 `pyproject.toml` 中,主要包括: - `torch` - `torchvision` - `transformers` - `datasets` - `jupyter` - `tensorboard` - `accelerate` - `trl` - `peft` 安装依赖: ```bash uv sync ``` 如果你不使用 `uv`,也可以按需手动安装对应依赖。 ## 📦 数据与模型准备 从当前代码结构看,项目默认会依赖以下资源: - `model/Qwen3-0.6B-Base` - `data/ultrachat_200k` - `data/keywords_data_train.jsonl` - `data/keywords_data_test.jsonl` 开始实验前,请先确认本地模型、数据集和相关目录已经准备好,否则部分脚本和 Notebook 无法直接运行。 ## 🛣️ 建议学习路径 ### Step 1. 先看模型结构 - `llm_detail/day01/gpt2_model_structure.py` - `llm_detail/day01/qwen3_model_structure.py` ### Step 2. 再看 tokenizer 与 SFT loss - `llm_detail/分词器.ipynb` - `llm_detail/day02/tokenizer_demo.ipynb` - `llm_detail/day02/02_sft_train_teach.py` ### Step 3. 最后进入微调实践 - `llm_detail/fune/01_sft_train.ipynb` - `llm_detail/fune/02_LoRA_train.ipynb` - `llm_detail/fune/03_QLoRA_train.ipynb` 按这个顺序阅读和执行,学习路径会更顺。 ## 🌟 项目特点 - ✅ 按学习阶段组织内容,结构清晰 - ✅ 同时覆盖“原理理解”和“训练实践” - ✅ 既有手写代码,也有 Notebook 实验 - ✅ 以 `Qwen3-0.6B` 为主线,贴近中文 LLM 学习场景 ## ⚠️ 注意事项 - 项目更偏学习与实验,部分代码为了讲解原理,未必做了完整工程化封装 - 某些脚本依赖 CUDA、预下载模型和本地数据集 - `fune/finetuned/` 下包含训练产物,提交仓库前建议按需清理大文件 - 目录中存在少量独立测试脚本,与主学习链路关系不大 ## 📄 License 本项目采用 [MIT License](./LICENSE) 开源协议。 你可以自由地使用、修改、分发本项目代码,但需要保留原始版权和许可声明。 ## 📝 总结 如果你想系统学习大语言模型,这个项目可以作为一条比较完整的实践路线: 1. 先理解 GPT / Qwen 的结构实现 2. 再理解 tokenizer、chat template 和 SFT loss 的构造方式 3. 最后进入 SFT、LoRA、QLoRA 的实际训练与推理 整体上,它更像一份“可运行的学习笔记 + 实验仓库”,适合作为个人复现、教学演示和进一步扩展的基础。