LLM 入门第一课

mini-gpt

LLM 的 Hello World

李白 896 首诗作为教材,训练一个能模仿诗仙风格的小型 GPT。约半小时跑完,你不需要任何机器学习背景,只要会 Python 基础就能看懂。

896 首诗
30 分钟
只需 Python
向下滚动

训练出来长什么样

给模型一句开头,它接着往下写。点下面的提示词试试。

mini-gpt generate
Prompt>明月
模型基于李白诗训练后的生成示例

跑完你会理解什么

不只是跑通一个脚本,而是真的理解每一步在做什么。

01

Transformer 到底在做什么

Self-Attention 让每个字"看到"上下文,这就是 GPT 理解语言的秘密。

02

训练到底在优化什么

交叉熵损失衡量预测的靠谱程度,梯度下降一步步让预测更准。

03

生成为什么能工作

自回归采样——每次预测下一个字,串起来就成了连贯的诗句。

04

代码和网络一一对应

Embedding、Attention、FFN……每一行代码对应网络的一层,不再抽象。

GPT 架构一览

点击架构图中的模块,看看它做什么、代码长什么样。

Linear + Softmax
Layer Norm (final)
x N
Residual Add
Feed-Forward
Layer Norm
Residual Add
Multi-Head Attention
Layer Norm
Positional Encoding
Token Embedding
输入 Token IDs

点击左侧模块
查看说明和代码

核心代码长这样

整个 GPT 模型的定义,去掉注释也就几十行。完整代码见 GitHub 仓库。

model.py
class GPT(nn.Module): def __init__(self, config): super().__init__() self.token_emb = nn.Embedding(config.vocab_size, config.d_model) self.pos_emb = nn.Embedding(config.max_len, config.d_model) self.blocks = nn.ModuleList([ TransformerBlock(config) for _ in range(config.n_layers) ]) self.ln_f = LayerNorm(config.d_model) self.head = nn.Linear(config.d_model, config.vocab_size, bias=False) def forward(self, idx): B, T = idx.shape tok_emb = self.token_emb(idx) # (B, T, d_model) pos_emb = self.pos_emb(torch.arange(T)) # (T, d_model) x = tok_emb + pos_emb for block in self.blocks: x = block(x) x = self.ln_f(x) logits = self.head(x) # (B, T, vocab_size) return logits

三步跑起来

克隆、装依赖、开始训练。半小时后你就有了一个会写诗的小模型。

1

克隆仓库

把代码下载到本地。

$git clone https://github.com/minorcell/mini-gpt.git
2

安装依赖

只需要 PyTorch。

$pip install torch
3

开始训练

坐等半小时,看 loss 一路下降。

$python train.py

项目结构

mini-gpt/
├── model.py # GPT 模型定义
├── train.py # 训练循环
├── generate.py # 文本生成
├── config.py # 超参数配置
├── data.txt # 李白诗集
└── README.md # 项目说明