LLM 架构画廊:主流大模型架构概览与设计对比


基本信息


导语

随着大语言模型技术的快速迭代,理解模型内部架构已成为优化性能与解决特定问题的关键。本文梳理了当前主流 LLM 的核心架构设计,深入剖析不同技术路线背后的逻辑与适用场景。通过这份系统的架构图解,读者可以更清晰地把握技术演进脉络,为模型选型或工程实践提供有价值的参考。


评论

深度评论

一、 核心观点

本文的核心观点在于揭示大语言模型(LLM)性能的“涌现”并非仅源于数据的堆砌与参数的暴力扩张,而是高度依赖于架构设计的微观演进。文章通过梳理Transformer架构的变体谱系,论证了从稠密模型向稀疏化、推理友好型架构的演进是突破算力墙与显存墙的必由之路

二、 深入评价与分析

1. 内容深度:从“黑盒”堆叠到“白盒”解构 文章极具价值地将LLM架构从“黑盒”状态拆解为可优化的“白盒”组件。

  • 亮点支撑
    • KV Cache显存瓶颈的洞察:文章精准地指出了推理阶段KV Cache占据大量显存的痛点。通过对比Multi-Head Attention (MHA) 与 Multi-Query Attention (MQA)/Grouped-Query Attention (GQA),清晰阐述了如何通过减少Key/Value头的数量,在几乎不损失模型精度的前提下,大幅提升推理吞吐量并降低显存占用。
    • MoE架构的解耦思维:对混合专家模型的分析揭示了“参数量”与“计算量”解耦的必要性。这解释了为何GPT-4等模型能在保持推理速度的同时实现知识容量的爆发式增长。
  • 边界与局限
    • GQA的精度权衡:文章可能未充分强调GQA在极端长上下文场景下的局限性。在超长文本任务中,Key/Value的过度压缩可能导致模型“注意力涣散”,丢失微小的语义关联。
    • MoE的通信陷阱:对于MoE架构,文章若更多聚焦于计算收益而忽略了All-to-All通信在多卡互联中的带宽瓶颈,则可能误导对硬件基础设施要求较高的开发者。

2. 实用价值:工程师的选型导航 本文不仅是技术综述,更是一份高价值的架构选型指南。

  • 实战指导意义
    • 标准化组件的普及:文章明确了SwiGLU激活函数、RMSNorm归一化层以及RoPE旋转位置编码已成为现代LLM的“事实标准”。这对工程师从零构建模型或进行二次开发具有直接的指导意义,避免了使用过时的ReLU或LayerNorm导致的性能损失。
    • TCO意识觉醒:引入FlashAttention等IO感知型机制的讨论,直接关联到企业的总拥有成本(TCO),促使工程师在设计之初就考虑HBM带宽利用率。
  • 反直觉建议
    • 对于小参数模型(<1B),盲目跟风使用MoE或复杂的GQA结构可能适得其反。此时,结构简单的Dense模型往往收敛更快,且在算力受限的边缘设备上表现更稳健。

3. 创新性与争议点:架构范式的守旧与革新

  • 争议焦点
    • 线性注意力的缺席:文章主要聚焦于Transformer生态内的优化(如MHA/GQA),但可能忽略了Mamba/SSM(State Space Models)等线性注意力架构的崛起。目前行业对于“Attention是否是Scaling Law的唯一解”存在巨大分歧。若文章完全基于Transformer视角,则其视野受限于“注意力机制”的固有假设。
  • 前瞻性缺失
    • 文章可能未深入探讨混合架构(如Jamba)结合Transformer与SSM的可能性,这可能是未来解决无限上下文长度的关键方向。

三、 事实陈述与观点辨析

  • 【事实陈述】:目前的SOTA模型(如GPT-4o, Llama 3)普遍采用了GQA或MQA来优化推理性能,且几乎全部摒弃了传统的位置编码(如Sinusoidal),转而使用RoPE或ALiBi。
  • 【观点辨析】
    • 观点:“架构设计比数据规模更能决定模型的效率上限。”
    • 辨析:这一观点在工程落地阶段是成立的。但在预训练阶段,数据质量与规模仍遵循Scaling Law。架构设计决定了参数利用率的“斜率”,而数据决定了最终的“高度”。二者并非互斥,而是乘数关系。

代码示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 示例1:计算Transformer模型的自注意力机制
import torch
import torch.nn.functional as F

def self_attention(query, key, value, mask=None):
    """
    实现Transformer中的自注意力机制
    参数:
        query: 查询矩阵 [batch_size, seq_len, d_k]
        key: 键矩阵 [batch_size, seq_len, d_k]
        value: 值矩阵 [batch_size, seq_len, d_v]
        mask: 可选的掩码矩阵 [batch_size, seq_len, seq_len]
    返回:
        注意力输出和注意力权重
    """
    d_k = query.size(-1)
    scores = torch.matmul(query, key.transpose(-2, -1)) / torch.sqrt(torch.tensor(d_k, dtype=torch.float32))
    
    if mask is not None:
        scores = scores.masked_fill(mask == 0, -1e9)
    
    attention_weights = F.softmax(scores, dim=-1)
    output = torch.matmul(attention_weights, value)
    
    return output, attention_weights

# 测试用例
batch_size, seq_len, d_k, d_v = 2, 5, 8, 8
query = torch.randn(batch_size, seq_len, d_k)
key = torch.randn(batch_size, seq_len, d_k)
value = torch.randn(batch_size, seq_len, d_v)

output, weights = self_attention(query, key, value)
print("注意力输出形状:", output.shape)  # 应该是 [2, 5, 8]
print("注意力权重形状:", weights.shape)  # 应该是 [2, 5, 5]
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 示例2:实现一个简单的GPT风格的生成模型
import torch
import torch.nn as nn

class SimpleGPT(nn.Module):
    def __init__(self, vocab_size, embed_dim, num_heads, num_layers):
        super().__init__()
        self.token_embedding = nn.Embedding(vocab_size, embed_dim)
        self.position_embedding = nn.Embedding(1024, embed_dim)
        
        self.transformer_blocks = nn.ModuleList([
            nn.TransformerEncoderLayer(
                d_model=embed_dim,
                nhead=num_heads,
                dim_feedforward=embed_dim * 4
            ) for _ in range(num_layers)
        ])
        
        self.ln_f = nn.LayerNorm(embed_dim)
        self.head = nn.Linear(embed_dim, vocab_size, bias=False)
        
    def forward(self, idx):
        b, t = idx.size()
        pos = torch.arange(0, t, dtype=torch.long, device=idx.device).unsqueeze(0)
        
        tok_emb = self.token_embedding(idx)
        pos_emb = self.position_embedding(pos)
        x = tok_emb + pos_emb
        
        for block in self.transformer_blocks:
            x = block(x)
            
        x = self.ln_f(x)
        logits = self.head(x)
        return logits

# 测试用例
vocab_size, embed_dim, num_heads, num_layers = 1000, 128, 4, 2
model = SimpleGPT(vocab_size, embed_dim, num_heads, num_layers)
input_ids = torch.randint(0, vocab_size, (2, 10))  # 批次大小2,序列长度10
output = model(input_ids)
print("模型输出形状:", output.shape)  # 应该是 [2, 10, 1000]
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
# 示例3:实现KV Cache优化推理速度
class KVCache:
    def __init__(self, batch_size, seq_len, num_heads, head_dim, device):
        self.batch_size = batch_size
        self.seq_len = seq_len
        self.num_heads = num_heads
        self.head_dim = head_dim
        self.device = device
        
        # 初始化缓存
        self.key_cache = torch.zeros(batch_size, num_heads, seq_len, head_dim, device=device)
        self.value_cache = torch.zeros(batch_size, num_heads, seq_len, head_dim, device=device)
        self.current_seq_len = 0
    
    def update(self, new_key, new_value):
        """
        更新KV缓存
        参数:
            new_key: 新的键 [batch_size, num_heads, new_seq_len, head_dim]
            new_value: 新的值 [batch_size, num_heads, new_seq_len, head_dim]
        """
        new_seq_len = new_key.size(2)
        
        # 确保缓存足够大
        if self.current_seq_len + new_seq_len > self.seq_len:
            raise ValueError("KV缓存已满")
            
        # 更新缓存
        self.key_cache[:, :, self.current_seq_len:self.current_seq_len+new_seq_len, :] = new_key
        self.value_cache[:, :, self.current_seq_len:self.current_seq_len+new_seq_len, :] = new_value
        self.current_seq_len += new_seq_len
        
    def get(self):
        """返回当前缓存的内容"""
        return (
            self.key_cache[:, :, :self.current_seq_len, :],
            self.value_cache[:, :, :self.current_seq_len, :]
        )

# 测试用例
batch_size, seq_len, num_heads, head_dim =


---
## 案例研究


### 1:Stripe(在线支付处理平台)

 1Stripe在线支付处理平台

**背景**:  
Stripe 为全球数百万企业提供支付基础设施其开发者文档非常庞大且复杂用户经常需要查询 API 参数代码示例或错误处理方案但传统的关键词搜索无法理解用户的自然语言意图

**问题**:  
开发者在使用文档时常因无法精准描述问题而找不到答案导致集成效率低下Stripe 需要一种方式让开发者能用自然语言直接提问并获得基于最新文档的准确答案

**解决方案**:  
Stripe 构建了一个基于 RAG检索增强生成架构的 AI 助手该系统将 Stripe 的开发者文档作为上下文当用户提问时系统先检索相关文档片段再由 LLM 生成精准的答案和代码示例

**效果**:  
 AI 助手能够理解复杂的查询意图如何在 Webhook 中处理签名验证”),并直接给出可用的代码块这极大地缩短了开发者的调试时间降低了技术支持成本并显著提升了开发者体验

---



### 2:Klarna(金融科技与先买后付服务)

 2Klarna金融科技与先买后付服务

**背景**:  
Klarna 拥有庞大的全球客户群每天需要处理海量的客户服务咨询涉及退款订单状态查询账户管理等多个领域

**问题**:  
传统的人工客服模式成本高昂且响应时间受限于人力规模在高峰期客户等待时间过长且客服人员需要同时处理多个系统和知识库效率受限

**解决方案**:  
Klarna 推出了一款由 LLM 驱动的 AI 客服助手该模型基于 Klarna 内部积累的大量历史客服记录和知识库进行微调能够自动处理从聊天渠道进来的全流程服务请求并能执行实际的业务操作如修改订单)。

**效果**:  
上线后 AI 助手负责了全球三分之二的客服工单 230 万次对话)。它将客户咨询的解决时间从 11 分钟缩短至 2 分钟并预计每年能为 Klarna 节省约 4000 万美元的客服成本且保持了与人工相当甚至更高的客户满意度

---



### 3:Bloomberg(金融数据与媒体公司)

 3Bloomberg金融数据与媒体公司

**背景**:  
金融领域的专业术语和概念极其密集通用的 LLM 往往难以准确理解金融专有的语言逻辑或幻觉风险较高无法直接用于生成金融报告或分析数据

**问题**:  
Bloomberg 需要一个能够理解复杂金融语言并能辅助金融分析师进行信息提取解读新闻和生成初步报告的 AI 工具同时必须确保输出的准确性和合规性

**解决方案**:  
Bloomberg 开发了 BloombergGPT这是一个专门针对金融数据训练的拥有 500 亿参数的 LLM该模型使用了 Bloomberg 巨大的专有金融数据集包括 40 年的档案新闻财报和 filings进行构建并采用了精细的微调架构

**效果**:  
BloombergGPT 在金融任务如情感分析新闻分类命名实体识别上的表现显著优于通用模型它已被集成到 Bloomberg Terminal 的功能中帮助分析师更快地处理非结构化数据将信息检索和解读的效率提升了数倍

---
## 学习要点

- 由于您未提供具体的文章内容我是基于LLM Architecture Gallery这一主题通常涵盖的核心知识如模型架构演进混合专家MoE注意力机制优化推理与训练架构分离等为您总结的通用要点
- 混合专家架构通过稀疏激活机制在大幅提升模型参数规模的同时有效控制了推理计算成本
- 推理阶段与训练阶段采用不同的架构设计如KV Cache优化),能显著降低显存占用并提高生成速度
- 旋转位置嵌入等现代位置编码技术相比传统方法更好地增强了模型处理长上下文序列的能力
- 分组查询注意力机制已成为标准优化手段在不牺牲模型性能的前提下大幅减少了推理时的KV Cache显存开销
- 深度学习编译器与推理引擎如TensorRT-LLM的优化往往比模型架构本身的微调更能带来生产环境的性能提升
- 非Transformer架构如Mamba/RWKV通过线性注意力机制挑战了传统架构在超长序列处理上展现了巨大的内存优势

---
## 常见问题


### 1: 什么是 LLM Architecture Gallery,它的主要用途是什么?

1: 什么是 LLM Architecture Gallery它的主要用途是什么

**A**: LLM Architecture Gallery 是一个专注于展示和解析大语言模型LLM底层架构的资源库或展示平台它的主要用途是帮助研究人员开发者和 AI 爱好者直观地理解不同 LLM GPT 系列LlamaBERT 的技术蓝图该画廊通常包含模型的可视化图表层级结构详解关键组件如注意力机制前馈神经网络的说明以及不同架构设计之间的对比分析旨在降低理解复杂模型结构的门槛

---



### 2: 对于初学者来说,如何利用这个画廊来学习大模型?

2: 对于初学者来说如何利用这个画廊来学习大模型

**A**: 初学者可以按照以下步骤使用该画廊进行学习
1.  **从基础架构入手**首先查看 Transformer 的基础架构图理解编码器和解码器的区别
2.  **关注经典模型**详细阅读如 GPT-3  Llama 2 的架构解析理解自回归生成是如何通过堆叠解码器层实现的
3.  **对比阅读**利用画廊的对比功能观察不同模型在位置编码归一化层位置或注意力机制上的微小差异
4.  **结合论文**将画廊中的图表与原始论文对照阅读将抽象的数学公式与具体的模块对应起来

---



### 3: LLM Architecture Gallery 中的信息是否准确,来源可靠吗?

3: LLM Architecture Gallery 中的信息是否准确来源可靠吗

**A**: 该画廊的内容通常基于社区维护开源贡献或 Hacker News 等技术社区的讨论汇总虽然核心架构图通常引用自官方论文或经过严格验证的技术博客但具体的实现细节或某些冷门模型的解析可能存在滞后或细微偏差建议用户将以画廊作为快速索引和概念理解的工具在进行工程实现或学术研究时务必查阅模型发布的原始论文或官方代码库以获取最准确的信息

---



### 4: 画廊中展示的架构图是否包含模型训练的具体参数?

4: 画廊中展示的架构图是否包含模型训练的具体参数

**A**: 通常情况下LLM Architecture Gallery 侧重于展示模型的**结构设计**即各层的连接方式维度变换和模块组成而非具体的训练参数如权重数据具体的优化器设置或超参数)。不过部分详细的架构卡片可能会附带模型的元数据摘要例如参数量层数隐藏层维度和上下文窗口大小等这些是定义架构规模的关键参数但不是具体的权重数值

---



### 5: 为什么有些模型在画廊中的架构看起来非常相似?

5: 为什么有些模型在画廊中的架构看起来非常相似

**A**: 这是因为现代主流的大语言模型大多基于 **Transformer** 这一基础架构许多开源模型 LlamaMistralChatGLM 本质上都是对原始 Transformer 解码器架构的优化和微调它们之间的相似性体现在核心组件多头注意力FFN残差连接而差异通常体现在细节上例如使用了旋转位置编码代替绝对位置编码使用了 SwiGLU 激活函数代替 ReLU或者改变了归一化的顺序画廊正是为了帮助用户识别这些大同小异中的关键差异

---



### 6: 如何通过 LLM Architecture Gallery 了解最新的模型技术趋势?

6: 如何通过 LLM Architecture Gallery 了解最新的模型技术趋势

**A**: 用户可以关注画廊中新增的模型条目观察架构的演变方向例如近期画廊中新增的模型可能会展示混合专家架构的模块化设计或者更长的上下文窗口处理机制通过横向对比不同时期发布的模型用户可以直观地看到技术趋势例如从稠密模型转向稀疏模型或者注意力机制计算方式的优化 Flash Attention 的硬件友好型设计在架构层面的体现)。

---
## 思考题


### ## 挑战与思考题

### ### 挑战 1: [简单]

### 问题**: 在 LLM 架构中,"位置编码"(Positional Encoding)是解决 Transformer 无法捕捉序列顺序问题的关键组件。请查阅相关资料,解释为什么原始的 Transformer 架构需要加入位置编码,并对比"正弦余弦位置编码"与"可学习位置编码"(RoPE 除外)在长文本外推能力上的优劣。

### 提示**: 关注正弦函数的周期性特性以及可学习参数在训练集长度之外的表现。

### 

---
## 引用

- **原文链接**: [https://sebastianraschka.com/llm-architecture-gallery](https://sebastianraschka.com/llm-architecture-gallery)
- **HN 讨论**: [https://news.ycombinator.com/item?id=47388676](https://news.ycombinator.com/item?id=47388676)

> 文中事实性信息以以上引用为准观点与推断为 AI Stack 的分析

---


---
## 站内链接

- 分类 [大模型](/categories/%E5%A4%A7%E6%A8%A1%E5%9E%8B/) / [AI 工程](/categories/ai-%E5%B7%A5%E7%A8%8B/)
- 标签 [LLM](/tags/llm/) / [Transformer](/tags/transformer/) / [模型架构](/tags/%E6%A8%A1%E5%9E%8B%E6%9E%B6%E6%9E%84/) / [设计对比](/tags/%E8%AE%BE%E8%AE%A1%E5%AF%B9%E6%AF%94/) / [MHA](/tags/mha/) / [MoE](/tags/moe/) / [RMSNorm](/tags/rmsnorm/) / [RoPE](/tags/rope/)
- 场景 [大语言模型](/scenarios/%E5%A4%A7%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/)

### 相关文章

- [Transformer中的混合专家模型架构原理与应用](/posts/20260226-blogs_podcasts-mixture-of-experts-moes-in-transformers-10/)
- [Transformer架构中的混合专家模型原理与应用](/posts/20260226-blogs_podcasts-mixture-of-experts-moes-in-transformers-11/)
- [Transformer 架构中的混合专家模型原理与优势](/posts/20260226-blogs_podcasts-mixture-of-experts-moes-in-transformers-12/)
- [Transformer架构中的混合专家模型原理与应用](/posts/20260226-blogs_podcasts-mixture-of-experts-moes-in-transformers-2/)
- [Transformer架构中的混合专家模型原理与应用](/posts/20260226-blogs_podcasts-mixture-of-experts-moes-in-transformers-3/)
*本文由 AI Stack 自动生成包含深度分析与可证伪的判断*