元象开源首个MoE大模型:4.2B激活参数,效果堪比13B模型,魔搭社区最佳实践来了

简介: 近日,元象发布其首个Moe大模型 XVERSE-MoE-A4.2B, 采用混合专家模型架构 (Mixture of Experts),激活参数4.2B,效果即可媲美13B模型。该模型全开源,无条件免费商用,支持中小企业、研究者和开发者可在元象高性能“全家桶”中按需选用,推动低成本部署。

1. 导读


近日,元象发布其首个Moe大模型 XVERSE-MoE-A4.2B, 采用混合专家模型架构 (Mixture of Experts),激活参数4.2B,效果即可媲美13B模型。该模型全开源,无条件免费商用,支持中小企业、研究者和开发者可在元象高性能“全家桶”中按需选用,推动低成本部署。


在元象自研中,用相同语料训练2.7万亿token,XVERSE-MoE-A4.2B实际激活参数量4.2B, 性能“跳级”超越 XVERSE-13B-2, 仅用30%计算量,并减少50%训练时间 。与多个开源标杆Llama相比,该模型超越Llama2-13B、接近Llama1-65B(如下图)。


image.png


元象自主研发的MoE高效训练和推理框架,在三个方向实现创新:

  • 性能方面,围绕MoE架构中的专家路由和权重计算逻辑,研发了一套高效融合算子进行计算提效;针对MoE模型高显存和大通信量的挑战,设计出计算、通信和显存卸载的重叠操作,有效提高整体处理吞吐量。
  • 架构方面,为保障模型灵活性与性能,采用更细粒度专家设计,相对于传统MoE(如Mixtral 8x7B)将每个专家大小等同于标准FFN,元象的每个专家大小仅为标准FFN的四分之一;同时区分共享专家与非共享专家,共享专家在计算中保持激活中台,非共享专家需要选择性激活,有利于将通用知识压缩至共享专家参数中,减少非共享专家参数间的知识冗余。
  • 训练方面,引入负载均衡损失项,更好均衡专家间的负载;采用路由器z-loss项,确保训练高效和稳定。


官方特别提到,架构的选择是经过一系列对比实验得出(下图):

  • 在实验3与实验2中,总参数量和激活参数量相同,但前者的细粒度专家设计带来了更高的性能表现;
  • 实验4在此基础上,进一步划分共享和非共享两类专家,使得效果显著提升;
  • 实验5探索了专家大小等于标准FFN时,引入共享专家的做法,效果不甚理想。

 

image.png

对比实验设计方案

 

综合试验结果(下图),元象最终采用实验4对应的架构设置。

image.png

对比实验效果

 

魔搭社区对 XVERSE-MoE-A4.2B 推出了推理、微调实战教程,希望对关注该模型的小伙伴们有所帮助~


2. 环境配置与安装


  1. python 3.10及以上版本
  2. pytorch 1.12及以上版本,推荐2.0及以上版本
  3. 建议使用CUDA 11.8及以上


使用步骤

本文主要演示的模型为XVERSE-MoE-A4.2B模型,在PAI-DSW使用(单卡A100)。


3. 模型链接和下载


XVERSE-MoE-A4.2B模型现已在ModelScope社区开源,模型链接


社区支持直接下载模型的repo:

from modelscope import snapshot_download
model_dir1 = snapshot_download("xverse/XVERSE-MoE-A4.2B")



4. 模型推理


推理代码

import torch
from modelscope import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("xverse/XVERSE-MoE-A4.2B")
model = AutoModelForCausalLM.from_pretrained("xverse/XVERSE-MoE-A4.2B", trust_remote_code=True, torch_dtype=torch.bfloat16, device_map='auto')
model = model.eval()
inputs = tokenizer('北京的景点:故宫、天坛、万里长城等。\n深圳的景点:', return_tensors='pt').input_ids
inputs = inputs.cuda()
generated_ids = model.generate(inputs, max_new_tokens=64, eos_token_id=tokenizer.eos_token_id, repetition_penalty=1.1)
print(tokenizer.batch_decode(generated_ids, skip_special_tokens=True))



资源消耗:

单卡A100可运行,如果自己的显卡显存不够,可以考虑使用多张3090显卡,或者对模型进行量化。

image.png




5. 模型微调和微调后推理


微调代码开源地址


SWFIT是魔搭社区官方提供的LLM&AIGC模型微调推理框架,首先从github上将SWIFT clone下来:

# 设置pip全局镜像和安装相关的python包
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
git clone https://github.com/modelscope/swift.git
cd swift
pip install .[llm]



模型微调脚本 lora

# Experimental environment: A100
# 66GB GPU memory
CUDA_VISIBLE_DEVICES=0 \
swift sft \
    --model_type xverse-moe-a4_2b \
    --sft_type lora \
    --tuner_backend swift \
    --dtype fp16 \
    --dataset dureader-robust-zh \
    --train_dataset_sample -1 \
    --num_train_epochs 1 \
    --max_length 1024 \
    --check_dataset_strategy warning \
    --lora_dtype fp16 \
    --lora_rank 8 \
    --lora_alpha 32 \
    --lora_dropout_p 0.05 \
    --lora_target_modules DEFAULT \
    --gradient_checkpointing false \
    --batch_size 1 \
    --weight_decay 0.1 \
    --learning_rate 1e-4 \
    --gradient_accumulation_steps 16 \
    --max_grad_norm 0.5 \
    --warmup_ratio 0.03 \
    --eval_steps 100 \
    --save_steps 100 \
    --save_total_limit 2 \
    --logging_steps 10 \



模型微调脚本 (lora+mp),可以在消费级显卡上进行训练

# Experimental environment: 4*A100
# 4*20GB GPU memory
PYTHONPATH=../../.. \
CUDA_VISIBLE_DEVICES=0,1,2,3 \
python llm_sft.py \
    --model_type xverse-moe-a4_2b \
    --sft_type lora \
    --tuner_backend swift \
    --dtype AUTO \
    --dataset dureader-robust-zh \
    --train_dataset_sample -1 \
    --num_train_epochs 1 \
    --max_length 1024 \
    --check_dataset_strategy warning \
    --lora_rank 8 \
    --lora_alpha 32 \
    --lora_dropout_p 0.05 \
    --lora_target_modules DEFAULT \
    --gradient_checkpointing false \
    --batch_size 1 \
    --weight_decay 0.1 \
    --learning_rate 1e-4 \
    --gradient_accumulation_steps 16 \
    --max_grad_norm 0.5 \
    --warmup_ratio 0.03 \
    --eval_steps 100 \
    --save_steps 100 \
    --save_total_limit 2 \
    --logging_steps 10 \



模型微调后的推理脚本,请将下面--ckpt_dir的值改为--output_dir中实际存储的模型weights目录。

# Experimental environment: A100
# 4*18GB GPU memory
CUDA_VISIBLE_DEVICES=0,1,2,3 \
swift infer \
    --ckpt_dir "output/xverse-moe-a4_2b/vx-xxx/checkpoint-xxx" \
    --load_dataset_config true \
    --max_new_tokens 2048 \
    --temperature 0.7 \
    --top_p 0.7 \
    --repetition_penalty 1. \
    --do_sample true \
    --merge_lora false \


5.1 微调的可视化结果

训练损失:

image.png


训练后生成样例

[PROMPT]Task: Question Generation
Context: 【东奥会计在线——中级会计职称频道推荐】根据《关于提高科技型中小企业研究开发费用税前加计扣除比例的通知》的规定,研发费加计扣除比例提高到75%。|财政部、国家税务总局、科技部发布《关于提高科技型中小企业研究开发费用税前加计扣除比例的通知》。|通知称,为进一步激励中小企业加大研发投入,支持科技创新,就提高科技型中小企业研究开发费用(以下简称研发费用)税前加计扣除比例有关问题发布通知。|通知明确,科技型中小企业开展研发活动中实际发生的研发费用,未形成无形资产计入当期损益的,在按规定据实扣除的基础上,在2017年1月1日至2019年12月31日期间,再按照实际发生额的75%在税前加计扣除;形成无形资产的,在上述期间按照无形资产成本的175%在税前摊销。|科技型中小企业享受研发费用税前加计扣除政策的其他政策口径按照《财政部国家税务总局科技部关于完善研究开发费用税前加计扣除政策的通知》(财税〔2015〕119号)规定执行。|科技型中小企业条件和管理办法由科技部、财政部和国家税务总局另行发布。科技、财政和税务部门应建立信息共享机制,及时共享科技型中小企业的相关信息,加强协调配合,保障优惠政策落实到位。|上一篇文章:关于2016年度企业研究开发费用税前加计扣除政策企业所得税纳税申报问题的公告 下一篇文章:关于提高科技型中小企业研究开发费用税前加计扣除比例的通知
Answer: 75%
Question:[OUTPUT]研发费用加计扣除比例<|endoftext|>
[LABELS]研发费用加计扣除比例
--------------------------------------------------
[PROMPT]Task: Question Generation
Context: 我个人感觉是吕颂贤版,剧情和原著差别不大,虽然TVB演员颜值和风光没有大陆的好。但是香港特区人口和地域的限制,只能注重在演员的演技方面发挥很出色,楼主看过大陆排《笑傲江湖》吧!在台词上表现的很生硬没有香港的注重神色配台词,比如杜燕歌把吕颂贤表情和性格几乎和原著差别不大。武打几乎沿用徐克和程小东动作的风格很注重实际技巧,没有大陆版的在武打场面依靠电脑特效表现的太夸张了。李亚鹏版的武打动作和导演还是香港的元彬,大陆毕竟还是在武侠剧起步的比较晚,主要是还是靠明星大腕压阵而香港却是恰恰相反。
Answer: 吕颂贤版
Question:[OUTPUT]笑傲江湖哪个版本最好看<|endoftext|>
[LABELS]笑傲江湖哪个版本好看
--------------------------------------------------
[PROMPT]Task: Question Generation
Context: 爬行垫根据中间材料的不同可以分为:XPE爬行垫、EPE爬行垫、EVA爬行垫、PVC爬行垫;其中XPE爬行垫、EPE爬行垫都属于PE材料加保鲜膜复合而成,都是无异味的环保材料,但是XPE爬行垫是品质较好的爬行垫,韩国进口爬行垫都是这种爬行垫,而EPE爬行垫是国内厂家为了减低成本,使用EPE(珍珠棉)作为原料生产的一款爬行垫,该材料弹性差,易碎,开孔发泡防水性弱。EVA爬行垫、PVC爬行垫是用EVA或PVC作为原材料与保鲜膜复合的而成的爬行垫,或者把图案转印在原材料上,这两款爬行垫通常有异味,如果是图案转印的爬行垫,油墨外露容易脱落。当时我儿子爬的时候,我们也买了垫子,但是始终有味。最后就没用了,铺的就的薄毯子让他爬。
Answer: XPE
Question:[OUTPUT]爬行垫什么材质好<|endoftext|>
[LABELS]爬行垫什么材质的好
--------------------------------------------------
[PROMPT]Task: Question Generation
Context: 下载速度达到72mbp/s速度相当快。相当于500兆带宽。在网速计算中, b=bit,B=byte 8×b=1×B 意思是 8个小写的b 才是一个大写B。4M理论下载速度:4M就是4Mb/s 理论下载速度公式:4×1024÷8=512KB /s 请注意按公式单位已经变为 KB/s 依此类推: 2M理论下载速度:2×1024÷8=256KB /s 8M理论下载速度:8×1024÷8=1024KB /s =1MB/s 10M理论下载速度:10×1024÷8=1280KB /s =2M理论下载速度+8M理论下载速度 50M理论下载速度:50×1024÷8=6400KB /s 1Gb理论下载速度:1024×1024÷8=128MB /s 公式:几兆带宽×1024÷8=()KB/s。
Answer: 相当于500兆带宽
Question:[OUTPUT]72m等于多少兆<|endoftext|>
[LABELS]72mbps是多少网速



5.2 资源消耗:

训练lora

image.png


训练(lora+mp)

image.png


训练后推理

image.png


点击直达模型卡片

XVERSE-MoE-A4.2B · 模型库 (modelscope.cn)


作者介绍
目录