2024年6月3日,昆仑万维宣布开源2000亿稀疏大模型Skywork-MoE,性能强劲,同时推理成本更低。Skywork-MoE基于之前昆仑万维开源的Skywork-13B模型中间checkpoint扩展而来,是首个完整将MoE Upcycling技术应用并落地的开源千亿MoE大模型,也是首个支持用单台4090服务器推理的开源千亿MoE大模型。
Skywork-MoE的模型权重、技术报告完全开源,免费商用,无需申请:
•模型权重下载:
https://huggingface.co/Skywork/Skywork-MoE-base
https://huggingface.co/Skywork/Skywork-MoE-Base-FP8
•模型开源仓库:https://github.com/SkyworkAI/Skywork-MoE
•模型技术报告:https://github.com/SkyworkAI/Skywork-MoE/blob/main/skywork-moe-tech-report.pdf
•模型推理代码:(支持8x4090服务器上8 bit量化加载推理)https://github.com/SkyworkAI/vllm
本次开源的Skywork-MoE模型隶属于天工3.0的研发模型系列,是其中的中档大小模型(Skywork-MoE-Medium),模型的总参数量为146B,激活参数量22B,共有16个Expert,每个Expert大小为13B,每次激活其中的2个Expert。
天工3.0还训练了75B(Skywork-MoE-Small)和400B(Skywork-MoE-Large)两档MoE模型,并不在此次开源之列。
基于目前各大主流模型评测榜单评测了Skywork-MoE,在相同的激活参数量20B(推理计算量)下,Skywork-MoE能力在行业前列,接近70B的Dense模型。使得模型的推理成本有近3倍的下降。同时Skywork-MoE的总参数大小比DeepSeekV2的总参数大小要小1/3,用更小的参数规模做到了相近的能力。
为了解决MoE模型训练困难,泛化性能差的问题,相较于Mixtral-MoE,Skywork-MoE设计了两种训练优化算法:
1.Gating Logits归一化操作
昆仑万维在Gating Layer的token分发逻辑处新增了一个normalization操作,使得Gating Layer的参数学习更加趋向于被选中的top-2 experts,增加MoE模型对于top-2的置信度:
2.自适应的Aux Loss
有别于传统的固定系数(固定超参)的aux loss,在MoE训练的不同阶段让模型自适应地选择合适的aux loss超参系数,从而让Drop Token Rate保持在合适的区间内,既能做到expert分发的平衡,又能让expert学习具备差异化,从而提升模型整体的性能和泛化水平。在MoE训练的前期,由于参数学习不到位,导致Drop Token Rate太高(token分布差异太大),此时需要较大的aux loss帮助token load balance;在MoE训练的后期,昆仑万维希望Expert之间仍保证一定的区分度,避免Gating倾向为随机分发Token,因此需要较低的aux loss降低纠偏。
如何对MoE模型高效地进行大规模分布式训练是一个有难度的挑战,目前社区还没有一个最佳实践。Skywork-MoE提出了两个重要的并行优化设计,从而在千卡集群上实现了MFU 38%的训练吞吐,其中MFU以22B的激活参数计算理论计算量。
1.Expert Data Parallel
区别于Megatron-LM社区已有的EP(Expert Parallel)和ETP(Expert Tensor Parallel)设计,昆仑万维提出了一种称之为Expert Data Parallel的并行设计方案,这种并行方案可以在Expert数量较小时仍能高效地切分模型,对Expert引入的all2all通信也可以最大程度地优化和掩盖。相较于EP对GPU数量的限制和ETP在千卡集群上的低效,EDP可以较好地解决大规模分布式训练MoE的并行痛点,同时EDP的设计简单、鲁棒、易扩展,可以较快地实现和验证。
一个最简单的EDP的例子,两卡情况下TP=2,EP=2,其中Attention部分采用Tensor Parallel,Expert部分采用Expert Parallel
2.非均匀切分流水并行
由于first stage的Embedding计算和last stage的Loss计算,以及Pipeline Buffer的存在,流水并行下均匀切分Layer时的各stage计算负载和显存负载均有较明显的不均衡情况。昆仑万维提出了非均匀的流水并行切分和重计算Layer分配方式,使得总体的计算/显存负载更均衡,约有10%的端到端训练吞吐提升。
比较均匀切分和非均匀切分下的流水并行气泡:对于一个24层Layer的LLM,(a)是均匀切分成4个stage,每个stage的layer数量是:[6,6,6,6].(b)是经过优化后的非均匀切分方式,切成5个stage,每个stage的layer数量是:[5,5,5,5,4],在中间流水打满的阶段,非均匀切分的气泡更低。
此外,Skywork-MoE还通过一系列基于Scaling Laws的实验,探究哪些约束会影响Upcycling和From Scratch训练MoE模型的好坏。
一个可以遵循的经验规则是:如果训练MoE模型的FLOPs是训练Dense模型的2倍以上,那么选择from Scratch训练MoE会更好,否则的话,选择Upcycling训练MoE可以明显减少训练成本。
4090推理
Skywork-MoE是目前能在8x4090服务器上推理的最大的开源MoE模型。8x4090服务器一共有192GB的GPU显存,在FP8量化下(weight占用146GB),使用昆仑万维首创的非均匀Tensor Parallel并行推理方式,Skywork-MoE可以在合适的batch size内达到2200 tokens/s的吞吐。天工团队完整开源了相关的推理框架代码和安装环境,详情参见:https://github.com/SkyworkAI/Skywork-MoE
希望本次开源的Skywork-MoE模型、技术报告和相关的实验结果可以给开源社区贡献更多的MoE训练经验和Know-how,包括模型结构、超参选择、训练技巧、训练推理加速等各方面,探索用更低的训练推理成本训更大更强的模型,在通往AGI的道路上贡献一点力量。