OpenArch:从零手写现代 LLM 架构
OpenArch – PyTorch implementations of modern LLM architectures
OpenArch 是一个专注于可读性的 PyTorch 项目,从零开始手写实现了 Llama、Qwen、DeepSeek、Gemma 等主流开源大模型的架构。与追求性能的生产库不同,该项目旨在通过单文件实现,清晰展示注意力机制、归一化方式和位置编码等关键设计差异。基于 Sebastian Raschka 的 LLM Architecture Gallery,它帮助开发者绕过复杂的工程优化,直接理解现代大模型的核心骨架。无论是 MHA、GQA 还是 MoE 路由,每个模型的结构选择都一目了然,是深入理解 LLM 内部机制的绝佳学习资源。
阅读官方模型代码往往很困难,因为生产型仓库优先考虑速度、分片和向后兼容性,而这个仓库则优先优化可读性。
HN 评论区
32- anuj0456
我一直在研究现代大语言模型(LLM)架构,并开始在 PyTorch 中从零实现它们,以便更好地理解每个模型背后的设计决策。
OpenArch 是这些实现的集合,包括 Llama、Qwen、DeepSeek、Gemma、Kimi、GPT-OSS 等。
目标是保持代码可读,并作为从论文到实际实现的参考。
希望能收到从事模型架构和训练工作的同行们的反馈。
- k__
昨天我才恍然大悟,原来那些开放权重的模型需要定制代码才能运行。
不知为何,我一直以为推理引擎是通用的 LLM 运行时,可以执行任何权重。
所以,为了理清思路:
有人训练了一个模型。
他们发布了权重和模型架构的参考实现。
然后,服务提供商必须通过运行参考实现、开源实现,或者构建自己的实现来托管该模型。
这是否意味着,提供商之间的差异不仅在于量化和配置,还在于推理引擎的实现?
- theGeatZhopa
嘿 anuj,
这对理解非常有帮助。我目前在理解上有些困难——对我来说,PyTorch 就像是 RL 中使用的 gym/训练环境。在那里,我可以选择 ppo、dnq 和其他代理(agents)来在预定义的 gym/世界中执行一些预定义的动作。
你展示的仓库——我很难将其纳入我对 RL 的理解框架中。这里的 gym 是什么?代理是什么?它能用 PyTorch 来训练这些模型吗?
抱歉问这种新手问题。论文让我的新手大脑感到不知所措。
- dwrodri
这让我想起了 lucidrains,他或许是互联网上最 prolific 的 PyTorch 用户和论文实现者之一。他的实现对我提升从零实现论文的能力至关重要。看来他还在活跃,并且正在做非常棒的事情。https://github.com/lucidrains
- tweedler290
这真的很酷!
关于 MoE 有个问题:在 kimmi-K2/model.py 中,router 使用的是 torch.topk(..., k=self.num_experts),而其他所有 MoE 都使用 k=self.top_k。而且构造函数中的 top_k=8 似乎从未被存储过……这是故意设计的密集路由(dense routing),还是应该改为 self.top_k?