这个仓库用手写 PyTorch 逐一实现塞巴斯蒂安·拉施卡(Sebastian Raschka)的 LLM 架构画廊(LLM Architecture Gallery)中收录的现代开源大模型。每个模型都依据原始论文、技术报告、参考 config.json 以及拉施卡和 Machine Learning Mastery 的解读编写。目标不是与 transformers 等生产库竞争,而是追求清晰与学习:每个架构一个可读文件,明确写出注意力类型、归一化、层组合、MoE 路由、位置编码等结构选择,便于并排比较。
正文
从零开始的现代开源 LLM 架构 PyTorch 实现,一次一个模型。本仓库手写实现了 Sebastian Raschka 的 LLM Architecture Gallery 中收录的模型架构,依据原始论文、技术报告、参考 config.json 文件,以及 Sebastian Raschka 和 Machine Learning Mastery 的文章完成。
目标不是和 transformers 等生产库竞争,而是追求清晰与易学:每种架构一个易读文件,把结构选择(注意力类型、归一化、层组合、MoE 路由、位置编码)显式写出,方便横向对比。
为什么建这个仓库?
现代 LLM 架构骨架相似,却在几十个细小但重要的选择上不同:
- 注意力:MHA、GQA、MQA、MLA、滑动窗口、线性/DeltaNet 混合
- 归一化:pre-norm、post-norm、QK-Norm、sandwich norm、RMSNorm
- 位置编码:RoPE、NoPE、partial RoPE、YaRN
- 解码器类型:稠密 vs 稀疏 MoE(带或不带共享专家)、混合 Mamba/注意力
- 训练技巧:多 token 预测、隐式专家、门控注意力
官方模型代码难读,因为生产仓库优化的是速度、分片和向后兼容。这个仓库优化的是阅读。
目前已实现的模型
标记 ✅ 的可用于前向传播,🚧 表示建设中。
| 模态 | 模型 | 状态 | 模型规模 | 归一化 | 位置编码 | 注意力 | 混合专家 | | --- | --- | --- | --- | --- | --- | --- | --- | | 文本 | GPT-2 XL | ✅ | 1.5B | - | 绝对位置 | 多头注意力 | 否 | | 文本 | Llama 2 | ✅ | 7B | RMS Norm | RoPE | 多头注意力 | 否 | | 文本 | Llama 3 | ✅ | 8B | RMS Norm | RoPE | 分组查询注意力 | 否 | | 文本 | OLMo 2 | ✅ | 7B | RMS Norm & QK-Norm | RoPE | 多头注意力 | 否 | | 文本 | DeepSeek R1 | ✅ | 671B | RMS Norm & QK-Norm | RoPE | 多头潜在注意力 | 是 | | 文本 | Gemma 3 | ✅ | 27B | RMS Norm & QK-Norm | RoPE | 带滑动窗口的分组查询注意力 | 否 | | 文本 | Mistral 3 | ✅ | 24B | RMS Norm | RoPE | 带滑动窗口的分组查询注意力 | 否 | | 文本 | Llama 4 Maverick | ✅ | 400B | RMS Norm | RoPE | 分组查询注意力 | 是 | | 文本 | Qwen 3 | ✅ | 4B | RMS Norm & QK-Norm | RoPE | 分组查询注意力 | 否 | | 文本 | Qwen 3 30B-A3B | | RMS Norm & QK-Norm | RoPE | 分组查询注意力 | 是 | | 文本 | Kimi K2 | ✅ | 1T | RMS Norm | RoPE | 多头潜在注意力 | 是 | | 文本 | GLM 4.5 | ✅ | 355B | RMS Norm & QK-Norm | RoPE | 分组查询注意力 & 多 Token 预测 | 是 | | 文本 | GPT-OSS | ✅ | 20B | RMS Norm | RoPE | 带滑动窗口的分组查询注意力 | 是 | | 文本 | Grok-2.5 | 🚧 | 270B | RMS Norm | RoPE | 分组查询注意力 | 是 | | 多模态 | PaliGemma | ✅ | 3B | RMS Norm | RoPE | 多头注意力 | 否 | | 多模态 | Qwen3 | 🚧 | 3B | RMS Norm | RoPE | 多头注意力 | 否 | | 图像 | Dall-e | 🚧 | - | - | - | Transformer | - |
完整目标列表对应 Architecture Gallery 里的 72 种架构,欢迎贡献其中任意模型。
仓库结构
- OpenArch/
- text/
- gpt2/(model.py、README.md)
- llama3/
- qwen3/
- grok2.5/
- deepseek_v3/
- multimodal/
- pali-gemma/(model.py、README.md)
- README.md
- requirements.txt
- text/
每个模型放在各自文件夹,含 model.py 和简述架构选择及参考的 README.md。
贡献
我正积极寻找贡献者。如果你喜欢读模型论文、对比 config.json,或想加深对现代 LLM 构建的理解,这里适合起步。
好的首次贡献:
- 从画廊挑未实现的模型,添加 model.py
- 为已有模型写 README.md 记录架构选择
- 加前向传播测试,加载官方权重并在几个 token 上对齐输出
- 修 bug、改进 docstring 或重构共享组件
大型工作前请先开 issue 避免重复。实现应优先可读性而非性能——首先是学习资源。详见 CONTRIBUTING.md。
致谢
仓库离不开两位教育者的工作:
- Sebastian Raschka:提供 LLM Architecture Gallery、Big LLM Architecture Comparison 系列、LLMs From Scratch 书与代码。画廊里的架构图、速查表、横向对比是本仓库每个模型的主要参考。
- Jason Brownlee 与 Machine Learning Mastery 团队:多年清晰教程,帮助无数从业者(包括我)从零建立深度学习和 Transformer 架构的实用理解。
实现中的任何错误全是我自己的。
许可证
项目基于 Apache License 2.0,见 LICENSE。各模型实现遵循原模型许可证(如适用),见各自文件夹。
免责声明
这些实现依据公开论文、技术报告、配置文件和教育材料尽力完成,用作学习资源,不与原模型作者关联或受其认可。生产用途请用官方实现或 transformers。
评论
讨论整体是肯定与好奇为主:把当代大模型架构用纯 PyTorch 从零写一遍,被普遍看作读懂论文细节的最佳路径;分歧主要落在这样的个人项目能不能跟上模型迭代速度,以及不少圈外人第一次意识到「开放权重」并不等于能直接丢进通用运行时。
从零手写比再复刻一遍 GPT-2 更有价值
- 亲手实现 Llama、Qwen、DeepSeek 这类当代架构,才能真正看清每个设计取舍从何而来,这比再写一遍传统 Transformer 强得多;作者的目标也是让代码在「论文到实现」之间充当可读的参考(较多人) > 用纯 PyTorch 从零搭一遍,是深入理解论文细节最好的办法(@sarra01)
担心个人维护者跟不上模型发布节奏
- 模型架构更新太快,一个人维护的仓库能否持续覆盖未来新模型是个现实问题,这也会决定它作为长期参考的价值(较多人)
- 与此相关,社区更希望仓库能帮助建立「架构改动 → 代码实现 → 实际性能」之间的直觉,而不是只做代码陈列(少数人)
把 PyTorch 误当成强化学习的 gym 环境
- 有人习惯用 gym 那套理解方式,以为仓库会提供环境和智能体、可以自选 PPO、DQN 去训练;实际上这里的 PyTorch 只是张量与自动求导库,仓库是架构实现而非训练框架,论文对新手也确实不友好(少数人,但代表了一类典型入门困惑)
原以为推理引擎是能跑任意权重的通用运行时
- 反直觉之处在于:开放权重模型各自需要配套的架构代码,服务方要么跑官方参考实现,要么用开源实现,要么自研一套,因此各家差异不只是量化和配置,还包括推理引擎实现本身(较多人)
有价值的补充
- 有人指出 MoE 实现里的一处疑似不一致:Kimi-K2 的 router 用了 topk,取 k 等于专家总数,而其他 MoE 用的是 topk,且构造函数里的 topk=8 从未被保存下来——这到底是有意为之的稠密路由,还是应该改成 self.top_k,值得作者确认。
- 「开放权重」并不等于即插即用:每个模型家族都有自己的前向逻辑,这一层工程差异往往被外界低估。