跳到正文

aa1143

NamiGPT

零基础入门大模型(LLM)的基础教程:从零手写 GPT-2,一行行看懂大模型是怎么工作的 | Build GPT-2 from scratch in PyTorch, step by step

README 已保存到本站,可直接阅读

Documentation snapshot

README 快照

这篇是英文原文

下面正文是项目自己的英文 README。想读全文就用浏览器自带的整页翻译: Chrome / Edge 点地址栏右侧的翻译图标,或用右键菜单里的「翻译成中文」; 手机浏览器一般在菜单里。

本页保存的是公开项目资料快照,阅读过程不需要连接 GitHub。

NamiGPT

零基础入门大模型(LLM)的基础教程 从零手写 GPT-2,一行行看懂大模型是怎么工作的

图片:test 图片:Python 图片:PyTorch 图片:Code License 图片:Docs License 图片:教程 图片:GitHub stars 图片:X

图文教程 · 快速开始 · 在线可视化 · 作者 𝕏

不需要大模型基础,会一点 Python、懂矩阵乘法这样的线性代数基础就够了。我们用 PyTorch 从零手写一个 GPT-2,加载 OpenAI 官方权重,跑通推理和文本生成。

  • 不调用任何现成的 Transformer 模块,模型代码 gpt2/model.py 不到 200 行
  • 用一个 3 个词的例子「猫吃鱼」,从分词一路推到文本生成,每篇都配可运行脚本
  • 和 HuggingFace 官方实现逐项对齐,测试保证结果一致

学之前,先看这两份可视化

1. 先看懂 Transformer 原论文的架构图

GPT-2 的骨架来自 2017 年的论文 Attention Is All You Need(GPT-2 只用了图中右半边的解码器部分)。我把论文里最有名的这张架构图做成了动态版:按数据流动的顺序一步步高亮,每一步都配有原文和白话解释。

👉 一张图看懂 Transformer

2. 代码看不懂?看矩阵是怎么一格一格算出来的

页首那张动图就是其中一步。同样用「猫吃鱼」3 个词,把一次完整的推理拆成 11 步,每个矩阵都能点「播放」,看每一格是怎么算出来的。读代码卡住的时候,对照着看会容易很多。

👉 大模型是怎么推理的

写在前面

这个系列是我自己从零开始、一点一点学大模型留下的笔记。

一开始我也看不懂 Attention 公式里的 Q、K、V,不知道 768 维的向量到底在算什么。所以我给自己定了一个笨办法:每学一个模块,就用最小的例子「猫吃鱼」把矩阵一步步算出来,再亲手写成代码跑一遍,确认真的懂了,才往下走。

15 篇文章,就是这条路上的 15 个台阶。从分词、Embedding、注意力,一直写到加载 OpenAI 的官方权重、让模型真正生成文字。仓库里的每一行代码,我都自己写过、跑过。

如果你也想搞懂大模型,但被公式和论文劝退过,希望这份笔记能帮你少走一些弯路。

名字致敬 Karpathy 的 nanoGPT。NamiGPT 是面向中文零基础读者的入门教程:不追求训练效率,而是用「猫吃鱼」这个例子,把 GPT-2 的每一步拆开讲清楚。

📖 图文版教程:namiai.tech/articles


推理篇:从零拼出 GPT-2

#主题图文教程原稿代码
01项目介绍网页md—
02Tokenizer 分词器网页mdep02
03Embedding 嵌入层网页mdep03
04Positional Encoding 位置编码网页mdep04
05Self-Attention 自注意力网页mdep05
06Multi-Head Attention 多头注意力网页mdep06
07Residual Connection 残差连接网页mdep07
08LayerNorm 层归一化网页mdep08
09FFN 前馈网络网页mdep09
10Activation Function 激活函数网页mdep10
11Transformer Block网页mdep11
12Transformer Stack 堆叠网页mdep12
13Loading Pretrained Weights 加载权重网页mdep13
14Text Generation 文本生成网页mdep14
15Interpretability 可解释性网页mdep15

每个脚本都可以单独运行,例如:

python chapters/01-inference/ep06_multi_head_attention.py

快速开始

git clone https://github.com/aa1143/NamiGPT.git
cd NamiGPT
pip install -r requirements.txt

# 国内网络建议先设置 HuggingFace 镜像(只用来下载官方权重)
export HF_ENDPOINT=https://hf-mirror.com
import tiktoken, torch
from gpt2 import from_pretrained, generate

enc = tiktoken.get_encoding("gpt2")
model = from_pretrained("gpt2")          # 手写模型 + 官方 124M 权重

ids = torch.tensor([enc.encode("The cat sat on the")])
out = generate(model, ids, max_new_tokens=30, temperature=0.8, top_k=50)
print(enc.decode(out[0].tolist()))

网页版演示(续写 + 每一步的候选词概率):

pip install gradio
python demo/app.py

GPT-2 没有经过对话微调,它只会「接着往下写」,不会回答问题;训练语料以英文为主,建议输入英文。


仓库结构

NamiGPT/
├── gpt2/                  # 完整的 GPT-2 实现,可以直接 import
│   ├── config.py          #   模型配置(124M / 355M / 774M / 1.5B)
│   ├── model.py           #   模型本体:LayerNorm、Attention、FFN、Block、GPT
│   ├── load_weights.py    #   把官方权重搬进手写模型
│   └── generate.py        #   贪心 / 温度 / top-k 生成
├── chapters/01-inference/ # 每篇文章对应一个演示脚本
├── docs/01-inference/     # 文章原稿
├── demo/app.py            # Gradio 网页演示
└── tests/                 # 形状检查 + 与 HuggingFace 对齐测试

运行测试

pytest tests/ -v                       # 用随机权重对比,不需要下载,几秒钟跑完
TEST_PRETRAINED=1 pytest tests/ -v     # 额外下载真实 GPT-2 权重再对比一次

和 HuggingFace 实现对齐时要注意的三个细节

  1. 因果掩码:每个词只能看到自己和前面的词。漏掉这一步,加载官方权重后输出就是错的。
  2. 权重转置:GPT-2 原始代码用 Conv1D,权重形状是 [in, out];nn.Linear 是 [out, in],搬过来要转置。c_attn 还把 Q、K、V 拼在了一起,要先切成三份。
  3. GELU 版本:GPT-2 用的是 tanh 近似版。PyTorch 的 nn.GELU() 默认是精确版,要写 approximate="tanh" 才能逐位对齐。

License

  • 代码:MIT
  • 文章(docs/ 目录):CC BY-NC 4.0,转载请注明出处,禁止商用

作者:纳米AI · namiai.tech

Official distribution

获取与安装

暂未发现可确认的官方软件包地址

当前 README 快照没有出现 npm、PyPI、Crates.io、pub.dev 等官方包页链接。本站不会根据仓库名称猜测下载地址。

本站不托管项目文件;需要安装时,请以项目维护者发布的官方文档为准。

使用前核验

本站保存公开资料用于阅读,不代表安全审计或功能背书。安装前请核对许可证、依赖来源和发布签名,不要直接运行来源不明的二进制文件或高权限脚本。