大模型太卷了,总感觉天天出新的模型。今天看公众的号,看到阿里Qwen发布一款总模型7B,推理时,激活参数2.7B的大模型。仔细看了一下他的技术报告,记录一下。
技术博客:Qwen1.5-MoE: Matching 7B Model Performance with 1/3 Activated Parameters
优点:
Qwen1.5-MoE-A2.7B。它仅拥有27亿个激活参数,但其性能却能与当前最先进的70亿参数模型,如Mistral 7B和Qwen1.5-7B相媲美。相较于包含65亿个Non-Embedding参数的Qwen1.5-7B,Qwen1.5-MoE-A2.7B只有20亿个Non-Embedding参数,约为原模型大小的三分之一。此外,相比Qwen1.5-7B,Qwen1.5-MoE-A2.7B的训练成本降低了75%,推理速度则提升至1.74倍。
性能:
激活参数对比:
模型参数计算:
参考资料:huggingface
{
"architectures": [
"Qwen2MoeForCausalLM"
],
"attention_dropout": 0.0,
"bos_token_id": 151643,
"eos_token_id": 151643,
"hidden_act": "silu",
"hidden_size": 2048,
"initializer_range": 0.02,
"intermediate_size": 5632,
"max_position_embeddings": 8192,
"max_window_layers": 21,
"model_type": "qwen2_moe",
"num_attention_heads": 16,
"num_hidden_layers": 24,
"num_key_value_heads": 16,
"rms_norm_eps": 1e-06,
"rope_theta": 1000000.0,
"sliding_window": 32768,
"tie_word_embeddings": false,
"torch_dtype": "bfloat16",
"transformers_version": "4.39.0.dev0",
"use_cache": true,
"use_sliding_window": false,
"vocab_size": 151936,
"decoder_sparse_step": 1,
"moe_intermediate_size": 1408,
"shared_expert_intermediate_size": 5632,
"num_experts_per_tok": 4,
"num_experts": 60,
"norm_topk_prob": false,
"output_router_logits": false,
"router_aux_loss_coef": 0.001
}
模型主要参数包括:
词汇表,多头注意力机制, FFN
- 词汇表:
151936*2048=311164928≈0.3B - 多头注意力机制:
模型层数矩阵大小矩阵数量
24 * (2048*2048) *4=402653184≈0.4B - FFN:通常为GLU结构即三个相同结构的矩阵,并且这里是MoE所有会有多个相同的专家,即8个FFN,这里先默认是8个头,具体模型结构略有一些差异,不过模型参数计算是一致的。
矩阵大小 * GLU* 专家数量 * 模型层数
5632 * 2048 * 3 * 8 * 24= 6.64377754 × 1 0 9 6.64377754\times10^{9} 6.64377754×109 ≈6.4B
中间会省略一些参数,如RMSNorm的参数,以及矩阵的bias。
模型结构:
主要方面创新: Finegrained experts,初始化,新的routing机制
- Finegrained experts
DeepSeek-MoE和DBRX已经证明了finegrained experts的有效性。从FFN层过渡到MoE层时,我们一般只是简单地复制多次FFN来实现多个expert。而finegrained experts的目标是在不增加参数数量的前提下生成更多expert。为了实现这一点,我们将单个FFN分割成几个部分,每个部分作为一个独立的expert。我们设计了具有总共64个expert的的MoE,对比其他配置,我们认为这个实现能达到效果和效率的最优。
我理解的意思就是,常规的MoE是8个专家,但是Qwen则是64个专家,怎么增加专家的数量,并且不增加参数量,那就是分割专家,对每个专家进行纵向切割,切割成8个专家,这么就会形成64个专家。 - 初始化
模型初始化阶段至关重要。初步实验表明,从零开始训练MoE模型可能效率低下,且难以提升至预期的最优性能水平。因此,我们首先利用已有的Qwen-1.8B,将其改造为Qwen1.5-MoE-A2.7B。此外,在初始化阶段引入随机性可以显著加快收敛速度,并在整个预训练过程中带来更好的整体性能表现。 - 新的routing机制
整合了4个总是被激活的共享expert和每次只激活其中4个的60个routing expert。