首发于NLP工作站
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版本模型。

博客:https://qwenlm.github.io/zh/blog/qwen-moe/
HF:https://huggingface.co/Qwen/Qwen1.5-MoE-A2.7B
HF:https://huggingface.co/Qwen/Qwen1.5-MoE-A2.7B-Chat

注意:以下内容来自参考Qwen官方博客。

模型结构

与Mistral-MOE配置8个专家采用Top-2门控策略选择专家不同,主要进行以下改进:

  • 细粒度专家细分:将一个完整的FFN拆分成数个部分,每一部分作为一个独立的专家。
  • 模型初始化优化:利用Qwen-1.8B模型初始化Qwen1.5-MoE-A2.7B参数,并在在初始化阶段引入了随机参数,不仅加速了模型的收敛速度,还提升了预训练过程中整体性能。
  • 共享路由机制:实现共享专家与路由专家的融合,模型始终存在4个共享专家处于激活状态,并从剩余的60个路由专家中选择激活的4个专家。
来自Deepseek-MOE

实验效果

在MMLU、GSM8K、HumanEval和Multilingual榜单上评论了Qwen1.5-MoE-A2.7B模型的语言理解、数学、代码和多语言能力。在MT-Bench榜单上测试了Chat模型的能力。发现Qwen1.5-MoE-A2.7B效果可以媲美最佳的7B模型。

尽管MOE模型的总参数了较大,但实际激活参数远小于7B模型,并由于初始化方法无需过多数据进行模型训练,从而显著降低了模型75%的训练成本。

并且在A100-80G显卡上,利用vllm框架测试Qwen1.5-7B和Qwen1.5-MoE-A2.7B模型的推理性能,保持输入输出token均为1k情况下,具体TPS如下,可以发现Qwen1.5-MoE-A2.7B模型与Qwen1.5-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。

但总觉得如论MOE模型有些投机取巧的意味,狗头保命。


欢迎多多关注公众号「NLP工作站」,加入交流群,交个朋友吧,一起学习,一起进步!

我们的口号是“生命不止,学习不停”!

往期回顾

刘聪NLP:自我蒸馏方法-减轻大模型微调过程中的灾难性遗忘

刘聪NLP:Yi技术报告细节分享
刘聪NLP:大模型增量预训练新技巧-防止模型灾难性遗忘
刘聪NLP:如何提高LLMs的文本表征(Text Embedding)能力?
刘聪NLP:DEITA-大模型指令微调的数据高效筛选方法
刘聪NLP:1-2B参数规模大模型使用心得及模型汇总
刘聪NLP:大模型微调技巧 | 高质量指令数据筛选方法-MoDS
刘聪NLP:大模型下载使我痛苦
刘聪NLP:大模型微调技巧-在Embedding上加入噪音提高指令微调效果
刘聪NLP:通义千问-Qwen技术报告细节分享
刘聪NLP:如何从数据集中自动识别高质量的指令数据-IFD指标的使用
刘聪NLP:BaiChuan2技术报告细节分享&个人想法
刘聪NLP:领域大模型-训练Trick&落地思考
刘聪NLP:千Star-大模型LLM微调项目-更新
刘聪NLP:Llama2技术细节&开源影响
刘聪NLP:垂直领域大模型的一些思考及开源模型汇总
刘聪NLP:如何评估大模型-LLMs的好坏?
刘聪NLP:大模型流水线并行(Pipeline)实战
刘聪NLP:支持多模态的ChatGLM模型-VisualGLM-6B
刘聪NLP:大模型时代-不进则退
刘聪NLP:大模型LLM-微调经验分享&总结
刘聪NLP:ChatGPT-所见、所闻、所感
刘聪NLP:ACL2022 | DCSR:一种面向开放域段落检索的句子感知的对比学习方法
刘聪NLP:ACL2022 | NoisyTune:微调前加入少量噪音可能会有意想不到的效果
刘聪NLP:总结|Prompt在NER场景的应用
刘聪NLP:PERT:一种基于乱序语言模型的预训练模型
刘聪NLP:常用预训练语言模型(PTMs)总结

发布于 2024-03-29 03:19・IP 属地荷兰

文章被以下专栏收录