Hacker News 中文摘要

RSS订阅

OpenArch:现代 LLM 架构的 PyTorch 实现 -- OpenArch – PyTorch implementations of modern LLM architectures

这个仓库用手写 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

每个模型放在各自文件夹,含 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,值得作者确认。
  • 「开放权重」并不等于即插即用:每个模型家族都有自己的前向逻辑,这一层工程差异往往被外界低估。