Qwen模型架构详解
创作时间:
作者:
@小白创作中心
Qwen模型架构详解
引用
CSDN
1.
https://blog.csdn.net/weixin_46160781/article/details/142363421
Qwen是中国科技公司推出的开源大语言模型,其架构设计和实现细节对于理解Transformer类模型具有重要参考价值。本文详细介绍了Qwen模型的各个组成部分,包括Tokenizer、Embedding层、Decoder层、Attention机制、MLP模块等,并基于PyTorch和HuggingFace Transformers库的代码实现进行了深入解析。
- 左侧部分 (Qwen2 部分):
- 文本输入通过Tokenizer编码为Input_ids,之后输入到Embedding层。
- Embedding输出经过Hidden_states,然后传递给多个Layers层。每个Layer层通过RMSNorm进行正则化处理。
- Layers的输出会进入右侧的Decoder layer。
- Decoder Layer (解码层):
- Hidden_states经过RMSNorm正则化后,传递给Attention模块。
- 在Attention模块内,输入分为Query、Key和Value,用于注意力机制的计算。
- 经过Attention后的输出再经过另一个RMSNorm处理,并通过MLP(多层感知器)进一步处理。
- 每一步都有残差连接(Residual),保证信息流动不会丢失。
- Attention 机制 (右侧部分):
- Hidden_states分别生成Query、Key和Value,并应用Rotary positional embedding进行位置编码。
- 这些编码后的Query、Key和Value经过注意力计算,生成Attention_weight。
- Attention_weight通过Softmax归一化,并与Value相乘(Matmul),最后输出为O_Linear。
- MLP 模块:
- MLP 由两层线性层(Linear)和激活函数(Act)组成。它负责进一步的特征提取。
- 输出层:
- 最后,通过线性层计算Loss,并生成最终的Output。
基于PyTorch和HuggingFace Transformers库的 Qwen2 模型实现。代码结构的简要说明:
1.导入部分:
- 导入了相关的 PyTorch 模块(如 nn, torch.nn.functional, torch.utils.checkpoint 等)。
- 从 HuggingFace 的 transformers 库中导入了通用的模型工具和实用函数。
2.核心常量和配置:
- _CHECKPOINT_FOR_DOC 和 _CONFIG_FOR_DOC:定义文档中用于引用的检查点和配置。
- QWEN2_PRETRAINED_MODEL_ARCHIVE_LIST:列出预训练模型的名称。
3.辅助函数:
- _get_unpad_data:用于处理未填充的数据。
- rotate_half 和 apply_rotary_pos_emb:用于处理旋转位置嵌入(Rotary Position Embedding)的辅助函数。
4.核心组件类:
- Qwen2RMSNorm:Qwen2 版本的 RMS 正则化层,类似于 T5LayerNorm。
- Qwen2RotaryEmbedding:处理旋转位置嵌入(Rotary Position Embedding)的类。
- Qwen2MLP:多层感知器(MLP),用于模型中的全连接层。
- Qwen2Attention:注意力机制的实现,支持普通多头注意力机制和滑动窗口注意力。
- Qwen2FlashAttention2 和 Qwen2SdpaAttention:两种注意力机制的变体,分别是基于 Flash Attention 和 SDPA 的实现。
- Qwen2DecoderLayer:Qwen2 解码器层,结合注意力机制和 MLP。
- Qwen2PreTrainedModel:继承自 PreTrainedModel,提供模型的基本功能和初始化。
5.Qwen2 模型类:
- Qwen2Model:基础 Qwen2 模型,由多个解码器层组成,处理输入嵌入、注意力掩码和位置编码。
- Qwen2ForCausalLM:用于自回归生成任务的 Qwen2 模型,添加了语言模型头部(linear 层)。
- Qwen2ForSequenceClassification:用于序列分类任务的 Qwen2 模型,使用最后一个 token 的隐藏状态进行分类。
6.模型文档说明:
- 添加了文档说明,解释如何使用这些模型,以及输入和输出的格式。
7.前向传播逻辑:
- forward 函数是每个模型的核心方法,负责计算前向传播并输出结果。
- 模型通过输入的 input_ids 或 inputs_embeds 进行处理,并返回隐藏状态、注意力权重、缓存的键值对等。
8.训练相关功能:
- 支持梯度检查点(gradient_checkpointing)以节省内存。
- 支持缓存键值对(past_key_values)以加速自回归生成任务。
9.损失函数:
- 对于分类任务,使用交叉熵损失(CrossEntropyLoss)。
- 对于回归任务,使用均方误差损失(MSELoss)。
10.模型初始化和权重加载:
- 使用 post_init 来初始化权重。
- 提供了方法来获取和设置模型的输入嵌入层和输出层(get_input_embeddings 和 get_output_embeddings)。
源码阅读部分:
Qwen2Model 的 init 函数
def __init__(self, config: Qwen2Config):
# 调用父类的构造函数并传递配置
super().__init__(config)
# 获取填充token的索引
self.padding_idx = config.pad_token_id
# 设置词汇表大小
self.vocab_size = config.vocab_size
# 初始化嵌入层,输入为词汇表大小,输出为隐藏层大小,忽略填充token
self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size, self.padding_idx)
# 初始化解码器层列表,包含num_hidden_layers个Qwen2DecoderLayer
self.layers = nn.ModuleList(
[Qwen2DecoderLayer(config, layer_idx) for layer_idx in range(config.num_hidden_layers)]
)
# 设置注意力机制的实现方式
self._attn_implementation = config._attn_implementation
# 初始化RMS正则化层,用于正则化隐藏状态
self.norm = Qwen2RMSNorm(config.hidden_size, eps=config.rms_norm_eps)
# 是否启用梯度检查点,以节省内存,默认关闭
self.gradient_checkpointing = False
# 调用后续的初始化过程,通常是权重初始化
self.post_init()
下面这个博客中已经讲的很清楚了
https://blog.csdn.net/qq_37021523/article/details/138901191
https://zhuanlan.zhihu.com/p/695112177
Transformer具体干了啥↓
接下来是拿每一个query q 去对每个 key k 做attention
得到b1
在上图中,
Multi-head Self-attention
不同的head关注点不一样
No position information in self-attention, e^i代表的是位置的信息。
图片来自:https://www.youtube.com/watch?v=ugWDIIOHtPA&t=4s&ab_channel=Hung-yiLee
热门推荐
十大港台乐坛七十年代男歌手
婺源秋色摄影团,新手也能拍大片!
告别俗套!5大类型40个创意生日文案让你的朋友圈与众不同
流感病毒阳性率持续上升,布洛芬正确使用方法来了
乳酸菌:肠道健康守护者,兼具五大功效
中国诗歌报教你新年现代诗情感表达
日本文部科学省批准脑神经科学领域97项重点研究课题
胸痹or心悸?中医教你一招分辨
车靠边人撤离即报警:高速事故处理“九字诀”
杂粮粥配清蒸鱼和时蔬:科学实证的健康减肥餐
解放军总医院专家:慢性肾炎的早期识别与预防
挖掘中国传统艺术的审美气质和意蕴——谈中国油画的当代发展
快速消胀气:10种食物和运动帮你恢复平坦小腹
肺结节消融技术:创伤小恢复快,成治疗新选择
新材料浪潮:科技进步对塑料制品行业的革新影响
冰箱出故障?简单技巧让你修复常见问题
秋日夜探西安古城墙,历史与美景的绝配!
潮州凤凰古城:千年古城展新颜
《关灯以后》教你写出高能短片剧本
骨科医生推荐:秋季食用这4种食材助骨骼健康
黄山五绝味:徽州家宴、山珍、茶叶、佐料、甜点
让情绪成为动力,而非阻碍
新国标电动车电池安全大揭秘
明亮眼神加规律生活,85岁张大爷这样保持健康
选择好虾饲料,必须注意这五大成分!每一位虾农都要了解!
冬日漓江游,阳朔美景不容错过
姜枣茶:一杯温阳散寒,轻松应对冬季手脚冰凉
藏传佛教中的五大金刚护法
冬季蔬菜育苗神器:珍珠岩、泥炭土、园艺蛭石
支付宝隐私保护攻略:从基础设置到风险监控