騰訊二面真題: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 結構計算更高效。
?本文轉載自???丁師兄大模型??,作者: 丁師兄
