Qwen1.5-MoE评测:2.7B激活参数量对标7B性能
Qwen1.5-MoE模型:仅激活2.7B参数,性能比肩主流7B大模型
开篇速览
阿里云近日发布MoE架构版本的大语言模型,总参数量14.3B,内部配置64个专家模块,每次推理仅激活其中8个。关键在于,仅动用2.7B激活参数就能与Qwen1.5-7B模型的表现直接对标。训练成本骤降75%,推理吞吐量提升至原来的1.74倍。Base版与Chat版均已开源,可直接上手部署。
以下内容主要提炼自Qwen官方技术博客,重点用通俗语言解释核心设计思路。
架构设计
对比Mistral-MoE固定8个专家、采用Top-2门控选取的策略,Qwen1.5-MoE在以下三方面做了针对性改进:
- 细粒度专家拆分:将原本完整的FFN层切分为多个独立的小段,每段作为一个独立专家。这种更细粒度的划分极大提升了专家组合的灵活性和多样性。
- 参数初始化优化:直接利用Qwen-1.8B模型的权重初始化Qwen1.5-MoE-A2.7B,并在初始化阶段引入随机噪声。这一策略加速了模型收敛,同时改善了预训练的整体质量。
- 共享路由机制:将共享专家与路由专家融合设计。模型保持4个共享专家始终激活,再从剩余60个路由专家中动态选取4个。本质上形成了“固定常驻+按需激活”的双轨模式。
性能实测
团队在MMLU、GSM8K、HumanEval及多语言榜单上,分别评估了Qwen1.5-MoE-A2.7B的语言理解、数学推理、代码生成和多语言能力。Chat版本则通过MT-Bench进行综合评分。实测结果清晰表明:这个仅有2.7B激活参数的MoE模型,综合效果完全能与当前最顶尖的7B级别模型正面竞争。
尽管MoE模型的总参数量看似庞大,但实际激活参数量远低于7B模型。配合高效的初始化方法,大量冗余训练被省去,整体训练成本削减75%——这对工程落地而言是极具吸引力的数字。
在A100-80G显卡上使用vllm框架,分别测试Qwen1.5-7B与Qwen1.5-MoE-A2.7B的推理吞吐量。输入和输出token固定为1K时,具体TPS数据显示:MoE版本比7B版本推理速度快约1.74倍。换言之,每次推理任务可节省近半时间。
推理实战
下面直接用Transformers演示Qwen1.5-MoE-A2.7B的推理流程,代码即拷即用:
from transformers import AutoModelForCausalLM, AutoTokenizer
device = "cuda" # the device to load the model onto
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen1.5-MoE-A2.7B-Chat",
torch_dtype="auto",
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen1.5-MoE-A2.7B-Chat")
prompt = "Give me a short introduction to large language model."
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(device)
generated_ids = model.generate(
model_inputs.input_ids,
max_new_tokens=512
)
generated_ids = [
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
]
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
后续思考
最近开源MoE模型的数量明显激增。前有Grok-1采用MoE架构,后有DBRX的132B MoE模型,如今千问也迅速跟进。不过坦率讲,个人有时会觉得MoE模型多少带些“取巧”嫌疑——当然,这仅代表主观感受,权当调侃。
