腾讯发布万亿大模型训练方法:最快256卡1天训完万亿NLP大模型( 三 )


(2)相同规模的大模型 , MoE模型的训练和推理效率更高 , 对资源的消耗更小 。
模型算法模型配置
挑战描述:(1)基于MoE模型 , 业界尚未有关于大模型专家数量上限的结论 , 配置专家规模和数量需要探索;(2)理论上只扩展专家数量提升模型规模是有瓶颈的 , 即不能无限扩大专家数量 。
解决方案:在小规模模型上(千万级) , 通过扩大专家数量提升模型规模 , 我们发现专家数量的提升对下游任务(多个下游任务均值)效果是有瓶颈的 。
下图为专家数量和下游任务效果的关系图 , 当专家数量提升到2000左右 , 效果提升开始减弱 , 当进一步提升专家数量到3000 , 下游任务指标不增反降 。
所以我们基于30亿的Dense模型扩展HunYuan-NLP1T大模型 , 专家数量设置为1536个 。
腾讯发布万亿大模型训练方法:最快256卡1天训完万亿NLP大模型
文章图片
热启动和课程学习
挑战描述 , 模型规模越大 , 需要喂越多的数据 , 对于万亿参数规模的模型 , 在有限的资源内训练收敛是非常有挑战的(业界万亿参数的模型基本需要~7000亿tokens) 。
解决方案 , 热启动+模型规模课程学习的策略 , 我们借鉴了课程学习的思想 , 首先在小规模的模型上训练收敛 , 然后将小模型的知识迁移到大模型 , 逐步增加模型的规模 。 具体来说 , 如下图(a)所示 , 我们先训练只有一个专家的Dense模型 , 然后 , 如图下(b)通过扩展专家数量把模型规模提升到千亿规模并训练收敛 , 最后继续通过增加专家数量把模型规模提升到万亿直至收敛如下图(c) 。
关键成果 , 千亿规模以下的模型训练成本相对于万亿少一个数量级 , 而万亿在千亿的基础上只需要很少的迭代就能到达较好的水平 。 具体来说 , 我们在千亿的基础上扩展万亿 , 只需训练~1天/256卡 , 即可在下游任务效果上超过千亿~10% 。
腾讯发布万亿大模型训练方法:最快256卡1天训完万亿NLP大模型
文章图片
注意力权重复制
挑战描述:Transformer主要由SA层和FFN层组成 , SA层计算AttentionWeights , 并加权 。 AttentionWeights的计算时间复杂度很高(和序列长度成平方级关系) 。
解决方案:我们发现AttentionWeights在不同层之间的差异性不大 。 一个直接的想法是只在第一层计算AttentionWeights , 在其它层复用这些值 , 那么整个模型AttentionWeights的计算复杂度降低为原来的1/N , 如下图(b)所示 。 但是 , 通过实验发现 , 这种方法对效果是有损失的 。 因此我们对模型做了进一步改进 , 在每一层我们随机掷骰子 , 有p的概率重新计算AttentionWeights , 1-p的概率复用上一层的AttentionWeights 。 通过实验发现 , 当p设置为50% , 模型效果无损 , AttentionWeights总的时间复杂度降低50% 。
关键效果:大模型预训练提速~20% , 下游任务指标略正 。
腾讯发布万亿大模型训练方法:最快256卡1天训完万亿NLP大模型
文章图片
腾讯发布万亿大模型训练方法:最快256卡1天训完万亿NLP大模型】词向量路由机制
挑战描述 , 原来的Routing方法以Self-Attention的输出作为输入 , 有几个缺点:首先路由和词本身的关联随着SA对信息的加工逐渐变弱 。 其次不同层之间的Self-Attention输出差异很大 , 路由的稳定性比较差 。 如下图(左) , 对于相同的词“我” , 路由分配到不同的专家(专家1和专家2) 。
解决方案 , 我们引入了额外的词向量用于专家的路由 , 把路由和Attention层输出解耦 。 如下图(右)所示 , 相同的词的路由向量相同 , 所以它们从始至终分配到相同的专家提取特征 , 不仅保证了路由稳定性而且加速了收敛 。