最近,我发现了一个特别有趣的项目——smolGPT[1],它是一个极简的 PyTorch 实现,能够让我们从零训练一个属于自己的小型 GPT 模型。这个项目的核心目标是教育用途,代码精炼,没有多余的抽象封装,让人可以直接理解 LLM(大语言模型)是如何训练的。今天,我就带大家一起看看这个项目是怎么工作的,并且分享一下如何用它训练自己的 GPT 模型。
为什么选择 smolGPT?
在探索 LLM 训练的过程中,我们通常会遇到很多复杂的框架,比如 Hugging Face Transformers、DeepSpeed 之类的工具,它们虽然强大,但内部封装过于深入,初学者很难直接上手。而 smolGPT 采用了最小化代码实现,直接基于 PyTorch 编写,可以让我们更清晰地理解 GPT 模型的核心结构。
它的主要特点包括:
-
现代 GPT 架构:支持 Flash Attention(如果可用)、RMSNorm、SwiGLU 以及高效的 top-k/p 采样。
-
训练优化:支持混合精度(bfloat16/float16)、梯度累积、学习率预热(warmup)、权重衰减和梯度裁剪等优化技术。
-
数据支持:内置 TinyStories 训练数据处理,也可以自定义数据集。
-
自定义 Tokenizer:集成了 SentencePiece,用于训练自己的分词器。
这对想要深入了解 GPT 训练原理的开发者来说,绝对是一个很棒的学习材料。
环境准备
想要运行 smolGPT,你需要一个现代 GPU(最好支持 CUDA),并安装以下环境:
pip install -r requirements.txt
基本要求:
-
Python 3.8+
-
PyTorch 2.0+(带 CUDA 支持)
训练一个自己的 GPT
我们可以用 smolGPT 来训练一个从零开始的 LLM,主要分为三个步骤:
1. 预处理数据
首先,我们需要准备训练数据。smolGPT 默认使用 TinyStories 数据集,这是一个适合小型 GPT 训练的短故事集合。你也可以用自己的数据集,格式是简单的文本文件,每行一个样本。
执行以下命令进行数据预处理,并训练一个 4096 词汇量的分词器:
python preprocess.py prepare-dataset --vocab-size 4096
2. 开始训练
数据准备好后,就可以启动训练了:
python train.py
smolGPT 采用了标准的 GPT 训练流程,包括:
-
采用 8 层 Transformer,每层有 8 个注意力头,嵌入维度为 512。
-
上下文窗口为 512,适用于小规模任务。
-
训练过程使用 warmup + 余弦学习率衰减,初始学习率为 6e-4。
-
批量大小 64,总共训练 30,000 轮。
如果你希望修改这些参数,可以直接编辑 config.py
:
GPTConfig( block_size=512, # 上下文长度 n_layer=8, # Transformer 层数 n_head=8, # 注意力头数 n_embed=512, # 词向量维度 dropout=0.2, # Dropout bias=False # 是否使用偏置 )
3. 文本生成
训练完成后,我们可以用 smolGPT 生成文本:
python sample.py --prompt "Once upon a time" --num_samples 3 --temperature 0.7 --max_new_tokens 500
这里:
-
--prompt
是输入的文本开头; -
--num_samples
指定生成多少个样本; -
--temperature
控制生成文本的随机性(值越高,文本越多样化); -
--max_new_tokens
限制生成的最大 token 数。
4. 使用预训练模型
如果不想自己训练,也可以直接用别人训练好的模型,比如官方提供的 TinyStories-SmolGPT:
# 下载 tokenizer wget https://huggingface.co/OmAlve/TinyStories-SmolGPT/resolve/main/tok4096.model -P data/ # 下载已训练好的 checkpoint wget https://huggingface.co/OmAlve/TinyStories-SmolGPT/resolve/main/ckpt-v1.pt -P out/
然后执行:
python sample.py \ --prompt "Once upon a time" \ --tokenizer_path data/tok4096.model \ --ckpt_dir out/ \ --num_samples 3 \ --max_new_tokens 200 \ --temperature 0.7
这样,我们就可以用别人训练好的模型来生成文本了。
模型训练细节
训练数据
官方提供的 TinyStories 数据集,训练过程中大约使用了 40 亿个 token,训练时间 18.5 小时,最终的验证损失(Validation Loss)约为 1.0491。
模型结构
smolGPT 的默认模型架构如下:
-
词汇量:4096
-
Transformer 层数:8
-
注意力头数:8
-
嵌入维度:512
-
训练数据量:40 亿 token
-
训练时间:18.5 小时
在 config.py
中,我们可以调整这些参数来训练更大或者更小的模型。
smolGPT VS 其他 LLM
我们可以简单对比一下 smolGPT 与其他 GPT 训练方案的特点:
如果你是初学者,想要了解 GPT 训练的基本原理,smolGPT 是一个非常好的入门选择。如果你需要一个可以大规模训练的 LLM,nanoGPT 和 Hugging Face 可能更适合。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。