llama-2大模型布局
llama大模型是Meta公司开源的大语言模型,目前最新的为llama3.1参数量达到了405B,非常恐怖
以7B模型为例,梳理llama-2的模型布局,重点关注其对传统Transformer模型的布局修改
- LlamaConfig {
- "_name_or_path": "llama2/llama-2-7b",
- "architectures": [
- "LlamaForCausalLM"
- ],
- "attention_bias": false,
- "bos_token_id": 1,
- "eos_token_id": 2,
- "hidden_act": "silu",
- "hidden_size": 4096,
- "initializer_range": 0.02,
- "intermediate_size": 11008,
- "max_position_embeddings": 2048,
- "model_type": "llama",
- "num_attention_heads": 32,
- "num_hidden_layers": 32,
- "num_key_value_heads": 32,
- "pad_token_id": 0,
- "pretraining_tp": 1,
- "rms_norm_eps": 1e-05,
- "rope_scaling": null,
- "rope_theta": 10000.0,
- "tie_word_embeddings": false,
- "torch_dtype": "bfloat16",
- "transformers_version": "4.31.0",
- "use_cache": true,
- "vocab_size": 32000
- }
复制代码 从上述config文件可以看到,
- llama2 采用的激活函数是 silu
- 词表大小为 32000
- 预训练参数的数据类型是 bfloat16
Pytorch界说好模型后,print(model) 的输出:
- LlamaForCausalLM(
- (model): LlamaModel(
- (embed_tokens): Embedding(32000, 4096, padding_idx=0)
- (layers): ModuleList(
- (0-31): 32 x LlamaDecoderLayer(
- (self_attn): LlamaAttention(
- (q_proj): Linear(in_features=4096, out_features=4096, bias=False)
- (k_proj): Linear(in_features=4096, out_features=4096, bias=False)
- (v_proj): Linear(in_features=4096, out_features=4096, bias=False)
- (o_proj): Linear(in_features=4096, out_features=4096, bias=False)
- (rotary_emb): LlamaRotaryEmbedding()
- )
- (mlp): LlamaMLP(
- (gate_proj): Linear(in_features=4096, out_features=11008, bias=False)
- (up_proj): Linear(in_features=4096, out_features=11008, bias=False)
- (down_proj): Linear(in_features=11008, out_features=4096, bias=False)
- (act_fn): SiLUActivation()
- )
- (input_layernorm): LlamaRMSNorm()
- (post_attention_layernorm): LlamaRMSNorm()
- )
- )
- (norm): LlamaRMSNorm()
- )
- (lm_head): Linear(in_features=4096, out_features=32000, bias=False)
- )
复制代码 可以看到 LLama-2 7b 是由 32 个 LLamaDecoderLayer 堆叠而成;
LLamaDecoderLayer 布局图:
LLama中采用了 RMSNorm 而非传统的 LayerNorm;
LLamaAttention布局图:
LLama将传统Transformer中Transformer Block前的 position embedding 放入到了 Transformer Block中;
并且采用了 LlamaRotaryEmbedding ;
LLamaMLP布局:
对MLP效果也做了修改;
传统的MLP只包罗两个FC层,第一个FC层后有激活函数,第一个FC层起到了隐式地 gating 作用;
而,LLamaMLP中引入了显式地 gate_proj 层,厥后接激活函数,其效果与 up_proj 进行 element-wise 乘法,起到 gating 的作用;
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |