大模型推理架构
原始Transformer模型由编码器和解码器组成,现在文本生成大模型都是Decoder-Only

一、Embedding
embedding过程其实就是一个索引的过程,将输入从(seq_len)扩展到(seq_len, hidden_size)。
输出矩阵长为seq_len,宽为hidden_size。
二、位置编码
常用ROPE(旋转位置编码),因为词语之间相关性高低与相对位置远近有关。(43 封私信 / 45 条消息) 旋转式位置编码 (RoPE) 知识总结 - 知乎
二、多头自注意力层
(Decoder-Only是自注意力,因为查询、键、值都来自于同一个输入序列)
输入矩阵与、
、
xi相乘,得到Q、K、V矩阵。计算注意力得分后和V相乘。
![]()
粗略的类比是将其视为在文件柜中进行搜索。查询就像您正在研究的主题的便笺一样。按键类似于机柜内文件夹的标签。当您将标签与便签进行匹配时,我们将取出该文件夹的内容,这些内容就是value向量。除了您不仅要寻找一个value,而且还要从多个文件夹中寻找value。
将query向量乘以每个key向量会为每个文件夹产生一个分数(技术上:点乘积,然后softmax)。

因为不能让模型知道未来时间步的信息,否则就相当于告诉了模型的最终答案是什么,所以在这里增加了causal mask(因果掩码),也就是在QK相乘后把不能看到的部分的值设为负无穷,(之后除根号d,d是key向量的维度,防止梯度消失或爆炸),这样在softmax之后,负无穷部分直接变为0,前面可见部分权重和依旧为1。同时能够发现此时Att大小只和当前Q有关,与之前Q无关,所以只需要保存之前的K、V就行。

多头:初始的 Q、K、V,维度是 (seq_len, d_model),现在,我们要把 d_model 这个维度“拆分”成 num_heads(头数) 和 d_k(每个头的维度)。现在,Q、K、V就变成了三维张量。我们可以把这三个维度理解为:[序列长度, 头的数量, 每个头的深度]。在每个头内部进行注意力计算,之后重新合并为原先的二维。
多头改进:MHA为原先多头注意力机制。由于KV会复用,那么第一种,MQA让所有注意力头共享一套K和V,KV Cache减少为原先的1/h,但这样有点太粗暴,提出第二种GQA,把头分成g组,这也是Llama3和ds-V1用的方法(g一般为8,因为都是8卡训练)。第三种,MLA(multi-head latent attention)ds-V3提出的,通过保存原始输入,每一次重新计算KV来用时间换空间。
三、前馈神经网络
两层全连接网络。第一层是模型大小的四倍,第二层又回到模型原来大小。
四、归一化层
传统的归一化方式是LayerNorm,但目前主流大模型都使用了RMSNorm。

这个归一化层哪里都可以放,有的模型放在attention计算前面(pre-norm)有的放在后面(post-norm),qwen3甚至在每个q和k后面也放了一层,效果不尽相同
这个模块的作用主要是为了训练过程,约束数据的方差来防止梯度消失或爆炸。
更多推荐


所有评论(0)