
腾讯二面真题:DeepSeek对MoE架构做了哪些改进?
DeepSeek 对 MoE 架构做了哪些改进?跟 Mixtral 的 MoE 有什么不同?这个是我的学员最近面试某个大模型独角兽遇到的一道面试题。
1.面试官心理分析
这篇文章,我们就从面试官的角度来分析一下,如果你在面试现场被问到这个题目,应该如何作答?
面试官问这个问题,它其实是想考你什么?
- 第一,Mixtral 大模型采用的 MoE 架构长什么样?
- 第二,就是 DeepSeek 的 MoE 做了哪些改进,这样改进的动机是什么?
2.面试题解析
要回答 DeepSeek 的 MoE 改进,我们先来看看,最原始的 MoE 网络长什么样子?以及它是怎么工作的?
这张图是 Mixtral 8x7B 的 MoE 架构:
其核心思想很直观,它实际上用了 8 个7B的“专家”模型,当 MoE 与Transformer 相结合时,会用稀疏 MoE 层替换掉某些前馈层。
MoE 层包含了一个路由网络,用于选择将输入 token 分派给哪些专家处理,Mixtral 模型为每个词元选择 top-K 个专家,那在图中是选择两个。
因为每次只激活部分的专家,所以其解码速度能做到与 14B 模型相当,也就极大的提高了模型的推理效率。
好,了解了最原始的 MoE 架构,我们再来看看,DeepSeek 是怎么改进的?
看这张图,其实 DeepSeek 的主要改动点,就是把专家分成了两拨,分别是 Shared Expert 和 Routed Expert。
通俗来讲,就好比学校的常驻教授和客座教授,常驻教授是一直在的,而客座教授则经常会变,不同的教学主题,有不同的客座教授。
在 DeepSeek 的 MoE 中,Shared Expert 是一直激活的,也就是输入的 token 会被 Shared Expert 计算,Routed Expert 和普通的 MoE 一样,要先计算相似度,也就是专家的得分,再选择 top-k 进行推理。
但是我们分析 DeepSeek 的源码可以发现,代码实际在计算 top-k 时,会先将 N 个 Expert 进行分组 n_groups,将每个组中 top-2 个专家的相似度得分加起来,算出得分最高的那些 top_k_group 组,然后在这些组里选择 top-k 个专家。
最后将所有的 Shared Expert 输出和 Routed Expert 输出做加权相加,得到 MoE 层的最终输出。
这里 Deepseek-v3 和 Deepseek-R1 采用了 256 个 Routed Expert 和 1个 Shared Expert,并在 Router 中选出 8 个来,参数量是 671B,而实际激活的参数量只有 37B。
好,现在我们答出了 DeepSeek 对 MoE 架构的改进点,面试官可能会继续追问:那它为什么要这样改进呢?这样改进有什么好处?
实际上这种设计主要是基于以下两点考虑:
第一,原始的 MoE 会产生较多的冗余,一个想法就是抽取一个 Shared Expert 出来处理通用知识,其他的 Routed Expert 来处理差异性的知识。
通过隔离 Shared Expert,以减轻 Routed Expert 所需要学习的知识量,从而减少路由专家之间的冗余。
第二个考虑是高效计算的层面,MoE 模型在训练的时候,会花费大量的时候来做通讯,因为 expert 会分散到不同的设备上,从而降低巨大的总参数量带来的显存消耗。
一种解决思路是:在通讯流处在工作状态的时候,同时用计算流进行后续的运算,从而隐藏掉部分通讯时间。
Shared Expert 的计算与 Routed Expert 通讯是不依赖的,因此可以使用通讯隐藏,从而比普通的 MoE 结构计算更高效。
本文转载自丁师兄大模型,作者: 丁师兄
